计算机网络-tcp的拥塞控制

TCP的拥塞控制方法

 前言:TCP的拥塞控制方法有:慢开始,拥塞避免,快重传和快恢复。这是我在考试后进行的一次整理,如果有错的话也请指出。(主要是我做错了,难受)

1.慢开始

 主机刚刚开始发送报文段时,可先设置拥塞窗口 cwnd=1(即设置为1个最大报文段MSS的数值),在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值(重传的不算在内)。使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间 RTT。“传输轮次”更加强调:把拥塞窗口 cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。为防止拥塞窗口增加过大引起网络拥塞,还需要设置一个“慢开始门限(ssthresh)”

2.拥塞避免

  拥塞避免:让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口 cwnd 按线性规律缓慢增长。

慢开始和拥塞避免按照下面的规则进行使用:

  1. cwnd < ssthresh 时,使用慢开始算法。
  2. cwnd > ssthresh 时,使用拥塞避免算法。
  3. cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

ps:这时候就有一个问题了,如果ssthresh(门限)为11。那慢开始到cwnd=8的时候就直接变成了16吗?其实是不会的,这时候cwnd是为11。cwnd的慢开始增长是不会超过门限值的。

3.快重传

 首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段(大可能是因为丢包)。快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

 当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减为拥塞时窗口值的一半。但接下去不执行慢开始算法.由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

 总得来说当发送端收到连续三个重复的确认(即三个重复的ack),ssthreshcwnd都变为当时cwnd的一半。例如当cwnd=12时候收到了三个重复的确认,那么cwndssthresh都会变为6。

4.快恢复

 快恢复和快重传是差不多。只少我没有找出他们在做法上有什么区别。

下面是我很久前在学TCP拥塞控制的时候在网络上找到的图。(出处忘记了,百度一下应该可以百度到吧)

计算机网络-tcp的拥塞控制