子网划分被讲复杂了,本质上就是三件事:斜杠后面的数字是多少位 1、剩下几位是主机位、可用主机数 = 2^主机位 - 2。剩下的全是算术。
一、结论先给:一张表背下来
| CIDR | 子网掩码 | 主机位 | 可用 IP 数 | 常用场景 |
|---|---|---|---|---|
| /24 | 255.255.255.0 | 8 | 254 | 最常见的部门网段 |
| /25 | 255.255.255.128 | 7 | 126 | 对半切 |
| /26 | 255.255.255.192 | 6 | 62 | 小团队 / 一个机柜 |
| /27 | 255.255.255.224 | 5 | 30 | 小业务段 |
| /28 | 255.255.255.240 | 4 | 14 | 一组服务器 |
| /29 | 255.255.255.248 | 3 | 6 | 云厂商常见最小段 |
| /30 | 255.255.255.252 | 2 | 2 | 点对点链路(路由器互联) |
| /32 | 255.255.255.255 | 0 | 1 | 单个主机(安全组、回环) |
| /16 | 255.255.0.0 | 16 | 65534 | 大内网总段 |
| /8 | 255.0.0.0 | 24 | 16777214 | A 类 |
可用 IP 数 = 2^主机位 - 2,减 2 是去掉网络号和广播号。现代网络里有些场景(/31、/32)不减,见第五节。
二、斜杠后面那个数字到底是什么
IP 是 32 位二进制,/26 的意思是前 26 位是网络位,后 6 位是主机位。
/26 = 11111111.11111111.11111111.11000000
└──────── 26 个 1 ────────┘└─ 6 个 0 ─┘
= 255.255.255.192
掩码每个字节只有 9 种可能,记住这张对照表就能心算:
| 字节里的 1 的个数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| 十进制值 | 0 | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
所以 /26 = 第四个字节 2 个 1 → 192;/28 = 4 个 1 → 240。不用背 255.255.255.240 这种串,只需记位数。
三、算一个具体网段:192.168.1.0/26
步骤:
- 掩码 /26 → 255.255.255.192
- 每个子网的大小 =
256 - 192= 64(这一步是关键,叫"块大小") - 于是子网从 0 开始每 64 一个:
.0、.64、.128、.192 - 第一个子网:网络号
192.168.1.0,广播号192.168.1.63,可用192.168.1.1 ~ .62
| 子网 | 网络号 | 可用范围 | 广播号 |
|---|---|---|---|
| 1 | 192.168.1.0 | .1 – .62 | .63 |
| 2 | 192.168.1.64 | .65 – .126 | .127 |
| 3 | 192.168.1.128 | .129 – .190 | .191 |
| 4 | 192.168.1.192 | .193 – .254 | .255 |
再记一个大块换算:/24 能切成 2 个 /25、4 个 /26、8 个 /27、16 个 /28。每多借 1 位,子网数翻倍、每个子网的主机数减半。
四、反过来:一个地址属于哪个网段
给 10.20.37.129/25 找网络号:
- /25 → 掩码 255.255.255.128 → 块大小
256 - 128= 128 - 看最后一个字节 129 落在哪个 128 的块里:
0–127或128–255→ 落在第二个 - 网络号
10.20.37.128,可用.129 – .254,广播.255
法门就一句:用块大小整除最后一个字节。129 ÷ 128 = 1 余 1 → 第 1 块起点是 128。
五、五个最容易算错的地方
1. /31 和 /32 不减 2
RFC 3021 规定 /31(2 个地址)专门用于点对点链路,两个地址都能用,没有网络号和广播号的浪费。所以:
/30 = 4 个地址,可用 2(普通用法)
/31 = 2 个地址,可用 2(点对点专用)
路由器互联现在首选 /31,比 /30 省一半地址。云厂商的 VPC 路由表、专线对接经常用。
2. 私有地址范围别记错
| 段 | 范围 | 常见用途 |
|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 – 10.255.255.255 | 大内网、K8s Pod / Service CIDR |
| 172.16.0.0/12 | 172.16.0.0 – 172.31.255.255 | 注意是 16–31,不是整个 172 |
| 192.168.0.0/16 | 192.168.0.0 – 192.168.255.255 | 家庭/办公室 |
3. 云厂商会扣掉 5 个地址不是 2 个
AWS VPC / 阿里云 VPC 每个子网保留 5 个:网络号、VPC 路由器、DNS、未来预留、广播号。所以 AWS 里 /28 实际能用 11 个 不是 14 个。规划容量时按这个算,否则扩容时发现不够。
4. K8s 的 Pod 网段别和 VPC 撞
# 集群初始化时指定(别用默认值撞上内网)
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
Pod CIDR 和 Service CIDR 不能重叠、也不能和现有内网重叠,一旦定了改不了,只能重建集群。这是 K8s 部署里最贵的一个决策错误。
5. 聚合路由算的是"共同前缀"
把 192.168.0.0/24 ~ 192.168.3.0/24 四个段聚合成一条:192.168.0.0/22(4 × 256 = 1024 个地址)。聚合的前提是连续且对齐,从 .1.0 开始的 4 个 /24 不能聚成 /22。
六、实际规划一个案例
公司有 4 个部门:研发 100 人、测试 40 人、运维 20 人、办公无线 200 人,给 172.16.0.0/22(1024 个地址)做 VLSM 规划。
规则:从大到小分,避免碎片。
| 部门 | 需要 | 选的段 | 网段 | 可用范围 |
|---|---|---|---|---|
| 办公无线 | 200 | /24(254) | 172.16.0.0/24 | .0.1 – .0.254 |
| 研发 | 100 | /25(126) | 172.16.1.0/25 | .1.1 – .1.126 |
| 测试 | 40 | /26(62) | 172.16.1.128/26 | .1.129 – .1.190 |
| 运维 | 20 | /27(30) | 172.16.1.192/27 | .1.193 – .1.222 |
| 预留 | — | 剩余 | 172.16.1.224/27 + 172.16.2.0/23 | 留作扩容 |
要点:
- 先分大的,大的段对地址边界要求严(/24 必须从 0 或 256 的倍数开始)
- 每个部门留 30%~50% 余量,人不是唯一要连网的(打印机、摄像头、服务器)
- 预留连续空间给未来,否则一年后只能重新规划
七、命令行怎么验
ip addr show # 看本机网段
ip route # 看路由表
ipcalc 192.168.1.0/26 # 装 ipcalc,直接出网络号/广播/可用范围
# 没装 ipcalc 用 python 一行
python3 -c "import ipaddress;n=ipaddress.ip_network('192.168.1.0/26');print(n.network_address, n.broadcast_address, n.num_addresss if 0 else n.num_addresses, list(n.hosts())[:3])"
ipcalc 输出里 HostMin/HostMax/Hosts/Net 就是本文手算的四个值,拿它验证手算结果最快。
不想装工具也不想心算,直接用 子网划分计算 输入 192.168.1.0/26,网络号、广播号、可用范围、可切几个子网一次出来;查某个 IP 归属用 IP 查询,掩码与二进制互转用 进制转换。
八、小结
| 问题 | 算法 |
|---|---|
| 掩码是多少 | 数前几位是 1,查第二节对照表 |
| 块大小 | 256 - 掩码最后一个字节 |
| 可用主机数 | 2^(32-前缀) - 2(/31、/32 除外) |
| 网络号 | 用块大小整除最后一个字节,向下取整到块起点 |
| 广播号 | 下一个网络号 - 1 |
| /24 能切几份 | 2^(新前缀-24) |
真正要背的只有两个数:块大小 = 256 - 掩码末字节,可用数 = 2^主机位 - 2。剩下都是这两个的变形。