我们都知道bew = wnd*1000/rtt
当慢启动的时候,每收一个ack,可以这样调整发送速度当前sendspeed = sendspeed + mss/rtt.并且更新wnd->wnd+1.
udx的变形版本是sendspeed += checksize/rtt;
但是这种增加速度太快,在到达临界点的时候,很容易击穿网络,如果你吃第100个馒头时可能撑爆你的肚子。
因为速度在每个周期成倍或数倍的趋势在增加。
为了克服这个问题。我们引入下面的机制
BEW = WND*1000/RTT公式中,我们分子分母变成 bew = Wnd * (MINRTT*MINRTT*1000)/(RTT*RTT*RTT)
当MINRTT == RTT的时候,即网络初期,公式还是BEW = WND*1000/RTT,而当网络快到达临界点的时候,RTT远大于MINRTT,从而导致BEW增量 = checksize*(MINRTT*MINRTT*1000)/(RTT*RTT*RTT) 值很小,从而控制整个发送速度不是那么快,根据RTT自己适应的增加,从而避免击穿网络。
如下图:完美探测带宽。