网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

TCP中的损失恢复方法:速率减半技术

更新时间:2026年03月27日   作者:spoto   标签(Tag):

“速率减半”是一种数据包丢失恢复算法,它能够解决“快速恢复算法”所存在的缺陷。 “速率减半”意味着数据包的传输速率将会减少一半,从而确保接收方的应用程序不会出现延迟或停滞的情况。 这样可以避免那种“沉默的半段时间”,因为如果在那段时间内接收者没有收到任何数据包的话,就会感到沮丧。 因此,与其等待一半的时间段,然后再在剩余的时间段内发送一个数据包,不如在每两个 DUP-ACK 到达时发送一个数据包。这样就能实现速率的减半。 传输的总数据包数量与Fast Recovery模式下的数值相同,不过,等待时间得到了有效的控制。 这种方式使得网络能够逐渐从拥塞状态中恢复过来,而不是让网络在半段时间里处于闲置状态。这样一来,数据传输速率就能恢复到正常水平。 这是一种对快速恢复限制的非常好的优化方法。

与快速恢复技术不同,速率减半技术在发送方进入恢复阶段时,并不会将cwnd减少50%。而是会逐步将其减少50%。

无需使用SACK技术的速率减半技术

快速恢复阶段的初始状态:

ssthresh = 5
cwnd = 10
inflight = 1
采用“速率减半”技术,但不使用SACK机制。
  1. 当收到DUP-ACK时,pipe的值变为10-1=9。发送方没有做出任何响应,保持沉默状态。
  2. 当DUP-ACK到达时,管道中的数据包数量变为9-1=8。此时,发送方会向网络中发送一个新的数据包,因此管道中的数据包数量又增加为8+1=9。
  3. 当DUP-ACK到达时,管道中的值变为9-1=8。发送方没有做出回应,保持沉默状态。
  4. 当DUP-ACK到达时,管道的值为8-1=7。此时,发送方会向网络中发送一个新的数据包,此时管道的数值变为7+1=8。
  5. 当DUP-ACK到达时,pipe的值为8-1=7。发送方没有做出任何回应,保持沉默状态。
  6. 当DUP-ACK到达时,管道中的数据包数量变为7-1=6。此时,发送方会向网络中发送一个新的数据包,此时管道中的数据包数量则变为6+1=7。
  7. 当DUP-ACK到达时,pipe=7-1=6;发送方没有作出回应,保持沉默。
  8. 当DUP-ACK到达时,pipe=6-1=5。此时,发送方会向网络中发送一个新的数据包,此时pipe=5+1=6。
  9. 当DUP-ACK到达时,pipe=6-1=5;发送方没有做出回应,保持沉默。
  10. 当DUP-ACK到达时,管道中的数据包数量变为5-1=4。此时,发送方会向网络中发送一个新的数据包,因此管道中的数据包数量又增加为4+1=5。

因此,发送方会逐步发送新的数据包,而不会让接收方的应用程序陷入停顿状态。

这种技术有一个缺点,那就是它无法适用于所有类型的TCP协议。它只能用于那种在发生数据包丢失时,信道带宽减少至50%的情况。像CUBIC这样的TCP协议,其信道带宽会减少30%,因此无法使用这种速率减半算法。谷歌为此发明了一种优化后的算法。比例性减载/降低(PRR)

采用SACK技术的速率减半技术

当发生数据包丢失的情况时,

pipe = 10, cwnd = 10, ssthresh = 5.

之后,管道和CWnd的值降到了5。此时,发送方已经收到了9个确认消息,并且传输了4个新的数据段(参见上面的图表)。

采用SACK技术的速率减半技术

当接收方从无序的包中接收到某个数据包时,就会发送“SACK”消息。这会在接收方的缓冲区中产生空洞,接收方会得知这一情况,然后发送方会重新发送那些丢失的数据包,以弥补损失。

当前形势:

1个DUP-ACK消息中包含了SACK信息。SACK信息表明有2个数据包丢失了。

pipe=5-1-2=2, -1 for DUP-ACK and -2 for lost packets.
pipe = 2 segments
cwnd = 5 segments
Sender sends one new packet, pipe=2+1=3
1 DUP-ACK comes, pipe=3-1=2
Sender sends new packet, pipe=2+1=3

这个过程会持续下去。这种方法的问题在于,即便如此……管道 < 当前传输速率每收到一个DupACK时,就会发送一个新的数据段。这个问题会导致在传输过程中采取保守的策略。管道 << cwnd。  

利率减半的局限性:

这种机制并不适用于TCP CUBIC以及其他那些在发生数据包丢失时无法将传输速率降低50%的TCP协议。在这种情况下,发送方无法在每收到两次DUP-ACK之后再发送一个数据包。实际上,并非所有的TCP协议都能在发生数据包丢失时将传输速率降低一半。这个问题可以通过使用PRR(比例速率降低)来解决。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料