子网划分与 CIDR 计算

光看一个 IP 地址 192.168.12.170,还看不出它所在的局域网有多大。必须带上子网前缀或子网掩码,写成 192.168.12.170/26 这样的形式,才能算出哪些地址和它在同一个子网里。

子网(Subnet)是一段共享同一网络前缀的连续 IPv4 地址块。网管可以把一个大地址段按需切分给财务、研发、服务器区、访客 Wi-Fi 等不同区域。设备只要比对 IP 地址的网络位,就能判断目标 IP 是不是和自己在同一个子网里。

CIDR 前缀与子网掩码

IPv4 地址一共有 32 位。/24 是 CIDR(无类域间路由)前缀写法,表示最左边连续 24 位是网络位,右边剩下的 8 位是主机位。在 192.168.12.170/24 里,前三组 192.168.12 共 24 位固定不变;最后一组 170 是主机位,可以在 0 到 255 之间变化。

如果写成子网掩码(Subnet Mask),就是把网络位全填 1,主机位全填 0:

/24 掩码二进制       11111111.11111111.11111111.00000000
对应点分十进制         255    .255    .255    .0

这就是最常见的 255.255.255.0。

如果一个部门只有几十台设备,直接给整个 /24(256 个地址)太浪费,可以从主机位里“借”几位变成网络位。比如向主机位借 1 位,前缀就变成 /25(前 25 位为 1、后 7 位为 0),第四组的掩码二进制是 10000000(十进制 128),对应的子网掩码就是 255.255.255.128。

如果向主机位借 2 位,网络位从 24 位增加到 26 位,主机位就只剩 32 - 26 = 6 位:

192.168.12.170 的前 26 位属于网络部分,剩下 6 位属于主机部分

第四组的前 2 位变成了网络位,二进制掩码是 11000000,换算成十进制:

11000000 = 128 + 64 = 192

所以 /26 对应的子网掩码是 255.255.255.192。

网络地址、广播地址与可用主机数

接着看 192.168.12.170/26 落在哪个地址块里。第四组 170 展开成二进制是 10101010。因为前缀是 /26,第四组的前 2 位 10 是网络位,后 6 位是主机位:

接口实际 IP     10 101010  →  第四组为 170
主机位全置 0   10 000000  →  第四组为 128(网络地址)
主机位全置 1   10 111111  →  第四组为 191(广播地址)

这个子网的地址范围就是 192.168.12.128 ~ 192.168.12.191,一共 2^6 = 64 个地址。在标准 IPv4 子网里,头尾两个地址有特殊用途,不能分给普通设备:

特殊地址具体数值用途
网络地址(Network Address)192.168.12.128主机位全为 0,代表这个子网本身
可分配主机范围192.168.12.129 ~ .190共 62 个可用地址,分给电脑、手机、路由器接口等
广播地址(Broadcast Address)192.168.12.191主机位全为 1,用来向这个子网里的所有设备发广播

一个子网能分给主机的地址数是 2^主机位数 - 2。在这个 /26 子网里,可用主机数是 2^6 - 2 = 64 - 2 = 62。可以看到,网络地址不一定是 .0 结尾,广播地址也不一定是 .255 结尾,具体是多少全看前缀切在哪里。

计算地址容量

练习

一个普通 IPv4 子网使用 /27,扣除网络地址和广播地址后,有多少个地址可分配给接口?提交一个整数。

提交答案

题解 Hint

把子网继续细分

如果要把 192.168.12.128/26 这块地址再平分给 4 个小组,可以继续向主机位借 2 位(2 位二进制刚好能组合出 00、01、10、11 四块)。新子网的前缀变成 /28,每个子网的主机位剩下 32 - 28 = 4 位,总地址数是 2^4 = 16,可用主机数是 2^4 - 2 = 14。

一个 /26 地址块分成四个 /28 子网,每块各有自己的网络和广播地址

子网地址段可分配主机范围广播地址
第 1 块192.168.12.128/28.129 ~ .142(14 个).143
第 2 块192.168.12.144/28.145 ~ .158(14 个).159
第 3 块192.168.12.160/28.161 ~ .174(14 个).175
第 4 块192.168.12.176/28.177 ~ .190(14 个).191

网络前缀也不一定非要落在最后一组。比如 10.20.6.19/22:前两组(16 位)是固定的 10.20,第三组占了 22 - 16 = 6 位网络位,剩下的第三组后 2 位加上第四组 8 位一共 10 位都是主机位:

第 3 组数字 6     00000110
第 3 组掩码       11111100  →  十进制为 252
网络起始边界      00000100  →  十进制为 4
广播结束边界      00000111  →  十进制为 7

所以它的子网掩码是 255.255.252.0,子网范围从 10.20.4.0 到 10.20.7.255,可用主机范围是 10.20.4.1 ~ 10.20.7.254,一共 2^10 - 2 = 1022 个可用地址。不管前缀落在哪一组,算法都一样:固定网络位,主机位全 0 是网络地址,全 1 是广播地址。

调整子网大小

模拟实验

打开模拟器,改变前缀并观察网络地址、广播地址和可用范围。再为总计 50 个需要地址的接口(已包含网关)选择能容纳它们的最小子网。

点击此处启动: