TCP BBR 拥塞控制算法


TCP 拥塞控制的目标是最大化利用网络上瓶颈链路的带宽。

TCP 维护一个发送窗口,估计当前网络链路上能容纳的数据包数量,希望在有数据可发的情况下,回来一个确认包就发出一个数据包,总是保持发送窗口那么多个包在网络中流动。

标准 TCP 中的拥塞控制算法:不断增加发送窗口,直到发现开始丢包。问题:
  1. 网络中有可能存在传输错误导致的丢包 // 导致发送窗口估计错误
  2. bufferbloat(缓冲区膨胀):在连接的开始阶段,buffer 会被倾向于占满,后续 buffer 的占用会逐渐减少,但是并不会完全消失
    • 增加网络延迟
    • 导致缓冲区被填满而丢包

TCP BBR 策略:
  1. 既然不容易区分拥塞丢包和错误丢包,TCP BBR 就干脆不考虑丢包
  2. 既然灌满水管的方式容易造成缓冲区膨胀,TCP BBR 就分别估计带宽和延迟,而不是直接估计水管的容积