mtr不是ping和traceroute的简单拼接,需按发行版选对包名(如ubuntu用mtr而非mtr-tiny)、必须用mtr -r -c n -n生成可存档报告,禁dns解析、指定源ip、优先icmp模式(-i)并结合loss%与延迟变化精准定位故障点。

mtr 不是 ping 和 traceroute 的简单拼接,装错包或参数用错,诊断结果基本没参考价值。
安装 mtr:先确认发行版,再选对包名
Linux 发行版默认不带 mtr,mtr: command not found 是最常见起点。但不同系统包名和功能差异大,不能统一用 apt install mtr 或 yum install mtr 了事:
- Debian/Ubuntu:用
sudo apt install mtr-tiny装轻量版(无--report),但自动化分析必须用sudo apt install mtr(含 ncurses 和报告模式) - CentOS 7:直接
sudo yum install mtr - CentOS 8+ / Rocky / AlmaLinux:先
sudo dnf install epel-release,再sudo dnf install mtr - Alpine:
apk add mtr - macOS:用
brew install mtr,注意 Homebrew 安装的版本默认需 root 权限才能发 ICMP 包
装完验证:mtr --version 能输出版本号,且 mtr --help | grep report 有结果,才算具备批量诊断能力。
mtr -r -c N:脚本里唯一该用的命令组合
交互式界面看着直观,但排查问题时你真正需要的是可复现、可存档、可对比的文本报告。别用 mtr example.com 直接回车——它卡在 ncurses 界面,没法重定向、没法进 CI 流水线。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
-r(或--report)必须和-c N配合使用,单独-r会卡住;-c 10表示发 10 个探测包,不是 10 秒 - 加
-n禁 DNS 反解:避免某跳 DNS 查询超时拖慢整行输出,或因 DNS 不稳导致结果失真 - 多网卡服务器务必加
-a IP指定源地址,否则可能走错出口路由,测的不是真实业务路径 - 示例:
mtr -r -c 20 -n -a 10.0.1.5 google.com > report.txt
看懂 Loss% 和延迟变化,而不是盯着 ???
mtr 输出里某跳显示 ??? 或丢包率 100%,不等于断了。华为/H3C 路由器、云厂商 SLB、骨干网设备普遍禁 ICMP echo reply,这是常态,不是故障。
- 关键判断依据是下一行:如果第 5 跳
Loss%为 100%,但第 6 跳Loss%回到 0%、Avg正常,且最终目标可达 → 第 5 跳只是“隐身”,跳过它继续看 - 真问题特征:从第 N 跳开始,
Loss%持续 ≥20%,且后续跳数Loss%同步上升(比如第 N 跳 25%,第 N+1 跳 40%,第 N+2 跳 60%)→ 故障点就在第 N 跳设备或其出向链路 - 延迟突增但丢包为 0?可能是中间节点开启深度包检测、QoS 限速、或缓存队列积压,重点查
Best/Avg差值(如Best 8ms / Avg 120ms)
ICMP 还是 UDP?优先用 -I 强制 ICMP
mtr 默认用 UDP 探测(类似 traceroute),但很多 IDC、防火墙、云平台会直接丢弃 UDP 类型的 traceroute 探测包,导致路径截断或误判。
- 加
-I(大写 i)强制用 ICMP echo request,穿透性更强,更接近真实业务流量行为(尤其 HTTP/HTTPS 流量本身不依赖 UDP 探测端口) - 注意:
-I需 root 权限,普通用户运行会报unable to get raw sockets,必须加sudo - 不要混用
-I和-T(TCP 模式):后者需指定端口(如-P 443),适用场景极窄,日常诊断反而增加干扰
复杂点在于:同一跳在 ICMP 模式下通,在 UDP 模式下断,说明对方做了协议级过滤;而两模式都断,才值得深入查路由或 ACL。这个区别,90% 的人第一次看 mtr 报告时会忽略。










