子网间无法通信的根本原因是网络层与数据链路层协同机制失效:设备判定目标非本地子网,又无有效三层路由路径。排查需从三层路由能力、二层可达性、配置一致性三层面入手,依次验证子网划分是否真实生效、三层设备路由表是否含直连路由、ARP及ICMP通路是否完整,并排除防火墙、VLAN错配等干扰因素。

子网之间无法互相通信,不是简单一句“IP不同”就能解释的。根本问题在于网络层和数据链路层的协同机制被打破——设备判断目标不在本地子网,又没有正确路径把数据送出去。排查要从三层路由能力、二层可达性、配置一致性三个层面入手。
确认子网划分是否真正生效
先验证两台设备是否真的属于不同子网。用各自终端执行 ipconfig(Windows) 或 ip addr show(Linux),分别计算网络地址:
- 拿 IP 和子网掩码做“与”运算,例如 192.168.5.20/24 → 网络地址是 192.168.5.0;192.168.6.30/24 → 网络地址是 192.168.6.0
- 若结果不同,说明确属不同子网;若相同,问题不在子网划分,而是其他隔离机制(如VLAN、防火墙)在起作用
- 特别注意:子网掩码不一致会导致误判。A机用 /24,B机用 /16,哪怕IP都在 192.168.1.x 段,A会认为B在远程网,B却认为A在本地网
检查三层路由是否就绪
子网间通信必须依赖路由器或三层交换机转发。没有它,数据包发不出去。
- 确认两端设备的默认网关是否指向同一台三层设备(如三层交换机的SVI接口或路由器物理接口)
- 登录该三层设备,运行 show ip route(Cisco)或 ip route show(Linux),查看是否已有两条直连子网路由(Connected)
- 若缺少某条直连路由,检查对应VLAN接口(SVI)是否已启用、是否配置了正确IP(即该子网的网关地址)、物理端口是否属于对应VLAN
验证ARP与ICMP通路是否完整
即使路由表正确,如果中间环节卡在二层,ping仍会失败。
- 在源主机上执行 arp -a | grep 目标网关IP,确认能解析出网关MAC;若显示 incomplete,说明到网关的ARP不通
- 在源主机上 ping 网关IP,成功再 ping 目标子网内某台主机IP;若前者通后者不通,说明跨子网转发未生效或目标主机响应异常
- 登录网关设备,在接口上抓包(如 tcpdump -i vlan10 icmp),确认是否收到源主机发来的ICMP请求、是否发出应答——这能区分问题是出在入向还是出向
排除常见干扰因素
有些配置看似无关,实则直接阻断通信。
- 防火墙策略:三层设备或主机系统防火墙可能默认丢弃非本子网来的ICMP或转发流量,需临时关闭或添加放行规则
- VLAN错配:若子网通过不同VLAN承载,确保各VLAN接口已绑定正确物理端口,且三层设备上VLAN间路由已全局启用(如 ip routing)
- Docker或虚拟环境:宿主机与容器、容器与容器之间若使用自定义网络,需确认 docker network inspect 显示的 subnet 不与物理网段重叠,且容器默认网关指向该网络网关

















