1087. BBR 구글 TCP 동적 모델 지연 기반 혼잡 - Bottleneck Bandwidth and Round-trip time CUBIC 패킷 손실 회피 대역폭 극대화 윈도우 스케일링

핵심 인사이트: (1065, 968번 심화) 30년 동안 쓰던 리눅스 기본 TCP 혼잡 제어(CUBIC)는 멍청한 겁쟁이였다. 인터넷 고속도로에서 패킷(차량) 1대가 튕겨 나가 실종(Packet Loss)되면 "헉! 길 꽉 막혔나 봐!!" 지레짐작하고 전송 속도(창 크기)를 반토막 냈다. 사실 와이파이 전파가 구려서 1개 떨군 것뿐인데! 전 세계 인터넷 속도가 억울하게 느려졌다. 2016년, 구글이 빡쳐서 천재 수학 공식을 발표했다. "야! 패킷 1개 잃어버렸다고 무식하게 브레이크 밟지 마! 내 차가 달리는 '최대 속도(대역폭)'와 '왕복 시간(RTT)' 2개를 실시간으로 곱해서 고속도로에 빈 공간이 얼마나 남았는지 내가 직접 계산할게! 빈 공간이 남아있으면 패킷이 좀 유실돼도 브레이크 안 밟고 풀악셀 밟아버려!!" 전 세계 유튜브 속도를 2배로 폭발시킨 흑마법, 구글 BBR이다.

Ⅰ. 패킷 손실(Loss-based) 기반 제어의 치명적 한계 (CUBIC의 붕괴)

  • CUBIC, Reno의 룰: "데이터를 쏘다가 응답(ACK)이 안 와서 패킷 유실(Loss)이 뜨면, 네트워크 스위치 큐(Queue)가 꽉 차서 터진 게 분명해! 윈도우 사이즈(보내는 양)를 절반으로 깎아라(브레이크)!"
  • 모바일/무선 시대의 억울함: LTE나 와이파이에선 길이 막힌 게(Congestion) 아니라, 그냥 터널 들어가다가 전파 간섭으로 패킷 1개가 날아간(Bit Error) 경우가 허다합니다. 그런데도 CUBIC은 겁먹고 속도를 50%로 팍 죽여버려서 버퍼링이 미친 듯이 걸렸습니다.

Ⅱ. 구글 BBR (Bottleneck Bandwidth and RTT)의 탄생 🌟

  • 개념: 패킷이 유실됐다고 쫄지 않고, 현재 통신 중인 네트워크 파이프의 '가장 좁은 병목 구간의 최대 폭(BtlBw)'과 '최소 왕복 지연 시간(RTprop)'을 동적으로 0.1초마다 직접 수학적으로 측정하여, 파이프에 물이 꽉 차기 직전의 황금 비율까지만 데이터를 우겨 넣는(Pacing) 선제적 딜레이 기반(Delay-based) 혼잡 제어 알고리즘입니다.

Ⅲ. BBR이 속도를 2배로 뻥튀기하는 3대 수학적 흑마법 🌟 핵심 🌟

1. BDP (Bandwidth-Delay Product, 파이프 용량 계산)

  • 구글 서버는 BBR 알고리즘을 켜고 계속 측정을 합니다.
    • BtlBw (병목 대역폭): "최근 10초 동안 내가 쏠 때 낼 수 있었던 가장 빠른 속도(예: 100Mbps)."
    • RTprop (왕복 지연 시간): "패킷 하나가 갔다 오는 데 걸린 가장 짧은 시간(예: 10ms)."
  • BDP 공식 = BtlBw × RTprop: 두 개를 곱하면 **"이 파이프 안에 큐(Queue) 대기열에 쌓이지 않고 허공을 날아다닐 수 있는 완벽한 패킷의 최대 개수(예: 1MB)"**가 도출됩니다. BBR은 무조건 이 수치만큼만 데이터를 쏴서 길을 절대 막히지 않게 조율합니다.

2. 프로빙(Probing) 찌르기: 악셀과 브레이크

  • ProbeBW (속도 찔러보기): 1초에 한 번씩 파이프가 늘어났나 확인하려고 원래 쏘던 양보다 1.25배를 더 강하게 꽉 밟아서(악셀) 찔러봅니다. 만약 속도가 늘어나면 BtlBw(최대 속도) 장부를 업데이트합니다.
  • ProbeRTT (시간 찔러보기): 10초마다 갑자기 패킷 쏘는 양을 쥐꼬리만큼 줄입니다(브레이크). 파이프를 텅 비워서 큐 대기열을 0으로 만든 다음, 진짜 순수한 딜레이(RTprop)가 얼만지 다시 칼같이 잽니다.

3. 큐오염(Bufferbloat) 현상 완벽 근절 🌟

CUBIC을 압살한 최고의 업적입니다.

  • CUBIC은 라우터 버퍼(Queue 큐)가 100% 꽉 차서 패킷이 흘러넘쳐 터질 때(Drop)까지 무식하게 계속 속도를 올립니다(Bufferbloat 발생 ➜ 핑 1,000ms 폭발).
  • BBR은 위에서 계산한 BDP 파이프 용량을 알고 있기 때문에, 파이프가 차고 **'스위치 큐(버퍼)에 패킷이 쌓이기 시작하는 그 찰나의 순간'**을 핑(RTT)이 아주 살짝 튀는 걸 보고 귀신같이 알아챕니다. 큐에 데이터가 쌓이기 전에 속도를 조절하므로 버퍼가 항상 텅텅 비어있어 지연 시간(Ping)이 게임급으로 낮게 유지됩니다.

Ⅳ. 도입 효과 (유튜브 버퍼링 제로)

  • 이 알고리즘을 켜자마자 구글 B4 백본망 속도가 130배 오르고, 유튜브 버퍼링이 반토막 났습니다.
  • 1065번 QUIC (HTTP/3)의 기본 혼잡 제어 탑재뿐만 아니라, 리눅스 커널 4.9 버전에 공식 탑재되어 sysctl 명령어 한 줄만 치면 모든 리눅스 서버의 심장을 CUBIC에서 BBR로 1초 만에 튜닝할 수 있습니다.

📢 섹션 요약 비유: 기존 리눅스의 CUBIC 혼잡 제어는 눈을 안대로 가리고 엑셀을 밟는 **'맹인 운전자'**입니다. 계속 속도를 올리다가 앞차에 "쾅!" 하고 부딪혀 차 범퍼(패킷 1개)가 깨지면(패킷 유실), 그제야 깜짝 놀라서 브레이크를 미친 듯이 밟아 속도를 반토막 냅니다. 속도가 널뛰기를 합니다(버퍼블로트 지옥). 구글 BBR은 앞유리에 완벽한 카메라 센서(수학 공식)를 단 **'테슬라 자율주행차'**입니다. 차가 달리면서 앞차와의 거리(RTT 핑)와 차선의 넓이(대역폭)를 0.1초마다 레이더로 쏴서 정밀 계산(BDP)합니다. 앞차와 부딪혀 범퍼가 깨지기 훨씬 전에, 센서가 "어? 앞차 간격이 1m 줄었네?" 하고 알아채서 엑셀을 살짝 떼어 앞차와 완벽히 2m 간격을 죽을 때까지 유지하며 정속 주행합니다. 패킷 유실이라는 끔찍한 충돌 사태를 겪기 전에, 속도와 지연 시간의 황금비율 지점을 스스로 찾아내서 꽉 찬 고속도로를 밀림 없이 뚫고 나가는 구글의 궁극의 속도 마법입니다.