IPv4子网划分——当二进制数学让你质疑自己的职业选择
IPv4子网划分详解,无需痛苦。理解CIDR表示法、子网掩码、主机范围,以及为何/24和/16是截然不同的概念——并附带参考表格和在线IPv4计算器,帮助您完成计算。
在你的职业生涯中,有人会要求你“简单地设置一个VPC、Kubernetes集群或Docker网络的网络配置”。你打开AWS控制台,看到一个字段写着 CIDR block,并自信地输入 10.0.0.0/24 ,就像一个绝对清楚自己在做什么的人一样。
然后你接下来的45分钟都在一个子网计算器上,困惑为什么无法添加超过254个主机。
你并不孤单。IPv4子网划分是一个话题,其实际数学运算很简单,但教学方式——使用二进制表示法和“按位与操作”这类术语——让理性的人考虑转行去学陶艺。本指南将消除这些噪音。最终,你将理解子网掩码、CIDR表示法,明白 /24 且 /16 是完全不同的概念,并学会如何在不转换为二进制的情况下计算主机范围。当你需要验证工作时, IPv4 转换器 会为你处理繁琐的网络地址计算。
IPv4地址实际上是什么
一个IPv4地址是一个32位的数字,以四个十进制组(称为八位组)的形式书写。 192.168.1.100 表示第一个八位组为192,第二个为168,第三个为1,第四个为100。每个八位组的范围是0到255,因为每个八位组有8位(2⁸ = 256个可能的值)。
你需要理解的是——无需接触二进制——每个IPv4地址都包含两个逻辑部分: 网络 部分和 主机 部分。子网掩码就是告诉你哪一部分是网络,哪一部分是主机。
子网掩码:划分线
子网掩码看起来和IP地址完全一样: 255.255.255.0 是最常见的你可能会看到的。在底层,它始终是二进制中一连串的1后跟0——这些1覆盖地址的网络部分,这些0覆盖主机部分。
255.255.255.0 在二进制中是 11111111.11111111.11111111.00000000 ——这是24个1。将其应用于 192.168.1.100 ,你就是在说:前24位(192.168.1)是网络部分。后8位(.100)标识该网络中的具体主机。这正是 /24 在CIDR表示法中的含义。你只是在数1的数量。
CIDR表示法:同样的内容,更少的书写
CIDR(无类别域间路由),你很快就会忘记,也永远不需要大声说出——是网络地址及其掩码的简写。
192.168.1.0/24 表示:
- 网络地址:
192.168.1.0 - 子网掩码:
255.255.255.0(24位设置为1) - 可用主机范围:
192.168.1.1到192.168.1.254 - 总可用主机数: 254(256减去2——网络地址和广播地址被保留)
10.0.0.0/16 表示:
- 网络地址:
10.0.0.0 - 子网掩码:
255.255.0.0(16位设置为1) - 可用主机范围:
10.0.0.1到10.0.255.254 - 总可用主机数: 65,534
这 / 数字告诉你有多少位被锁定为“网络”。剩下的位可以用于主机。锁定的位越少,主机越多,子网越大。
为什么/24不是/16:一个实际例子
你在AWS上创建一个VPC。你选择 10.0.0.0/24 因为它看起来正常。你获得了254个可用IP地址。你有四个团队,每个团队最多需要50个主机的子网。你尝试将其划分为 /26 个子网,结果比预期更快地耗尽空间。
然后你的同事说“为什么不使用 /16?”然后消失不见。
10.0.0.0/16 提供了65,534个可用IP地址,你可以将其划分为256个每个254个主机的子网,或1,024个每个62个主机的子网。 /16 是你的主网络; /24是嵌入其中的子网。
思维模型:较大的CIDR前缀数字(/24, /26, /28)意味着一个 较小 的网络,主机更少。较小的CIDR前缀数字(/8, /16)意味着一个 更大的 网络,主机更多。直到它变得直观,然后它就永远清晰了。
主机数量公式(无需二进制)
公式很简单:
可用主机数 = 2^(32 − 前缀) − 2
这 32 − prefix 给出主机位的数量。将2提升到该幂次得到总地址数。减去2以扣除网络地址和广播地址。
- /24: 2⁸ − 2 = 254个主机
- /25: 2⁷ − 2 = 126个主机
- /26: 2⁶ − 2 = 62个主机
- /28: 2⁴ − 2 = 14个主机
- /16: 2¹⁶ − 2 = 65,534个主机
你可以用头脑快速计算常见前缀,或者完全跳过它,直接使用 IPv4 转换器 来立即获得完整分解。
常见子网参考表
收藏这个表格。每次配置VPC或Docker网络时,你都会回来查看它。
| CIDR | 子网掩码 | 总地址数 | 可用主机数 | 常见用途 |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 16,777,216 | 16,777,214 | 大型私有网络 |
| /16 | 255.255.0.0 | 65,536 | 65,534 | VPC主网络 |
| /20 | 255.255.240.0 | 4,096 | 4,094 | 大型AWS/GCP子网 |
| /24 | 255.255.255.0 | 256 | 254 | 标准局域网,小型子网 |
| /25 | 255.255.255.128 | 128 | 126 | 一半的/24 |
| /26 | 255.255.255.192 | 64 | 62 | 小型团队子网 |
| /27 | 255.255.255.224 | 32 | 30 | 非常小的子网 |
| /28 | 255.255.255.240 | 16 | 14 | 防火墙、NAT网关 |
| /30 | 255.255.255.252 | 4 | 2 | 点对点链路 |
| /32 | 255.255.255.255 | 1 | 1(本身) | 单主机路由 |
实际应用场景:VPC、Docker、Kubernetes
AWS VPC
标准模式是将一个 /16 主VPC(10.0.0.0/16)划分为 /24 个子网,每个可用区和用途(公共、私有、数据)一个子网。这能提供最多256个子网,每个子网有254个可用主机,足以满足大多数应用需求。如果工作负载较大,使用 /20 子网,每个子网可提供4,094个主机。
一个AWS特有的陷阱:AWS每个子网保留5个IP地址,而不是标准的2个。前四个地址和最后一个地址分别被保留用于网络地址、VPC路由器、DNS、未来用途和广播。因此,一个 /24 在AWS中提供251个可用IP地址,而不是254个。
Docker网络
Docker的默认桥接网络使用 172.17.0.0/16。当你创建自定义网络时,Docker默认从 172.16.0.0/12 范围内分配。你可以明确覆盖它:
docker network create --subnet=10.10.0.0/24 my-network
这 /24 是故意设置的——你不希望Docker用一个内部网络消耗整个地址空间。如果你运行多个需要互相通信或与VPN连接主机通信的Docker网络,请确保它们的范围不重叠。
Kubernetes
Kubernetes有两个独立的CIDR范围: Pod网络 (通常为 10.244.0.0/16 使用Flannel,或 192.168.0.0/16 使用Calico) 和 服务网络 (通常为 10.96.0.0/12)。这些范围不能相互重叠,也不能与你的节点网络重叠。如果重叠,你将花费大量时间调试为什么Pod无法访问服务,以及DNS解析不一致。
在规划Kubernetes网络时,请使用 IPv4 转换器 来验证你的Pod CIDR、服务CIDR和节点子网之间不重叠,然后再编写那个Helm值文件。提前五分钟的网络地址计算,胜过事后一小时的 kubectl exec 调试。
无需痛苦的IPv4子网划分
上述概念足以让你自信地配置网络。实现细节——“ 172.31.32.0/20的主机范围是什么?”——是大多数人遇到障碍并求助于子网计算器的地方。这是正确的直觉。
这 IPv4 转换器 能从单一输入中提供网络地址、广播地址、主机范围、子网掩码和CIDR表示法。输入你的IP和前缀,即可获得你VPC配置、安全组规则或防火墙允许列表所需的一切。无需账户,无需繁琐操作。
将其保存在标签页中。你将比想象中使用得更多。
