피드로 돌아가기
InfoQInfoQ
Infrastructure

quiche CUBIC의 무한 Recovery 루프 해결로 테스트 통과율 60%에서 100%로 개선

How Cloudflare Solved a Congestion Bug in quiche

Gianmarco Nalin2026년 6월 25일3advanced

Context

QUIC 구현체인 quiche의 CUBIC Congestion Controller가 연결 초기 단계의 심한 Packet Loss 상황에서 회복하지 못하는 결함 발생. Linux 커널의 TCP 수정 사항에 영향을 받은 Rust 기반 CUBIC 구현체에서 특정 조건 하에 Congestion Window 성장이 정체되는 병목 지점 식별.

Technical Solution

  • RTT 10ms 환경에서 30% Packet Loss 주입을 통한 결함 재현 및 분석
  • Congestion Avoidance와 Recovery 상태 간의 급격한 상태 전이(약 14ms 주기) 현상 포착
  • Noisy Slow Start 상황에서 In-flight bytes가 0이 될 때 발생하는 Idle Time 계산 오류 분석
  • 최소 Congestion Window 크기(2 packets)에서 Idle Period 최적화 로직이 무한 Recovery 루프를 유발하는 메커니즘 규명
  • 데이터 송신 시점뿐만 아니라 마지막 ACK 수신 시점을 함께 측정하도록 Idle Time 산출 로직 변경
  • 단순한 로직 수정을 통해 Recovery 상태의 강제 유지 고리를 끊어 Congestion Window의 정상적인 확장을 유도

네트워크 상태 머신 설계 시, 특정 임계값(Edge Case)에서 상태 전이가 무한 반복될 가능성이 있는지 검토하고, 타임아웃 및 Idle Time 계산 시 송신과 수신 양방향 이벤트를 모두 고려하여 설계할 것

원문 읽기