报错决定排查方向
ping 的输出不只是「通或不通」:不同报错分别指向本机、网关、路径与对端四个不同位置。把报错读懂能省掉大量盲抓包——sendmsg 类错误说明本机连包都发不出去;Unreachable 要区分本机无路由、网关回 ICMP 差错、直连网段 ARP 解析失败;Request timeout 才是包已上路或对端不应答;(DUP!) 与 Redirect 则分别暗示地址冲突与双网关。Linux 侧由 iputils 的 ping 打印这些文字,Windows 侧措辞不同但语义一致。
判读顺序
拿到一份 ping 输出,按三步读:先看有没有本机侧错误(sendmsg、Network is unreachable),这一类说明包没出门,方向是本机路由与网卡;再看 Unreachable 的定语,Host 指向直连网段与网关,Net 指向缺路由;最后看 timeout 的比例与规律,纯超时且对端业务端口正常,多半是对端禁 ICMP 或路径丢包。把这个顺序固定下来,比逐个词猜含义快得多。
输出关键字判读
| 输出 | 含义 | 指向 |
|---|---|---|
| Request timeout / 无回复 | 超时未收到 ICMP 回应 | 路径中丢包,或对端不回应 ICMP |
| Destination Host Unreachable | 直连网段 ARP 解析失败,或路由指向不可达主机 | 本机与网关的二三层问题 |
| Destination Net Unreachable | 路由表里没有对应网络 | 本机或中间设备缺路由 |
| Network is unreachable (sendmsg) | 本机没有可用路由,包根本没发出 | 本机路由表或接口处于 down 状态 |
| Time to live exceeded | TTL 归零,包死于环路 | 存在路由环路,或 traceroute 中的正常现象 |
| (DUP!) 重复回复 | 同一序号收到多个应答 | 双路径、ARP 冲突或中间设备镜像 |
| Redirect | 收到 ICMP 重定向报文 | 同链路存在更优下一跳,常见于双网关 |
| 100% packet loss | 一个应答都没收到 | 先排除本机侧错误,再查路径与对端策略 |
典型处置动作
- 出现本机侧 sendmsg 错误:先看 ip route 有没有默认路由,再看网卡与网关是否可达
- 出现 Host Unreachable 且目标是同网段:查 ip neigh 的状态与 VLAN 划分,不必往外网找原因
- 只有 timeout 无其他差错:用 nc 或 Test-NetConnection 测业务端口,确认对端是否只是屏蔽了 ICMP
- 出现 DUP 或 Redirect:查是否存在重复地址、双网关或链路环回,这类问题会让业务时通时断
- 偶发 TTL exceeded:结合 traceroute 与业务时段对照,确认是长临时路径变化还是稳定环路
一次拿到错误分类
一次拿到错误分类
ping -c 10 -W 1 10.0.0.5 2>&1 | grep -Ev '^PING|^$' | sort | uniq -c # 归类统计
ping -c 3 -W 1 -v 10.0.0.5 # -v 会打印更多 ICMP 差错细节
# 对端禁 ICMP 时改用 TCP 探测复核:
nc -zv 10.0.0.5 443 && echo PORT-OK「本机报错」与「对端不响应」是两类问题:sendmsg、Network is unreachable 属于本机(路由、接口),Request timeout 才是路径或对端。判读时先分清这两类再谈责任方。
Windows 防火墙默认阻止入站 ICMP 回显,很多主机 ping 不通但业务端口完好;跨平台对测时 PingSucceeded=False 不能直接等于网络不通。