云服务器访问时快时慢,SSH登录卡顿,应用接口偶发超时,这类问题十有八九和网络链路质量有关。单靠ping只能看到端到端的整体表现,traceroute也只能拿到某一时刻的静态路径,两者都无法回答最关键的问题:丢包到底发生在哪一跳。mtr正好补上了这个空缺,它一边持续追踪路由路径,一边对每一跳发送探测包并统计丢包与延迟,是排查云服务器网络问题的首选工具。这篇文章将从安装、使用、报告解读到实战排查,完整讲一遍mtr的操作流程。

mtr的工作原理与探测模式选择
mtr的全称是My Traceroute,它的工作原理基于IP报文的TTL字段。探测包发出时TTL从1开始递增,当报文到达第N跳路由器时TTL归零,路由器会丢弃该报文并回送一个ICMP超时消息,mtr据此识别出路径上的每一跳设备,同时对每个节点持续统计往返时间和丢包情况。与traceroute一次性探测不同,mtr是动态刷新的,默认每秒发一包,运行越久统计结果越可信。
mtr支持三种探测模式。默认使用ICMP协议,也就是ping所用的协议,兼容性最好,绝大多数中间路由都会响应;如果云服务器或中间链路屏蔽了ICMP,可以切换到TCP模式并指定端口,比如探测80或443端口,这能判断业务端口的真实连通质量;还有UDP模式,部分系统对UDP响应有限制,实际使用较少。选对模式很关键,如果ICMP模式显示中间某跳丢包,换TCP模式后一切正常,说明丢包很可能是路由器对ICMP限速造成的假象,而非真实故障。
安装与常用命令详解
主流Linux发行版都可以直接通过包管理器安装。Debian和Ubuntu系统建议安装mtr-tiny这个轻量版本,CentOS和Rocky Linux使用yum或dnf安装mtr包。macOS用户通过Homebrew安装即可。
# Ubuntu / Debian apt install -y mtr-tiny # CentOS / Rocky Linux yum install -y mtr # macOS brew install mtr # 基本用法:持续探测目标,动态刷新 mtr 47.98.xxx.xxx # 报告模式:发送100个包后输出汇总结果并退出 mtr -r -c 100 47.98.xxx.xxx # TCP模式探测云服务器443端口 mtr -T -P 443 -c 100 47.98.xxx.xxx # 不做DNS反解析,显示IP和ASN归属,加快速度 mtr -n -z -b -r -c 100 47.98.xxx.xxx
几个关键参数需要掌握。-r是报告模式,跑完自动退出,适合把结果贴到工单里;-c指定发包数量,排查问题时建议至少100个,统计才有意义;-T配合-P用TCP探测指定端口;-n禁用域名反解析,避免DNS慢导致误判;-z显示每一跳的AS号,能看出节点属于哪家运营商或云厂商,判断责任边界时非常有用。
另外提醒一点,Linux下普通用户运行mtr可能报权限错误,因为修改TTL需要raw socket权限,加sudo或直接用root执行即可。
报告逐列解读:如何区分真丢包与假丢包
一份典型报告长这样,先认识每一列的含义。
HOST: local Loss% Snt Last Avg Best Wrst StDev 1. 192.168.1.1 0.0% 100 1.2 1.4 0.9 8.1 0.7 2. 100.68.0.1 0.0% 100 9.8 10.2 8.7 25.3 2.4 3. 219.158.33.9 3.0% 100 14.1 15.0 12.2 46.8 5.6 4. 47.98.xxx.xxx 0.0% 100 18.6 18.9 17.5 23.0 1.1
Loss%是丢包率,Snt是已发送的包数,Last是最近一次延迟,Avg、Best、Wrst分别是平均、最小和最大延迟,StDev是标准差。StDev反映延迟抖动程度,数值越大说明链路越不稳定,即使平均延迟不高,StDev很高时用户体感也会明显卡顿,这一列容易被忽视但很值得看。
解读报告最核心的技巧是判断丢包的真实性。中间路由器为了保护自身CPU,经常对ICMP超时消息做限速,表现为某几跳显示丢包甚至100%丢包,但后面的节点全部正常。这种情况说明该路由器只是不回ICMP,转发业务是正常的,属于假丢包。真正的丢包有一个明显特征:从某一跳开始丢包,并且之后的所有节点包括最终目标都持续丢包。简单记一个原则,看最后一跳,目标节点丢包率接近0,中间的丢包基本可以忽略;目标节点也丢包,就从第一个开始丢包的节点往后定位。
延迟方面还要注意合理的跳变规律。跨运营商互联或跨地域时延迟逐级增加属于正常现象,如果某跳延迟突然从15ms飙到200ms以上并持续到终点,这个节点就要重点怀疑,结合-z参数的AS号信息,能初步判断是本地运营商、骨干网还是云厂商侧的问题。
云服务器场景实战:双向诊断与责任定位
云服务器的网络路径要分两个方向看:从本机到服务器公网IP的方向,以及从服务器出来的方向。很多故障只在单方向出现,比如下载慢但上传正常。标准做法是双向各跑一份报告:在本机执行mtr -r -c 100 服务器IP,再登录服务器执行mtr -r -c 100 本机公网IP,对比两份结果,能准确锁定丢包发生的方向和链路段落。
拿到报告后按位置归类处理。丢包集中在前三跳,问题在本地网络或本地运营商接入侧,可以换网络环境验证;丢包出现在中间骨干网节点,且双向都存在,把mtr报告提交给云厂商工单,由他们对接运营商处理;丢包只在靠近服务器的最后几跳,大概率是云厂商机房侧问题,同样通过工单反馈。提交工单时附上-n -z -b参数的完整报告,包含时间点和探测包数,处理效率会高很多。
还有两个常见坑要注意。一是云服务器安全组默认可能不放行ICMP,表现为mtr最后一跳100%丢包但业务完全正常,这时先检查安全组规则,或者改用TCP模式探测业务端口再下结论。二是公网IP可能是共享出口,路径上出现多个相同IP的跳点是NAT设备的正常表现,不要误判为路由环路。排查网络问题时始终记住一个原则:先确认探测手段本身没被拦截,再去分析链路质量,结论才可靠。