BBR은 Google이 개발한 혼잡 제어 알고리즘입니다. 패킷 손실이 아닌 대역폭과 RTT를 기반으로 전송 속도를 결정하여, 기존 알고리즘보다 높은 처리량과 낮은 지연을 달성합니다.


기존 혼잡 제어의 문제

CUBIC(기존 리눅스 기본)은 패킷 손실 을 혼잡 신호로 사용합니다.

PLAINTEXT
CUBIC의 문제:
1. 패킷 손실이 발생할 때까지 속도 증가 → 버퍼가 가득 찰 때까지 밀어넣음
2. 버퍼가 큰 네트워크에서: 높은 지연 (Bufferbloat)
3. 무선 네트워크에서: 패킷 손실 ≠ 혼잡 (전파 환경 탓) → 불필요한 감속

BBR의 접근 방식

BBR(Bottleneck Bandwidth and Round-trip propagation time) 은 대역폭과 RTT를 직접 측정 하여 최적 전송 속도를 계산합니다.

PLAINTEXT
BBR의 목표:
최적 전송률 = 병목 대역폭(BtlBw) × 최소 RTT(RTprop)

이 지점에서 전송하면:
- 대역폭을 최대로 활용
- 버퍼를 채우지 않으므로 지연 최소
- 패킷 손실 없음
PLAINTEXT
             ┌──── BBR 목표 지점

처리량 ▲     │
       │    ╱│╲
       │   ╱ │ ╲
       │  ╱  │  ╲  ← CUBIC은 여기서 동작 (버퍼 가득)
       │ ╱   │   ╲
       │╱    │    ╲
       └─────┴──────→ 전송량
           RTprop × BtlBw

BBR의 4단계 사이클

PLAINTEXT
1. Startup: 지수적 증가로 병목 대역폭 탐색
2. Drain: Startup에서 쌓인 큐를 비움
3. ProbeBW: 대역폭 변화 주기적 탐색 (8 RTT 사이클)
4. ProbeRTT: 최소 RTT 주기적 측정 (200ms 동안 cwnd 최소화)

BBR vs CUBIC 성능

환경CUBICBBR
일반 유선좋음좋음
패킷 손실 높은 환경급격한 성능 저하안정적
고지연 네트워크보통좋음
버퍼가 큰 네트워크Bufferbloat지연 최소

Google 보고: YouTube에 BBR 적용 후 처리량 4% 증가, 지연 33% 감소, 재버퍼링 18% 감소


적용 방법

BASH
# BBR 사용 가능 확인
cat /proc/sys/net/ipv4/tcp_available_congestion_control

# BBR 활성화
echo 'net.core.default_qdisc=fq' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf
sysctl -p

# 확인
sysctl net.ipv4.tcp_congestion_control

주의점

  • BBR은 패킷 손실을 혼잡 신호로 사용하지 않으므로, CUBIC과 공존 시 BBR이 대역폭을 과도하게 점유 할 수 있음
  • BBR v2에서 이 공정성 문제를 개선

면접 포인트

  • **BBR이 패킷 손실을 무시하는 이유 **: 무선 네트워크에서 손실이 혼잡을 의미하지 않음
  • **Bufferbloat 해결 **: BBR은 버퍼를 채우지 않으므로 불필요한 지연 방지
  • **BBR의 한계 **: CUBIC과 공존 시 공정성 문제

정리

BBR은 "패킷 손실 = 혼잡"이라는 기존 가정을 버리고, 대역폭과 RTT를 직접 측정하여 최적 전송 속도를 찾습니다. 특히 고지연, 고손실 환경에서 CUBIC보다 큰 성능 개선을 보여줍니다.

댓글 로딩 중...