diff --git a/计算机网络/3.6 传输层-TCP拥塞控制.md b/计算机网络/3.6 传输层-TCP拥塞控制.md index 478831f4..b200b965 100644 --- a/计算机网络/3.6 传输层-TCP拥塞控制.md +++ b/计算机网络/3.6 传输层-TCP拥塞控制.md @@ -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中的退出快速恢复的序列号,则退出快速恢复)