HandyTools Hub

← 全部指南

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.010.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 之间的通用步骤:

  1. 主机位 = 32 − n。/27 就是 5。
  2. 块大小 = 2^主机位。/27 就是 32。
  3. 子网从最后一段的块大小倍数开始:.0.32.64……
  4. 每个子网可用主机 = 块大小 − 2。

前缀小于 /24 时同样的逻辑作用于第三段:/20 在第三段剩 4 个主机位,块大小 16,所以 10.0.0.0/20 覆盖 10.0.0.010.0.15.255。如果故障排查中不想心算,直接把 CIDR 粘进子网计算器读取范围即可。

划分子网:完整示例

假设云 VPC 分给你 10.0.0.0/16,你想要四个等大的子网——生产、预发、开发、共享服务。每对半分一次消耗一位,四个子网需要额外 2 位:/18。四个块是:

  • 10.0.0.0/1810.0.0.010.0.63.255
  • 10.0.64.0/1810.0.64.010.0.127.255
  • 10.0.128.0/1810.0.128.010.0.191.255
  • 10.0.192.0/1810.0.192.010.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.x172.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/8172.16.0.0/12192.168.0.0/160.0.0.0/0 匹配一切。