我在AWS上创建了一个VPC(公共和私有子网),其IPV4 CIDR块为10.0.0.0/26(即它可以具有2 ^ 6 = 64个IP地址以及一个子网地址和一个广播地址)。我想创建一个CIDR块为10.0.0.0/28的公共子网和一个10.0.0.8/28的私有子网,但是在创建私有子网时出现“必须是有效的Ipv4 CIDR”错误。如果我将子网掩码设置为/ 28并且 我想将地址分为两个子网,该地址的范围为10.0.0.0 [10.0.0.00000000]-10.0.0.15 [10.0.0.00001111]。另一方面,如果我将CIDR块设置为10.0.0.16/28,则不会出现任何错误。为什么AWS在CIDR块为10.0.0.8/28时给出``必须是有效的Ipv4 CIDR''错误?
答案 0 :(得分:1)
/ 28具有2 ^(32-28)= 2 ^ 4 = 16个地址,因此该块的全零地址的最后一个八位字节必须被16整除(其最低有效位必须为0 0 0 0)。 LSB为8是1 0 0 0。
10.0.0.8/28是无效的CIDR块。 10.0.0.0到.15以CIDR表示法表示为10.0.0.0/28。
根据要求通过上面的数字16来说明可除性的重要性:
并不是最后一个块可以整除地址数量,而是用CIDR表示法 xxxx / n 每个块的大小始终为2 ^(32-n)个地址指定块时,xxxx和xxxx必须在块中指定 first 地址。
将IPv4地址x.x.x.x转换为二进制,会得到一个32位数字。地址xxxx的(32-n)个最低有效位必须为0。这是该块中的第一个(0)地址,也称为“全零”地址,因为未屏蔽的 bits -最后的32-n位全为0。为子网指定CIDR块时,这是必须指定的地址。
在/ 28块的情况下,请注意-根据定义-二进制表示的最低有效32-28 = 4位为0 0 0 0的任何数字也可被2 ^(32-28)整除= 16,其他任何数字都不是。
对于大小为/ 24到/ 32的块,此数学运算对于人类来说更容易,因为您无需从脑海中将整个xxxx转换为二进制文件-您只需要四个八位字节中的最后一个即可。
从超级网络10.0.0.0/26派生的唯一/ 28子网是:
df.loc[mask1, mask2]