4. 网络层故障排查:IP地址冲突、子网划分错误、路由协议配置与排障工具实战
各位好,我是老张。今天咱们聊聊网络层故障排查。说实话,网络层的问题往往是最让人头疼的——它不像物理层那样能直接看到线断了,也不像应用层那样报错信息明确。网络层的问题,很多时候是“能通但不能完全通”,或者“时通时不通”。我这些年处理过的网络故障里,至少有一半都卡在网络层。
好,咱们直接进入正题。这一章我打算从四个最常见的坑说起:IP地址冲突、子网划分错误、路由协议配置问题,以及两个最实用的排障工具——ping和traceroute。
核心思路:网络层故障排查,说白了就是回答三个问题——我的IP对不对?我的路由表对不对?数据包到底丢在哪了?
4.1 IP地址冲突诊断
IP地址冲突,这玩意儿我估计在座各位都遇到过。两台设备用了同一个IP,结果就是其中一台或者两台都上不了网。为什么会这样?因为交换机看到同一个MAC地址对应两个不同的端口,或者ARP表里同一个IP来回跳。
典型症状:
- 电脑右下角弹出“IP地址冲突”提示(Windows系统常见)
- 网络时断时续,ping一会儿通一会儿不通
- ARP表里同一个IP对应多个MAC地址
排查步骤:
- 先看本地:在命令行输入
ipconfig /all(Windows)或ifconfig(Linux),确认自己的IP、子网掩码、网关。 - 查ARP表:输入
arp -a,看看目标IP对应的MAC地址是不是变了。我遇到过好几次,同一个IP的MAC地址在几分钟内变了两次,那基本就是冲突了。 - 抓包确认:用Wireshark抓ARP包,如果看到同一个IP发出两个不同的MAC地址的ARP应答,那就是冲突。
我的经验:有一次在客户现场,整个办公室的打印机都连不上。查了半天,发现是有人手动给笔记本设了一个静态IP,正好和打印机的IP一样。拔掉那台笔记本的网线,打印机立刻恢复。嗯,这种低级错误其实很常见。
避坑指南:我曾经见过一个极端案例——DHCP服务器配置了错误的地址池,导致它把同一个IP分配给了两台设备。所以,如果你用了DHCP,一定要检查地址池范围,别把保留地址和动态地址搞混了。
4.2 子网划分错误导致无法通信
子网划分错误,说白了就是两台设备以为自己在同一个网段,但实际上不在。或者反过来,它们以为不在同一个网段,但其实在。这会导致什么?该通信的通信不了,不该通信的反而能通。
举个例子:
设备A:IP 192.168.1.10,子网掩码 255.255.255.0
设备B:IP 192.168.1.20,子网掩码 255.255.255.128
你想想看,A认为网络号是192.168.1.0,B认为网络号是192.168.1.0还是192.168.1.128?这取决于B的视角。实际上,B的子网掩码是255.255.255.128,所以它认为网络号是192.168.1.0(因为10和20都在0-127范围内)。但A的子网掩码是255.255.255.0,它认为整个192.168.1.0/24都是它的网段。所以它们能通信吗?能,但仅限于某些情况。如果B的IP是192.168.1.130,那A就认为它在同一个网段,B却认为不在——这就出问题了。
排查方法:
- 用
ipconfig /all或ifconfig查看双方的子网掩码是否一致 - 手动计算网络号:IP地址和子网掩码做“与”运算
- 如果网络号不同,那它们必须通过路由器才能通信
记住一句话:子网掩码决定了“邻居”的范围。掩码越长,邻居越少;掩码越短,邻居越多。但别搞反了。
4.3 路由协议配置错误
路由协议配置错误,这个坑就大了。静态路由配错下一跳、动态路由协议邻居建立不起来、路由条目被错误地过滤掉……每一种都能让你排查到怀疑人生。
4.3.1 静态路由常见错误
静态路由其实很简单,就三个要素:目标网络、下一跳、出接口。但越简单的东西越容易出错。
典型错误:
- 下一跳写错:比如下一跳写成了对端设备的IP,但那个IP根本不可达
- 出接口写错:比如数据应该从G0/0/1出去,你却写了G0/0/2
- 目标网络写错:比如把192.168.2.0/24写成了192.168.2.0/25,导致部分地址不可达
排查命令:
# 查看路由表
show ip route
# 查看特定路由
show ip route 192.168.2.0
# 检查接口状态
show ip interface brief
我的习惯:配完静态路由后,我一般会先ping一下下一跳地址,确认它可达。然后再ping目标网络里的一个地址。如果第一步通、第二步不通,那问题大概率在路由条目本身。
4.3.2 动态路由协议常见错误
动态路由协议(比如OSPF、BGP)的配置错误就更复杂了。我挑几个最常见的说。
OSPF邻居建立失败:
- Hello间隔和Dead间隔不一致
- 区域ID不匹配
- 网络类型不匹配(比如一边是广播,一边是点对点)
- 认证密码不对
BGP邻居建立失败:
- AS号不匹配
- 更新源地址不对(没有用loopback接口建立邻居)
- TTL值太小(EBGP多跳时忘了配
ebgp-multihop)
我曾经踩过的坑:有一次OSPF邻居怎么也起不来,查了所有配置都没问题。最后发现是两端的MTU不一致——一边是1500,另一边是1492。OSPF的DD报文因为MTU问题被丢弃了。从那以后,我排查OSPF问题时一定会先检查MTU。
4.4 ping与traceroute工具实战
这两个工具,说白了就是网络工程师的“听诊器”。ping用来检查连通性,traceroute用来定位故障点。
4.4.1 ping的进阶用法
很多人用ping就是 ping 8.8.8.8,然后看通不通。但真正排查问题时,你得会用它的参数。
# 连续ping,看丢包率
ping -t 192.168.1.1 (Windows)
ping 192.168.1.1 (Linux,默认连续)
# 指定数据包大小,测试MTU问题
ping -l 1472 192.168.1.1 (Windows)
ping -s 1472 192.168.1.1 (Linux)
# 指定超时时间
ping -w 1000 192.168.1.1 (Windows,超时1秒)
实战技巧:
- 如果ping大包不通、小包通,那基本是MTU问题
- 如果ping时通时不通,可能是环路、ARP冲突或链路不稳定
- 如果ping网关通、但ping外网不通,问题在路由或NAT
4.4.2 traceroute的实战用法
traceroute(Windows下叫tracert)能告诉你数据包经过的每一跳。我最喜欢用它来定位“断在哪”。
# Windows
tracert 8.8.8.8
# Linux
traceroute 8.8.8.8
# 指定最大跳数
tracert -h 30 8.8.8.8
# 不解析域名,只显示IP(更快)
tracert -d 8.8.8.8
怎么看结果?
- 如果到某一跳之后全是
* * *,那问题大概率出在这一跳或它的下一跳 - 如果某一跳的延迟突然飙升(比如从1ms跳到200ms),那这一跳可能有拥塞
- 如果回程路径和去程路径不一样,别慌,这叫非对称路由,不一定有问题
我的经验:有一次客户说访问某个网站特别慢。我用traceroute一看,发现数据包绕了半个地球——从北京到上海,再到美国,然后又回到上海。明显是路由出了问题。后来发现是BGP路由被错误地导入了,导致最优路径没被选上。
知识体系总览
下面这张图是我自己画的,把网络层故障排查的核心逻辑串起来了。你排查的时候,就按这个顺序来:先看IP对不对,再看子网掩码对不对,然后看路由表对不对,最后用工具定位。
好了,这一章的内容就到这儿。网络层的问题,说白了就是“地址”和“路径”的问题。地址错了,谁也救不了你;路径错了,数据包就到不了目的地。记住我今天说的这几个排查思路,下次遇到网络层故障,你至少知道从哪里下手。
可可精品资料库