TCP拥塞算法学习之拥塞控制方法

一、拥塞控制的基本概念

      拥塞控制用于防止过多的报文进入网络,造成路由或者链路过载。流量控制的重点是放在点到点链路的通信量的局部控制上,而拥塞控制的重点是放在进入网络报文总量的全局控制上。

二、拥塞窗口的概念

        TCP协议滑动窗口是实现拥塞控制的最基本的手段。为了使讨论简单,假设报文是单方向传输,并且有足够的缓存空间,发送窗口大小只由网络拥塞程度来确定。

        拥塞窗口是发送端根据网络拥塞程度确定的窗口值。发送端在真正确定发送窗口时,应该取“通知窗口(rwnd)”和“拥塞窗口(cwnd)”的较小值。在没有发生拥塞的情况下,二者应该一致。

三、拥塞控制方法

        TCP协议的拥塞控制方法有慢开始(慢启动)、拥塞避免、快重传和快恢复。

        慢开始和拥塞避免的AIMD(加性增乘性减)算法:如果发送端发现超时,就判断为网络出现拥塞,并将拥塞窗口置1,执行慢开始策略;慢启动阈值(ssthresh)被设置为当前拥塞窗口大小的一半,以延缓拥塞的出现,然后继续执行慢开始和拥塞避免算法。

        1、当cwnd<ssthresh时,使用慢开始算法。

        2、当cwnd>ssthresh时,使用拥塞避免算法。

        3、当cwnd=ssthresh时,使用慢开始算法也可以使用拥塞避免算法。

如图所示:A:ssthresh=16,B:出现超时,C : ssthresh=12


        快重传和快恢复:在上面的基础上,当接收端发现报文段中间的某个报文丢失,丢失报文后面的报文都可以接收,这时候发送端就不能根据这个丢失报文的确认的超时而认为网络发生拥塞。当发送端连续接收到三个对某个丢失报文的重复确认时,即使丢失报文的重传计时器没有超时,也要尽快重传未被确认的报文,这是快重传。而快恢复是每当发送端收到一个重复确认时候直接进入拥塞避免阶段,当前的ssthresh是收到重复确认时候拥塞窗口cwnd的一半。

如图所示: