2020년 10월, Chrome은 HTTP/3를 기본으로 활성화했습니다. HTTP/3(RFC 9114)는 IETF QUIC(RFC 9000) 위에서 동작합니다. Chrome에서 HTTP/3를 기본으로 활성화한 결과, HTTP/1 및 HTTP/2뿐만 아니라 Google QUIC과 비교해도 성능이 향상되었습니다. 구체적인 이점으로는 Google 검색 지연 시간 단축과 YouTube의 리버퍼링(끊김) 감소 등이 있었습니다.
성능 최적화의 여정은 HTTP/3의 기본 활성화로 끝나지 않았습니다. 최근에는 HTTP/3 ORIGIN 프레임(RFC 9412)과 서버의 기본 주소(Server's Preferred Address, RFC 9000 섹션 9.6) 구현이 추가되었습니다. 전자는 연결 병합(connection coalescing)을 강화하고, 후자는 연결의 왕복 시간(RTT)을 줄여줍니다. 두 기능 모두 11월 19일에 Stable 버전으로 출시된 M131에서 기본으로 활성화되었습니다.
ORIGIN 프레임
특정 호스트 이름에 대해 연결이 설정되면, 서버의 인증서에는 일반적으로 서버가 권한을 가진 다른 여러 호스트 이름이 포함됩니다. 그러나 클라이언트는 먼저 해당 호스트 이름에 대해 DNS 조회를 수행하고 연결의 IP 주소가 확인된 주소와 일치하는지 확인하기 전에는 해당 연결에서 다른 호스트 이름으로 요청을 즉시 보낼 수 없습니다. 이러한 추가 DNS 확인은 지연 시간을 유발하며, IP 불일치 가능성으로 인해 연결 풀링(connection pooling)의 가능성을 크게 떨어뜨립니다. Chrome의 데이터에 따르면, 만약 이러한 IP 불일치가 없었다면 HTTP/3 연결의 약 20%는 불필요했을 것으로 나타났습니다.
QUIC 0-RTT를 사용하더라도 새로운 연결을 만드는 것은 지연 시간, 메모리 및 CPU 사용량 측면에서 비용이 많이 듭니다. 그 이유는 다음과 같습니다:
- Chrome의 DNS 캐시에 로컬로 저장되지 않은 경우, DNS 확인으로 인해 지연 시간이 추가됩니다.
- 클라이언트와 서버 모두 QUIC 핸드셰이크를 완료하기 위해 여러 패킷을 보내야 합니다.
- TLS는 양쪽 끝에서 CPU 집약적인 비대칭 암호화를 필요로 합니다.
- 혼잡 제어기(congestion controller)가 기본 상태에서 시작되므로, 데이터를 너무 적게 혹은 너무 많이 보낼 가능성이 있습니다.
- 0-RTT가 실패할 수 있습니다.
- 비안전(Non-safe) 요청은 0-RTT를 통해 전송되지 않습니다.
- 연결이 많아질수록 더 많은 메모리를 소비합니다.
또한, HTTP 우선순위(RFC 9218)와 같은 기능은 동시에 보낼 응답이 여러 개 있을 때만 효과적입니다.
HTTP/3 ORIGIN 프레임(RFC 9412)을 사용하면 서버가 하나의 연결에 통합(pool)하고자 하는 도메인이 무엇인지 나타낼 수 있습니다. 또한, 이 프레임을 수신하면 인증서에 포함되어 있더라도 해당 프레임에 명시되지 않은 다른 도메인은 해당 연결에 통합해서는 안 된다는 것을 알 수 있습니다.
서버의 기본 주소 (Server’s Preferred Address)
어떤 경우에는 클라이언트가 처음 연결하는 서버 주소가 가장 효율적인 경로가 아닐 수도 있습니다. L4 로드 밸런서 뒤에 서버가 있을 수도 있고, 직접 연결하는 것이 안정성을 높일 수도 있습니다. 특히 애니캐스트(Anycast)를 사용하는 경우, 서버가 트래픽이 네트워크에 진입하는 지점에서 멀리 떨어져 있을 수 있어 왕복 시간(RTT)을 증가시키는 '3-legged path(삼각 경로)'가 생성될 수 있습니다.
핸드셰이크가 확인되면, '서버의 기본 주소' 기능을 통해 서버가 클라이언트에 다른 서버 IP로 이동(migrate)하도록 요청할 수 있습니다. QUIC 연결은 TCP처럼 단일 4-튜플(4-tuple)에 묶여 있지 않지만, 이 기능은 RFC 9000에서 서버가 자신의 주소를 변경할 수 있는 유일한 유형의 마이그레이션입니다.
지금까지는 Google의 Media CDN만이 대체 주소 광고를 광범위하게 사용하고 있지만, 곧 더 많은 서버가 이를 도입할 것으로 예상됩니다. 테스트 결과 Chrome에서 이 마이그레이션의 성공률은 99% 이상이며, 평균 RTT를 40~80%까지 줄여주는 것으로 나타났습니다.
작성자: Fan Yang, Ian Swett
