TCP BBR 拥塞控制算法
TCP 拥塞控制的目标是最大化利用网络上瓶颈链路的带宽。
TCP 维护一个发送窗口,估计当前网络链路上能容纳的数据包数量,希望在有数据可发的情况下,回来一个确认包就发出一个数据包,总是保持发送窗口那么多个包在网络中流动。
标准 TCP 中的拥塞控制算法:不断增加发送窗口,直到发现开始丢包。问题:
- 网络中有可能存在传输错误导致的丢包 // 导致发送窗口估计错误
- bufferbloat(缓冲区膨胀):在连接的开始阶段,buffer 会被倾向于占满,后续 buffer 的占用会逐渐减少,但是并不会完全消失
- 增加网络延迟
- 导致缓冲区被填满而丢包
TCP BBR 策略:
- 既然不容易区分拥塞丢包和错误丢包,TCP BBR 就干脆不考虑丢包
- 既然灌满水管的方式容易造成缓冲区膨胀,TCP BBR 就分别估计带宽和延迟,而不是直接估计水管的容积