TCP 重传率高说明什么问题

看网络质量,大多数人只看延迟和速度。但真正决定"用起来跟不跟手"的,是丢包和重传——延迟 80ms 但零丢包,体验远好于延迟 30ms 但丢 3%。

怎么看重传

# 看当前连接的详细信息
ss -tin

# 只看某个目标
ss -tin dst 1.2.3.4

输出里会有一行类似:

retrans:0/120  rtt:45.2/8.1

分子是重传次数,分母是发出的总包数。 上面这个意思是:总共发了 120 个包,重传了 0 个。

多少算高

重传比例判断体验
< 0.5%正常几乎无感
0.5% – 2%轻微丢包偶尔卡一下
2% – 5%明显异常视频缓冲、语音断续
> 5%严重基本不可用,需要换线路

重传的三种原因

一、链路丢包

最直接。包在中间某个节点被丢了,发送方超时后重传。跨境线路、Wi-Fi 信号弱、运营商拥塞都会导致。

判断方法:mtr 看哪一跳开始丢包。如果是中间某一跳丢、后续不丢,通常不影响;如果是最后一跳持续丢,那是你这一侧的问题。

二、MTU 不匹配

包太大过不去,被丢弃,然后重传同样大的包,再丢。表现是"小文件正常,大文件卡死"。

这种重传有个特征:重传次数会跟着包大小走,而不是随机分布。

三、Wi-Fi 干扰

2.4G 频段拥挤、距离远、隔墙多,都会导致大量重传。这种情况下 ping 可能很稳(小包),但一传数据就掉速。

判断方法:换成有线或者 5G 频段再测一次,重传率明显下降就是 Wi-Fi 的问题。

和 ping 的关系

ping 走 ICMP,不发实际数据,所以丢包率高的时候 ping 可能依然很稳——路由器对 ICMP 的优先级和转发策略,跟 TCP 数据不一样。

这就是为什么"ping 20ms 但用起来很卡"完全可能同时成立。

怎么处理

  1. 先 mtr 定位是哪一段丢
  2. 本地:换有线、换 5G 频段、关掉占用带宽的程序
  3. 线路:换节点,优先挑重传率低的
  4. 如果只在特定网站重传高,那是对方服务器或中间链路的问题,换线路也未必好
💡 一句话:延迟决定"快不快",丢包决定"稳不稳"。选节点时先看丢包,再看延迟。

延伸阅读:延迟怎么测才准、MTU 与分片、为什么晚上八点特别慢。