网络故障排查:从ping到traceroute
排查思路:由近及远,逐层定位

1. ping:基础连通性检测
# 测试本机网络栈是否正常
ping 127.0.0.1
# 测试网关连通性(先查网关IP)
ip route | grep default
ping <网关IP>
# 测试外网连通性
ping 8.8.8.8
ping baidu.com
常见现象判断:
– Destination Host Unreachable:路由不可达,检查网关或路由表
– Request timed out:目标无响应,可能防火墙拦截或目标宕机
– 延迟高/丢包:链路质量差,检查带宽或中间设备
高级用法:
# 指定次数和间隔(避免无限ping)
ping -c 4 -i 0.2 8.8.8.8
# 检测MTU问题
ping -M do -s 1472 8.8.8.8 # 超过MTU会报错
2. traceroute:路径追踪
# Linux/macOS
traceroute -n 8.8.8.8 # -n 不解析域名,更快
# Windows
tracert -d 8.8.8.8
输出解读:
– * * *:该跳无响应(可能是设备禁ICMP或丢包)
– 延迟突增:该节点拥塞或链路切换
– 最后一跳超时但后面通:目标设备禁traceroute,正常
故障定位技巧:
– 如果前几跳正常,某跳后全超时 → 问题出在该跳或下一跳
– 如果第一跳就超时 → 检查本机防火墙或网卡
– 出现!H、!N等标记 → 见man page
3. 组合排查实战
场景:网页打不开,但能ping通
# 1. 先确认DNS解析
nslookup baidu.com
dig baidu.com
# 2. 检查端口连通性(telnet或nc)
telnet baidu.com 80
nc -zv baidu.com 80 # -z 只扫描不发送数据
# 3. 检查防火墙规则
iptables -L -n # 本机防火墙
# 中间防火墙用traceroute + 端口探测(mtr)
# 4. 综合工具:mtr(比单独ping+traceroute更直观)
mtr -n 8.8.8.8
# 实时显示每跳的丢包率和延迟
4. 快速诊断三板斧
# 一查本机
ip a | grep inet
ip route
ping 127.0.0.1
# 二查网关
ip route | grep default | awk '{print $3}' | xargs ping -c 2
# 三查出口
traceroute -n 8.8.8.8 | tail -5
记住: 能ping通≠服务正常(防火墙可能放行ICMP但封端口)。最稳妥的是从应用层往下查:先确认服务进程是否运行,再查端口,最后查网络层。
常用端口检测命令:
# 快速测试TCP端口
timeout 2 bash -c 'echo > /dev/tcp/baidu.com/80' && echo "open"
# SSH测试
ssh -v -p 22 user@host 2>&1 | grep "Connection established"
最后忠告: 别一上来就ping百度。先确认自己网络栈正常(ping 127.0.0.1和网关),否则查了半天发现是网线松了。
💻 安全运维 / Linux运维 / 渗透测试 技术支持
业务需求可联系博客作者
