首页 > 解决方案 > 传递子网的 CIDR 块后出现“必须是有效的 IPv4 CIDR”错误

问题描述

我在 AWS 上创建了一个 VPC(公共子网和私有子网),其 IPV4 CIDR 块为10.0.0.0/26(即它可以有 2^6 = 64 个 IP 地址以及一个子网地址和一个广播地址)。我想创建以下两个子网,但Must be valid Ipv4 CIDR出现错误:

  1. 具有10.0.0.0/28CIDR 块的公共子网,以及
  2. 带有10.0.0.8/28CIDR 块的私有子网

如果我给出子网掩码,/28并且我想将地址分成两个子网,则地址将落在 range 中10.0.0.0 [10.0.0.00000000] - 10.0.0.15 [10.0.0.00001111]。另一方面,如果我将 CIDR 块作为10.0.0.16/28,我不会收到任何错误。为什么 AWS 给出Must be valid Ipv4 CIDRCIDR 块的错误为10.0.0.8/28

标签: amazon-vpcsubnetcidr

解决方案


/28 有 2^(32-28) = 2^4 = 16 个地址,因此该块的全零地址的最后一个八位字节必须能被 16 整除(其最低有效位必须为 0 0 0 0) . 8 的 LSB 为 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 必须指定块中的第一个地址当您指定一个块时。

将 IPv4 地址 xxxx 转换为二进制,您将得到一个 32 位数字。地址 xxxx 的 (32-n) 最低有效位必须为 0。这是块中的第一个 (0th) 地址,也称为“全零”地址,因为未屏蔽- 最后的 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 子网是:

10.0.0.0/28    .0 to .15
10.0.0.16/28  .16 to .31
10.0.0.32/28  .32 to .47
10.0.0.48/28  .48 to .63

推荐阅读