题干与验算思路
题目:把 2001:db8:acad::/48 按站点切到 /56,站内再切到 /64,求每级块数与步长。验算方式是数位数:从 /48 到 /56 增加 8 位子网位,得到 2^8 = 256 块,块之间第 4 个 16 位组按 0x100 递增;每个 /56 再切 /64 又增加 8 位,同样得到 256 块。三个层级都用同一套位运算逻辑,不需要搬 IPv4 的十进制经验。
基本信息
| 起始前缀 | 2001:db8:acad::/48 |
|---|---|
| 第一级切分 | /48 到 /56 增加 8 位,得到 256 块 |
| 第一级步长 | 第 4 组十六进制递增 0x100 |
| 第二级切分 | /56 到 /64 再增加 8 位,每站 256 块 |
| 每 /56 容量 | 256 个 /64,足够整个中等规模站点使用 |
| 总量 | 65536 个 /64,全部来自一个 /48 |
解题步骤
解题步骤
① /48 → /56:子网位增加 8 位 → 256 块
每块间隔 = 0x100(第 4 组十六进制)
2001:db8:acad::/56
2001:db8:acad:100::/56
2001:db8:acad:200::/56 ...
② /56 → /64:再增加 8 位 → 每站再分 256 块
2001:db8:acad:100::/64
2001:db8:acad:101::/64 ...
③ 校验:256 × 256 = 65536,与 /48 包含的 /64 数量一致程序验算
程序验算
python - <<'PY'
import ipaddress as ipa
n = ipa.ip_network('2001:db8:acad::/48')
sites = list(n.subnets(new_prefix=56))
print(len(sites), sites[0], sites[1], sites[-1])
sub = list(ipa.ip_network('2001:db8:acad:100::/56').subnets(new_prefix=64))
print(len(sub), sub[0], sub[1])
PY两级切分对照
| 层级 | 前缀长度 | 块数 | 步长 |
|---|---|---|---|
| 站点级 | /56 | 256 | 第 4 组 +0x100 |
| VLAN 级 | /64 | 每站 256 | 第 4 组 +1 |
| 合计 | /48 内共 65536 个 /64 | 65536 | 两级位运算叠加 |
规划实践建议
- 站点级用 /56 划分,地理上独立的园区各占一个,日后新增园区只占用下一个 /56 块
- VLAN 级固定 /64,终端与服务器都在 /64 内自动配置,不要人为切得更细
- 把 /48 内靠后的区间作为预留,并购或新业务上线时从预留区取块,不动已上线站点
- 每个 /56 内保留第 0 个 /64 作为基础设施段,路由器互联与环回地址放这里
- 把两级切分写进文档与配置文件模板,新增站点时照模板填数,避免随手编号
常见步长换算
| 增加位数 | 块数 | 第 4 组步长 |
|---|---|---|
| 1 位 | 2 | 0x8000 |
| 4 位 | 16 | 0x1000 |
| 8 位 | 256 | 0x100 |
| 12 位 | 4096 | 0x10 |
| 16 位 | 65536 | 0x1 |
十六进制步进是这类题的失分点:0x100 是十进制 256,0x10 是十进制 16,与 IPv4 里“第三段步长”习惯完全不同,混用会算出错的块起点。
层级选择的依据是位数而非直觉:每增加 8 位子网位就多 256 块,因此 /48 切 /56、/56 切 /64 是最自然的两级结构,超过两级会让编号难以记忆。
反过来验算同样简单:任意一个 /64 的前 48 位就是它所属的 /48,前 56 位就是所属的 /56,用程序取前缀即可快速定位某地址属于哪个站点。