慢开始,拥塞避免,快重传,快恢复
慢开始:主机发送数据时,由小到大逐步增大拥塞窗口数值。通常先把拥塞窗口cwnd设置为一个最大报文段MSS的数值。而在每接收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。每经过一个传输轮次,拥塞窗口cwnd就加倍。一个传输轮次所经历的时间就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。
拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加一,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢的多。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:
当cwnd<ssthresh时,使用上述的慢开始算法。
当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
当cwnd=ssthresh时,既可使用慢开始算法,也可使用拥塞控制避免算法。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
快重传:高速重传机制采用的算法为快重传算法。快重传算法没有超时,而是收到3个以上的重复的ACK即开始重传,随后进入快恢复算法。
快恢复;快恢复算法分3个步骤:
收到第3个重复确认的ACK时,sstresh=当前cwnd的一半,cwnd=ssthresh+3。发送重传数据。
没有收到新数据的ACK之前,cwnd+1if收到重复的ACK;发送一个报文段ifcwnd>未确认的报文大小。
收到新数据的ACK,cwnd=ssthresh(重传时cwnd的一半),开始拥塞避免。