VPC 默认 CIDR /16 为什么是 /16 - IP 地址设计的趣闻与陷阱

解析 VPC 默认 CIDR 设为 /16 的原因、RFC 1918 私有地址空间的历史、子网中不可用的 5 个 IP 地址以及 CIDR 设计的常见失败模式。

RFC 1918 与私有 IP 地址的历史

要理解 VPC 的 CIDR 设计,首先需要了解 RFC 1918 的历史。1996 年发布的 RFC 1918 为不直接连接互联网的私有网络预留了 3 个地址范围:10.0.0.0/8(约 1,677 万个地址)、172.16.0.0/12(约 104 万个地址)、192.168.0.0/16(约 6.5 万个地址)。这 3 个范围被预留的背景是 1990 年代互联网的快速增长。IPv4 的地址空间仅有约 43 亿个,为所有设备分配全局 IP 地址在物理上不可能,因此需要在组织内部网络中使用不在互联网上路由的私有地址。

表:RFC 1918 在 1996 年预留的三个私有地址范围
CIDR 表示地址范围地址数量在 VPC 设计中的位置
10.0.0.0/810.0.0.0 〜 10.255.255.255约 1,677 万范围最大;VPC 默认 CIDR 10.0.0.0/16 就是从这里切出来的
172.16.0.0/12172.16.0.0 〜 172.31.255.255约 104 万大小居中,需要避开其他组织地址重叠时常用作退路
192.168.0.0/16192.168.0.0 〜 192.168.255.255约 6.5 万家用路由器用得最多,因此容易与本地网络冲突

为什么是 /16 - 不大不小的绝妙尺寸

/16 的 CIDR 块包含 65,536 个 IP 地址。AWS 选择 /16 作为默认值的原因在于,它为大多数工作负载提供了充足的 IP 地址空间,同时在 10.0.0.0/8 范围内可以切出 256 个 /16 块的良好平衡。VPC 的 CIDR 可指定 /16 到 /28。/28 是 16 个地址(其中可用 11 个),是最小的 VPC。/16 是 65,536 个地址,是默认的最大尺寸。实际上,/16 在很多情况下是过剩的。如果只运行 100 台 EC2 实例,/24(256 个地址)就足够了。

子网中不可用的 5 个 IP 地址

在 VPC 的子网中,每个子网的前 4 个和最后 1 个,共 5 个 IP 地址被 AWS 预留,无法分配给 EC2 实例等。以 /24 子网(10.0.1.0/24)为例,10.0.1.0 是网络地址,10.0.1.1 用于 VPC 路由器,10.0.1.2 用于 DNS 服务器,10.0.1.3 由 AWS 为将来使用而预留,10.0.1.255 是广播地址。也就是说,/24 子网的 256 个地址中,实际可用的是 251 个。这「5 个预留」在设计小型子网时影响很大。/28 子网只有 16 个地址,减去 5 个预留后仅剩 11 个可用地址。

表:/24 子网(10.0.1.0/24)中被预留的 5 个地址 - 256 个中可用 251 个
地址在子网中的位置用途
10.0.1.0第 1 个网络地址
10.0.1.1第 2 个VPC 路由器
10.0.1.2第 3 个DNS 服务器
10.0.1.3第 4 个AWS 预留供将来使用
10.0.1.255最后 1 个广播地址

CIDR 设计的失败模式

VPC 的 CIDR 设计中最常见的失败是 CIDR 重叠。通过 VPC Peering 或 Transit Gateway 连接 VPC 时,如果连接的 VPC 的 CIDR 重叠则无法路由。如果所有 VPC 都使用默认的 10.0.0.0/16,则 VPC 间完全无法连接。与本地网络的连接(Direct Connect、Site-to-Site VPN)也会出现同样的问题。如果本地网络使用 10.0.0.0/8,VPC 的 CIDR 在 10.x.x.x 范围内就会与本地网络冲突。

IPv6 与 VPC 的未来

AWS 从 2016 年开始支持 VPC 中的 IPv6。IPv6 的 VPC CIDR 为 /56,由 AWS 自动分配。IPv6 的地址空间为 2^128(约 340 涧),事实上无限,因此不存在 IPv4 那样的 CIDR 设计烦恼。然而,完全迁移到 IPv6 还为时尚早。许多企业的本地网络仅支持 IPv4,部分 AWS 服务也未完全支持 IPv6。现实的方法是以双栈(IPv4 + IPv6)配置 VPC,从新工作负载开始逐步采用 IPv6。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享