Vegas:基于延迟。是一种tcp拥塞避免算法,强调延迟而不是丢包来作为发送速率调整的依据。诞生于1994年。
Reno:基于丢包。
NewReno:基于丢包。
loss-based、delay-based、hybrid-based、congestion-based、learning-based。
基于丢包类型: Reno、NewReno;
问题:1、基于丢包的cc机制是被动式的,依据包丢失来判断拥塞。这样会撑满链路节点(如路由器)buffer,造成延迟升高,即buffer bloat问题。当出现拥塞丢包时,网络抖动就比较大,即加大了网络抖动性。2、在长肥网络中,rtt比较大,随机丢包比较常见,基于丢包的cc算法会造成cwnd经常折半,导致带宽利用率上不去。
基于延时类型:Vegas;
问题:Vegas出现晚于基于丢包的算法;而Vegas在带宽竞争上弱于基于丢包的cc算法,所以会出现“饿死”现象。
基于混合算法类型:Cubic;基于拥塞测量类型:BBR;基于学习类型:RemyCC(MIT AI Lab);
BBR全称是Bottleneck Bandwidth and RTT。BBR(Bottleneck Bandwidth and Round-trip propagation time)是一种基于带宽和延迟反馈的拥塞控制算法。
特点:1、bbr之前的cc算法都是基于事件(丢包或延时)驱动的,bbr是基于反馈的自主控制算法。2、算法的核心是不排队。
实现:1、核心是找到最大带宽(max BW) 和最小延时(min RTT),最大带宽和最小延时的乘积即BDP(Bandwidth Delay Product),就是链路可以存放数据的最大容量。BDP驱动Probing State Machine得到Rate quantum和cwnd,设置给发送引擎(pacing engine)控制发送速度和数据量。
bbr的优点:1、BBR相对TCP的优点包括抗丢包能力强、延迟低、抢占能力强和平稳发送。
bbr缺点:1、算法公平性不好。与reno竞争,bbr可以占用90%的带宽; 多个bbr流竞争,rrt高的流占用带宽大。
2、抗抖动能力一般。rtt的抖动使bbr计算BDP不准,可能探测带宽低于可用带宽。
3、深队列竞争不过cubic。bbr使用cwnd=2*BDP,但如果节点buffer很大,(如远大于2*BDP?),bbr是竞争力低于cubic。
4、收敛速度慢。原始的bbr算法需要多轮才能降到实际带宽。bbr每轮只降一次,pacing gain的6个rtt保持周期影响了收敛速度。
5、高于一定丢包率,吞吐量断崖式下跌。 pacing gain的上探周期以1.25倍原速率上探,如果有25%以上的丢包率,则造成带宽反馈下降,bbr吞吐量会断崖下跌。
6、BBR的ProbeRTT阶段只发4个包,造成发送速率下降太大。
7、BBR探测带宽需要Padding,可能造成带宽浪费。
BBR算法改进:
1、改善收敛速度慢的问题。
方法1:bbr v2提出在probe down一次性排空到位(inflight < BDP);
方法2:随机化6个1x平稳发送周期,缩短排空需要的时间。
2、抗丢包问题。 抗20%的丢包依据满足大多数需求。但极端丢包率下,可把丢包率补偿到pacing rate,提高抗丢包能力。
3、ProbeRTT阶段码率低的问题。 bbr v2把probe RTT缩短到2.5s一次,使用0.5*BDP发送。
4、padding问题。 为了保持带宽竞争性和平稳发送,padding必须存在。
5、rrt不公平问题 在排空阶段一次性排空就可以缓解该问题。
BBR对比Cubic:1、bbr带宽利用率整体上高于Cubic。
BBR对比GCC:1、bbr比gcc的带宽估计更准确。2、去掉带宽限制后,bbr能更快恢复到最大带宽利用率。bbr只需要gcc十分之一的时间。