首页/网络/协议速查/TCP 丢包率与链路质量判断
TCP 与 UDP54 条

TCP 丢包率与链路质量判断

用内核计数与主动探测结合判断丢包:本机重传率、对端视角、mtr 逐跳丢包,三者交叉才能定位丢在哪儿。

协议速查网络更新于 2026-10-13

丢包要靠三处交叉验证

判断链路是否真丢包,单一数据源都不够:本机的 TCP 重传计数只能说明自己这一侧的感受,mtr 的逐跳丢包会被 ICMP 限速干扰,对端看到的丢包位置又可能完全不同。可靠的做法是把内核计数、主动探测与业务侧指标放在一起看,确认丢包比例、是否集中在时段,以及是否影响可用性。

基本信息

适用平台Linux(nstat、ss、/proc/net/snmp);Windows 用 netstat -s 与 Get-NetTCPConnection
核心指标TcpRetransSegs 与 TcpOutSegs 的比值即重传率
补充指标TcpExtTCPLostRetransmit 表示重传也丢了,说明链路质量差
采集方式nstat 适合脚本采集差值,避免手算累计值

本机统计

本机统计
nstat -az | grep -E 'TcpRetransSegs|TcpOutSegs|TCPLostRetransmit'
nstat -n TcpRetransSegs TcpOutSegs   # 再次执行得到增量,比值即重传率
ss -tin | grep -c retrans            # 当前有多少连接处于重传状态
cat /proc/net/snmp | grep -A1 Tcp:   # 累计计数原始来源

链路探测

链路探测
mtr -rwzc 100 target        # 逐跳统计,重点看最后一跳
ping -c 100 -i 0.2 target | tail -3   # 高密度采样看丢包是否连续
ss -tin dst 10.0.0.9 | grep -E 'rtt|retrans'   # 单连接 RTT 与重传详情

指标读法

指标含义异常判断
重传率重传段数除以发送段数内网持续高于 0.1% 值得追查
TCPLostRetransmit重传的包也丢了出现即说明链路质量差或严重拥塞
mtr 末跳丢包端到端丢包参考末跳非零且稳定才可信
RTT 波动ss 输出的 rtt 与 rttvarrttvar 持续偏大表示路径不稳
mtr 中间跳丢包不一定是问题:路由器对 ICMP 限速很常见,只有最后一跳的丢包与端到端 TCP 重传对得上才说明真实影响。
重传率低也不代表没丢包:SACK 与快速重传修复及时,或应用还没把链路压到瓶颈时,统计上可能看不出异常,所以要结合业务侧耗时分布判断。
采集要连续并带时间戳:丢包常是时段性的(晚高峰、备份窗口、跨网结算时段),单次采样容易得出相反结论,建议按分钟落盘再与业务耗时曲线对齐。

易错点

  • 只在一台机器上测就下结论:丢包位置可能在另一端或中间链路,需要双向或多点同时采集
  • 把 ping 丢包率当成链路丢包率:ICMP 被限速会虚增丢包,必须用 TCP 层重传率确认真实影响
  • 用累计计数判断当前状况:TcpRetransSegs 是开机以来的累计值,不做差值计算毫无参考意义
  • 忽略重传也丢失的场景:TCPLostRetransmit 增长说明重传策略失效,报文要经历超时才恢复,用户侧表现为偶发长尾卡顿

数据来源与参考

  • iproute2 mtr 文档
  • Linux 内核网络统计

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌