·CUBIC简介:
CUBIC算法是基于BIC-TCP算法的改进算法,它主要是解决在大带宽延迟积网络中TCP拥塞窗口增长缓慢的问题,其具有TCP友好性与RTT公平性,实时保持窗口的增长率不受RTT的影响。CUBIC在公平性上解决了TCP流量友好性与其他相同或者不同往返行程时延(RTT)的高速流竞争公平共享带宽的问题,在Linux2.6.19后已经默认使用CUBIC算法。
·BIC窗口增加函数:
BIC算法由ACK驱动,当得到一个分组丢失事件->BIC通过乘法因子β减小窗口,原窗口Wmax(数据包丢失发生);减小后窗口Wmin->每个RTT通过二进制搜索跳到Wmax与Wmin的中点,说明当前网络能处理的窗口大小在Wmax与Wmin之间;定义常数Smax与Smin,当二进制搜索跳到中点与Wmin距离大于Smax,则BIC通过Smax线性增加当前窗口->在RTT内如果当新窗口大小丢包后,将新窗口设置为Wmax;如果没有丢包则将新窗口值设置为Wmin,直到窗口的增量小于Smin(线性增加->对数增加);如果窗口增长超过
Wmax(接近Wmax)->进入Max探测阶段,找到一个新的Wmax,该过程与前面的过程对称点。
BIC算法会有一些问题:如空闲带宽会被RTT小的连接占用;以及ACK可能会被丢失,导
致二分法计算时间不一定是RTT=>提出CUBIC算法来实时保持窗口的增长率不受RTT的影响。
·CUBIC窗口增加函数:
CUBIC使用一个三次函数代替了BIC中的窗口探测曲线,在BUBIC中窗口的增长依
赖于发生两次拥塞事件之间的时间t,达到独立于RTT来避免BIC算法出现的问题,并且当RTT较小的情况下CUBIC能够使其与标准的TCP协议很好兼容。
与BIC相似,在丢包发生后CUBIC通过乘法因子β减小拥塞窗口cwnd,并且在拥塞
避免阶段每收到一个ACK就通过曲线估算下一个窗口增长率,通过估算的窗口增长率来控
3制拥塞窗口cwnd的增长速度,Wcubic=C(t-K)+Wmax,其中K?3WmaxβC,其中通过β
K
和
来控制窗口曲线范围高度以及起始窗口到丢包窗口的时间。与BIC算法相同CUBIC算法在Max Probing阶段的曲线与稳定阶段相对称。在图中的凸区域窗口迅速增加=>增加网络利用率,确保协议的可扩展性;凹区域:窗口缓慢增长=>增加协议稳定性。 ·CUBIC算法:
CUBIC算法的主要流程如图:
开始对每个ACK进行分析记录最小RTT,dMincwnd++进入标准tcp恢复与重传模式是否丢包Yes超时初始化参数值No是否进入拥塞避免模式Yes丢包与快收敛模块fast_convergenceNo初始化开始标识epoch_start=0Cubit计算模块,计算cwnd增长因子cnt,cubit_update记录拥塞避免模式ack数量,ack_cnt++是否加载快速收敛模块,cwnd
链接让出带宽。在算法中当丢包的cwnd值小于上一个Wlast_max的值时,表明这个链接的饱和值在不断减小,故可以进一步减小个Wlast_max的值来给新链接留出带宽(这里还看得不是很明白)。
b. tcp友好机制:CUBIC算法实时计算调整cwnd值,比传统的AIMD算法更加友好,对
于前面提到的RTT小的链接来说都需要K时间来达到丢包的窗口大小Wmax,CUBIC算法中为了使每个RTT内与AIMD算法具有相同的增长率,窗口的增长率大小至少要为Wtcp=Wtcp+3βack_cnt*,使CUBIC算法有更好的增长率,更好地兼容tcp。
2?βcwndc. CUBIC控制cwnd:CUBIC算法中每当在拥塞避免阶段接收到ACK通过CUBIC曲线
估算出下一个RTT窗口的增长率,通过cwnd与估算的Wtarget相比较来确定cwnd增
长因子cnt,通过cnt控制调整cwnd大小。 论文:
S Ha,I Rhee,L Xu. CUBIC: A New TCPFriendlyHighSpeed TCP Variant.《AcmSigops Operating Systems Review》, 2008, 42(5):64-74