首页/网络/IP 与子网速查/判断两个 IP 是否同网段
掩码与 CIDR 速算50 条

判断两个 IP 是否同网段

核心是 AND 运算:两个 IP 分别与同一掩码按位与,结果相同则同网段;工程上常用于判断网关与地址、两台服务器是否二层直连。

IP 与子网速查网络更新于 2026-10-13

判断原理

两个 IP 是否同网段,做法是把它们各自与同一掩码按位与,结果相同就是同段。同段的两个主机在同一广播域内,通过 ARP 直接二层通信;不同段就必须经过网关。工程上这个判断决定了流量是否需要路由,也决定了防火墙策略在哪一层生效。

掩码不同时的陷阱

判断的前提是双方用的是同一个掩码。如果一端是 /24、另一端是 /25,双方对「同段」的理解不一致,会出现单向可通:/25 那端认为对端在不同网段,会把报文交给网关;/24 那端认为同段,直接 ARP 找对端。现象是 ping 单向通、TCP 建连偶发失败,这类问题在改动掩码后最常见。

工具与命令怎么看

Linux 上可以用 ip route get 目标地址来看内核的选择:如果结果显示经由本机某个接口(且不是默认路由),说明内核判定为直连;显示 via 网关则是不同网段。脚本里用 Python 的 in 运算符判断最简单,ip_address in ip_network 的布尔值就是答案。

基本信息

判断方法IP1 AND 掩码 == IP2 AND 掩码
前置条件两端掩码必须相同
同段(例)192.168.1.10/25 与 192.168.1.60/25 都在 0/25
不同段(例)192.168.1.10/25 在 0/25,192.168.1.130/25 在 128/25

典型使用场景

  • 确认主机与网关是否同段:不同段时主机根本不会把报文交给网关
  • 排查单向可通:优先怀疑两端掩码不一致
  • 规划 VLAN 与三层网关位置:同段才可二层直达
  • 检查 DHCP 下发的掩码与网关是否配套
  • 考试中判断两个地址能否直接通信

Python 与系统命令双验证

Python 与系统命令双验证
python -c "import ipaddress as ip; print(ip.ip_address('192.168.1.10') in ip.ip_network('192.168.1.0/25'))   # True"
python -c "import ipaddress as ip; print(ip.ip_address('192.168.1.130') in ip.ip_network('192.168.1.0/25'))  # False"
ip route get 192.168.1.130
# 192.168.1.130 dev eth0 src 192.168.1.10   ← 判定为直连(同段)

同段判断实例

地址 A地址 B掩码是否同段
192.168.1.10192.168.1.60/25是(都在 .0/25)
192.168.1.10192.168.1.130/25否(分属两个 /25)
10.0.1.110.0.2.1/16是
10.0.1.110.0.2.1/24否
172.16.1.5172.16.1.200/24是
/25 的边界在 .128:10 与 60 同段、10 与 130 不同段。判断前先确认掩码,而不是只看前三段是否相同,这是排障中最常见的误判来源。
在 VLSM 环境里,同一物理网络上的设备可能配了不同掩码:这属于配置错误而非设计。发现后应先统一掩码,再排查上层业务问题,否则会持续出现难以复现的偶发故障。

易错点

  • 只看前三段就断言同段:10.0.1.1 与 10.0.2.1 只有 /16 下才同段
  • 两端掩码不一致:出现单向可通、TCP 偶发失败等难复现现象
  • 主机与网关不同段:主机不会把报文交给网关,表现为完全不通
  • 忽略 VLSM 环境下同网段不同掩码的情况:排查方向直接走偏
  • 用 ping 通不通来判断同段:有代理或防火墙时 ping 结果会误导

数据来源与参考

  • RFC 4632(CIDR)
  • RFC 1122(主机要求)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌