TCP的超时重传机制与RTT估计
字数 1301 2025-11-07 22:15:48
TCP的超时重传机制与RTT估计
题目描述
TCP通过超时重传(Retransmission Timeout, RTO)确保数据可靠传输。当发送方未及时收到确认(ACK)时,会触发重传。但如何合理设置超时时间?若设置过短会导致不必要的重传,过长则降低效率。因此,TCP需动态估计往返时间(Round-Trip Time, RTT)并计算RTO。本题深入讲解RTT的测量方法、RTO的计算逻辑及其优化策略。
关键概念:RTT与RTO
- RTT(往返时间):数据包从发送到接收其ACK的时间间隔。
- RTO(超时重传时间):发送方等待ACK的超时阈值,需略大于平均RTT。
步骤1:初始RTT估计与RTO计算
TCP无法预知初始RTT,但需设定初始RTO:
- 标准规定:初始RTO设为1秒(常见实现如Linux默认为1秒)。
- 首次测量:发送数据包后收到ACK,得到第一个SampleRTT,后续据此动态调整。
步骤2:平滑RTT估计(SRTT)
为避免瞬时波动,TCP使用加权移动平均计算平滑RTT(SRTT):
SRTT = (1 - α) * SRTT + α * SampleRTT
- α推荐值:0.125(即新SampleRTT占12.5%权重)。
- 初始值:首次测量时SRTT直接取SampleRTT。
举例:
- 若SampleRTT=200ms,初始SRTT=200ms。
- 下一次SampleRTT=300ms,则更新后SRTT = 0.875×200 + 0.125×300 = 212.5ms。
步骤3:计算RTT偏差(RTTVAR)
仅用SRTT可能忽略波动性。TCP引入RTT偏差(RTTVAR) 反映抖动:
Dev = |SampleRTT - SRTT|
RTTVAR = (1 - β) * RTTVAR + β * Dev
- β推荐值:0.25(偏差权重较高,快速响应变化)。
步骤4:最终RTO公式
综合SRTT与偏差,RTO计算公式为:
RTO = SRTT + 4 * RTTVAR
- 系数4:经验值,确保RTO覆盖绝大多数延迟波动。
- 下限约束:RTO至少为1秒(避免过早重传)。
举例:
若SRTT=212.5ms,RTTVAR=50ms,则RTO=212.5 + 4×50=412.5ms。
步骤5: Karn算法处理重传歧义
当数据包重传后收到ACK,无法判断ACK对应原始包还是重传包(重传歧义)。
Karn算法规则:
- 忽略重传包的SampleRTT(不更新SRTT和RTTVAR)。
- 重传时采用指数退避:RTO = 2 × 当前RTO(避免连续超时恶化)。
- 收到非重传包的ACK后恢复正常测量。
步骤6:现代TCP的优化(RFC 6298)
经典算法对突发延迟敏感,现代TCP(如Linux)进一步优化:
- 首次测量:SRTT=SampleRTT,RTTVAR=SampleRTT/2。
- 最小RTO:通常设为200ms(而非1秒),适应高速网络。
- 时钟精度:使用微秒级定时器(降低估算误差)。
总结与意义
- 动态适应性:通过SRTT和RTTVAR实时跟踪网络变化。
- 稳健性:Karn算法避免重传歧义误导,指数退避缓解拥塞。
- 效率平衡:RTO既不过长(降低等待)也不过短(减少无效重传)。
此机制是TCP可靠性的核心基础之一,后续拥塞控制(如慢启动)也依赖RTO触发重传行为。