TCP的NewReno拥塞控制算法详解
字数 1454 2025-12-07 02:26:37
TCP的NewReno拥塞控制算法详解
知识点描述:
NewReno是TCP Reno算法的一个重要改进版本,旨在解决Reno在快速恢复阶段遇到多个数据包丢失时性能下降的问题。它通过扩展快速恢复阶段的处理逻辑,使其能够在一个RTT(往返时间)内恢复多个丢失的数据包,从而提升网络吞吐量。这是理解现代TCP拥塞控制(如CUBIC)的重要基础。
详细解题过程/讲解:
-
问题背景:Reno的局限性
在标准的Reno算法中,当发送方通过重复ACK触发快速重传后,会进入快速恢复阶段。但Reno的快速恢复有一个关键假设:一个RTT内最多只丢失一个数据包。如果在一个窗口内有多个数据包丢失,Reno在收到部分缺失数据的ACK后,会错误地退出快速恢复,导致后续重传依赖耗时的超时重传,严重降低吞吐量。 -
NewReno的核心改进思路
NewReno在快速恢复阶段引入了一个新状态:恢复阶段,并记录一个关键变量——恢复点。其核心思想是:在快速恢复阶段,只要接收方返回的ACK确认号没有超过“恢复点”,就认为仍有数据包丢失,继续保持快速恢复状态,并继续重传疑似丢失的数据包。这样,一个RTT内可以重传多个丢失的包。 -
NewReno的具体步骤详解
假设发送方当前窗口发送了数据包序列号1-10,其中包3、6、8丢失。步骤1:触发快速重传
- 接收方收到包1、2后,期望包3,但收到包4、5,于是连续返回对包2的重复ACK。
- 发送方收到第3个重复ACK(假设阈值=3),判定包3丢失,执行快速重传:
- 设置慢启动阈值 = 当前拥塞窗口的一半。
- 重传包3,并进入快速恢复阶段。
步骤2:快速恢复阶段设置“恢复点”
- 与Reno不同,NewReno在进入快速恢复时,记录当前发送窗口的最高序列号为恢复点(本例中为包10的结束序列号)。
- 拥塞窗口临时调整为:
cwnd = ssthresh + 3 * MSS(3是因为收到3个重复ACK),允许发送新数据。
步骤3:处理部分确认
- 重传包3后,接收方收到包3,返回对包5的ACK(因为包4、5已收到),这个ACK确认号超过了包3,但没有超过恢复点(包10)。
- 在Reno中,这个ACK会让发送方错误地退出快速恢复。但在NewReno中,由于ACK确认号(包5)< 恢复点(包10),发送方判定仍有数据包丢失(包6、8)。
- 发送方执行:
- 重传下一个疑似丢失的包(包6)。
- 将拥塞窗口减少一个MSS(模拟数据发送),并继续保持快速恢复状态。
步骤4:继续恢复,直到全确认
- 每次收到部分确认(ACK确认号<恢复点),就重传下一个丢失的包,并缩小拥塞窗口。
- 直到收到对恢复点的完全确认(即ACK确认号≥恢复点),表示该RTT内所有丢失包已重传完成,才退出快速恢复:
- 将拥塞窗口设为慢启动阈值,进入拥塞避免阶段。
-
NewReno的优点与局限
- 优点:
显著改善多个包丢失时的吞吐量,减少对超时重传的依赖,尤其适用于中等丢包率的网络。 - 局限:
仍依赖重复ACK检测丢包,如果窗口内丢失大量包,可能导致ACK不足而退化为超时重传。后续的SACK(选择性确认)可进一步改进这一问题。
- 优点:
-
总结
NewReno通过恢复点机制扩展了快速恢复阶段,使其能在一个RTT内处理多个丢失包,是Reno向更高效拥塞控制演进的关键一步。理解NewReno是掌握现代TCP拥塞控制算法(如CUBIC、BBR)中多丢包处理逻辑的基础。