TCP/IP:tcp快速重传和快速恢复

时间:2023-01-08 00:20:31

1.重传会分为超时和3次重复确认后重传两种。快速重传就是指接收方重复3次确认同一个序号时,发送方立即重传。第1次不算在重复里面,所以一共发了4次ACK。

2.《tcp/ip 协议》描述的快速恢复有点乱。简单来讲,就是快速重传后执行拥塞避免算法,而不是慢启动算法。通过控制慢启动窗口ssthresh和拥塞窗口cwnd的值就可以实现。具体如下
(1)接收方发送第1次数据确认ACK。这里假设序号6657,表示前6676全部接受完。

(2)接收方重复发送多3次同样的数据确认ACK。这重复的3次ACK,前两次cwnd保持不变,第3次时,ssthresh变为cwnd的一半。这里假设cwnd原来为2426,于是ssthresh=2426/2=1213.但是ssthresh必须要=报文段大小整数倍。于是ssthresh=256*4=1024.注意不能=256*5;同时cwnd=ssthresh+3×报文段大小=1024+3*256=1792;3次重复确认的行为结束。

(3)发送方会重传丢失的6675报文段。但是在重传期间,未必能立即到达接收方。在这期间,接收方会继续重复确认6657。与(2)中的不同,(2)中前2个重复确认cwnd保持不变。在这里,每次重复ACK,cwnd增加一个报文段长度(相当于慢启动的增长速度)。

(4)最后接收方接收到丢失的分组,然后发送一个更大的ACK,因为在丢失期间,有接收到其他更大序号的报文段。这时,cwnd调整=ssthresh,并且立即执行一次慢启动(当cwnd<=ssthresh会执行慢启动),调整=ssthresh+1个报文段=1280。之后会采取拥塞避免算法。
TCP/IP:tcp快速重传和快速恢复

3.快速恢复过程中,cwnd经历了 降升降 的过程。

4.从图可以得出一个小结论是,发送方 拥塞窗口大小可能 < 未确认数据大小。

5.慢启动每次增加1个报文段。拥塞避免每次增加1/cwnd大小。这就意味着,之后的报文段,最后一个报文段可能以 < MSS的长度发送。报文段长度是由TCP层决定的,而不是应用程序决定的。