HTTP/3
HTTP/3
- 기존의 HTTP/1.1, HTTP/2와는 달리, UDP 기반의 프로토콜인 QUIC를 기반으로 통신하는 프로토콜
- TCP는 3-way handshake를 수행하기 때문에 속도가 느림
- TLS 상의 TCP인 경우에는 추가적인 시간이 더 소요됨
- HTTP/2는 이 handshake의 횟수를 줄인 것이지 handshake의 속도 자체는 오래 걸렸음
- 또한 TCP는 HOL blocking 문제를 가짐
- HTTP/2 는 HTTP 단에서의 HOL blocking 문제는 해결했지만, TCP 단계의 HOL blocking 문제는 해결 불가
- 이런 이유로 커스터마이징이 용이한 UDP를 이용한 HTTP/3 및 QUIC가 등장
장점
- TLS + TCP를 사용하는 경우, 연결에
3RTT
가 소요되나, QUIC는 연결에 1RTT
만 소요됨- 첫 번째 handshake 시 연결 / 암호화 정보 및 데이터를 그냥 다 보내 버리기 때문
- 한 번 연결이 성공하면, 설정을 캐싱하고, 이후 요청이 들어오면 바로 연결하기 때문에
0RTT
가 소요됨
- QUIC는 패킷 번호 공간을 별도로 사용해서, 어떤 패킷을 재전송해야 하는 지에 대한 모호성을 없앰
- 하나의 연결에서 여러 데이터를 보내는
멀티플렉싱
이라는 방법을 통해 효율적으로 데이터를 보냄 - TCP의 경우 IP, Port로 연결을 식별하지만, QUIC는 커넥션 ID라는 정보를 이용해 연결을 식별
- 클라이언트의 IP 주소가 변경되더라도, 계속 기존의 연결을 유지 가능
- TCP를 이용한다면 새로 handshake를 해야 함
References
- https://evan-moon.github.io/2019/10/08/what-is-http3/