网络故障排查的第一步,通常是确认“能不能通”以及“在哪里断了”。Linux 提供了三个经典工具用于链路连通性和路径分析:ping、traceroute 和 mtr。它们各有侧重,配合使用可以快速定位网络问题。
1. ping —— 最基础的连通性检测ping 使用 ICMP 协议向目标主机发送回显请求,并等待应答,用来确认目标是否可达、延迟及丢包情况。
基本用法:
ping -c 4 192.168.1.1 # 发送4个包后自动停止
ping -c 10 -i 0.2 10.0.0.1 # 每个包间隔0.2秒(默认1秒)
输出会显示 icmp_seq、ttl 和 time,最后统计丢包率、平均 / 最大 / 最小延迟。ttl(生存时间)可以粗略判断经过了几个路由器(初始值减当前值)。
实用注意:
- 某些主机或网络设备可能禁用 ICMP 或限制速率,导致 ping 无响应但服务正常(如 HTTP 可达),此时需结合其他手段判断。
ping默认使用 IPv4,强制 IPv6 用ping6或ping -6。
2. traceroute —— 路由逐跳追踪traceroute 利用 IP 报文中的 TTL 字段,依次递增 TTL 值,让路径上每一跳路由器返回“超时”通知,从而揭示数据包到达目标所经过的网关序列。
基本用法:
traceroute www.example.com
traceroute -n 8.8.8.8 # 不进行DNS反向解析,加快显示
traceroute -I 8.8.8.8 # 使用ICMP代替默认的UDP(某些环境UDP被过滤)
典型输出显示每一跳的序号、路由器 IP、三次探测的延迟(或 表示无响应)。连续出现的 可能表示该跳路由器不回复(但可继续转发)或路径中断。
实用注意:
- 结果受网络对称性影响,回程路径可能与去程不同。
- 多次探测的时间差异可观察链路稳定性。
- 防火墙可能封堵
traceroute使用的 UDP 高端口或 ICMP,尝试更换探测方法(-I,-T使用 TCP SYN)能绕过部分限制。
3. mtr —— 动态路由诊断利器mtr(My TraceRoute)是 ping 和 traceroute 的有机结合体。它持续向目标发送探测包,并实时更新每一跳的丢包率和延迟统计,能更清晰地反映网络状况的动态变化。
基本用法:
mtr www.example.com
mtr -n -r -c 100 8.8.8.8 # 非交互模式,发送100个包后打印报告
交互界面中,每一跳会显示丢包率(Loss%)、平均/最好/最差延迟等,并随着时间刷新。如果某跳丢包率骤增且后续跳也受波及,通常表明该跳是问题点;若仅某跳丢包但后续正常,往往是该路由器的控制面限速,并不影响转发。
实用技巧:
mtr非常适合诊断间歇性丢包或延迟波动的问题,因为它持续收集数据,而非像traceroute只做单次快照。- 结合
-s(指定 ICMP 包大小)可测试路径 MTU 或大数据包表现。 - 报告模式下(
-r)可将结果输出到文件,方便存档或发送给上游 ISP 排查。
组合使用场景
在真实排障中,通常的顺序是:
- 先用
ping确认目标 IP 是否可达、有无丢包; - 若不通或延迟异常,用
traceroute快速查看路径经过哪些节点,找到断点或延迟增大的位置; - 若问题间歇性出现或需深入分析路径上某一跳的质量,使用
mtr做持续性监测,获取更详尽的统计数据。
这三个工具构成了 Linux 网络连通性测试的黄金三角,是运维工程师和开发者应熟练掌握的基础技能。