2、监测工具入门:Ping、Traceroute、MTR 的原理与实战用法
好,咱们正式开始动手了。
前面聊了那么多理论,什么时延、抖动、丢包率,听着挺唬人。但真到了排查问题的时候,你手里得有几把趁手的兵器。我个人习惯,不管多复杂的网络故障,永远是从三个最基础的工具开始:Ping、Traceroute 和 MTR。
这三个工具,说白了就是网络工程师的「望闻问切」。别嫌它们老,越老的东西越稳定,也越能说明问题。今天我就带你把它们的原理和实战用法彻底搞透。
2.1 Ping:最基础的连通性测试
Ping 大家都会用,但你真的懂它吗?
它的原理其实很简单:发送一个 ICMP Echo Request 报文给目标,目标收到后回复一个 ICMP Echo Reply。你这边计算一下发送和接收的时间差,就是 RTT(往返时延)。
嗯,这里要注意:Ping 测的是 端到端 的连通性和时延,但它不告诉你中间发生了什么。
- time:RTT 值,单位 ms。越小越好。
- TTL:生存时间。每经过一个路由器减1,减到0就丢弃。可以用来粗略判断跳数。
- 丢包率:如果出现连续丢包,基本可以断定链路有问题。
实战用法
我在项目中遇到过最典型的场景:客户说「网络卡」,我第一件事就是 Ping 网关和 Ping 公网 DNS(比如 114.114.114.114)。
如果 Ping 网关正常,但 Ping 公网丢包,那问题大概率出在上行链路或运营商侧。如果 Ping 网关都丢包,那你就得检查内网交换机或网线了。
# 持续 Ping,直到手动停止(Windows 默认 4 个包,Linux 默认无限)
ping -t 8.8.8.8
# 指定 Ping 次数(Linux)
ping -c 10 8.8.8.8
# 指定包大小,测试大包是否丢包(MTU 问题排查)
ping -l 1472 8.8.8.8
2.2 Traceroute:看清每一跳
Ping 只能告诉你「通不通」,但 Traceroute 能告诉你「怎么通的」。
它的原理有点意思:利用 TTL 超时 机制。它先发一个 TTL=1 的包,第一个路由器收到后 TTL 减为0,就会返回一个 ICMP Time Exceeded 报文。这样你就知道了第一跳的地址。然后 TTL=2,得到第二跳……以此类推,直到到达目标。
说白了,就是让沿途每个路由器都「自报家门」一次。
实战用法
我记得有一次,客户反馈访问某个海外站点特别慢。我用 Traceroute 一跑,发现数据包绕了大半个地球,中间有一跳在某个国家的节点上时延飙到了 300ms。这就很清楚了——不是我们内网的问题,是国际链路绕路了。
# Windows 下使用 tracert
tracert www.example.com
# Linux 下使用 traceroute(可能需要安装)
traceroute www.example.com
# 跳过 DNS 解析,只看 IP,速度更快
traceroute -n www.example.com
* * * 的情况。别慌,这不一定是丢包。很多运营商的路由器出于安全考虑,会 禁用 ICMP 回复。如果只有一两跳是星号,后面正常到达,那就没问题。如果连续多跳都是星号且最终超时,那才是真断了。
2.3 MTR:Ping 和 Traceroute 的合体进化
说实话,我平时用得最多的其实是 MTR。它把 Ping 和 Traceroute 的优点结合了——既能看路径,又能看每一跳的丢包率和时延统计。
MTR 的原理是:先像 Traceroute 一样发现路径,然后对 每一跳 持续发送 ICMP 包(默认),并统计每一跳的丢包率和时延变化。你想想看,这比单纯 Ping 一个目标要全面得多。
实战用法
我最喜欢 MTR 的一点是,它能帮你判断丢包到底发生在哪一跳。比如你 Ping 目标有 10% 丢包,但 MTR 显示中间某一跳丢包 10%,后续所有跳也都丢包 10%。那问题就出在那一跳上,而不是目标本身。
# 基本用法,持续运行,按 Ctrl+C 停止
mtr www.example.com
# 只跑 10 个包,自动出报告(适合脚本采集)
mtr -r -c 10 www.example.com
# 报告模式,显示 IP 而非域名
mtr -r -c 10 -n www.example.com
| 列名 | 含义 |
|---|---|
| Loss% | 该跳的丢包率。如果后续所有跳都跟着丢,说明问题出在这一跳。 |
| Snt | 已发送的包数量。 |
| Last | 最近一个包的 RTT。 |
| Avg | 平均 RTT。比 Last 更有参考价值。 |
| Best/Wrst | 最好/最差时延。看抖动就看这两列差距大不大。 |
| StDev | 标准差。数值越大,说明时延越不稳定,抖动越严重。 |
2.4 三个工具怎么选?
简单总结一下我的使用场景:
- 快速验证连通性:用 Ping,几秒钟出结果。
- 看路径走向:用 Traceroute,看看包是不是绕路了。
- 深度排查丢包和抖动:用 MTR,这是最有力的武器。
说白了,Ping 是「体检」,Traceroute 是「拍 X 光」,MTR 就是「CT 扫描」。日常工作中,我建议你从 MTR 入手,因为它一次给你三个工具的信息。但如果你手头没有 MTR(比如某些 Windows 环境),那就 Ping 和 Traceroute 搭配着用,也能解决大部分问题。
嗯,工具就这些。下一节我们聊聊怎么把这些工具采集到的数据,变成真正能指导优化的策略。