有人能解释一下CIDR块是如何工作的,以及它是如何转换成像0.0.0.0/32这样的格式的吗?请使用通俗易懂的语言或者可能与网络无关的比喻。我找不到一个让我明白的解释。谢谢!
请参阅此处的官方文档。
实际上,这是AWS允许数字值p高达/28的主要原因之一。因为对于p=30,会有4个可用值,但AWS需要使用5个IP地址。在我看来,对于p=29,他们可能发现占用5个地址来提供3个可能的IP地址是低效的。
可以使用以下公式计算可能的IP地址数量:
NumberOfPossibleIPs = 2^(32-p) - 5
以上所有答案都很棒,但对于那些不理解“寻址”的人来说,还缺少一些相当重要的东西。
IP地址实际上只是一个二进制字符串,分成4个“八位比特”(octet)。每个八位比特都是一个 2^8
的块; 00000000
。所以对于机器来说,一个IP地址看起来像这样(为了更容易理解,我们加入了(.)
):
00000000(.)00000000(.)00000000(.)00000000
/8
或/255.0.0.0
表示这个网络不能使用的位数。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
10
,后面的八位组就是0
。掩码可以表示为255
和后续的0
;或者,由于掩码始终是一个1序列、一个0序列,所以1的长度,即8
。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