QUIC(HTTP/3) 혼잡 제어(Congestion Control)

agnusdei·2025년 12월 12일

QUIC(HTTP/3)혼잡 제어(Congestion Control)는 TCP의 오랜 문제점들을 해결하고, 현대적인 네트워크 환경(모바일, 고속망 등)에 맞게 최적화된 방식을 사용합니다.

핵심은 "커널(Kernel)이 아닌 사용자 공간(User Space)에서 동작한다"는 점과 "패킷 번호 부여 방식의 혁신"을 통해 TCP보다 훨씬 정교한 제어가 가능하다는 것입니다.


1. QUIC 혼잡 제어의 구조적 특징

A. 플러그형(Pluggable) 아키텍처

  • TCP의 한계: TCP의 혼잡 제어 알고리즘(Reno, CUBIC 등)은 OS 커널에 내장되어 있어, 새로운 알고리즘(예: BBR)을 적용하려면 OS를 업데이트해야 하는 어려움이 있었습니다.
  • QUIC의 혁신: QUIC은 애플리케이션 계층(User Space) 위에서 동작하므로, 브라우저나 서버 소프트웨어 업데이트만으로 혼잡 제어 알고리즘을 즉시 교체하거나 수정할 수 있습니다. 연결(Connection) 별로 다른 알고리즘을 적용하는 것도 가능합니다.

B. 주요 사용 알고리즘

표준적으로 TCP에서 입증된 알고리즘들을 그대로 차용하거나 개량하여 사용합니다.
1. NewReno: 가장 기본적인 손실 기반(Loss-based) 알고리즘.
2. CUBIC: 현재 인터넷의 표준. 대역폭이 큰 네트워크에서 윈도우 크기를 3차 함수 곡선으로 공격적으로 키우는 방식.
3. BBR (Bottleneck Bandwidth and Round-trip propagation time): 구글이 개발한 모델 기반 알고리즘. 패킷 손실이 아닌 대역폭과 RTT를 모델링하여 처리량을 극대화하고 지연(Latency)을 최소화합니다. (QUIC과 가장 궁합이 좋음)


2. QUIC이 TCP보다 정교한 이유 (핵심 기술)

QUIC 혼잡 제어의 성능이 우수한 진짜 이유는 알고리즘 자체보다, 알고리즘에 입력되는 데이터(신호)의 품질이 훨씬 좋기 때문입니다.

① 재전송 모호성(Retransmission Ambiguity) 해결

TCP의 고질적인 문제인 RTT(Round Trip Time) 측정 오류를 해결했습니다.

  • TCP의 문제: 패킷 A(Seq 100)를 보냈는데 타임아웃되어 재전송 패킷 A'(Seq 100)를 보냅니다. 이후 ACK 100이 도착하면, 이것이 원래 패킷 A에 대한 응답인지, 재전송된 A'에 대한 응답인지 알 수 없습니다. 이로 인해 RTT 계산이 부정확해집니다.
  • QUIC의 해결: QUIC은 패킷을 재전송할 때 새로운 패킷 번호(Packet Number)를 부여합니다.
    • 원본 데이터 전송: Packet 100
    • 재전송 데이터 전송: Packet 200 (내용은 같지만 번호는 증가)
    • 결과: 수신 측이 ACK 100을 보내면 원본에 대한 응답, ACK 200을 보내면 재전송에 대한 응답임을 명확히 구분합니다. 따라서 정확한 RTT 측정이 가능해져 혼잡 제어의 정확도가 비약적으로 상승합니다.

② 명시적인 ACK 지연 (Explicit ACK Delay)

  • 수신 측 시스템이 바빠서 ACK를 바로 보내지 못하고 잠시 처리를 미룰 수 있습니다.
  • TCP: 이 지연 시간(Processing Delay)을 네트워크 지연(Network Delay)과 구분하지 못해 RTT가 튀는(Spike) 현상이 발생합니다.
  • QUIC: ACK 프레임 내에 "내가 이 ACK를 보내기까지 얼마나 지체했는지(ACK Delay)" 정보를 포함하여 보냅니다. 송신 측은 전체 RTT에서 이 시간을 빼고 순수 네트워크 RTT를 계산할 수 있습니다.

③ 개선된 손실 감지 (Better Loss Recovery)

QUIC은 Early Retransmit이나 Tail Loss Probe (TLP) 같은 최신 TCP 기능들을 기본적으로 포함하며, NACK(Negative ACK) 개념인 SACK(Selective ACK) 범위도 TCP보다 훨씬 넓게(더 많은 블록) 지원하여, 여러 패킷이 동시에 손실되어도 빠르게 복구합니다.


3. 패킷 페이싱 (Packet Pacing)

QUIC(특히 BBR 사용 시)은 혼잡 제어의 보조 수단으로 패킷 페이싱을 적극적으로 권장합니다.

  • 기존 TCP (Burst 전송): 혼잡 윈도우(cwnd)가 허용하는 만큼 패킷을 한꺼번에 쏟아붓습니다. 이는 라우터의 버퍼를 순간적으로 가득 차게 만들어 패킷 손실(Buffer Overflow)을 유발할 수 있습니다.
  • QUIC Pacing: 현재 추정된 대역폭에 맞춰 패킷 간의 전송 간격을 인위적으로 조절하여 일정하게 보냅니다.
    • 효과: 네트워크 라우터의 부하를 줄이고, 패킷 손실률을 낮추며, 결과적으로 전송률(Throughput)은 유지하면서 지연(Latency)은 감소시킵니다.

💡 요약: QUIC 혼잡 제어 프로세스

단계동작 설명
1. 측정엄격하게 증가하는 패킷 번호를 통해 정확한 RTT를 측정하고, ACK 지연 시간을 보정합니다.
2. 감지패킷 손실 또는 지연 증가를 감지합니다. (TCP보다 SACK 범위가 넓어 다중 손실 감지에 유리)
3. 제어측정된 데이터를 바탕으로 CUBIC, BBR 등의 알고리즘을 수행하여 혼잡 윈도우(cwnd) 크기를 조절합니다.
4. 전송결정된 윈도우 크기 내에서 패킷 페이싱을 통해 데이터를 부드럽게(Smooth) 네트워크로 흘려보냅니다.

결론적으로 QUIC은 사용자 공간에서의 유연성패킷 헤더 설계의 개선을 통해, 기존 TCP가 짐작으로 처리하던 부분들을 정확한 측정값으로 대체함으로써 혼잡 제어의 효율을 극대화했습니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글