TCP拥塞控制

本文主要说明TCP拥塞控制的四种主要算法。

组成TCP拥塞控制的四种算法包括:慢开始,拥塞避免,快重传,快恢复, 发送方维持一个拥塞窗口(cwnd),发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就增大一些,以便把更多的分组发送出去。但只要出现拥塞,拥塞窗口就要减小一些,以减少注入到网络中的分组数。

I、慢开始

当主机开始发送数据时,如果立即把大量的数据字节注入到网络中,那么就有可能直接引入拥塞,因为现在不清楚网络中的负载情况,所以要由小到大增大发送窗口。

慢开始实例:发送方先设置cwnd=1,发送第一个报文段M1,接收方确认收到M1,发送方收到确认后,将cwnd设为2,于是发送M2和M3,接收方收到后发送对M2和M3的确认;这时发送方将cwnd设为4。

为了防止cwnd增大引起网络拥塞,还需要设置一个慢开始门限。当超过这个门限时执行拥塞避免算法

慢开始总结: 每经过一个有效的传输轮次,拥塞窗口cwnd就加倍,直到超过慢开始门限(ssthresh)。这部分称之为指数规律增长

II、拥塞避免

当cwnd超过慢开始门限时,执行拥塞避免算法,其思路是让拥塞窗口缓慢的增大。每经过一个有效的往返时间就增大1

此外,无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据是没有按时收到确认ACK),就要把慢开始门限设置为出现拥塞时发送窗口的一半,然后将拥塞窗口重新设置为1,执行慢开始算法。

III、快重传

要求接收方没收到一个失序的报文段后就立即发出重复确认,目的是让发送方及早知道有报文段没有到达对方。

快重传实例: 如下图,接收方收到M1和M2后都分别发出了确认信号。假定接收方没有收到M3而收到了M4。显然,根据累计确认机制, 接收方不能确认M4。 根据可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。
按照快重传算法的要求,接收方应迅速发送对M2的重复确认,这样做可以让发送方及早知道M3没有到达接收方。发送方接着发送M5和M6。接收方收到后还要继续发出对M2的重复确认。发送方只要收到连续的三个重复确认就应当立即重传M3,而不必继续等待M3的重传计时器到期。

IV、快恢复

为了配合快重传,还有快恢复算法:当发送方连续收到三个重复确认时,执行乘法减小算法,将慢开始门限减半。这是为了预防网络发生拥塞。快恢复算法规定,在这种情况下,不应该执行慢开始算法(因为是由丢失产生,而不是拥塞)。

由于发送方现在认为网络中很可能没有拥塞,而只是正常的丢失(因为如果发生严重的拥塞,就不会受到连续的重复确认), 因此与慢开始不同在于,不是将cwnd设置为1,而是把cwnd值设置为慢开始门限减半后的数值,然后开始执行拥塞避免算法(加法增大),使拥塞窗口缓慢的线性增大。

V、拥塞控制与流量控制的关系:

拥塞控制是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。考虑的是全局性过程;
而流量控制则是端到端通信量的控制。

【参考】
[1] 《计算机网络》

欢迎转载,转载请注明出处wenmingxing TCP拥塞控制