CIDR 转 IP 范围

把 CIDR 网段换算成地址范围,或把范围拆成刚好覆盖它的最小网段。

前缀表示有多少位是固定的,其后的每一位都会变化。

覆盖范围

10.0.0.0 10.0.3.255

共 1,024 个地址。

起始地址

10.0.0.0

结束地址

10.0.3.255

地址总数

1,024

子网掩码

255.255.252.0

可分配给主机

1,022

首尾两个分别是网络地址和广播地址。

下一个地址块起始于

10.0.4.0

把一个大块切成连续分配时很有用。

对齐规则,其余一切都由它解释

有一条约束统治着 CIDR:一个含 2ⁿ 个地址的块,必须从 2ⁿ 的整数倍处开始。/24 覆盖 256 个地址,所以它只能从最后一个八位组为 0 的地方开始。/26 覆盖 64 个,所以它只能从 .0、.64、.128 或 .192 开始。

这不是官僚主义。正是它让路由变得飞快:路由器决定一个包往哪儿走,靠的是把目的地址做掩码再比较,也就几条指令的事。而任意范围就得在每一个包上,把每个地址跟上下界各比一遍。

实际后果,正是这件工具存在的理由。人给出的范围不会顾及 2 的幂次边界,所以把一个范围转成 CIDR 通常会产出好几个块——两头参差处是小块,对齐的中段是大块。

一个实例

192.168.1.10192.168.1.20 是十一个地址。十一不是 2 的幂,所以它不可能是一个块。贪心覆盖从 .10 开始往前推:

覆盖范围为什么是这个大小
192.168.1.10/31.10 – .11.10 是偶数,所以一个 2 地址的块可以从这里开始;4 地址的就不行。
192.168.1.12/30.12 – .15.12 是 4 的倍数。
192.168.1.16/30.16 – .19.16 是 16 的倍数,但只剩 5 个地址,所以 4 是装得下的最大值。
192.168.1.20/32.20只剩一个地址了。

十一个地址用了四个块。每个块都完整落在这个范围内,范围之外的地址一个也没被包含进来。

什么时候会遇到它

  • 防火墙与安全组规则。 AWS、Azure 和 GCP 都用 CIDR 表达来源范围,所以一份写成「10.20.30.40 到 10.20.31.200」交给你的白名单,必须先转换才能填进去。
  • 路由语句。 一条静态路由要的是前缀,不是范围。
  • 读懂别人报给你的一个块。 主机商说你的分配是 203.0.113.64/29;本工具的第一个方向会告诉你那是 .64 到 .71,其中 .65 到 .70 可以分配。
  • 检查两个块是否重叠。 把两个都转成范围再比数字——远比对着前缀推理来得容易。

值得写准确的记法

10.0.0.5/2410.0.0.0/24 都合法,含义却不同。后者命名的是一个网络。前者命名的是那个网络里面的一台主机,也是接口配置的写法——一行同时带上地址和它所属的块。如果你把前者粘进一个期待网络地址的地方,多数工具会不声不响地把它掩码成 10.0.0.0/24,这通常正是你想要的,但偶尔不是。

0.0.0.0/0 就是整个互联网。它是书写默认路由的正确方式,也是一件留在入站防火墙规则里会很严重的东西。

相关

想看一个块的完整分解——网络地址、广播地址、主机范围、二进制——子网计算器才是那件工具。至于在 /24255.255.255.0 之间转换,有一个附带完整对照表的专用转换器

CIDR 相关问题

为什么我的地址范围需要好几个 CIDR 块,而不是一个?

因为 CIDR 块必须对齐:一个含 2ⁿ 个地址的块,起始地址必须是 2ⁿ 的整数倍。192.168.1.10 到 192.168.4.200 共 959 个地址,但它从 .10 开始,并不落在 2 的幂次边界上,结尾也停在块的中间,于是只能从两端往里用一层层变大的块去覆盖。能装下整个范围的最小单块是一个 /21,跨越 2,048 个地址——其中 1,089 个并不是你要的。

直接往上取一个更大的块不行吗?

那样确实更整齐,但通常是错的。人们把一个范围转成 CIDR,几乎总是为了写一条防火墙规则、一个安全组或一条路由语句,而向上取整会在无声无息中把访问权给到谁也没打算放行的地址。本工具生成的是精确覆盖:输出里的每一个地址都在你的范围内,你范围内的每一个地址也都在输出里。

斜杠后面的数字是什么意思?

表示从左边数有多少位是固定的。/24 固定了 32 位中的 24 位,留下 8 位自由,也就是 256 个地址。前缀每加一,块就减半:/25 是 128 个地址,/26 是 64 个。反过来算,用 32 减去前缀,再取 2 的那个次方即可。

10.0.0.5/24 是一个有效的 CIDR 块吗?

这个写法是有效的,而且随处可见,但它描述的并不是一个从 .5 开始的块——它描述的是块 10.0.0.0/24 里的主机 10.0.0.5。接口配置故意写成这样,因为一行就能同时带上地址和它所属的网络。如果你想表达的是一个块,地址部分必须是网络地址。

/0 有多大?

整个 IPv4 地址空间,全部 4,294,967,296 个地址。它一位都不固定。你会在默认路由里见到它——0.0.0.0/0 意思是「所有」,这既是它在路由表里作为兜底条目的原因,也是为什么一不小心把它敲进防火墙规则会很危险。

最后审校于 。发现有内容过时了? 告诉我们.