4. 网络层故障(上):IP地址冲突、子网掩码配置错误、默认网关不可达
网络层,说白了就是数据包的「导航系统」。IP地址是门牌号,子网掩码是小区范围,默认网关是出小区的路口。这三个东西任何一个出问题,你的数据包就送不出去。
我干网络这十几年,遇到最多的故障就集中在这三个点上。今天咱们一个一个掰开揉碎了讲。
4.1 IP地址冲突
IP地址冲突,就是局域网里两台设备用了同一个IP。交换机不报错,路由器也不报错,但网络就是断断续续的。
4.1.1 为什么会冲突?
原因其实就三种:
- 手动配置撞车 —— 有人手贱设了静态IP,正好跟DHCP地址池里的地址一样。
- DHCP地址池耗尽 —— 新设备接入时没地址可分配,有人就手动填了一个,结果撞了。
- 虚拟机/容器漂移 —— 我遇到过最坑的一次,是VMware的虚拟机克隆后没重置网卡MAC,导致IP冲突。查了两小时。
4.1.2 排查方法
我个人习惯按这个顺序来:
- 看现象 —— 先问用户:是刚开机就这样,还是用着用着突然断的?刚开机一般是静态IP冲突,用着断一般是DHCP续租冲突。
- 查ARP表 —— 在网关或核心交换机上执行
arp -a,看目标IP对应了几个MAC地址。两个MAC就是冲突。 - 抓包确认 —— 在冲突的设备上抓ARP包。正常ARP应答只有一个,冲突时你会看到两个不同的MAC轮流应答。
实战命令:
# Windows 查看ARP表
arp -a
# 持续监听ARP冲突(需要管理员权限)
arp -s 192.168.1.100 00-11-22-33-44-55
# Linux 查看ARP表
ip neigh show
# 抓ARP包
tcpdump -i eth0 arp and host 192.168.1.100
4.1.3 怎么解决?
分情况处理:
| 场景 | 操作 |
|---|---|
| 静态IP冲突 | 找到冲突的设备,改成一个没被占用的IP。建议用 ping 先测试一下目标IP是否通。 |
| DHCP冲突 | 在DHCP服务器上查租约记录,找到冲突的MAC,释放租约或排除该地址。 |
| 虚拟机克隆 | 重新生成MAC地址,或者手动指定一个不冲突的IP。 |
我的经验: 我曾经在一个200人的办公室里排查IP冲突,最后发现是某位同事的无线打印机用了静态IP,正好跟新来的实习生电脑的DHCP地址撞了。从那以后,我要求所有打印机、服务器都用DHCP静态绑定,别手动配。
4.2 子网掩码配置错误
子网掩码这东西,很多人配完就不管了。但你知道吗?掩码错一位,整个网络就废了。
举个例子:IP是 192.168.1.10,掩码是 255.255.255.0,那它认为自己在 192.168.1.0/24 这个网段里。如果掩码错写成 255.255.0.0,它就会认为 192.168.0.0/16 都是本地网络,发数据包时直接ARP广播,不找网关。
4.2.1 典型症状
- 能ping通同网段,但ping不通网关 —— 这是最常见的。因为掩码算错了,设备认为网关不在同一个网段,所以不发ARP请求,直接丢包。
- 能上网,但很慢 —— 掩码配大了,设备以为很多IP都在本地,发大量ARP广播,交换机CPU飙升。
- 完全不能上网 —— 掩码配小了,设备认为网关不在本地,也不在默认路由范围内,直接丢弃。
4.2.2 排查方法
我一般三步走:
- 看IP配置 ——
ipconfig /all(Windows)或ip addr show(Linux),确认掩码值。 - 算网段 —— 用脑子算或者用计算器。把IP和掩码做与运算,看结果是不是跟网关地址在同一网段。
- 对比正常设备 —— 找一台能正常上网的设备,对比它的掩码。很多时候就是抄错了。
快速验证命令:
# Windows 查看详细IP信息
ipconfig /all
# Linux 查看IP和掩码
ip addr show
# 手动计算网段(以192.168.1.10/24为例)
# IP: 192.168.1.10 -> 11000000.10101000.00000001.00001010
# 掩码: 255.255.255.0 -> 11111111.11111111.11111111.00000000
# 网段: 192.168.1.0 -> 11000000.10101000.00000001.00000000
4.2.3 怎么修?
说白了就一句话:改成正确的掩码。但要注意:
- 如果是DHCP分配的,检查DHCP作用域的掩码设置。
- 如果是静态配置的,直接改网卡属性。
- 如果是路由器接口的掩码配错了,那影响面就大了,整个网段都可能不通。
注意: 改掩码前一定要确认新掩码不会导致IP地址越界。比如 192.168.1.10/24 改成 /23 没问题,但改成 /25 的话,这个IP可能就不在原来的网段里了。
4.3 默认网关不可达
默认网关,就是设备出局上网的「大门」。门关了,你就只能在内网转悠。
我记得有一次,整个办公室突然上不了外网,但内网文件服务器访问正常。我第一反应就是网关挂了。结果一查,网关设备正常运行,是交换机上连网关的端口被误关了。
4.3.1 为什么会不可达?
原因很多,我列几个常见的:
- 网关设备宕机 —— 路由器、防火墙死机或重启。
- 链路故障 —— 网线断了、光模块坏了、交换机端口down了。
- ARP问题 —— 网关的MAC地址在ARP表里过期了,或者被错误地解析到了别的设备。
- 路由问题 —— 网关设备本身的上行链路断了,或者路由表被清空了。
- ACL/QoS限制 —— 有人配了访问控制列表,把某些IP的流量给拦了。
4.3.2 排查步骤
我个人的排查顺序是这样的:
- 先ping网关IP —— 不通?那问题就在本机到网关之间。通?那问题可能在网关的上行链路。
- 查ARP表 ——
arp -a | grep 网关IP,看有没有对应的MAC地址。没有?说明ARP解析失败。 - 查路由表 ——
route print(Windows)或ip route show(Linux),确认默认路由存在且指向正确的网关。 - 查网关设备 —— 登录网关,ping外网(比如8.8.8.8),确认网关本身能不能上网。
- 查物理链路 —— 看交换机端口指示灯,看网线是否松动,看光模块收发光功率是否正常。
常用命令:
# 测试到网关的连通性
ping 192.168.1.1
# 查看ARP表
arp -a
# Windows查看路由表
route print
# Linux查看路由表
ip route show
# 跟踪路由路径
tracert 8.8.8.8 # Windows
traceroute 8.8.8.8 # Linux
4.3.3 解决方案
| 故障原因 | 解决方法 |
|---|---|
| 网关设备宕机 | 重启网关设备,检查电源和硬件状态。 |
| 链路故障 | 更换网线、光模块,检查交换机端口配置(是否被shutdown)。 |
| ARP问题 | 清除ARP缓存:arp -d 网关IP,然后重新ping触发ARP解析。 |
| 路由问题 | 检查网关设备的路由表,添加或修正默认路由。 |
| ACL限制 | 检查网关设备的访问控制列表,放行被拦截的流量。 |
避坑指南: 我曾经遇到一个案例,网关能ping通,但就是上不了网。查了半天,发现是网关设备的NAT配置被误删了。所以,ping通网关不代表网关能帮你转发数据,还要检查NAT、路由转发等功能是否正常。
4.4 知识体系总览
下面这张图,把这三个故障的关系和排查路径串起来了。你保存下来,遇到问题对着走一遍,基本能解决80%的网络层故障。
4.5 小结
网络层这三个故障,说白了就是「你是谁、你在哪、你找谁」的问题。IP地址冲突是「你是谁」搞混了,子网掩码是「你在哪」算错了,默认网关是「你找谁」找不到了。
排查的时候,别慌。先看症状,再查配置,最后动手修。我见过太多人一上来就重启设备,结果问题没解决,还把正常业务给断了。
嗯,今天就到这儿。记住这张图,下次遇到网络层故障,你心里就有底了。