题目与思路
园区有一片十六位前缀的地址空间,要分给十六栋楼,每栋终端数量不超过四千。解题方向是先按单栋需求反推出前缀长度,再看这个长度下一共能切出多少块,最后验证块数是否正好满足十六栋楼的需求,以及各块的边界是否连续。
试算与结论
每栋不超过四千台,二十位前缀可用四千零九十四个,够用;十九位可用八千多个,明显偏大;二十一位只有两千零四十六个,不够。因此每栋取二十位。二十位在第三段借用四位,步长十六,一个十六位父块恰好能切出十六块,与楼栋数量正好吻合。
基本信息
| 需求 | 十六栋楼,每栋不超过四千台 |
|---|---|
| 选掩码 | 二十位,可用四千零九十四个 |
| 块大小 | 第三段步长十六 |
| 块数量 | 一个十六位父块恰好切出十六块 |
| 结论 | 每栋一个二十位网段,正好用满父块 |
典型使用场景
- 园区规划:按楼栋划分地址是最常见的分区方式,边界清晰,便于统计与排障
- 容量论证:向管理层说明为什么每栋取二十位而不是更小的前缀,试算过程就是依据
- 地址下发:每栋楼拿到一个网段后,内部再按楼层与部门继续细分为更小的网段
- 路由汇总:十六块恰好合成一个父块,骨干设备上只需一条汇总路由
- 扩展预留:恰好用满意味着没有余量,新楼建设时需要提前规划新的父块
- 培训与考试:这是分块与反推结合的标准题型,掌握后同类题都能套用
楼栋方案(首尾示例)
楼栋方案(首尾示例)
一号楼 172.16.0.0/20 覆盖 172.16.0.0 到 172.16.15.255
二号楼 172.16.16.0/20 第三段步长十六
……
十六号楼 172.16.240.0/20 覆盖 172.16.240.0 到 172.16.255.255
# 十六块首尾相接,恰好用满整个十六位父块总数复核
总数复核
python -c "import ipaddress as ip; print(len(list(ip.ip_network('172.16.0.0/16').subnets(new_prefix=20))))"
# 输出 16,与楼栋数量一致
# 需要预留扩展时,可改为每栋十九位,实际只用到八栋的规模前缀试算对照
| 前缀 | 可用主机 | 覆盖楼栋数 | 结论 |
|---|---|---|---|
| 十九位 | 八千一百九十 | 八栋 | 容量过剩 |
| 二十位 | 四千零九十四 | 十六栋 | 正好满足 |
| 二十一位 | 两千零四十六 | 三十二栋 | 单栋不够 |
| 二十二位 | 一千零二十二 | 六十四栋 | 差距明显 |
步长容易记错:二十位在第三段借用四位,步长是十六而不是八或三十二。步长错一步,所有楼栋的边界都会整体偏移,配置下发后问题很难定位。
十六块恰好用满父块意味着零余量:任何编号错位都会越界到相邻楼栋。实际项目建议留出缓冲,例如改用十九位、每栋仍按二十位划,剩余空间用于新楼与临时需求。