TCP 위에서 돌아가는 HTTP/2와 달리, HTTP/3은 QUIC 계층 위에서 돌아가며 UDP 기반으로 돌아간다.
HTTP/2는 TCP 위에서 스트림을 이용해 멀티플렉싱을 한다.
그런데 TCP의 선형적인 데이터 전송 특성으로 인해, 임의의 스트림이 느려지는 것이 다른 스트림에게
영향을 주는 HOL(Head Of Line) Blocking
이 발생한다는 문제가 있다.
이렇게 되면 패킷 손실률이 높은 경우, 오히려 여러 TCP 커넥션을 사용하는 HTTP/1.1의 성능이 더 나을 수 있다.
TCP의 비효율이라고 할 수 있는 Handshake나 HOL Blocking 문제가 있기 때문이다.
따라서 특정 스트림에서 데이터 손실이 발생해도 다른 스트림의 흐름을 막지 않는 UDP의 특성을 이용하면서,
그 위에 신뢰성을 보장해주는 QUIC를 만들어 사용한다.
QUIC도 신뢰성을 보장하기 위해 Handshake 과정이 있지만, TCP와 다르게 암호화와 통신을 위한 handshake 과정이 통합되어 있다.
따라서 첫 연결 설정에 1-RRT만으로 암호화된 데이터를 전달할 수 있기 때문에, 초기 연결 설정 시 지연 시간을 감소할 수 있다.
QUIC는 HTTP/2가 프레임 같은 데이터 유닛을 TCP의 추상화된 바이트 스트림을 통해 멀티플렉싱하는 것처럼,
UDP에서 이렇게 동작하도록 해두었다. 즉, HTTP/2의 장점인 멀티 플렉싱
을 가지고 간다는 것이다.
QUIC는 순방향 오류 매커니즘(FEC, Forward Error Correction)
이 적용된다.
FEC
전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식으로, 열악한 네트워크 환경에서도 패킷 손실률이 낮다.
현재는 네이버 검색 서비스나 토스 페이먼츠, 구글 유튜브에 사용되고 있다.