子网掩码与 CIDR 详解
子网掩码告诉设备 IPv4 地址的哪一部分标识网络,哪一部分标识主机。CIDR 表示法用斜杠加数字来表达同样的信息,例如 /24,表示前 24 位是网络部分。掩码 255.255.255.0 和前缀 /24 是同一件事的两种写法。
二进制下的掩码
IPv4 地址有 32 位。子网掩码由连续的 1 加上连续的 0 组成:1 标记网络部分,0 标记主机部分,前缀长度就是 1 的个数。
/24 11111111.11111111.11111111.00000000 = 255.255.255.0
/26 11111111.11111111.11111111.11000000 = 255.255.255.192
/20 11111111.11111111.11110000.00000000 = 255.255.240.0
掩码的每个八位组只可能取九个值之一:0、128、192、224、240、248、252、254 或 255。它们是从左边开始各位累加的结果:128,128+64=192,192+32=224,依此类推。
主机位的数量是 32 - 前缀长度。一个子网共有 2^(主机位数) 个地址。通常其中有两个不可用:第一个是网络地址,最后一个是广播地址。因此可用主机数为 2^(主机位数) - 2。
计算示例:192.168.10.37/26
求 192.168.10.37/26 的网络地址、广播地址和主机范围。
- 掩码是
255.255.255.192,只有最后一个八位组被部分使用。 - 块大小为
256 - 192 = 64。最后一个八位组中的子网起点依次为 0、64、128 和 192。 - 37 介于 0 和 63 之间,所以子网从 0 开始。
| 项目 | 值 |
|---|---|
| 网络地址 | 192.168.10.0 |
| 第一个可用主机 | 192.168.10.1 |
| 最后一个可用主机 | 192.168.10.62 |
| 广播地址 | 192.168.10.63 |
| 地址总数 | 64 (26) |
| 可用主机数 | 62 |
你可以用按位与运算验证结果:网络地址等于地址与掩码按位 AND。在最后一个八位组中,37 是 00100101,192 是 11000000,按位与的结果是 00000000,即 0。任何示例都可以用子网计算器来验证。
/8 到 /32 的 CIDR 速查表
| CIDR | 子网掩码 | 地址总数 | 可用主机数 |
|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,216 | 16,777,214 |
| /9 | 255.128.0.0 | 8,388,608 | 8,388,606 |
| /10 | 255.192.0.0 | 4,194,304 | 4,194,302 |
| /11 | 255.224.0.0 | 2,097,152 | 2,097,150 |
| /12 | 255.240.0.0 | 1,048,576 | 1,048,574 |
| /13 | 255.248.0.0 | 524,288 | 524,286 |
| /14 | 255.252.0.0 | 262,144 | 262,142 |
| /15 | 255.254.0.0 | 131,072 | 131,070 |
| /16 | 255.255.0.0 | 65,536 | 65,534 |
| /17 | 255.255.128.0 | 32,768 | 32,766 |
| /18 | 255.255.192.0 | 16,384 | 16,382 |
| /19 | 255.255.224.0 | 8,192 | 8,190 |
| /20 | 255.255.240.0 | 4,096 | 4,094 |
| /21 | 255.255.248.0 | 2,048 | 2,046 |
| /22 | 255.255.252.0 | 1,024 | 1,022 |
| /23 | 255.255.254.0 | 512 | 510 |
| /24 | 255.255.255.0 | 256 | 254 |
| /25 | 255.255.255.128 | 128 | 126 |
| /26 | 255.255.255.192 | 64 | 62 |
| /27 | 255.255.255.224 | 32 | 30 |
| /28 | 255.255.255.240 | 16 | 14 |
| /29 | 255.255.255.248 | 8 | 6 |
| /30 | 255.255.255.252 | 4 | 2 |
| /31 | 255.255.255.254 | 2 | 2(点对点链路,RFC 3021) |
| /32 | 255.255.255.255 | 1 | 1(单个主机) |
反掩码(通配符掩码)
反掩码是子网掩码的反码:每一位都取反。子网掩码为 1 的位,反掩码为 0,反之亦然。路由器和防火墙(例如 Cisco 访问控制列表和 OSPF 的 network 语句)使用反掩码,其中 0 位表示「必须匹配」,1 位表示「任意值」。
/24,掩码 255.255.255.0,反掩码为0.0.0.255/26,掩码 255.255.255.192,反掩码为0.0.0.63/20,掩码 255.255.240.0,反掩码为0.0.15.255
快速算法:用 255 减去掩码的每个八位组。
把一个 /24 划分成四个 /26 子网
以文档示例网络 198.51.100.0/24 为例。前缀增加两位,得到 22 = 4 个子网,每个有 64 个地址。
| 子网 | 网络地址 | 可用范围 | 广播地址 |
|---|---|---|---|
| 1 | 198.51.100.0/26 | 198.51.100.1 – 198.51.100.62 | 198.51.100.63 |
| 2 | 198.51.100.64/26 | 198.51.100.65 – 198.51.100.126 | 198.51.100.127 |
| 3 | 198.51.100.128/26 | 198.51.100.129 – 198.51.100.190 | 198.51.100.191 |
| 4 | 198.51.100.192/26 | 198.51.100.193 – 198.51.100.254 | 198.51.100.255 |
四个子网合计有 4 × 62 = 248 个可用主机,而单个 /24 有 254 个。相差的六个地址是额外多出的网络地址和广播地址。子网划分可用于隔离不同部门、服务器和访客 Wi-Fi,并减少广播流量。
IPv6 前缀惯例
IPv6 使用同样的斜杠表示法,但规划规则不同。由于地址空间极其庞大,不需要计算主机数量。常见惯例如下:
- /64 用于每个普通的局域网(LAN)。SLAAC(地址自动配置)等功能要求主机部分为 64 位。普通局域网不要使用更长的前缀。
- /56 或 /48 分配给一个用户或站点。一个 /48 包含 65,536 个 /64 网络,一个 /56 包含 256 个。
- /32 是分配给互联网服务提供商的典型大小,
2001:db8::/32是文档示例地址段。 - /128 表示单个地址,相当于 IPv4 中的 /32。
例如,拥有 2001:db8:abcd::/48 的站点可以用 2001:db8:abcd:1::/64 作为一个 VLAN,用 2001:db8:abcd:2::/64 作为下一个。