udx实现揭秘之---------udx的慢启动带宽探测

我们都知道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自己适应的增加,从而避免击穿网络。

如下图:完美探测带宽。

udx实现揭秘之---------udx的慢启动带宽探测_第1张图片

你可能感兴趣的:(网络通信,网络,音视频,c++,c语言,算法,动态规划)