mtr可逐跳定位丢包节点:安装后运行mtr -r -n -c 50 example.com,重点观察Loss%列变化趋势——连续多跳同步升高且不回落为真实丢包,单跳高丢包而下级恢复则多为ICMP限速假象。

当你发现访问某个网站或服务时出现卡顿、超时甚至连接失败,而单纯用 ping 只能看到终点是否通,却无法判断丢包究竟发生在本地路由器、运营商骨干网还是目标服务器机房,就需要用 mtr 工具逐跳定位真实丢包节点。
安装mtr工具
Ubuntu/Debian 系统执行:sudo apt install mtr。注意必须安装完整版 【mtr】,不要只装 mtr-tiny,否则无法使用 --report 批量导出模式。
CentOS 7/RHEL 7 执行:sudo yum install mtr;CentOS 8 / Rocky / AlmaLinux 执行:sudo dnf install mtr。
安装后运行 mtr --version 验证版本不低于 v0.92,老版本可能缺失 TCP 探测等关键功能。
基础诊断:用报告模式跑一次稳定测试
第一步:执行 sudo mtr -r -n -c 50 example.com,其中 -r 进入报告模式,-n 跳过 DNS 反解加速输出,-c 50 发送 50 个探测包避免偶然抖动干扰判断。
第二步:等待命令自动退出,观察终端输出。重点看 Loss% 列——如果某跳(比如第 4 跳)Loss% 是 40%,而它下一级(第 5 跳)和最终目标 Loss% 都是 0%,说明该跳大概率在限速 ICMP 响应,不是真实故障;但如果从第 4 跳开始,后续所有跳 Loss% 都同步升至 40%,问题就锁定在第 4 跳设备。
第三步:若第一跳(通常是你的网关,如 192.168.1.1)就显示高丢包,先拔插网线或重启光猫,排除本地物理层问题。
进阶排查:绕过 ICMP 限速验证真实路径
方法一:TCP 模式探测(推荐)
执行 sudo mtr --tcp -P 443 -r -n -c 50 example.com,强制走 HTTPS 端口发 SYN 包。很多城域网设备会放行 TCP 探测但屏蔽 ICMP,此时若原高丢包跳的 Loss% 降为 0%,即可确认是 ICMP 策略导致的假性丢包。
方法二:指定源 IP(多网卡服务器必备)
执行 sudo mtr -a 10.0.2.15 -r -n -c 50 example.com,确保探测流量从指定出口网卡发出,避免因路由策略错误走错链路。
方法三:分离 IPv4/IPv6 测试
加 -4 或 -6 参数单独测试,例如 sudo mtr -4 -r -n -c 50 example.com。某些网络对 IPv6 转发支持不完善,会出现仅 IPv6 链路丢包的情况。
结果解读关键点
① Loss% 不为 0 并不可怕,关键是看变化趋势:连续两跳及以上 Loss% 同步升高,且后续跳数不再回落,才代表真实转发异常。
② Avg 和 StDev 同样重要:Avg 高说明延迟大,StDev 高(比如 >50ms)说明延迟剧烈抖动,常见于无线接入或带宽饱和链路。
③ Host 列出现 ???:表示该节点禁用了 ICMP 回复或防火墙拦截,不算丢包;但如果从第 2 跳起连续多个 ???,说明中间路径被策略屏蔽,需换用 traceroute -n example.com 辅助验证。
④ 若所有跳 Loss% 均为 0,但最终目标响应极慢,问题不在路由链路,而在目标服务器自身负载或应用层(如 Nginx 队列积压、数据库慢查询)。


















