网络故障排查
把「网络不通 / 慢 / 断」这类模糊现象,收敛成可复现、可定位、可复盘的排查动作链。本技能给出从分层定位、三板斧命令、抓包分析到典型故障处置的完整可执行方法,并附诊断命令集与解析脚本。
一、核心原理:分层排查法
网络故障定位的核心是缩小故障域。按 OSI 七层自底向上逐层确认,或按「端到端路径」二分切割,任何一层没通过就锁定在该层往下钻。
flowchart TD
S[故障现象:不通/慢/断] --> L1[L1 物理层<br/>链路 up? 光功率? 错误计数?]
L1 -->|正常| L2[L2 数据链路层<br/>ARP? MAC? STP? VLAN?]
L2 -->|正常| L3[L3 网络层<br/>IP/路由/MTU/ACL]
L3 -->|正常| L4[L4 传输层<br/>端口/防火墙/NAT/MTU黑洞]
L4 -->|正常| L7[L7 应用层<br/>DNS/证书/应用配置]
L1 -->|异常| F1[修链路/换光模块/查线缆]
L2 -->|异常| F2[查STP环路/ARP表/VLAN]
L3 -->|异常| F3[查路由表/ACL/MTU]
L4 -->|异常| F4[查防火墙策略/NAT/分片]
L7 -->|异常| F5[查DNS/证书/应用]
三板斧分工:
- ping:验证三层连通性与 RTT,-s 指定包长探测 MTU 黑洞。
- traceroute:逐跳定位在哪一跳丢包或绕路,星号 * * * 不一定是故障(可能是中间设备不回 ICMP)。
- 抓包:tcpdump/wireshark 看真实报文,回答「到底发没发、发到哪、回没回」。
> 口诀:先看链路,再查邻居(ARP),后验路由,最后抓包。90% 的「网络不通」卡在前三步。
二、参考排查拓扑
flowchart LR
PC1[PC-1<br/>10.10.1.10/24] --> SW1[Access-1<br/>VLAN10 网关]
SW1 --> SW2[Core-1<br/>OSPF Area0]
SW2 --> RT[出口路由器<br/>NAT/FW]
RT --> INET[互联网/远端]
SW1 --> SW3[Core-2]
SW2 --> SW3
配套 ASCII 路径图(用于画故障路径、标故障点):
PC-1(10.10.1.10) ──► SW1(Access) ──► SW2(Core) ──► RT(出口) ──► Internet
│ │ │ │
L1/L2 L2 L3 L3/L4/NAT
ping 网关 MAC/STP OSPF/路由表 ACL/NAT/MTU
三、关键决策表(现象→排查层→首要命令)
| 现象 | 最可能故障层 | 首要诊断命令 | 依据/常见错误 |
|---|---|---|---|
| 链路 down,接口不亮 | L1 物理层 | show interface status / display interface |
光模块收发反接、光衰过大(收光<-12dBm 告警) |
| 本网段 ping 不通 | L2 数据链路层 | show arp / arp -a |
ARP 未学到,MAC 表错误或端口隔离 |
| 跨网段不通,同段通 | L3 网络层 | show ip route / display ip routing-table |
缺路由、下一跳不可达、ACL 拦截 |
| traceroute 某跳后全星号 | L3/L4 | 抓包看 TTL 与 ICMP | 中间设备不回 ICMP 超时,未必故障 |
| 大包丢、小包通 | MTU 黑洞 | ping -s 1473 -M do |
路径 MTU 小于 1500,ICMP 需分片被丢弃 |
| 时延忽高、偶发丢包 | L2 环路/拥塞 | show spanning-tree / 抓包看广播风暴 |
环路导致广播风暴、CPU 打满 |
| 端口有 CRC/错包 | L1 物理层 | show interface counters errors |
线缆、光模块脏污或速率双工不匹配 |
> 阈值速查:光模块收光功率建议 -3~-12dBm;CRC 错误应持续为 0(非零即查链路);RTT 跨一跳 LAN 应 <1ms,WAN 按距离估算(每 1000km 约 5ms 单向)。
四、分步 SOP
- 确认范围与时间线:记录故障影响哪些主机/网段、从何时开始、有无变更(变更关联是头号线索)。
- L1 查链路:
show interface status看 up/down、速率双工;display transceiver看收发光功率。 - L2 查邻居与环路:
show arp、show mac address-table、show spanning-tree,排查环路与 VLAN 不一致。 - L3 查路由与过滤:
show ip route、traceroute、show access-lists,确认转发路径与 ACL。 - 抓包验证:在故障点两侧同时
tcpdump,比对「发送端发出、接收端是否收到、是否回包」。 - 修复与回归:单点改动、灰度验证、回写监控与文档。
五、真实配置/诊断命令示例
华为 CloudEngine / VRP 诊断命令
# 查接口与光模块状态
display interface brief
display interface 10GE1/0/1
display transceiver interface 10GE1/0/1 verbose
# 查 MAC / ARP / 路由
display mac-address vlan 10
display arp
display ip routing-table
# 查 STP 环路
display stp brief
display stp abnormal-interface
思科 IOS-XE 诊断命令
show interface status
show interface GigabitEthernet1/0/1
show interfaces transceiver detail
show mac address-table vlan 10
show ip arp
show ip route
show spanning-tree vlan 10
show interfaces counters errors
Linux 抓包三板斧
# 抓 ICMP 与 TCP 握手
tcpdump -i eth0 -nn icmp
tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
# 抓某主机、写文件
tcpdump -i eth0 -nn host 10.10.1.10 -w /tmp/cap.pcap -c 1000
# MTU 探测(不分片,逐包长测试)
ping -c 3 -M do -s 1472 10.10.1.1 # 1500 MTU 下最大 payload=1472
六、验证方法
| 检查项 | 达标阈值 | 命令 |
|---|---|---|
| 连通性 | 丢包率 0%,RTT 稳定 | ping -c 100 <target> |
| 路径正确 | 跳数/路径与设计一致 | traceroute -n <target> |
| MTU 一致性 | 1472 通、1473 断(1500 MTU) | ping -M do -s 1473 <target> |
| 错包计数 | CRC/错误 = 0 | show interfaces counters errors |
| 光功率 | 收光 -3~-12 dBm | show interfaces transceiver detail |
| STP 状态 | 无 blocked 异常端口、无拓扑变更风暴 | show spanning-tree vlan 10 |
七、常见故障排查表
| 现象 | 根因方向 | 首要动作 |
|---|---|---|
| ping 网关不通,链路 up | ARP 未学到 / 端口被隔离 | show arp,查端口是否 port-isolate |
| 跨网段不通 | 缺路由 / 下一跳不可达 / ACL | show ip route,逐跳 traceroute |
| 大包丢、小包通 | MTU 黑洞(路径 MTU <1500) | ping -M do -s 1473 定位,调整 MTU 或开 MSS clamp |
| 广播风暴、CPU 高 | 二层环路 | show spanning-tree,找环、开 BPDU guard |
| traceroute 全星号 | 中间设备不回 ICMP | 抓包看 TTL 超时,星号≠故障 |
| 时延偶发尖峰 | 拥塞/微突发/环路 | 抓包 + 队列计数,查 show queue |
| OSPF 邻居 down | 区域不一致/MTU 不匹配/认证 | show ip ospf neighbor,比对 hello 参数 |
八、输出规范
交付时应产出:故障时间线与影响范围、逐层排查记录(L1→L7 结论)、抓包关键报文解读、根因与修复动作、回归验证结果、预防措施(监控/变更关联)。
九、边界与风险
- 抓包涉及敏感数据,需合规授权,脱敏后归档。
traceroute星号常被误判为故障,需抓包佐证。- 生产环境操作(清 MAC、重启端口、改 STP)需变更窗口,避免二次故障。
- 诊断命令为量级参考,具体以设备型号/软件版本为准,不承诺跨厂商命令完全一致。
配套资源
- 诊断命令集:
references/diagnostic-commands.md - 故障案例库:
references/troubleshooting-cases.md - 数据基线:
assets/fault-symptom-command.csv - 诊断模板:
assets/diagnostic-template.txt - 脚本:
scripts/diag_output_parser.py(诊断命令输出解析) - 配套检查清单:《网络故障排查清单》