Head-of-Line Blocking

Protocol

개요

Head-of-Line(HoL) 블로킹은 큐의 맨 앞 항목이 처리되지 못하면 그 뒤에 대기 중인 항목들도 전부 막혀 버리는 현상입니다.

HTTP에서는 애플리케이션 계층과 전송(TCP) 계층 두 곳에서 각각 발생하며, 이를 어디서 해결하느냐가 HTTP/2와 HTTP/3의 차이를 만듭니다.

자세히

애플리케이션 계층 HoL: HTTP/1.1은 한 연결에서 요청을 순차 처리하므로, 앞 요청의 응답이 느리면 뒤 요청들이 그 연결에서 대기합니다. HTTP/2의 멀티플렉싱은 여러 스트림을 인터리빙해 이 문제를 없앱니다.

전송 계층 HoL: 그런데 HTTP/2도 단일 TCP 연결 위에 있어서, TCP가 순서 보장을 위해 손실 패킷을 재전송하는 동안 그 패킷 뒤의 모든 바이트(= 모든 스트림)가 애플리케이션으로 전달되지 못하고 멈춥니다. 즉 논리적으로 독립인 스트림들이 하나의 패킷 손실에 함께 묶여 버립니다. QUIC은 UDP 위에서 스트림별로 독립적인 순서·재전송을 관리해, 한 스트림의 패킷 손실이 다른 스트림을 막지 않도록 설계했습니다. 이것이 QUIC/HTTP/3이 손실이 있는 모바일·고지연 네트워크에서 특히 유리한 이유입니다.

관련 타입