在网络运维、IT部署或日常排查网络故障时,我们常会碰到一个核心问题:这两个IP地址,到底在不在同一个子网里?它们能否直接通信?
例如,有人曾问:21.167.6.0/23 和 31.167.5.0/23,看IP段是连续的,它们属于同一子网吗?
遇到这类问题,很多人的第一反应是打开计算器做“按位与”运算,步骤繁琐且容易出错。也有人仅凭直觉,认为IP数字连续就是同一子网,结果往往踩坑。本文将分享一套无需计算器、纯靠口算的快速判定方法,针对 /24、/23、/22 等常用掩码,10秒内即可得出结论,新手也能轻松掌握。
一、先破误区:这两个常见错误认知,很多人都在犯
在讲解方法之前,有必要先纠正两个高频误区,避免越判越错:
-
❌ 误区1:IP地址数字连续,就是同一子网
比如 31.169.5.0 和 31.169.6.0,数字上只差1,但它们未必属于同一子网(后文实战部分会详细说明)。
-
❌ 误区2:必须精确计算“按位与”才能判断
“按位与”是理论层面的核心逻辑,但在实际工作中,我们完全不需要如此复杂,记住关键规律即可口算。
-
✅ 核心前提:判断两个IP是否同子网,必须保证两个IP的CIDR掩码相同(例如都是 /23)。如果掩码不同,判断逻辑是另一套(后文会补充说明)。
二、必记:常用掩码与子网步长速查表(建议收藏)
快速判定的核心,在于记住 “掩码对应的子网步长” 。“步长”指的是每个子网所包含的连续IP段长度,我们重点关注IP地址的 “第三个8位组”(例如 31.169.5.0 中的 5, 31.169.6.0 中的 6)。
以下是网络运维工作中最常用的掩码与步长对应关系,记熟这5个,能解决90%以上的场景:
| CIDR掩码 |
子网掩码 |
核心特征(第三个8位组) |
子网步长 |
每个子网包含的第三个8位组数量 |
/24 |
255.255.255.0 |
网络位占满3个8位组 |
1 |
1个(如 x.x.5.0/24 仅包含 5) |
/23 |
255.255.254.0 |
第三个8位组留1位主机位 |
2 |
2个(如 x.x.4.0/23 包含 4、5) |
/22 |
255.255.252.0 |
第三个8位组留2位主机位 |
4 |
4个(如 x.x.4.0/22 包含 4、5、6、7) |
/21 |
255.255.248.0 |
第三个8位组留3位主机位 |
8 |
8个(如 x.x.0.0/21 包含 0-7) |
/20 |
255.255.240.0 |
第三个8位组留4位主机位 |
16 |
16个(如 x.x.0.0/20 包含 0-15) |
💡 记忆技巧:从 /24 往掩码数字小的方向(网络位减少,如 /23、/22),步长翻倍(1→2→4→8→16);反之,从 /20 往掩码数字大的方向(网络位增加),步长减半。
三、通用3步秒判法(所有掩码通用,口算即可)
掌握了“步长”这个概念,无论遇到哪种常用掩码,都可以按照以下3个步骤快速判断,全程不超过10秒:
步骤1:确定“子网步长”
根据两个IP地址共同的CIDR掩码,直接从上面的速查表中查出对应的步长。例如,掩码是 /23,步长就是 2;掩码是 /22,步长就是 4。
步骤2:计算每个IP的“网段起始值”
核心公式(纯口算):
网段起始值 = (IP第三个8位组 ÷ 步长) 的「整数商」× 步长
注意:计算出的起始值一定是步长的整数倍。例如步长为 2,起始值就是 4、6、8……;步长为 4,起始值就是 4、8、12……。
步骤3:对比起始值,得出结论
- ✅ 如果两个IP的“网段起始值”相同 → 它们属于同一子网,可以直接进行二层通信(无需经过路由器)。
- ❌ 如果两个IP的“网段起始值”不同 → 它们不属于同一子网,无法直接通信,必须通过路由器进行转发。
四、实战演练:10秒判断 31.169.6.0/23 与 31.169.5.0/23
现在我们用上面的方法来实战解答开头的疑问,看看究竟有多快:
已知两个IP:31.169.5.0/23 和 31.169.6.0/23,共同掩码为 /23。
- 确定步长:掩码
/23 → 查表得步长 = 2。
- 计算起始值:
31.169.5.0/23:第三个8位组是 5。5 ÷ 2 = 2(整数商)→ 2 × 2 = 4(起始值)。
31.169.6.0/23:第三个8位组是 6。6 ÷ 2 = 3(整数商)→ 3 × 2 = 6(起始值)。
- 对比起始值:
4 ≠ 6 → 结论:不属于同一子网,无法直接通信。
全程口算,10秒内即可得出明确结论,远比计算“按位与”要简单高效!
五、进阶技巧:/23 掩码专属超简判法
由于 /23 掩码在网络工作中极为常用(步长=2),因此可以记住一个专属秒判技巧:
/23 掩码的每个子网,其第三个8位组必然是「一个偶数 + 紧随其后的一个奇数」的组合(偶数是该网段的起始值):
4(偶) + 5(奇) → 属于 31.169.4.0/23 网段。
6(偶) + 7(奇) → 属于 31.169.6.0/23 网段。
8(偶) + 9(奇) → 属于 31.169.8.0/23 网段。
✅ 秒判规则:
- 若IP的第三个8位组是 奇数 → 将其 减1,得到的偶数就是其网段起始值(例如
5 → 起始值4, 9 → 起始值8)。
- 若IP的第三个8位组是 偶数 → 它自身 就是其网段起始值(例如
6 → 起始值6, 8 → 起始值8)。
套用此规则:31.169.5.0(奇数5 → 起始值4)和 31.169.6.0(偶数6 → 起始值6),起始值不同,瞬间可判定为不同子网。
六、补充:当两个IP的掩码不同时,如何判断?
如果两个IP的CIDR掩码不同(例如 31.169.5.0/23 和 31.169.5.0/24),判断逻辑反而更简单:
记住一个原则:掩码的 “网络位越多”(即 / 后面的数字越大,如 /24 比 /23 多1位网络位),其定义的子网范围就越小。较小的子网范围,必然被包含在较大的子网范围之内。
举例说明:31.169.5.0/24(范围 31.169.5.0 - 31.169.5.255),其范围完全落在 31.169.4.0/23(范围 31.169.4.0 - 31.169.5.255)这个更大的网段内。因此,前者是后者的一个更精细的划分。
七、总结
判断相同掩码的两个IP是否同子网,核心就是 “查步长 → 算起始值 → 比起始值”。起始值相同则同属一网,不同则分属两网。对于高频使用的 /23 掩码,利用“奇偶配对找起始”的技巧,更能实现秒级判定。
这套方法无需记忆复杂公式,不依赖计算器,无论是网络新手还是资深工程师,在日常工作中都能直接套用,极大提升效率。希望这篇来自云栈社区的分享,能成为你网络工具箱里的一件实用利器。