
当cwnd<ssthresh时执行慢开始算法,当cwnd>ssthresh时执行拥塞避免算法,当cwnd=ssthresh时执行慢开始或拥塞避免算法: 1) 慢开始阶段(拥塞窗口指数增大): 当cwnd<ssthresh时,每收到一个对新的报文段的确认(重传的不算在内)后,把拥塞窗口增加一个MSS对应的字节数(拥塞窗口大小的单位是字节),即每经过一个往返时间RTT(一个传输轮次所对应的时间),拥塞窗口的大小加倍; 2) 拥塞避免阶段(拥塞窗口加法增大): 当cwnd>ssthresh时,每经过一个往返时间RTT,拥塞窗口的大小增加一个MSS对应的字节数;(具体实现可以采用如下办法,即RTT时间内每收到一个确认ACK,便将拥塞窗口cwnd增加MSS*(MSS/cwnd),其中“MSS/cwnd”中的cwnd在该RTT时间内始终为该RTT开始时刻的大小。这样每经过一个往返时间RTT(即一个传输轮次),拥塞窗口的大小将增加1个MSS的大小) 3) 发生超时时刻(慢开始门限值乘法减小,即减为拥塞窗口的一半;拥塞窗口置为1个MSS大小): 慢开始或拥塞避免阶段,当发生超时时,ssthresh变为当前cwnd值的一半(但不能小于2个MSS的大小),cwnd设置为1个MSS对应的字节数,随后执行慢开始算法; 4) 收到连续3个重复确认时刻(慢开始门限值乘法减小,即减为拥塞窗口的一半;拥塞窗口置为慢开始门限值): 慢开始或拥塞避免阶段,当收到连续3个重复确认时,ssthresh变为当前cwnd值的一半(但不能小于2个MSS的大小),cwnd设置为ssthresh的新值,随后执行拥塞避免算法;(此处理方法即为快恢复) 5) 快重传算法(快重传是实现快恢复的前提): 接收方,每收到一个失序的分组,就立即发出重复确认(对按序到达的最后一个分组的确认),而不是等待自己发送数据时才进行捎带确认; 发送方,只要收到三个重复确认,就立即重传未被确认的分组,而不是等到重传计时器到期。 说明: 1) 一个传输轮次所经历的时间其实就是往返时间RTT(该RTT是动态变化的,不同轮次的RTT不同),使用“传输轮次”更加强调:把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。 2) 当发生“收到连续3个重复确认”时,将拥塞窗口置为慢开始门限值(转入拥塞避免),而不是拥塞窗口置为1个MSS大小(转入慢开始),是因为既然能够收到连续3个重复确认,说明接收方已连续收到三个报文段,故此时的网络很可能还未发生阻塞。 |