Linux如何使用mtr网络诊断_Linux mtr网络诊断指南

胖强同学_4474

胖强同学_4474

2026-04-07

427人浏览

原创

必须加 -r -c 20 -n -4 参数组合才能可靠诊断链路问题:-r 输出统计结果而非交互界面,-c 20 每跳发20包避免偶然性,-n 跳过dns解析防卡顿,-4 强制ipv4避双栈干扰。

linux如何使用mtr网络诊断_linux mtr网络诊断指南

直接用 mtr 能看到链路中哪一跳开始丢包或延迟突增,比 ping 和 traceroute 单次探测更可靠;但默认交互式运行、不加参数容易误判,尤其在目标屏蔽 ICMP 或存在多出口时。

为什么不能直接跑 mtr www.example.com 就完事

默认交互模式下,mtr 会持续发包、实时刷新界面,无法保存结果,也不适合脚本调用。更关键的是:它默认做反向 DNS 解析,遇到中间节点不响应 PTR 记录时会卡顿数秒,导致首几跳显示为 ??? 或延迟虚高;同时没限定发包次数,你可能只看了前 5 秒就关掉,而问题节点恰好在第 12 跳才暴露。

  • 必须加 -r(report 模式)或 --report 才能一次性输出统计结果
  • 搭配 -c 指定发包总数,比如 -c 20 表示每跳发 20 个包,避免偶然抖动干扰判断
  • 强烈建议加 -n(no-dns),跳过域名解析,让结果更快更稳
  • 若目标明确走 IPv4,显式加 -4,避免双栈环境下因 IPv6 路由异常导致误报

mtr -r -c 20 -n -4 这组参数组合的实际效果

这是生产环境排查最常用的组合,对应一次干净、可复现、可归档的链路诊断:

  • -r:退出后直接打印汇总表格,不进入交互界面
  • -c 20:每跳发送 20 个探测包,足够覆盖常见波动,又不会拖太久(通常 20 秒内完成)
  • -n:所有节点只显示 IP,不查 PTR,避免卡顿和解析失败干扰
  • -4:强制走 IPv4,绕过本地 IPv6 配置错误或运营商 IPv6 路由缺失的问题

执行示例:sudo mtr -r -c 20 -n -4 example.com。注意:普通用户需 sudo,因为原始 ICMP 探测需要 cap_net_raw 权限。

遇到丢包集中在某跳,但不是目标服务器时怎么定位

看 Loss% 列:如果从第 5 跳开始持续 100% 丢包,而第 4 跳仍为 0%,说明问题不在你本地网络,极大概率是第 5 跳设备(通常是上层运营商路由器)策略性丢弃 ICMP —— 这很常见,不代表真实业务不通。

  • 先确认目标端口是否可达:telnet example.com 443 或 curl -I https://example.com,验证 TCP 层是否正常
  • 若 TCP 可通但 mtr 显示丢包,基本可判定是中间节点禁 ICMP,无需深究该跳
  • 若丢包出现在最后 1–2 跳(即目标服务器自身或其直连网关),且 curl 也超时,则问题大概率在目标侧:检查其防火墙、安全组、负载均衡健康检查配置
  • 不要只看 Loss%,同步观察 StDev(标准差):值 > 50ms 说明该跳延迟极不稳定,即使丢包率低,也可能导致重传和业务卡顿

当目标服务器屏蔽 ICMP,mtr 全程无响应怎么办

部分云厂商或企业防火墙默认 DROP 所有 ICMP,此时 mtr 会显示全跳 ??? 或 ??? + 高延迟,实际链路可能是通的。这时要换探测方式:

  • 用 --tcp 参数改发 TCP SYN 包(需 root):sudo mtr --tcp -P 443 -r -c 20 -n example.com,模拟 HTTPS 端口探测
  • -P 443 指定目标端口,避免被中间设备无差别拦截
  • 注意:--tcp 在较老版本 mtr(如 CentOS 7 自带)中不可用,需升级到 mtr 0.93+;Ubuntu 22.04+/Debian 12+ 默认支持
  • 若连 TCP 模式也无效,说明目标端口被封或路由完全中断,应转向检查 DNS 解析、本地路由表(ip route get example.com)、以及是否被本地 iptables/nftables 拦截

真正难搞的不是丢包本身,而是丢包发生在“看起来正常”的节点上——比如某跳 Loss% 是 2%,但 StDev 高达 200ms,这种抖动型问题在交互式界面里一闪而过,只有加 -c 固定轮次 + -r 输出才能抓住。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3563

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

795

4

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5547

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2408

6

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5410

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4010

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3433

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2593

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6310

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习