Cidr blocks AWS 解释

Cidr blocks AWS explanation

有人可以准确解释 CIDR 块的工作原理以及它如何转换为 0.0.0.0/32 吗?请使用外行人的术语,或者甚至是与网络无关的事物的类比。似乎找不到适合我的解释。谢谢!!

无类域间路由 (CIDR) 块基本上是一种分配 IP 地址和 IP 路由的方法。当您创建网络或路由 table 时,您需要指定您工作的范围。“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 地址。

  • 10.0.0.0: 网络地址。
  • 10.0.0.1:AWS 为 VPC 路由器保留。
  • 10.0.0.2:由 AWS 保留。 DNS 服务器的 IP 地址始终是 VPC 网络范围的基础加二;但是,我们还保留每个子网范围的基数加二。对于具有多个 CIDR 块的 VPC,DNS 服务器的 IP 地址位于主 CIDR 中。有关详细信息,请参阅 Amazon DNS 服务器。
  • 10.0.0.3:由 AWS 保留以备将来使用。
  • 10.0.0.255:网络广播地址。我们不支持在 VPC 中广播,因此我们保留此地址。

希望对您有所帮助!

Classless Inter-Domain 路由 (CIDR) 块用于指定 IP 地址的范围,格式为 IPv4 或 IPv6。为了简单起见,我将以 IPv4 的格式解释其余部分,但它适用于 IPv6。

General format for CIDR Blocks: x.y.z.t/p

x, y, z and 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 个可用地址和最后一个可用地址。在这种情况下:

  1. 10.0.0.0: 网络地址
  2. 10.0.0.1:为 VPC 路由器预留
  3. 10.0.0.2: DNS 服务器
  4. 10.0.0.3:保留供将来使用
  5. 10.0.255.255:网络广播

查看官方文档here

其实这也是AWS允许p的数值最大为/28的主要原因之一。因为对于 p=30,将有 4 个可用值,但 AWS 需要 5 个 IP 地址才能使用。在我看来,对于 p=29,他们可能会发现占用 5 个地址来提供 3 个可能的 IP 地址效率低下。

可以使用以下公式计算可能的 IP 地址数:

NumberOfPossibleIPs = 2^(32-p) - 5

以上所有答案都很棒,但缺少一些对于不懂寻址的人来说非常重要的东西。

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 的部分是网络中的可用地址 space。

因此以下示例地址在此网络中有效,因为屏蔽范围的 0 部分正在发生变化:

00001010(.)00000001(.)00110000(.)00111000
00001010(.)00110001(.)00110100(.)00111001

当我们说“cidr 块”时,我们只是指“机器理解的人类可读 shorthand 表达二进制字符串的方式”。在上面的例子中,第一个八位字节可以表示为10,后面的八位字节可以表示为0。而Mask可以表示为2550后面的八位字节,或者;因为掩码是总是一个1的序列,然后是一个0的序列,1的长度,即8

因此,我们得到 10.0.0.0/255.0.0.010.0.0.0/8

的 cidr

再举几个例子:

-- 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