BBR(Bottleneck Bandwidth and RTT) 혼잡 제어 알고리즘

사실 이글을 쓰기 위한 이전의 혼잡제어 정리글이 보고싶다면 아래에서~

2024.10.27 - [CS/network] - 혼잡 제어 Congestion Control


 

BBR은 Google이 개발한 혼잡 제어 알고리즘으로, 네트워크에서 병목 대역폭과 왕복 시간(RTT)을 추정하여 최적의 전송 속도를 유지하는 방식이다. 기존 TCP 혼잡 제어 방식과 달리, BBR은 패킷 손실이 아닌 대역폭과 지연 시간이라는 지표를 기반으로 속도를 조정하여 네트워크 자원을 더 효율적으로 활용한다.

 

기존 혼잡 제어 방식과의 차이

기존의 TCP 혼잡 제어 방식(TCP CUBIC, TCP Reno 등)은 패킷 손실을 혼잡 신호로 인식한다. 전송 도중 패킷이 손실되면 네트워크가 혼잡하다고 판단하고 전송 속도를 줄이며, 손실이 없을 때는 점진적으로 속도를 높인다. 이러한 손실 기반 제어는 네트워크가 이미 혼잡해져 손실이 발생한 후에야 속도를 조절하기 때문에 비효율적이다.

 

반면, BBR은 대역폭과 RTT를 중심으로 전송 속도를 제어한다. BBR은 병목 대역폭과 최소 RTT를 주기적으로 측정하여, 네트워크의 상태를 최적으로 활용할 수 있는 전송 속도를 찾아낸다. 이를 통해 패킷 손실이 거의 없는 상태에서도 네트워크 대역폭을 최대한 활용할 수 있다.

 

용어 정리

BDP (Bandwidth-Delay Product)

BBR의 전송 속도 조정에는 BDP (Bandwidth-Delay Product)라는 개념이 중요한 역할을 한다. BDP는 네트워크의 최대 대역폭최소 RTT를 곱한 값으로, 네트워크가 최적 상태에서 전송할 수 있는 최대 데이터량을 의미한다.

 

네트워크 경로가 가진 BDP에 맞추어 전송 윈도우 크기를 조정하면, 패킷이 손실되지 않으면서도 최대 대역폭을 사용할 수 있다. BBR은 BDP를 통해 네트워크 자원을 최대한 활용하는 동시에 혼잡이 발생하지 않도록 균형을 맞춘다.

 

 

BBR: 동작 방식

BBR 동작 방식

 

BBR은 다음과 같은 사이클을 통해 네트워크 상태를 지속적으로 탐색하고 조정한다:

  1. 최대 대역폭 측정: 주기적으로 병목 대역폭을 추정하여 네트워크가 소화할 수 있는 최대 전송 속도를 결정한다.
  2. 최소 RTT 측정: 최소 RTT를 측정하여 네트워크 경로의 지연 수준을 확인하고, 이를 기반으로 송신 속도를 최적화한다.
  3. 주기적 탐색: 네트워크 상태가 변화할 수 있기 때문에 일정 주기마다 최대 대역폭과 최소 RTT를 재측정하여 전송 속도를 갱신한다.
  4. 송신 속도 조정: 네트워크 혼잡을 방지하기 위해 전송 속도를 조정하는 드레인(drain) 및 증분 단계로 전환하며 최적의 전송 속도를 유지한다.

 

 

STARTUP: Exponential Bandwidth (BW) Search

startup

 

네트워크의 병목 대역폭을 찾기 위해 전송 속도를 지수적으로 증가시키는 단계입니다. 이 단계에서는 전송 속도를 빠르게 늘려가며 네트워크가 수용할 수 있는 최대 대역폭을 탐색합니다. 마치 자동차의 최대 속도를 알아보기 위해 가속 페달을 밟는 것처럼, BBR도 최대 대역폭을 확인하기 위해 빠르게 전송량을 증가시킵니다. 이 과정에서 네트워크가 허용하는 최적의 대역폭을 대략적으로 파악하게 됩니다.

 

 

DRAIN: Drain the Queue Created During Startup

 

STARTUP 단계에서 쌓인 네트워크 큐를 비우는 단계입니다. STARTUP 단계에서 전송 속도가 급격히 증가하면서 네트워크 큐가 일부 채워질 수 있습니다. DRAIN 단계에서는 이 큐를 비우기 위해 전송 속도를 잠시 줄입니다. 이렇게 해서 네트워크 지연을 줄이고, 이후 단계에서 안정적인 전송이 이루어지도록 합니다.

 

 

PROBE_BW: Explore Max Bandwidth, Drain Queue, Cruise

probe_bw

 

 

최대 대역폭을 다시 탐색하면서 안정적인 속도를 유지하는 단계입니다. PROBE_BW 단계에서는 네트워크 상태가 변했는지 확인하기 위해 주기적으로 최대 대역폭을 다시 측정합니다. 이 과정에서는 전송 속도를 조금씩 높여가며 네트워크의 현재 상태에 맞는 최적의 전송 속도를 찾습니다. 또한, 필요할 때 큐를 비워 지연을 최소화하면서, 안정적인 속도를 유지합니다. 이 단계는 네트워크의 변화에 따라 계속 반복되며, 안정적인 전송 속도를 유지하면서 최대 대역폭을 찾으려는 목적을 가지고 있습니다.

 

 

PROBE_RTT Drains Queue to Refresh Minimum RTT

probe_rtt

 

최소 RTT를 재측정하기 위해 큐를 비우는 단계입니다. 네트워크의 최소 지연 시간(RTT)을 정확히 파악하기 위해 전송 속도를 줄여 네트워크 큐를 완전히 비웁니다. RTT가 가장 짧은 상태를 파악하면, 네트워크의 최적 상태를 기반으로 전송 속도를 조정할 수 있습니다. 이 단계는 주기적으로 수행되며, 네트워크 상태 변화에 맞춰 최적의 지연 시간 값을 갱신합니다.

 

 

BBR의 특징과 장단점

  • 특징: BBR은 병목 대역폭과 RTT에 기반하여 네트워크 상태를 능동적으로 조정하기 때문에, 패킷 손실에 의존하는 기존 방식보다 네트워크 자원을 더 효율적으로 사용한다.
  • 장점: 패킷 손실이 적은 고속 네트워크 환경에서 더 높은 성능을 발휘하며, 데이터 센터와 같은 짧은 지연 환경에서 특히 효과적이다.
  • 단점: RTT가 큰 네트워크에서는 기대만큼의 성능을 발휘하지 못할 수 있으며, 패킷 손실을 혼잡 신호로 인식하지 않아 대역폭이 낮은 네트워크에서는 간섭이 발생할 가능성이 있다.

 

 

설정 방법

Linux 커널 버전 4.9 이상에서 BBR 설정이 가능합니다.

net.ipv4.tcp_congestion_control=bbr

 

'CS > network' 카테고리의 다른 글

Linux TC(Traffic Control)  (1) 2024.10.31
혼잡 제어 Congestion Control  (0) 2024.10.27
Proxy Protocol: Client IP를 유지하는 방법  (0) 2024.09.26