QUIC란?

UDP 위에서 동작하는 전송 계층 프로토콜. TLS 1.3에 의한 암호화를 내장하고, 연결 설정과 키 교환을 합쳐 1왕복으로 수행한다. 1개의 연결 안에 여러 스트림을 다중화하며, 어떤 스트림의 패킷이 손실되어도 다른 스트림은 멈추지 않는다. HTTP/3의 토대로, 2021년에 RFC 9000으로 IETF에서 표준화되었다.

일본어 명칭: QUIC

QUIC은(는) 네트워크 기초, 웹 기술 기초 등 2개 분야의 연습 문제 3개에 나와요.

분야: 네트워크 기초

왜 UDP 위에 만드는가

IP 위에 새로운 전송 프로토콜을 직접 만들어도, 도중의 NAT나 방화벽 대부분은 모르는 프로토콜의 패킷을 통과시키지 않습니다. 또한 TCP는 OS 커널 안에 구현되어 있으므로 개선해도 세상의 기기에 퍼질 때까지 오랜 시간이 걸립니다. QUIC는 어디서나 통과하는 UDP 위에 만들고 애플리케이션이나 라이브러리 안에서 동작시킴으로써, 브라우저 등의 업데이트에 맞춰 개선할 수 있게 했습니다. 헤더도 대부분 암호화하여, 도중의 기기가 내용에 의존해 장래의 변경을 방해하는 것을 막고 있습니다.

빠른 연결과 스트림 다중화

TCP와 TLS를 쓰면 TCP의 3-way 핸드셰이크 뒤에 TLS 핸드셰이크가 이어지지만, QUIC는 둘을 1개로 묶어 1왕복으로 데이터를 보내기 시작할 수 있습니다. 전에 연결한 서버에는 첫 패킷부터 데이터를 보내는 0-RTT도 쓸 수 있습니다(다만 반복되어도 문제없는 요청에 한합니다). 또한 HTTP/2는 TCP의 연결 1개에 여러 스트림을 싣기 때문에 패킷 1개가 손실되면 모든 스트림이 기다리게 되지만, QUIC는 스트림마다 순서를 관리하므로 손실의 영향이 그 스트림에만 그칩니다.

연결 ID와 재전송의 구조

TCP 연결은 IP 주소와 포트 번호의 조합으로 구별되므로, 스마트폰이 Wi-Fi에서 휴대전화 회선으로 바뀌면 끊어지고 맙니다. QUIC는 연결을 연결 ID로 구별하므로 주소가 바뀌어도 연결을 이어 갈 수 있습니다(연결 마이그레이션). 손실 검출, 재전송, 혼잡 제어도 QUIC 안에서 수행하며, 패킷 번호를 재사용하지 않으므로 원래 패킷과 재전송한 패킷을 구별할 수 있어 RTT를 정확하게 측정할 수 있습니다. 반면 커널이나 네트워크 카드의 지원이 많은 TCP에 비해 CPU 부하가 높아지기 쉽다는 과제도 있습니다.

도전해 보기: QUIC 관련 문제

UDP의 특징으로 올바른 것은?

  1. A연결을 설정하지 않고 재전송이나 순서 제어를 하지 않으므로 헤더가 작고, 보내기 전까지의 대기도 없다
  2. B연결을 설정하고, 도달하지 못한 데이터를 재전송하며, 수신 측에서 순서도 맞춘다
  3. CIP 주소를 사용하지 않고 MAC 주소만으로 목적지 단말에 전달한다
정답과 해설 보기

정답: A. 연결을 설정하지 않고 재전송이나 순서 제어를 하지 않으므로 헤더가 작고, 보내기 전까지의 대기도 없다

UDP는 IP 위에 포트 번호와 간단한 오류 검출(체크섬)만 더한 가벼운 프로토콜로, 헤더는 8바이트입니다(TCP는 옵션 없이 20바이트). 연결 절차가 없고 도달 확인이나 재전송도 하지 않으므로, 조금 손실되더라도 지연되지 않는 편이 좋은 음성 통화나 라이브 영상, 한 번의 질의와 응답으로 끝나는 DNS 등에 사용됩니다. 신뢰성이 필요하면 애플리케이션 쪽에서 보완합니다. 예를 들어 HTTP/3에서 사용되는 QUIC은 UDP 위에서 재전송과 암호화를 구현합니다. 연결 설정, 재전송, 순서 제어를 수행하는 것은 TCP입니다.

RTT(왕복 시간)가 100 ms인 웹 서버에 HTTPS(TCP 위의 TLS 1.3)로 새로 접속하여, 첫 요청을 보내고 응답을 받기 시작할 때까지 걸리는 시간에 가장 가까운 것은? DNS 이름 해석은 끝났으며, 서버의 처리 시간과 데이터 전송 시간은 무시한다.

  1. A약 100 ms
  2. B약 300 ms
  3. C약 200 ms
정답과 해설 보기

정답: B. 약 300 ms

먼저 TCP의 3-way 핸드셰이크에 1왕복이 걸립니다(클라이언트는 마지막 ACK와 함께 TLS의 첫 메시지를 보낼 수 있습니다). 다음으로 TLS 1.3 핸드셰이크에 1왕복, 그 후 HTTP 요청과 응답에 1왕복이 걸려 합계 3왕복, 3 × 100 = 300 ms입니다. TLS 1.2에서는 키 교환에 2왕복이 걸리므로 4왕복인 400 ms가 됩니다. 이 대기 시간은 거리로 정해지는 RTT의 횟수로 결정되므로 회선의 대역폭을 늘려도 짧아지지 않습니다. HTTP/3에서 사용되는 QUIC은 전송 계층과 암호의 핸드셰이크를 1왕복으로 합치고, 재접속할 때는 첫 왕복에서 데이터를 보내는 방법(0-RTT)도 제공합니다.

자주 묻는 질문

QUIC와 TCP의 차이는 무엇인가요?

둘 다 확실하고 순서대로인 통신을 제공하지만, QUIC는 UDP 위에서 동작하고 TLS 1.3 암호화를 내장하고 있습니다. 연결 설정이 빠르고(1왕복, 재연결이라면 0왕복), 1개의 연결에 여러 스트림을 독립적으로 흘릴 수 있으며, IP 주소가 바뀌어도 연결을 이어 갈 수 있다는 점이 TCP와 다릅니다.

HTTP/3와 QUIC는 어떤 관계인가요?

HTTP/3는 HTTP의 주고받기를 QUIC 위에서 수행하는 버전입니다. HTTP/2가 TCP와 TLS 위에서 수행하던 스트림 다중화와 암호화를 QUIC가 담당합니다. 그래서 HTTP/3 통신은 보통 UDP 443번 포트를 씁니다.

해설 속 QUIC

QUIC이(가) 나오는 문제 (3)

  1. UDP의 특징으로 올바른 것은?
  2. RTT(왕복 시간)가 100 ms인 웹 서버에 HTTPS(TCP 위의 TLS 1.3)로 새로 접속하여, 첫 요청을 보내고 응답을 받기 시작할 때까지 걸리는 시간에 가장 가까운 것은? DNS 이름 해석은 끝났으며, 서버의 처리 시간과 데이터 전송 시간은 무시한다.
  3. HTTP/2와 HTTP/3에 대한 설명으로 올바른 것은?

관련 용어

TCP(전송 제어 프로토콜) HTTP(하이퍼텍스트 전송 프로토콜) UDP(사용자 데이터그램 프로토콜) DNS(도메인 네임 시스템) IP(인터넷 프로토콜) 포트 번호(Port Number) ARQ(자동 재전송 요구) RTT(왕복 시간) HTTPS TLS

용어집으로 돌아가기