# 一块地址怎么切：软考选择题里的子网划分

从掩码与前缀长度的关系出发，完整算一遍“给地址求网络地址、广播地址和可用主机数”与“按子网数、主机数倒推掩码”两类题，并给出验算方法

> 综合知识 · 题型分析 · 备考策略 · 约 6 分钟 · 10 月 21 日

## 本篇要点

1. 子网掩码是一串连续的 1 后面跟一串 0，1 的个数就是前缀长度；224 = 11100000，所以 255.255.255.224 等于 /27。
2. 网络地址是主机位全 0 的地址，广播地址是主机位全 1 的地址，两者都不能分配给主机，所以可用主机数是 $2^m - 2$。
3. 正向题的核心是块大小：256 减去关键段的掩码值，就是该段内每个子网占的地址数；给定地址的关键段值除以块大小向下取整，即得子网起点。
4. 验算可以两头夹：网络地址要能被块大小整除，广播地址要等于下一子网起点减一，地址与掩码按位与也应得到同一结果。
5. 反向题有两个约束：子网数决定借位数 $n$（取够用的最小 2 的幂），每子网主机数决定主机位 $m$，两数相加不能超过原主机位。
6. 条件彼此冲突说明地址块装不下，要换更大的块或降低要求，而不是把掩码算得更长。
7. “减 2”是教材与真题的算法，/31 这类真实网络里的例外不在卷面范围内，答题按教材算。

---

上午卷里大多数题靠“见过、记住、认出”，少数几道能算，算对了分就是稳的。子网划分属于后者：丢分通常不是因为没背到名词，而是因为算错。这类题只出两种问法，先把两道题放在这里，你可以先自己算一遍再往下看。

**题一：** 主机地址 192.168.1.100，子网掩码 255.255.255.224。这个地址所在子网的网络地址、广播地址分别是什么？该子网最多能接多少台主机？

**题二：** 拿到一个 172.16.0.0/16 的地址块，要划分成不少于 20 个子网，每个子网至少容纳 1500 台主机。新的子网掩码应该是多少？

## 掩码在说什么

IP 地址是三十二位二进制数，分成四段，每段八位（取值 0–255）。子网掩码也是三十二位，作用是**告诉设备：这 32 位里前多少位表示“哪个网络”，后面剩下的位表示“网络中的哪台主机”**。

掩码写成一串 1 后面跟一串 0，1 的个数就是前缀长度。255.255.255.224 的前三段是 255，各八个 1；最后一段 224 = 11100000，有三个 1。所以一共 27 个 1，记作 /27。

由此确定两个地址：

- **网络号**：主机位全部置 0 的那个地址，用来指代整个子网，不能分给主机。
- **广播地址**：主机位全部置 1 的那个地址，用来一次发给子网内所有主机，同样不能分配。

中间那些才是可分配地址，这就是所有“减 2”的来源。

## 题一：给出地址和掩码，往下算

**第一步，把掩码换成前缀。** 255.255.255.224 → /27。

**第二步，找出关键段。** 前三段是 255，说明前三段全是网络位，子网只可能在最后一段内切分。最后一段是关键段。

**第三步，算块大小。** 224 的二进制是 11100000，低五位是 0，也就是这一段里只有五位能变。$2^5 = 32$，每个子网在最后一段占 32 个地址。用减法更快：$256 - 224 = 32$。

**第四步，看给定地址落在哪一块。** 100 除以 32 得 3 余 4，子网起点依次是 0、32、64、96、128……所以这块从 96 开始。

结论：网络地址 192.168.1.96，广播地址 192.168.1.127（96 + 32 − 1），可用主机范围 192.168.1.97 到 192.168.1.126，共 $32 - 2 = 30$ 台。

**验算一：按位与。** 网络地址的定义是“地址与掩码按位与”，这是最不容易错的核对方式。最后一段：100 = 01100100，224 = 11100000，按位与得 01100000，就是 96。前三段掩码为 255，结果照抄原地址；掩码某段为 0，那一段结果就是 0。所以所谓速算，其实是“255 的段照抄，0 的段写 0，只有关键段要算”。

**验算二：块的两端。** 网络地址一定能被块大小整除（96 ÷ 32 = 3），广播地址一定等于下一个子网起点减一（128 − 1 = 127）。两个条件都成立，答案就锁定了。

这一步也是这类题最常错的地方：**把 224 当成“/224”去算**，或者拿 100 减 96 得出“可用地址 4 个”。减 2 减的是两个特殊地址，不是减掩码。

## 题二：给出需求，反过来定掩码

这类题有两个约束，必须**分别算出各自要多少位，再取更严的那个**。

**先满足子网数。** 要 20 个以上子网，就得从原来主机位里借出 $n$ 位当子网位，能切出的子网数是 $2^n$。$2^4 = 16$ 不够，$2^5 = 32$ 够用，所以借 5 位。

这里有个常见错误：看到“20 个子网”就借 20 位，看到“5 个子网”就直接借 5 位。借位数指二进制位数，切出的块数只能是 2、4、8、16、32 这样的 2 的幂。要 5 个子网，$2^2 = 4$ 不够，得借 3 位切出 8 个，其中 3 个用不上。

**再满足每子网主机数。** 每子网要 1500 台主机，主机位剩 $m$ 位时可用地址是 $2^m - 2$。$2^{10} - 2 = 1022$ 不够，$2^{11} - 2 = 2046$ 够用，所以主机位要留 11 位。

**最后看装不装得下。** 原地址 172.16.0.0/16 的主机位共 16 位。借 5 位加留 11 位正好 16 位，没有浪费也没有超额，方案可行。新前缀是 $16 + 5 = 21$。

掩码写回点分十进制：/21 就是前 21 位为 1。前两段全 1，是 255.255；第三段有 5 个 1，即 11111000 = 248；第四段 0。掩码为 255.255.248.0。

**验算一：块大小。** 第三段 248 是关键段，$256 - 248 = 8$，第三段以 8 为步长：172.16.0.0、172.16.8.0、172.16.16.0……直到 172.16.248.0，共 $256 \div 8 = 32$ 个子网，多于需要的 20 个。

**验算二：每子网地址总数。** 第三段低 3 位可变，第四段整段 256 个地址都属于同一子网，所以每块共 $8 \times 256 = 2048$ 个地址，去掉网络地址和广播地址剩 2046 个可用地址，超过 1500 的要求。

两个约束都对上，答案确定。

## 把条件改一下，看法怎么变

假如要求变成“每个子网至少 3000 台主机”，子网数那条不变，主机位却要更大：$2^{12} - 2 = 4094$ 才够 3000，必须留 12 位。这样只剩 $16 - 12 = 4$ 位给子网，最多 $2^4 = 16$ 个子网，达不到 20 个。

这正是这类题最该留神的地方：**两个约束互相抢位数，总数固定，一个变大另一个就变小。** 装不下说明题目条件本身矛盾；真实规划里要换更大的地址块（比如改用 172.16.0.0/15，主机位 17 位，借 5 留 12 刚好），卷面上这通常就是命题人想让你发现的那个矛盾。

## 收成一套能带走的步骤

正向题（给地址和掩码）：

1. 掩码换成前缀长度，确认哪一段是关键段。
2. 块大小 = 256 − 关键段的值，也等于该段主机位的 2 的幂。
3. 给定地址的关键段值除以块大小，向下取整再乘回去，得到子网起点。
4. 广播地址 = 下一子网起点 − 1；可用主机数 = 块大小 − 2（跨段时块大小要乘以整段的 256）。

反向题（给需求）：

1. 子网数决定借位数，$2^n$ 只能取够用的最小 2 的幂。
2. 每子网主机数决定主机位，先加 2 再取整。
3. 两数相加不得超过原主机位，超出就是条件矛盾。
4. 新前缀 = 原前缀 + 借位数，写回点分掩码，再用块大小和 $2^m - 2$ 各验一遍。

计算机网络技术、TCP/IP 协议本来就写在各科大纲的考试范围里 [1][2]，所以这类题在上午卷里常出现，不是超纲的偏题。

最后交代一处边界：上面的“减 2”是从“网络地址和广播地址不能分给主机”推出来的，也是软考教材和真题一直沿用的算法。真实网络里点对点链路会用 /31 让两个地址都能用，这类细节不落在卷面上，答题按教材算。另外，题目里的“主机数”一律指可分配给主机的地址数，不是地址总数，看清这两个词，比多刷十道题管用。

## 术语表

- 子网掩码：三十二位里前面全是 1、后面全是 0 的一串数，用来指出 IP 地址中哪部分表示网络、哪部分表示主机。
- 前缀长度：掩码里 1 的个数，写成 /27 这种形式，和点分十进制写法是同一件事的两种记法。
- 网络地址：把子网内所有主机位都置 0 得到的地址，代表整个子网，不能分给主机。
- 广播地址：把主机位全置 1 得到的地址，一次能发给子网内所有主机，同样不能分配。
- 块大小：一个子网在关键段里占用的地址个数，等于 256 减去该段掩码值，也等于该段主机位的 2 的幂。
- 借位：把原本属于主机位的二进制位划出来当子网位，借 $n$ 位能切出 $2^n$ 个子网，每个子网的主机位相应减少 $n$ 位。

## 来源

1. [系统集成项目管理工程师考试大纲 — “计算机网络技术”一节列有网络技术标准与协议、Internet 技术及应用等考查范围](https://github.com/wangyongtao/ruankao_itpm_guide/blob/master/%E7%B3%BB%E7%BB%9F%E9%9B%86%E6%88%90%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%B7%A5%E7%A8%8B%E5%B8%88-%E8%80%83%E8%AF%95%E5%A4%A7%E7%BA%B2.md)
2. [软件设计师考试大纲 — 把 TCP/IP 协议、Internet 基础知识列为上午卷考查内容](https://www.cnitpm.com/pm1/118740.html)

---

原文：https://pangzhengboyin.com/articles/subnetting-mask-calculation-ruankao-bb59d28b

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
