抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

拥塞避免算法基本思想:一旦进入拥塞避免状态,拥塞窗口的值置 1,慢开始门限设为上次的值的一半。此时每个往返时延只将拥塞窗口的值增加一个最大报文长度。一种通用的方法是对于 TCP 发送方无论何时到达一个新的确认,就将拥塞窗口增加一个最大报文长度。

技术介绍

大家都听过国王与象棋的故事吧,国王想要奖励象棋的发明者,发明家说我要填满象棋棋盘,第一个格放一粒米,第二个格放 2 粒米,第三个放 4 粒,以此类推。开始还好,最后国库都放空了。可以看出,指数增长很恐怖的。

而慢启动就是使用指数增长,所以终会有一个点,超过网络负载能力,这时会发生什么呢?

技术扩展

为防止拥塞窗口 cwnd 增长过大引起网络拥塞,还需要设置一个慢速开始门限 ssthresh 状态变量。

之前的文章已经介绍了,慢启动以指数增长,在收到接收端的确认后,下次传输两倍的数据量。

如果发送之后,并没有收到接收端确认,发送端会判断当前网络处于拥塞状态。

下图中拥塞阈值在 24 处,发送端发送 16 个报文时,可以收到接收端的确认,它会发送 32 个报文。但是当前网络只能承载 24 个,所以说会有 8 个报文收不到确认。

技术图解

通过下面图片,我们简单说下慢启动的算法:

看图说话

如果发送方设置超时计时器时限已到但还没有收到确认,那么很可能是网络出现拥塞,致使报文段在网络中某处被丢弃。这时,TCP 马上把拥塞窗口减小到 1,并执行慢开始算法,同时把慢开始门限值 ssthresh 减半。

当发送端判断网络拥塞之后,会将门限 ssthresh 减为之前的一半,之前是 32,新值就是 16 个。

然后重新开始慢速启动。第一次 1,第二次 2,第三次 4,第四次 8,第五次 16,第五次达到了新门限 ssthresh。

接下来还是执行拥塞避免的算法,第六次发送 17 个包,第七次 18,每次加一,线性增长。当达到 24 个时,实际上网络可以承载的,但加到 25 个时,会有一个包收不到确认,这时,最终数值为 24。

评论