题干与总体思路
题目:在 10.1.0.0/22(共 1024 个地址)内,为五个部门(500、200、100、50、25 台)与两条设备互联链路分配网段。方法与所有 VLSM 题一样:需求降序排列,从池首地址开始逐块落位,每块起点按块大小对齐,最后统计剩余空间。
需求到掩码
按 2^k-2 ≥ 需求取最小掩码:500 台需要 2^9-2=510,对应 /23;200 台需要 254,对应 /24;100 台需要 126,对应 /25;50 台需要 62,对应 /26;25 台需要 30,对应 /27;两条互联链路各需 2 个地址,用 /30。
为什么这样排序落位
10.1.0.0/22 的第一步是给 500 台一个 /23:/23 只能从 .0.0 或 .2.0 开始,取低位即可。接着 /24 落在 10.1.2.0,此时 10.1.3.0/24 成为最后的整段空间,剩下的 /25、/26、/27 与两条 /30 依次在其中排布,最终刚好把 10.1.3.0/24 切完并留下两个可登记的空闲块。
基本信息
| 地址池 | 10.1.0.0/22(1024 个地址) |
|---|---|
| 需求 | 500、200、100、50、25 台 + 2 条链路 |
| 分配顺序 | 500 → 200 → 100 → 50 → 25 → 链路 1 → 链路 2 |
| 已分配 | 1000 个地址 |
| 剩余 | 10.1.3.232/29 与 10.1.3.240/28,共 24 个 |
分配结果与可用范围
- 500 台:10.1.0.0/23,可用 10.1.0.1 – 10.1.1.254
- 200 台:10.1.2.0/24,可用 10.1.2.1 – 10.1.2.254
- 100 台:10.1.3.0/25,可用 10.1.3.1 – 10.1.3.126
- 50 台:10.1.3.128/26,可用 .129 – .190
- 25 台:10.1.3.192/27,可用 .193 – .222
- 链路 1:10.1.3.224/30(.225/.226);链路 2:10.1.3.228/30(.229/.230)
验算:不重叠与用量统计
验算:不重叠与用量统计
import ipaddress as ip
nets = [ip.ip_network(x) for x in ['10.1.0.0/23','10.1.2.0/24','10.1.3.0/25','10.1.3.128/26','10.1.3.192/27','10.1.3.224/30','10.1.3.228/30']]
print('overlap:', any(a.overlaps(b) for i, a in enumerate(nets) for b in nets[i+1:]))
print('allocated:', sum(n.num_addresses for n in nets))
base = ip.ip_network('10.1.0.0/22')
free = [base]
for u in nets:
for f in list(free):
if u.subnet_of(f):
free.remove(f); free.extend(f.address_exclude(u))
print('free:', free)需求与方案对照
| 需求 | 掩码 | 网段 | 可用量 |
|---|---|---|---|
| 500 台 | /23 | 10.1.0.0/23 | 510 |
| 200 台 | /24 | 10.1.2.0/24 | 254 |
| 100 台 | /25 | 10.1.3.0/25 | 126 |
| 50 台 | /26 | 10.1.3.128/26 | 62 |
| 25 台 | /27 | 10.1.3.192/27 | 30 |
| 链路 ×2 | /30 | 10.1.3.224/30、10.1.3.228/30 | 各 2 |
剩余的 10.1.3.232/29(8 个地址)与 10.1.3.240/28(16 个地址)建议直接登记为预留:将来新增互联链路或虚拟化平台的管理地址可以直接取用,不必回头重划已有网段。
这类大场景题的解题节奏
先在草稿上写出池的边界(10.1.0.0 到 10.1.3.255)与每个需求对应的块大小,再逐个落位并在每步后用块大小自检起点是否对齐:/23 从 0 起、/24 从 2.0 起、/25 从 3.0 起,之后所有小块都在 10.1.3.0/24 内递推。写完后把已分配的段加起来核对总量是不是 1000,剩余 24 个地址对得上,基本可以确认方案正确。
把所有分配段加总核对总量是这类题最有效的自检:本方案的 512+256+128+64+32+4+4 正好是 1000,剩余 24,与池容量 1024 相符。任何一步算错都会在这个总账上体现出来。
这类题的失分点几乎都在顺序与对齐:先分小段会让 500 台无处安放;不按块大小对齐会让 /27 与 /30 的边界错位,导致后几块互相覆盖。写完方案一定用工具跑一次重叠检查。