linux没有“网络接口重传率”指标,因重传属tcp层行为而非网卡层统计;collisions在全双工网络中恒为0,retransmit字段根本不存在于ifconfig/ip -s link输出中。

Linux 没有“网络接口重传率”这个指标——重传是 TCP 协议栈行为,不是网卡(interface)层的统计项;所谓“接口冲突”只存在于传统半双工以太网(CSMA/CD),现代全双工交换网络中 collisions 字段恒为 0,看它毫无意义。
为什么 ifconfig / ip -s link 的 collisions 和 retransmit 都不反映 TCP 重传
ifconfig 或 ip -s link show eth0 输出里的 collisions 是物理层 CSMA/CD 冲突计数,仅在集线器时代有意义;当前所有千兆及以上网卡默认全双工,该值永远为 0。
而 retransmit 字段根本不存在于这些命令输出中——那是 TCP 层概念,和接口统计无关。
常见翻车点:把 tx_errors、rx_dropped 或 carrier 误当成重传,其实它们分别对应驱动错误、接收队列溢出、物理链路中断,和 TCP 重传无直接因果关系。
真正要查的是 TCP 层重传率,得用 /proc/net/snmp 差值计算
重传率必须是同一时间窗口内增量比值:(TCPRetransSegs₂ − TCPRetransSegs₁) ÷ (TcpOutSegs₂ − TcpOutSegs₁),否则无意义。
操作步骤:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 执行
watch -n1 'cat /proc/net/snmp | grep -A1 Tcp | tail -n1',观察 5–10 秒,记下两组输出 - 找到第 15 列(
RetransSegs)和第 11 列(OutSegs)数值 - 用后一组减前一组,相除即得瞬时重传率
- 结果 > 0.005(0.5%)需关注;> 0.02(2%)说明路径丢包已影响业务
想定位到具体连接?ss -ti 的 retransmits 不是你要的“重传次数”
ss -ti 输出末尾的 retransmits 字段只统计 RTO 超时重传次数,不包含快速重传、SACK 重传或 TLP;它对应内核 TCPTimeouts 计数器,不是 TCPRetransSegs。
这意味着:
- 即使
TCPRetransSegs每秒涨几十,某个连接的retransmits仍可能为 0 - 该值在连接关闭后清零,无法回溯历史
- 真要盯住某条流,先用
ss -tunap | grep :80找四元组,再加-i查其retransmits是否持续增长
别被工具表象迷惑:接口层没“重传率”,TCP 层才有;而“重传率”本身是个动态比值,不是静态字段。最容易被忽略的是——你必须做差值,不能拿绝对值直接除。










