快重传和快恢复的过程?
参考
借用这篇博客的一张图,我觉得这张图画出了很多讲快重传和快恢复的文章中没有讲到的细节。
快重传
快重传的触发是有收到连续3个相同的ACK,就开始进行快重传阶段。
快重传所做的操作就是更新 cwnd 和 ssthresh 的值:
- cwnd = cwnd / 2
- ssthresh = cwnd
执行完这两个操作之后就开始进入快恢复阶段
快恢复
快恢复要做的操作如下:
- cwnd = ssthres + 3 * MSS
- 重传 duplicated ACKs 指定的数据包
- 如果再收到 duplicated ACKs ,cwnd = cwnd + 1
- 如果收到新的ACK,就令 cwnd = ssthresh ,然后就退出快恢复阶段,进入拥塞避免算法(TCP Reno)
为什么有些快恢复的算法拥塞窗口设置为 ssthresh + 3 MSS?
书上的意思是,因为触发快重传是有3个重复的ACK,这也就表明接收端已经收到了目前发送窗口内的另外3个报文段,这样也就意味着,目前发送窗口内的报文段已经确认有3个报文段被接收端收到了,这样的话,为了能够发送更多的报文段,发送端的发送窗口可以相应的扩大3个