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 地址在物理上不可能,因此需要在组织内部网络中使用不在互联网上路由的私有地址。
| CIDR 表示 | 地址范围 | 地址数量 | 在 VPC 设计中的位置 |
|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 〜 10.255.255.255 | 约 1,677 万 | 范围最大;VPC 默认 CIDR 10.0.0.0/16 就是从这里切出来的 |
| 172.16.0.0/12 | 172.16.0.0 〜 172.31.255.255 | 约 104 万 | 大小居中,需要避开其他组织地址重叠时常用作退路 |
| 192.168.0.0/16 | 192.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 个可用地址。
| 地址 | 在子网中的位置 | 用途 |
|---|---|---|
| 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 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。