CIDR块AWS解释

21

有人能解释一下CIDR块是如何工作的,以及它是如何转换成像0.0.0.0/32这样的格式的吗?请使用通俗易懂的语言或者可能与网络无关的比喻。我找不到一个让我明白的解释。谢谢!

3个回答

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


可能的IP地址数量=2^(32-p)。AWS中可能的IP地址数量=2^(32-p)-5。 - Dishant Kapadiya
我认为我的意思很清楚,没有理由误解这个。@DishantKapadiya - Safak Ozdek
简洁明了的解释... - makassi

9
CIDR块是一种分配IP地址和IP路由的方法。在创建网络或路由表时,需要指定您正在使用的范围。 "0.0.0.0"表示它将匹配任何IP地址。有些IP地址是特定的,例如10.0.0.0,它将匹配以10开头的任何IP地址。使用后缀(例如/32)可以更具体地指定任何IP地址范围。这些允许符号指定要从前缀(实际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中的广播,因此我们保留此地址。
希望这可以帮助您!

3
10.10.0.0/16不仅拥有256个IP地址,实际上有256 * 256个地址。请更正此信息。 - Safak Ozdek

7

以上所有答案都很棒,但对于那些不理解“寻址”的人来说,还缺少一些相当重要的东西。

IP地址实际上只是一个二进制字符串,分成4个“八位比特”(octet)。每个八位比特都是一个 2^8 的块; 00000000。所以对于机器来说,一个IP地址看起来像这样(为了更容易理解,我们加入了(.)):

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

当我们提到IP地址的“掩码”时,指的是“不变的位”。块末尾的/8/255.0.0.0表示这个网络不能使用的位数。
举个例子,如果我们有一个CIDR块的10.0.0.0/8,它也可以用10.0.0.0/255.0.0.0的方式来表示,在较旧版本的Linux中可能会看到这种表示法。你还会注意到,255是二进制字符串11111111的十进制表示 - 即8个二进制“1”。因此,机器所看到的内容如下:
 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
因此,我们得到了一个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特定的内容,请参阅其他答案。在他们的示例中,“前4个” AWS 预留的 IP 地址将是前4个可用地址,即:

...00 - Network address
...01 - Router
...10 - DNS
...11 - Futureproofing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接