传输层 TCP 拥塞控制(2):拥塞避免

之前介绍的慢启动算法是以指数级别增加拥塞控制

拥塞避免


慢启动阈值 ssthresh(slow start threshold):
            • 达到 ssthresh 后,以线性方式增加 cwnd
                       • cwnd += SMSS*SMSS/cwnd

如果没有拥塞避免的算法的时候,我们的慢启动是以如图所示,以指数级,所以下一次在飞行中的报文大概在50多的数字上面,大概在40的时候就开始出现丢包了,所以如果没有拥塞避免的话会发生大量的包都被丢失掉。

拥塞避免怎么解决这个问题呢?它定义了慢启动阈值,当拥塞窗口达到了阈值之后,就不以指数的方式,就改为线性的方式,然后在发生丢包的时候需要将之前的阈值重新设定,设置为原来拥塞窗口的一半,拥塞窗口再降低为比较小的数字,再次启用慢启动,到了相应的阈值之后,再改为拥塞避免算法,所以达到阈值之后就进入到拥塞避免阶段。

慢启动与拥塞控制


最初以以4个MSS作为最初的拥塞窗口,以2倍的速度改为4 8 16,到16这收到ack之后就会升到32 64,到波峰的时候还没有达到最初的慢启动阈值的时候就开始出现丢包了,此时我们的拥塞窗口是64,所以新的慢启动阈值变为64的一半32,然后重新从4个mss作为初始的拥塞窗口,再进入慢启动,这里到32的时候进入拥塞避免,再次发生丢包的时候又重新进入了慢启动,拥塞避免。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/126665079
今日推荐