IP子网超网计算
一、 IP地址与子网掩码的基础
在我们深入计算之前,先快速回顾一下基础。
- IP地址: 一个32位的二进制数,通常用点分十进制表示(如
192.168.1.1),用于唯一标识网络中的一台主机。它由网络部分(Network ID) 和主机部分(Host ID) 组成。 - 子网掩码 (Subnet Mask) : 同样是一个32位的二进制数,其作用就是明确IP地址中哪部分是网络ID,哪部分是主机ID。子网掩码中二进制为
1的部分对应IP地址的网络位,为0的部分对应主机位。例如,255.255.255.0的二进制是11111111.11111111.11111111.00000000。
将IP地址和子网掩码进行按位与(AND)运算,就能得到该IP所在的网络地址(也叫子网ID)。 主机ID部分全为0的地址是网络地址,全为1的地址是该子网的广播地址。这两个地址通常是不可分配给具体主机的。
二、 划分子网 (Subnetting)
核心思想:划分子网的本质,就是从一个大的网络中借用一部分主机位来作为子网位,从而将其分割成多个更小的、独立的子网络。
为什么需要划分子网?
- 节约IP地址资源: 避免在一个大网络中,因少量设备而占用整个网段,造成IP地址浪费。
- 提升网络性能: 将广播流量限制在各个子网内部,减小广播域,避免广播风暴影响整个网络。
- 增强网络安全性: 可以通过路由器或防火墙在不同子网间设置访问控制策略。
- 便于管理: 网络结构更清晰,易于维护和故障排查。
子网划分的计算步骤
我们通过一个实际案例来理解计算过程。
案例:假设我们有一个C类网络 192.168.1.0,默认子网掩码是 255.255.255.0 (/24)。现在需要将其划分为至少5个独立的子网。
第1步:确定需要借用的位数
- 我们需要5个子网。套用公式
2^n ≥ 5(其中n是需要借用的主机位数)。 - 当
n=2时,2^2 = 4,不够。 - 当
n=3时,2^3 = 8,满足要求。 - 因此,我们需要从主机位中借用 3 位作为子网位。
第2步:计算新的子网掩码
- 原来的子网掩码是
/24,即255.255.255.0,二进制为:
11111111.11111111.11111111.00000000 - 我们将主机位的前3位(从左到右)置为
1,得到新的子网掩码:
11111111.11111111.11111111.11100000 - 转换成十进制,新的子网掩码就是
255.255.255.224,或者用CIDR表示法为/27(因为24 + 3 = 27)。
第3步:确定每个子网的属性
- 子网数量:
2^3 = 8个子网。 - 每个子网的主机数: 剩余的主机位为
8 - 3 = 5位。每个子网的地址总数为2^5 = 32。除去网络地址和广播地址,可用的主机数为2^5 - 2 = 30台。 - 计算“块大小”或“增量” : 这是确定每个子网网络地址的关键。计算方法是
256 - 新子网掩码的最后一个非零字节。 在本例中,就是256 - 224 = 32。
第4步:列出所有子网
从0开始,以块大小 32 为增量,我们可以列出所有子网的网络地址:
| 子网序号 | 子网地址 (网络ID) | 可用IP地址范围 | 广播地址 |
|---|---|---|---|
| 1 | 192.168.1.0 |
192.168.1.1 - 192.168.1.30 |
192.168.1.31 |
| 2 | 192.168.1.32 |
192.168.1.33 - 192.168.1.62 |
192.168.1.63 |
| 3 | 192.168.1.64 |
192.168.1.65 - 192.168.1.94 |
192.168.1.95 |
| 4 | 192.168.1.96 |
192.168.1.97 - 192.168.1.126 |
192.168.1.127 |
| 5 | 192.168.1.128 |
192.168.1.129 - 192.168.1.158 |
192.168.1.159 |
| 6 | 192.168.1.160 |
192.168.1.161 - 192.168.1.190 |
192.168.1.191 |
| 7 | 192.168.1.192 |
192.168.1.193 - 192.168.1.222 |
192.168.1.223 |
| 8 | 192.168.1.224 |
192.168.1.225 - 192.168.1.254 |
192.168.1.255 |
广播地址总是下一个子网地址的前一个地址。 这样,我们就成功地将一个 /24 的网络划分成了8个 /27 的子网,并可以从中选取5个来使用。
三、 IP超网 (Supernetting) / 路由汇总
核心思想:超网与子网划分相反,它是将多个连续的小网络合并成一个更大的网络,这个过程也称为路由汇总或路由聚合。
为什么需要超网?
- 减小路由表体积: 在大型网络中,路由器需要维护庞大的路由表。通过路由汇总,可以用一条路由条目来代表多个连续的子网,极大地简化了路由表,提高了路由器的查询效率和性能。
超网的计算步骤
案例:一个路由器连接了4个连续的C类网络,地址分别是: 202.10.12.0/24, 202.10.13.0/24, 202.10.14.0/24, 202.10.15.0/24。我们需要计算它们的汇总路由。
第1步:列出所有网络地址的二进制形式
我们重点关注地址中不同的部分,即第三个字节:
-
12:00001100 -
13:00001101 -
14:00001110 -
15:00001111
完整的网络地址二进制表示为:
202.10.00001100.0
202.10.00001101.0
202.10.00001110.0
202.10.00001111.0
第2步:找到共同的网络前缀
从左到右比较这些二进制地址,找到它们保持相同的最长位数。
- 前两个字节
202.10.是相同的。 - 第三个字节,前6位
000011是相同的。 - 从第7位开始出现不同。
因此,共同的前缀长度是 8 + 8 + 6 = 22 位。这意味着新的子网掩码将是 /22。
第3步:确定汇总后的网络地址和子网掩码
- 网络地址: 将共同的前缀部分保留,后面的位置全部补
0。 - 共同前缀部分:
202.10.00001100.0 - 将第三个字节
00001100(即12) 作为汇总后的网络地址的第三个字节。 - 汇总后的网络地址为
202.10.12.0。 - 子网掩码: 长度为22位,即
11111111.11111111.11111100.00000000,转换成十进制是255.255.252.0。
最终结果: 这4个网络的汇总路由是 202.10.12.0/22。
这个汇总地址覆盖的范围是 202.10.12.0 到 202.10.15.255,正好包含了原来的4个网络。路由器现在只需要向外通告 202.10.12.0/22 这一条路由,而不是4条。
总结
作为软件工程师,我们虽然不常直接配置复杂的路由协议,但理解IP地址的划分与汇总逻辑,对于设计分布式系统、进行容器网络规划(如Kubernetes)、以及在云环境中配置VPC和安全组都至关重要。
- 划分子网 (Subnetting) 是化整为零:将主机位变为子网位,网络前缀变长(如
/24->/27)。 - IP超网 (Supernetting) 是化零为整:找到共同的网络前缀,网络前缀变短(如
/24->/22)。
掌握了二进制的计算方法,你就可以应对任何复杂的IP地址规划场景。希望这份梳理对你有帮助!

Comments NOTHING