4. 网络层故障排查:IP地址冲突、子网划分错误、路由协议配置与排障工具实战

各位好,我是老张。今天咱们聊聊网络层故障排查。说实话,网络层的问题往往是最让人头疼的——它不像物理层那样能直接看到线断了,也不像应用层那样报错信息明确。网络层的问题,很多时候是“能通但不能完全通”,或者“时通时不通”。我这些年处理过的网络故障里,至少有一半都卡在网络层。

好,咱们直接进入正题。这一章我打算从四个最常见的坑说起:IP地址冲突、子网划分错误、路由协议配置问题,以及两个最实用的排障工具——ping和traceroute。

核心思路:网络层故障排查,说白了就是回答三个问题——我的IP对不对?我的路由表对不对?数据包到底丢在哪了?

4.1 IP地址冲突诊断

IP地址冲突,这玩意儿我估计在座各位都遇到过。两台设备用了同一个IP,结果就是其中一台或者两台都上不了网。为什么会这样?因为交换机看到同一个MAC地址对应两个不同的端口,或者ARP表里同一个IP来回跳。

典型症状:

  • 电脑右下角弹出“IP地址冲突”提示(Windows系统常见)
  • 网络时断时续,ping一会儿通一会儿不通
  • ARP表里同一个IP对应多个MAC地址

排查步骤:

  1. 先看本地:在命令行输入 ipconfig /all(Windows)或 ifconfig(Linux),确认自己的IP、子网掩码、网关。
  2. 查ARP表:输入 arp -a,看看目标IP对应的MAC地址是不是变了。我遇到过好几次,同一个IP的MAC地址在几分钟内变了两次,那基本就是冲突了。
  3. 抓包确认:用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对不对,再看子网掩码对不对,然后看路由表对不对,最后用工具定位。

网络层故障排查知识体系 IP地址冲突 ARP表异常/提示冲突 子网划分错误 掩码不一致/网络号不同 路由协议错误 静态/OSPF/BGP配置错 排障工具 ping / traceroute 检查ARP表 抓包确认 计算网络号 检查掩码一致性 查看路由表 检查邻居状态 ping测试连通性 traceroute定位断点 排查顺序 IP配置 → 子网掩码 → 路由表 → 工具验证

好了,这一章的内容就到这儿。网络层的问题,说白了就是“地址”和“路径”的问题。地址错了,谁也救不了你;路径错了,数据包就到不了目的地。记住我今天说的这几个排查思路,下次遇到网络层故障,你至少知道从哪里下手。

可可精品资料库