mtr能精准定位丢包发生的网络跳数,是traceroute与ping的组合工具;关键看Loss%和延迟稳定性,需多次测试并区分真实丢包与ICMP限速导致的假性丢包。

用 mtr 实时看丢包在哪一跳发生
单纯看 ping 只能知道终点通不通,但丢包发生在本地、运营商骨干网、还是目标服务器机房,mtr 才能定位。它本质是 traceroute + ping 的组合,每跳持续发包并统计丢包率。
实操建议:
- 安装:Ubuntu/Debian 用
sudo apt install mtr,CentOS/RHEL 用sudo yum install mtr(或dnf) - 基础命令:
mtr -rwc 50 example.com——-r表示报告模式(适合截图/存日志),-w宽屏显示,-c 50发 50 个包,避免偶然抖动干扰判断 - 关键看两列:
Loss%(该跳丢包率)和Best/Avg/StDev(延迟稳定性)。某跳Loss%突然从 0% 跳到 30%,后面所有跳都高丢包,基本说明问题就在这一跳设备(比如某个城域网出口路由器过载) - 别只跑一次:网络波动常见,建议连续跑 2–3 次,间隔 5 分钟,对比是否同一跳反复异常
mtr 输出里哪些丢包可以忽略
不是所有标红的 Loss% 都代表真实故障。很多中间节点(尤其是运营商核心路由器)会限制 ICMP 响应频率或直接丢弃探测包,造成“假性丢包”。
识别方法:
- 如果只有某跳
Loss%高(比如 80%),但它的下一级跳又恢复为 0%,且最终目标Loss%是 0%,大概率是该跳主动限速 ICMP,不是链路问题 - 如果高丢包出现在你自己的局域网设备(如
192.168.1.1)、宽带猫、或者第一跳公网 IP(如城域网 BRAS 地址),才需要优先排查本地环境 -
???显示在某跳,通常表示该设备禁用了 ICMP 回复或防火墙拦截,不算丢包,只是不可见;但如果连续多跳都是???,可能路径被策略屏蔽,需换工具验证
替代方案:当 mtr 不可用或被屏蔽时怎么办
有些 VPS 或企业网络会禁用 mtr,或目标网络过滤了 ICMP 和 UDP 探测包,这时得换思路。
可选动作:
- 用
ping -c 50 example.com看整体丢包率,再配合traceroute -n example.com粗略看路径——虽然没丢包统计,但能发现某跳超时(*)或延迟突增 - 改用 TCP 模式绕过 ICMP 限制:
mtr --tcp -P 443 example.com(走 HTTPS 端口),部分网络对 TCP 探测更宽松 - 如果连
traceroute都失败,先确认 DNS 是否正常:nslookup example.com;再试curl -v https://example.com看是否卡在 TLS 握手或 HTTP 层,排除应用层干扰 - 注意权限:普通用户运行
mtr可能因无权发送原始包而失败,此时加sudo,但某些容器环境即使加sudo也受限,得换主机侧诊断
Linux 下 mtr 常见报错和对应处理
遇到错误别急着重装,多数是权限、配置或内核限制导致。
典型报错与解法:
-
mtr: unable to get raw sockets.:当前用户无权创建原始套接字。解决:加sudo,或给二进制文件加能力:sudo setcap cap_net_raw+ep /usr/bin/mtr(比始终用sudo更安全) -
mtr: Failure to open IPv6 socket.:系统禁用了 IPv6 或模块未加载。临时关 IPv6:echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6,或加--no-ipv6参数启动 - 输出全是
HOP但没数据:可能是防火墙 DROP 了 ICMP 回包,检查本机iptables或nftables规则,特别是OUTPUT链是否限制了icmp - 结果中延迟忽高忽低(
StDev很大):不一定是丢包,可能是路径发生了 ECMP 切换,或中间设备 QoS 策略导致;此时重点看Loss%是否稳定为 0
真正难判断的是跨运营商线路(比如电信用户访问联通托管的网站),mtr 会在网间互联点出现规律性丢包或延迟毛刺,这种往往不是你能解决的,但至少能说清责任边界——别花半天调自己服务器,结果问题是对方 BGP 路由策略写的太糙。









