This commit is contained in:
estomm
2021-09-08 23:57:39 +08:00
parent 7711cd7ea7
commit 825343abe6

View File

@@ -63,7 +63,9 @@ TCP通过ACK到达的情况(即是否到达,到达的速率)来调整拥
![](image/TCP拥塞控制-快速恢复.png)
快速恢复一般和快速重传一起实现,其算法为:
* 当收到第3个重复的ACK时(对于SCTP,有三个SACK都不包含某个报文的确认时。具体规则:1.只有报文TSN小于当前SACK中新被确认的最大TSN的被丢失的报文的丢失计数才会增加,2.如果已经处于快速重传模式,并且当前的SACK会更新累积确认点,则所有丢失的报文的丢失计数都会增加(这一点将保证报文会被尽快快速重传,从而使得尽快退出快速重传模式)。),把ssthresh设置为max (FlightSize / 2, 2*SMSS)(对于SCTP,max(cwnd/2, 4*MTU)),把cwnd设置为ssthresh的值加3个SMSS(对于SCTP,不增加)。然后重传丢失的报文段。因为收到3个重复的ACK表明有三个报文已经离开网络到达了接收断,被且被接收端给接收了。(同时,对于SCTP,还会将当前已经发出的最大的报文序号(TSN)作为退出快速恢复的序列号)
* 当收到第3个重复的ACK时(对于SCTP,有三个SACK都不包含某个报文的确认时。具体规则:
1. 只有报文TSN小于当前SACK中新被确认的最大TSN的被丢失的报文的丢失计数才会增加,
2. 如果已经处于快速重传模式,并且当前的SACK会更新累积确认点,则所有丢失的报文的丢失计数都会增加(这一点将保证报文会被尽快快速重传,从而使得尽快退出快速重传模式)。),把ssthresh设置为max (FlightSize / 2, 2*SMSS)(对于SCTP,max(cwnd/2, 4*MTU)),把cwnd设置为ssthresh的值加3个SMSS(对于SCTP,不增加)。然后重传丢失的报文段。因为收到3个重复的ACK表明有三个报文已经离开网络到达了接收断,被且被接收端给接收了。(同时,对于SCTP,还会将当前已经发出的最大的报文序号(TSN)作为退出快速恢复的序列号)
* 收到另外的重复的ACK时,cwnd增加一个MSS。
* 当收到确认新数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。此时就重新进入到了第一步丢包时本应进入的拥塞避免。(对于SCTP,如果收到的SACK的累积确认确认了步骤1中的退出快速恢复的序列号,则退出快速恢复)