mtr 是什么
mtr 把 traceroute 与 ping 合到一起:持续向路径上的每一跳发包,统计各跳的丢包率与延迟分布,最后以表格形式呈现。相比一次性探测的 traceroute,它能看出「丢包是持续的偶发还是稳定存在」,因此判断「从哪一跳开始丢」这件事,mtr 的结论比单次探测可靠得多。脚本里要用报表模式并限制轮数。
基本信息
| 用途 | 逐跳持续统计丢包率与延迟分布 |
|---|---|
| 语法 | mtr [选项] 目标;-r 报表模式,-c 轮数,-n 不反解,-w 宽格式 |
| 所属软件包 | mtr(部分发行版需要单独安装) |
| 权限说明 | 常规 ICMP 模式普通用户即可,TCP 模式与自定义间隔可能需要 root |
典型使用场景
- 链路质量定位:确认丢包从哪一跳开始出现,缩小范围后再找责任方
- 跨网访问抖动:观察延迟的标准差,判断链路是否稳定
- 云环境路由核对:确认流量路径与设计的一致性与稳定性
- 工单举证:报表模式输出稳定可复现的证据,便于提交给运营商
- 切换前后对比:变更路由或链路后,用同样的参数重跑一次做对比
常用示例
常用示例
mtr -rnc 20 8.8.8.8 # 报表模式,20 轮,不反解
mtr -rwzc 50 10.1.1.5 # 宽格式并显示自治域信息
mtr -r -c 30 -i 1 -n target # 每 1 秒一轮,共 30 轮
mtr --tcp --port 443 target # TCP 探测(部分版本支持)
mtr -rw -c 20 target # 宽格式,地址列不易被截断
mtr -r -c 20 target > /tmp/mtr-$(date +%F).txt # 留档报表列读法
| 列 | 含义 | 怎么看 |
|---|---|---|
| Loss% | 该跳的丢包率 | 从某跳开始持续偏高才是链路问题 |
| Snt | 已发送探测包数 | 与轮数对应,确认统计样本足够 |
| Last / Avg | 最近与平均延迟 | Avg 适合作为该跳的基准值 |
| Best / Wrst | 最好与最差延迟 | 差距大说明该跳存在排队或抖动 |
| StDev | 延迟标准差 | 数值大表示不稳定,比平均值更能反映体验 |
| Host | 该跳地址与名称 | 加 -n 显示为纯 IP,加 -z 会带自治域 |
丢包的判读有两条经验:丢包从某一跳开始出现且后续各跳保持同水平,说明问题在该跳或它之前;只有个别中间跳丢包而后续跳正常,多半是该路由器对探测流量做了限速,不代表数据面有问题。
mtr 默认会持续运行,在脚本或工单场景里必须用 -c 限制轮数,否则命令不会返回,排查时间也会被浪费在等待上。