15

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

4

3 回答 3

16

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

CIDR 块的一般格式:xyzt/p

x、y、z 和 t 是从 0 到 255 的数字。基本上,每个代表一个 8 位二进制数。这就是为什么它的范围最多为 255。这些数字的组合成为 IPv4 IP 地址,该地址必须是唯一的才能识别特定实例。

在 AWS 的情况下,p 是一个从 16 到 28 的数字。它表示从给定 IP 地址继承的位数。例如:10.0.0.0/16 代表一个 IP 地址,格式如下: 10.0.xy 其中 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:网络广播

官方文档见这里

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

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

NumberOfPossibleIPs = 2^(32-p) - 5

于 2019-07-01T10:51:47.280 回答
7

无类域间路由 (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 地址。

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

希望这可以帮助!

于 2017-10-07T05:32:22.057 回答
2

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

IP 地址实际上只是一串二进制文件,分为 4 个“八位字节”。每个八位字节是一个2^8块;00000000. 所以对于一台机器来说,一个 IP 地址看起来像这样((.)为了人性而添加):

00000000(.)00000000(.)00000000(.)00000000

当我们谈论 IP 地址上的“掩码”时,它的意思是“不变的位”。块末尾的/8或表示该网络不允许/255.0.0.0使用的位数。

所以,假设我们有一个 CIDR 块10.0.0.0/8- 这也可以写成 format 10.0.0.0/255.0.0.0,实际上你可能会在旧版本的 linux 中看到这个 for 表示法。您还将注意到这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。并且掩码可以表示为,或255的后八位组0;因为掩码总是1的序列,然后是0的序列,1的长度,即8

因此,我们得到一个 cidr10.0.0.0/255.0.0.010.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
于 2021-11-19T10:59:19.120 回答