快捷搜索: 王者荣耀 脱发

计算机网络——TCP的拥塞控制


1.拥塞控制概述

    在某段时间,如果对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞。     如果出现拥塞而不进行控制,整个网络的吞吐量将随输入载荷的增大而下降。

2.慢开始和拥塞避免算法

    在介绍拥塞控制算法前,先假定如下条件:     发送方需要维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

    拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要出现拥塞,窗口就减少一些。 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)。

    发送方将拥塞窗口作为发送窗口,即swnd=cwnd。

    维护一个慢开始门限ssthresh状态变量。

    当cwnd<ssthresh时,使用慢开始算法。 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。     TCP通信双方建立逻辑联系时,将拥塞窗口值设置为1,门限值设置为16。每当发送方发送成功一条爆温,并收到接收方的确认报文后,传输轮次就加1,并调整拥塞窗口值,使之指数增加。经过4个传输轮次后,cwnd的值经历了1-2-4-8-16的变化,达到了ssthresh的大小,接下来就要转而执行拥塞避免算法。     此后没经过一个轮次,cwnd的值默认加1,直到网络出现了拥塞,即重传计时器超时了。这时,根据目前的cwnd的值,零ssthresh变为原来的一半,并重新开始执行慢开始算法。     当重新执行慢开始算法时,cwnd的值继续按指数规律增长,当达到ssthresh大小时,继续执行拥塞避免算法,cwnd的值按轮次线性增加。

3.快重传算法和快恢复算法

    有时,网络中的个别报文段出现了丢失,但实际上网络并没有发生拥塞,如果此时错误认为发生了拥塞,执行拥塞避免算法,就会降低传递效率。     为此引入快重传算法,可以尽快地让发送方知道发生了个别报文段的丢失。接收方在收到发送方发送的数据后,要立刻进行确认,即使收到了失序的报文段也需要进行确认,而发送方一旦收到3个连续的重复确认,就要立即重传,而不是等待超时计时器超时。     如上图所示,发送方在发送报文段M1后,即在发送M2后收到了来自接收方对M1的确认。而M3在传输过程中出现了丢失,此后发送方继续发送后续报文段。而发送方每收到一个失序报文段(M4,M5,M6),就发送重复确认报文给发送方。在收到连续3条重复确认M2后,发送方就立即重传M3,不再等待超时计时器的重传时间。而接收方收到M3后,发送对前6段报文的累计确认。     而快恢复算法就是在发送方收到3个重复的确认报文后,将ssthresh的值更新为原来的一半,并且更新cwnd的值为ssthresh的值,这样就避免了再次执行慢开始算法。整体的控制情况如下图所示:

经验分享 程序员 微信小程序 职场和发展