【发布时间】:2021-11-19 19:04:57
【问题描述】:
有人能准确解释一下 CIDR 块是如何工作的,以及它是如何转换为 0.0.0.0/32 的吗?请使用外行的术语,或者甚至是与网络无关的事物的类比。似乎找不到适合我的解释。谢谢!!
【问题讨论】:
有人能准确解释一下 CIDR 块是如何工作的,以及它是如何转换为 0.0.0.0/32 的吗?请使用外行的术语,或者甚至是与网络无关的事物的类比。似乎找不到适合我的解释。谢谢!!
【问题讨论】:
无类域间路由 (CIDR) 块用于指定 IPv4 或 IPv6 格式的 IP 地址范围。为简单起见,我将以 IPv4 格式解释其余部分,但它适用于 IPv6。
CIDR 块的一般格式:x.y.z.t/p
x、y、z 和 t 是从 0 到 255 的数字。基本上,每个代表一个 8 位二进制数。这就是为什么它的范围最多为 255。这些数字的组合成为 IPv4 IP 地址,该地址必须是唯一的才能识别特定实例。
对于 AWS,p 是一个 16 到 28 之间的数字。它表示从给定 IP 地址继承的位数。例如:10.0.0.0/16 代表一个 IP 地址,格式如下: 10.0.x.y 其中 x 和 y 是 0 到 255 之间的任意数字。所以,实际上它代表一个 IP 地址范围,从 10.0.0.0 到 10.0。 255.255.
但是,对于每个 CIDR 块,AWS 禁止使用 5 个可能的 IP 地址。这些是前 4 个可用地址和最后一个可用地址。在这种情况下:
官方文档见here。
实际上,这是 AWS 允许 p 的数值最高为 /28 的主要原因之一。因为对于 p=30,将有 4 个可用值,但是 AWS 需要 5 个 IP 地址才能使用。在我看来,对于 p=29,他们可能会发现占用 5 个地址来提供 3 个可能的 IP 地址是低效的。
可以使用以下公式计算可能的 IP 地址数:
NumberOfPossibleIPs = 2^(32-p) - 5
【讨论】:
无类域间路由 (CIDR) 块基本上是一种分配 IP 地址和 IP 路由的方法。创建网络或路由表时,需要指定工作范围。“0.0.0.0”表示它将匹配任何 IP 地址。某些 IP 地址是特定的,例如 10.0.0.0,它将匹配以 10 开头的任何 IP 地址。对于任何 IP 地址范围,您可以通过使用后缀(例如 /32 的示例)来更具体。这些允许符号指定从前缀(实际 IP 范围,如 10.0.0.0)中使用的位数。它表示子网掩码的位长,如上所示。子网掩码就像绘画时的掩码。你在你不想画的地方盖上面具。
例如,10.10.0.0/16 在其范围内将有 256 * 256 个 IP 地址。
注意:某个范围内的某些 IP 地址被保留用于各种目的。根据 AWS VPC 文档,以下是保留的 IP 地址。
希望这会有所帮助!
【讨论】:
以上所有答案都很棒,但对于不懂寻址的人来说,缺少一些非常重要的东西。
IP 地址实际上只是一个二进制字符串,分为 4 个“八位字节”。每个八位字节是一个2^8 块; 00000000。所以对于一台机器来说,一个 IP 地址看起来像这样(添加了(.) 以表示人性):
00000000(.)00000000(.)00000000(.)00000000
当我们谈论 IP 地址上的“掩码”时,它的意思是“不变的位”。块末尾的/8 或/255.0.0.0 表示此网络不允许使用的位数。
所以,假设我们有一个 10.0.0.0/8 的 CIDR 块 - 这也可以写成 10.0.0.0/255.0.0.0 的格式,实际上您可能会在旧版本的 linux 中看到这种表示法。您还将注意到255 是二进制字符串11111111 - 8 二进制“ones”的十进制表示。那么机器看到的内容如下:
Net: 00001010(.)00000000(.)00000000(.)00000000
Mask: 11111111(.)00000000(.)00000000(.)00000000
掩码中带 0 的部分是网络内可用的地址空间。
因此,以下示例地址在此网络中有效,因为在 0 上,屏蔽范围的部分正在发生变化:
00001010(.)00000001(.)00110000(.)00111000
00001010(.)00110001(.)00110100(.)00111001
当我们说“cidr 块”时,我们只是指“表示机器理解的二进制字符串的人类可读的简写方式”。在上面的例子中,第一个八位字节可以表示为10,后面的八位字节可以表示为0。并且Mask可以表示为255和0的后八位组,或者;因为掩码总是是 1 的序列,然后是 0 的序列,1 的长度,即8
因此,我们得到的 cidr 为 10.0.0.0/255.0.0.0 或 10.0.0.0/8
还有几个例子:
-- 172.1.1.0/24
net: 10101100.00000001.00000001.00000000
mask: 11111111.11111111.11111111.00000000
^ 24 bits for the mask ^ 8 bits of usable space
-- 10.10.10.8/29
net: 00001010.00001010.00001010.00001000
mask: 11111111.11111111.11111111.11111000
^ 29 bits for the mask. ^ 3 bits of usable space
但重要的是,这只是网络的一个方面。通常其中一些是为事物保留的。有关 AWS 特定内容,请参阅其他答案。在他们的示例中,为 AWS 保留的“前 4 个”IP 地址将是前 4 个可用地址,即
...00 - Network address
...01 - Router
...10 - DNS
...11 - Futureproofing
【讨论】: