TCP 慢启动、拥塞避免、快重传和快恢复算法

为什么使用慢启动算法

当主机开始发送数据时,如果立即将大量数据注入网络,就有可能引起网络拥塞。因此,较好的方法是由小到大逐渐增大发送窗口。
初始时,cwnd=1个最大报文段大小(MSS),每收到一个确认后+1。这样,每过一个传输轮次,cwnd的值变为2,4,8,···,指数型增加。

拥塞避免

当cwnd增大到可能会导致网络拥塞时,需要进行报文重传。引入慢启动阀值ssthresh。

慢启动阀值ssthresh = 当时窗口大小的一半。

重传有两种机制:超时重发机制和高速重发机制。两种机制对应的cwnd的值不同。

cwnd = ssthresh + 3 if 高速重传机制
cwnd = 1 if 超时重发机制

超时重发机制

超时重发机制cwnd=1,接着继续执行慢启动算法。当cwnd>=ssthresh时开始线性增加,即为拥塞避免。

高速重传机制

快重传

高速重传机制采用的算法为快重传算法。快重传算法没有超时,而是收到3个以上的重复的ACK即开始重传,随后进入快恢复算法。

快恢复

快恢复算法分3个步骤:

  1. 收到第3个重复确认的ACK时,sstresh=当前cwnd的一半,cwnd=ssthresh+3。发送重传数据。
  2. 没有收到新数据的ACK之前,cwnd+1 if 收到重复的ACK;发送一个报文段 if cwnd > 未确认的报文大小。
  3. 收到新数据的ACK,cwnd=ssthresh(重传时cwnd的一半),开始拥塞避免。

你可能感兴趣的:(TCP 慢启动、拥塞避免、快重传和快恢复算法)