RTO 计算与观察
重传超时时间由平滑往返时延与偏差共同决定:RTO 等于平滑往返时延加上四倍偏差,并设有下限(常见为一秒);超时后按指数退避翻倍,到达上限后放弃连接。抓包里能从重传间隔反推是否进入退避,也能据此判断丢包是被快速重传修复,还是等到超时才修复。
基本信息
| 适用平台 | TCP 协议行为,计算方法见 RFC 6298 |
|---|---|
| 计算公式 | RTO = SRTT + max(时钟粒度, 4 × RTTVAR) |
| 下限与退避 | 下限常见 1 秒,未确认则 2、4、8 秒依次翻倍 |
| 上限行为 | 达到上限后放弃重传并断开连接 |
典型使用场景
- 理解重传节奏:固定间隔的重传多来自超时而非快速重传
- 区分修复方式:快速重传靠重复确认触发,比超时快得多
- 评估链路质量:高延迟链路的 RTO 天然偏大,不能用固定预期
- 参数审查:确认 RTO 下限与重传次数上限是否匹配业务
- 与其他标记联看:结合重传与重复确认判断影响面
观察与参数
观察与参数
# 首次超时约 1 秒(默认下限),未确认则按 2 秒、4 秒、8 秒退避
# 达到上限(常见约两分钟)后放弃连接
sysctl net.ipv4.tcp_rto_min # 查看 RTO 下限相关参数
sysctl net.ipv4.tcp_retries2 # 放弃前允许的重传次数重传形态对照
| 形态 | 触发机制 | 恢复速度 |
|---|---|---|
| 重复确认后立即重传 | 快速重传 | 快,通常少了等待 |
| 固定间隔后重传 | 超时重传 | 慢,至少等一个 RTO |
| 间隔翻倍递增 | 进入退避 | 更慢,可能持续多轮 |
| 达到上限后断开 | 放弃重传 | 连接直接失败 |
大多数丢包靠重复确认触发的快速重传恢复,真正等到超时的情况相对少。因此在抓包里看到重传,先判断它属于快速重传还是超时重传,两者对业务的影响差别很大。
高延迟链路(卫星链路、跨境专线)的 RTO 天然偏大,用内网的经验值判断会误以为配置异常。对比之前先确认基础往返时延是多少。
调小 RTO 下限能让丢包恢复更快,但会增加无效重传的概率,属于典型取舍。调整之前应先量化当前链路的实际时延分布。