一个顶俩的网络诊断工具,mtr 把 ping 和 traceroute 合二为一

一个顶俩的网络诊断工具,mtr 把 ping 和 traceroute 合二为一

traviscross/mtr 这个项目在 GitHub 上拿到了 3,234 Star:

正文顶部截图

README区域截图


网络出问题时,运维人员通常会先 ping 一下看通不通,再 traceroute 一下看卡在哪一跳。两套命令来回切,效率不高。

mtr 把这两个工具的活全干了,而且做得更细致。

mtr 全称 My TraceRoute,一个开源网络诊断工具,将 ping 和 traceroute 的功能合并到一个实时更新的界面里。它持续向目标主机发送探测包,逐跳统计丢包率和延迟,结果直观。


mtr 比 ping + traceroute 强在哪

单独用 ping,你只知道端到端是否可达,中间哪个节点出了问题无从得知。

单独用 traceroute,它只跑一次,ICMP 可能被中间路由器限速或丢弃,单次结果不可靠。

mtr 的做法是持续发包,对每一跳都积累统计样本。丢包率、平均延迟、最差延迟、标准差,全都有数据支撑。中间某跳显示丢包,不代表那个节点一定有问题,可能是该路由器配置了不响应 ICMP,但后续跳正常就说明流量仍在转发。

换句话说,mtr 给出的不是一次性快照,而是持续测量的统计结果。排查间歇性丢包或延迟抖动时,这个能力很有用。


三个平台都能用

Linux 上安装最简单:

sudo apt install mtr

macOS 通过 Homebrew:

brew install mtr

Windows 用户需要先安装 WSL(Windows Subsystem for Linux),然后在 WSL 里执行和 Linux 一样的安装命令。

也可以从源码编译:

./bootstrap.sh && ./configure && make

注意 mtr-packet 需要 root 权限才能访问原始套接字,安装后使用 sudo 运行即可。


典型使用场景

排查到某个网站访问慢:

mtr baidu.com

界面会实时刷新每一跳的延迟和丢包率。按 d 切换显示模式,按 n 启用 DNS 解析,按 jk 上下滚动。

如果是定位跨国线路问题,看哪一跳延迟突然飙升,基本就能判断是哪个运营商或者海底光缆的问题。

做日常巡检时,加 -r 参数输出报告模式,适合写入日志:

mtr -r baidu.com

-c 指定发包次数后自动退出:

mtr -r -c 100 baidu.com

几个实用参数

-i 控制发包间隔(默认 1 秒),加大间隔减少网络负担:

mtr -i 2 baidu.com

-s 指定 ping 包大小,用来测试 MTU 问题:

mtr -s 1400 baidu.com

-P 指定端口,用 TCP 探测代替 ICMP,有些节点会屏蔽 ICMP:

mtr -P 443 baidu.com

-u 改用 UDP 探测,同样是绕过 ICMP 限制的常用方法。


总结

mtr 属于那种不花哨但真正解决痛点的工具。它没有重新发明什么,只是把 ping 和 traceroute 两个基础工具的能力做了整合,但整合的方式让排障效率明显提升。

项目使用 GPL v2 协议开源,由 Travis Cross 维护。Bug 报告和补丁可以通过 GitHub 提交。

如果你日常需要排查网络问题,mtr 值得放在手边。出故障的时候,它会帮你省下不少时间。

posted @ 2026-06-05 11:11  小飞技术快餐  阅读(12)  评论(0)    收藏  举报