CIDR 与子网划分详解:不靠猜读懂 10.0.0.0/24
2026-08-10
每个开发者迟早都会遇到这样的场景:防火墙规则里写着 allow from 10.0.0.0/24,VPC 控制台要你填一个 CIDR 块,或者安全组把一个”看起来明明在范围内”的地址拒之门外。子网划分是那种考证时背得滚瓜烂熟、一个月后就忘光的知识——因为大多数教程一上来就讲二进制算术,而不是背后的核心思想。这篇文章换个顺序:先讲清楚斜杠后的数字到底在数什么,再给你一套心算网络规模的方法,最后讲怎么在不用计算器的情况下划分子网(当然有个好用的计算器会更轻松)。
IP 地址是 32 个比特,斜杠数的是固定比特
192.168.1.10 这样的 IPv4 地址看起来像四个数字,实际上是一个 32 位的值;四个段(octet)各占 8 位,范围 0–255。一个”网络”就是共享相同比特前缀的一段地址范围。CIDR 记法(无类别域间路由)把它写成地址加 /n,其中 n 是从左边数起固定不变的比特数。剩下 32 − n 位可以自由变化,它们就是网络里的主机位。
所以 10.0.0.0/24 的意思是:前 24 位——也就是 10.0.0——固定,最后 8 位变化。一共 2⁸ = 256 个地址,从 10.0.0.0 到 10.0.0.255。一旦把斜杠理解成”固定比特的数量”,子网划分的其余部分就只是对一个数字做算术。
几个值得记住的参照点:
/32—— 单个地址(主机路由)/24—— 256 个地址,经典”C 类”大小/16—— 65,536 个地址,老式”B 类”/8—— 1677 万个地址,老式”A 类”
子网掩码是同一个数字的另一件外衣
老式文档用子网掩码表达前缀长度:一个前 n 位为 1、其余为 0 的 32 位值,用和 IP 相同的点分写法。/24 有 24 个 1,即 255.255.255.0;/26 有 26 个 1,即 255.255.255.192。
掩码只为一个操作存在:把它和地址做按位与(AND),得到的就是网络地址——固定前缀加全零主机位。192.168.1.73 AND 255.255.255.192 = 192.168.1.64,所以这个地址属于 192.168.1.64/26 网络。路由器判断目标是本地还是需要转发,做的正是这个运算。子网计算器给你展示网络地址、广播地址和可用主机范围时,底层就是这个 AND 操作。
网络地址与广播地址:为什么可用主机要少两个
任何子网里有两个地址被保留:网络地址(主机位全 0)标识网络本身,广播地址(主机位全 1)用于同时寻址所有主机。这两个都不能分配给设备。
这就是可用主机公式是 2^(32−n) − 2 的原因。/24 有 256 个地址但只有 254 个可用主机。/30——两台路由器之间点对点链路的常见选择——有 4 个地址、恰好 2 个可用主机,正好是链路两端各一个。(更极端的情况:/31 是为点对点链路标准化的特例,两个地址都可用;/32 指名单个主机。)
心算任何 /n
日常工作不需要二进制长除法,只需要一个观察:只有边界所在的那个段值得关心。对 /24 来说,边界正好落在第三段末尾,没什么好算的。对 /26,边界落在第四段的第 2 位,剩 6 个主机位:2⁶ = 每个子网 64 个地址。所以在 10.0.0.0/24 内,/26 子网从 .0、.64、.128、.192 开始——块大小在该段内循环。
前缀在 /24 到 /32 之间的通用步骤:
- 主机位 = 32 − n。
/27就是 5。 - 块大小 = 2^主机位。
/27就是 32。 - 子网从最后一段的块大小倍数开始:
.0、.32、.64…… - 每个子网可用主机 = 块大小 − 2。
前缀小于 /24 时同样的逻辑作用于第三段:/20 在第三段剩 4 个主机位,块大小 16,所以 10.0.0.0/20 覆盖 10.0.0.0 到 10.0.15.255。如果故障排查中不想心算,直接把 CIDR 粘进子网计算器读取范围即可。
划分子网:完整示例
假设云 VPC 分给你 10.0.0.0/16,你想要四个等大的子网——生产、预发、开发、共享服务。每对半分一次消耗一位,四个子网需要额外 2 位:/18。四个块是:
10.0.0.0/18→10.0.0.0–10.0.63.25510.0.64.0/18→10.0.64.0–10.0.127.25510.0.128.0/18→10.0.128.0–10.0.191.25510.0.192.0/18→10.0.192.0–10.0.255.255
每个容纳 16,384 个地址。让所有子网规划成立的规则只有一条:每个子网的大小必须是 2 的幂,且起始地址必须是其大小的整数倍。你不能从任意位置切出一个 500 地址的块——得向上取整到 512(第三段意义上的 /23)并对齐。这也是为什么纸面上的地址分配总是很”浪费”:为增长预留空间,因为日后重新编址远比现在多留余量痛苦。
私有地址段:为什么 10.0.0.0/8 如影随形
RFC 1918 保留了三个永不在公网路由的地址段,任何人都可以在内部自由使用:
10.0.0.0/8—— 1677 万个地址;云 VPC 和大组织的最爱172.16.0.0/12—— 约 100 万个地址(172.16.x.x到172.31.x.x——注意是 /12 不是 /16)192.168.0.0/16—— 65,536 个地址;你家路由器分配的就是它
因为这些地址段在全世界每个组织里互相重叠,两个常见的生产事故随之而来。第一,VPN 和 VPC 对等连接冲突:如果你的办公网用 10.0.0.0/16,而要对等互联的 VPC 也占用 10.0.0.0/16,路由就会产生歧义,总有一方得重新编址或做 NAT 杂技。第二,容器网络:Docker 默认用 172.17.0.0/16,Kubernetes 集群也会切分自己的地址段——和企业 VPN 撞段是”在家好好的,到公司就挂”的经典原因。当某个网络环境下连接神秘失败时,检查两边是否占用了相同的私有地址段。私有地址段用 IP 查询查不到归属(它们本来就没有公网属主),但对任何公网地址,它能告诉你正在打交道的这个地址块到底属于谁。
实战中的 CIDR:防火墙规则与 ACL
你真正需要手写 CIDR 的地方大多是允许/拒绝列表:安全组、nginx 的 allow 指令、Kubernetes NetworkPolicy、API 网关。两个习惯能避免大多数错误:
- 粒度贴合意图。
0.0.0.0/0意思是”整个互联网”(零个固定比特——全部可变),几乎永远不是允许规则的正确答案。只允许办公室的一个/24,既更安全也自带文档性。 - 记住 CIDR 是范围不是模式。
192.168.1.0/24不是碰巧”以 192.168.1 开头”——它精确表示前 24 位匹配的 256 个地址。如果你写192.168.1.0/16,很多系统会静默归一化成192.168.0.0/16——或者直接拒绝——因为网络地址的主机位本该是零。
当规则怎么都不匹配又看不出原因时,把地址和 CIDR 都丢进子网计算器,对比范围边界和地址的比特。十有八九是地址刚好在块外面——或者块比你以为的宽了一位或窄了一位。
速查表
/n= 固定比特数;网络内地址数 = 2^(32−n),可用主机 = 再减 2。/24= 256 个地址,/16= 65,536,/8= 1677 万。前缀每加 1,网络规模减半。- 子网掩码和 CIDR 是同一回事:掩码
255.255.255.0≡/24。 - 地址 AND 掩码得网络地址;广播地址是主机位全 1。
- 子网必须是 2 的幂大小,并对齐到其大小的整数倍。
- 私有地址段:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。0.0.0.0/0匹配一切。