04
4월
2019

HTTP/3 (HTTP-over-QUIC)

QUIC은 Quick UDP Internet Connections 의 약자이며, 전송계층 프로토콜인 UDP 를 기반으로 TCP + TLS + HTTP 의 기능을 모두 구현하는 프로토콜입니다.

QUIC 은 “quick”과 동일하게 “퀵”으로 발음합니다. Google에서 2012년에 최초로 개발했는데, 여담이지만 구글에서 개발했던 SPDY 기술이 HTTP/2의 기반 기술이었는데 역시 구글에서 개발한 QUIC이 HTTP/3의 기반 기술이 되었습니다.

gQUIC vs QUIC-over-HTTP

현재는 IETF의 quicwg에서 관리하는 QUIC-over-HTTP 와 구글에서 자체 개발한 gQUIC이 분리되어 있습니다. 구글의 gQUIC에서 사용하는 암호화 기술은 TLS 1.3이 아닌 자체 암호화 기술이라는 점이 다른데요, IETF에서 표준화 작업이 진행되는 동안 구글에서도 IETF의 세부 명세를 받아들여 gQUIC을 발전시키고 있습니다.

QUIC-over-HTTP to HTTP/3

HTTP/1.1은 1999년에 발표되고, HTTP/2.0이 2015년에 발표되어 현재 활발하게 사용되고 있는데, IETF의 QUIC-over-HTTP 가 이제 ‘HTTP/3’으로 개명하는 것으로 확정되어 2019년 안에 발표될 예정입니다.


HTTP/1.1, HTTP/2에 사용하는 TCP와 QUIC에 사용하는 UDP의 기본적인 차이점은 다음과 같습니다.

TCPUDP
재전송과 흐름제어/혼잡제어를 통해 신뢰성을 보장한번 전송하면 끝나는 방식으로 클라이언트의 데이터 수신에 대해 책임을 지지 않음
복잡한 연결 설정이 필요함연결 설정이 없음
속도가 상대적으로 느림속도가 상대적으로 빠름

두 프로토콜의 차이를 보면 QUIC의 특징을 이해할 수 있습니다.

  • QUIC은 TCP + TLS 보다 더 빠른 핸드쉐이크를 지원하기 때문에 지연시간을 많이 줄일 수 있습니다.
  • TCP의 인증과 암호화는 TLS를 통해 지원했지만 QUIC은 TLS 1.3을 포함하여 지원하고 있습니다.
  • 원래의 UDP에서 지원하지 않던 패킷 재전송, 흐름제어/혼잡제어 기능을 UDP위에 새로운 계층을 추가하여 해결하였습니다.
  • 현재의 TCP보다 패킷 손실에 있어 유리합니다.
image from https://blog.chromium.org/2015/04/a-quic-update-on-googles-experimental.html

프로토콜은 이전 http와 마찬가지로 ‘https://’ 를 그대로 사용합니다. 그렇기 때문에 첫 핸드쉐이크는 TCP를 통해 수행이 되는데, 연결 설정 후 QUIC을 지원하는 서버임을 클라이언트에 알려주면 그 후로는 UDP를 통해 데이터가 전송이 됩니다.


QUIC을 개발한 구글은 자사의 서비스와 크롬 브라우저에 우선적으로 적용하였으며, 크롬 브라우저로 구글 서비스를 이용하면 alt-svc 헤더를 통해 실제로 QUIC 프로토콜을 사용하는 것을 확인할 수 있습니다. (port 443은 UDP의 well-known port입니다.)
구글의 발표에 따르면 QUIC 적용으로 인해 자사 서비스의 퍼포먼스 향상에 도움이 되었다고 합니다.

위에서 언급한것처럼 아직 표준이 확정되지 않은 IETF의 QUIC-over-HTTP는 현재 웹브라우저에 적용된 사례가 없고 양대 HTTP server인 Apache와 nginx에서도 아직 지원한다고 발표하지 않은 상태입니다.

References :

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

%d 블로거가 이것을 좋아합니다: