VLSM 设计指南
如何把一个地址块划分成大小不一的子网:按主机数为每段定尺寸、从最大的子网开始分配,以及如何确认彼此不重叠。
为什么等长子网会浪费地址
普通的子网划分把地址块切成等份。当各网段尺寸相同时没问题,但真实网络并非如此。一个典型站点里有一个 100 台设备的办公区、一个 50 台设备的实验室、一段 20 路摄像头的视频网段,以及少量交换机管理地址。把一个 /24 平均切成四个 /26,各得 62 个可用地址:办公区不够用,而管理网段有 52 个地址永远用不上。
VLSM —— 可变长子网掩码 —— 通过允许每个子网使用不同的前缀长度来解决这个问题。同一个 /24 可以划分成一个 /25、一个 /26、一个 /27 和一个 /28,几乎完全贴合真实需求,还能留下 16 个地址作储备。地址总数从未改变,改变的只是划分方式。
为每个子网定尺寸
每一次分配都从主机数出发。用三步把它换算成前缀:先预留网络地址与广播地址,再找出下一个 2 的幂,最后用 32 减去它的指数。
所需地址数 = 主机数 + 2 地址数 = 不小于所需地址数的最小 2 的幂 前缀 = 32 − log2(地址数) 50 台主机 → 需要 52 → 64 个地址 → 2^6 → 32 − 6 = /26 100 台主机 → 需要 102 → 128 个地址 → 2^7 → 32 − 7 = /25 20 台主机 → 需要 22 → 32 个地址 → 2^5 → 32 − 5 = /27
正是因为要预留两个地址,一个 30 台设备的网段不能用 /27:32 个地址减去网络地址和广播地址只剩下正好 30 个可用,完全没有增长余地。实践中应当按你预计两三年后的设备数来定尺寸,而不是写方案当天的数量。
| 需要主机数 | 预留地址 | 所需地址数 | 前缀 | 可用 |
|---|---|---|---|---|
| 0 | 0 | 1(主机路由) | /32 | 1 |
| 1 | 0 | 2(RFC 3021) | /31 | 2 |
| 2 | 2 | 4 | /30 | 2 |
| 10 | 2 | 16 | /28 | 14 |
| 20 | 2 | 32 | /27 | 30 |
| 25 | 2 | 32 | /27 | 30 |
| 50 | 2 | 64 | /26 | 62 |
| 100 | 2 | 128 | /25 | 126 |
| 200 | 2 | 256 | /24 | 254 |
| 500 | 2 | 512 | /23 | 510 |
需求为 0 或 1 属于特殊情况。/32 是单主机路由,适合环回地址或某个管理地址。/31 是 RFC 3021 定义的两地址点对点链路,完全零浪费。注意边界处的取整有多"狠":25 台和 20 台主机都需要 /27,而 100 台主机需要 /25,因为 /26 只能提供 62 个。
从大到小分配
每个需求都定好前缀之后,按子网从大到小排序,在地址块里依次放到递增的偏移位置上。这不是风格偏好 —— 它正是让方案总能成功的原因。子网的起始偏移必须是自身大小的整数倍,所以 /25 只能放在偏移 0 或 128,而 /28 可以放在任意 16 的整数倍上。
为什么从小到大分配会失败
取一个 /24(偏移 0 到 255),需求是 100 台、50 台、50 台主机,对应一个 /25、一个 /26 和一个 /26。
先把两个 /26 放在偏移 0 和 64。每个 64 个地址,合起来占用 0 到 127。剩余空间是偏移 128 到 255 —— 正好 128 个地址,刚好装得下 /25,所以这个特定顺序碰巧可行。换成 100 台、50 台、20 台主机试试:一个 /25、一个 /26 和一个 /27。把 /27 放在偏移 0(0 到 31),把 /26 放在偏移 64(64 到 127)。此时空闲空间是 32 到 63 以及 128 到 255。第一段只有 32 个地址 —— 装不下 /25 —— 而第二段是唯一装得下的位置,于是偏移 32 到 63 就被搁置浪费了。
按从大到小排序就能完全避免这种情况:/25 占 0 到 127,/26 占 128 到 191,/27 占 192 到 223,没有任何碎片被搁置。
原因很简单。把一个大小为 n 的块放在对齐的偏移上之后,剩余空间一定是 n的整数倍,而后续每个块都不大于 n,所以总能找到一个合法的对齐偏移。规划器依赖的正是这条不变式,这也是分配结果具有确定性的原因。
10.0.0.0/24 的完整规划
下面是一份完整的分配示例。基础地址块是 10.0.0.0/24 —— 256 个地址,偏移 0 到 255,即 10.0.0.0 到 10.0.0.255。
Office 100 台主机 → 128 个地址 → /25
Development 50 台主机 → 64 个地址 → /26
Camera 20 台主机 → 32 个地址 → /27
Management 10 台主机 → 16 个地址 → /28
--------------------
256 个地址中的 240 个按从大到小排序后顺序已经正确。每个子网必须从自身大小的整数倍开始,所以规划器会向前推进游标,并在每次放置前先对齐。
分配结果
Office 10.0.0.0/25 .0 到 .127 100 台主机
Development 10.0.0.128/26 .128 到 .191 50 台主机
Camera 10.0.0.192/27 .192 到 .223 20 台主机
Management 10.0.0.224/28 .224 到 .239 10 台主机
空闲 10.0.0.240/28 .240 到 .255 16 个地址
每个子网都精确落在自己的块边界上。办公区的 /25 从偏移 0 开始,是 128 的整数倍;研发的 /26 从 128 开始,是 64 的整数倍;摄像头的 /27 从 192 开始,是 32 的整数倍;管理的 /28 从 224 开始,是 16 的整数倍。
.240 到 .255 这 16 个地址未被分配。它们是一段连续空间,而且恰好是一个 /28,所以可以直接交给新的网段,而不打扰任何已有配置。这块富余正是"如实定尺寸"、而不是把一切都向上凑成 /24 的实际收益。
对比一下等长子网划分会是什么结果。四个 /26 只能给办公区 62 个可用地址,100 台设备的需求根本装不下;而且四个子网里有三个各自闲置 40 多个地址。VLSM 不仅装下了更大的办公区,还剩出了余量。
值得遵循的设计规则
- 按增长定尺寸,而不是按今天。先把设备数向上取整再推导前缀。从 /27 升到 /26 的代价是 32 个地址;而给生产网段重新编址的代价是一次维护窗口。
- 把尺寸相近的网段放在一起。把 /26 归拢在一起、/28 归拢在一起,方案更易读,留下的也是更大的连续空隙,而不是零散的小碎块。
- 刻意预留一块管理网段。环回地址和交换机管理接口很容易被遗忘,事后补又很别扭。在地址块靠上的位置划出一个 /28 或 /27 留给它们。
- 部署前先记录分配方案。方案只有在下一个接手的人读得懂时才有用。记录基础地址块、每个子网、其前缀、范围与用途。
- 考虑路由汇总。如果这个地址块要对外通告,保持连续意味着一条汇总路由就能覆盖所有子网。把方案拆到两段互不相关的范围里,上游看到的条目数量就会翻倍。
常见的 VLSM 错误
- 从小到大分配。这是最经典的错误,也是大多数"装不下"方案的成因。最大的子网最不灵活,必须先放。
- 让子网偏离边界。/27 必须从 32 的整数倍开始。10.0.0.192/27 合法;10.0.0.200/27 不合法,它会同时与 .192 和 .224 两个块重叠。
- 按主机数而不是地址数定尺寸。30 台设备的网段需要 32 个地址而不是 30 个,因为网络地址和广播地址不可分配。用 30 而不是 32 去推导前缀,是最常见的算术失误。
- 忘了点对点链路。路由器互联通常是最后加进来的,却也是最先让紧凑方案崩掉的东西。用 RFC 3021 的 /31 或 /30,并且从一开头就把它们计入需求清单。
- 地址范围重叠。与邻居重叠的子网行为不可预测 —— 有的主机通、有的不通,取决于每台路由器装了哪条路由。校验方案时务必确认没有任何地址同时出现在两个子网里。
- 搞错了基础地址块。划分之前先确认基础块。分配完之后才发现手上是 /25 而不是 /24,就得把整个方案重做。
接下来看什么
速查
| 前缀 | 地址数 | 可用主机 | 典型用途 |
|---|---|---|---|
| /31 | 2 | 2(RFC 3021) | 路由器之间、交换机之间的点对点链路 |
| /30 | 4 | 2 | 不支持 RFC 3021 时的点对点链路 |
| /32 | 1 | 1 | 环回接口与单个管理地址 |
| /28 | 16 | 14 | 小型网段:管理接口、打印机、小型测试机架 |
| /27 | 32 | 30 | 小型办公区与摄像头网段 |
| /26 | 64 | 62 | 中型网段与部门 LAN |
| /25 | 128 | 126 | 大型部门与楼层网段 |
| /24 | 256 | 254 | 标准扁平 LAN,默认的构建单元 |
| /23–/22 | 512–1,024 | 510–1,022 | 园区 LAN 与大型无线地址池 |
| /20–/16 | 4,096–65,536 | 4,094–65,534 | 站点汇总块与托管分配 |
表中的主机数是预留网络地址与广播地址之后的可用数量,所以一个 /27 从 32 个地址中提供 30 个可用主机。两个例外是 /31 —— RFC 3021 把它定义为不保留地址的双主机链路 —— 以及完全没有子网结构的单地址 /32。
常见问题
VLSM 是什么?
VLSM(可变长子网掩码)指的是在同一个地址块内使用不同的前缀长度。不是把一个 /24 平均切成四个各 62 台主机的 /26,而是划出一个 /25 给 100 台设备的办公区、一个 /26 给 50 台设备的实验室、一个 /27 给 20 路摄像头、一个 /28 给 10 个管理接口 —— 全部来自同一个 /24。地址块被切分成各网段真正需要的尺寸。
为什么必须从大到小分配?
因为最大的子网对起始位置的对齐要求最严格。/25 必须从 128 的整数倍开始,所以只能放在偏移 0 或 128。如果先在一个偏移 0 的位置放了 /28,剩下唯一可对齐的 /25 只能在偏移 128,后面要放的 /26 和 /27 可能就装不下了。先放最大的块可以保证每个块都有归宿,因为它之后剩余的空间永远是下一块大小的整数倍。
怎么从主机数推导出前缀?
把主机数加 2(给网络地址和广播地址),再找出能覆盖总数的最小 2 的幂。这个 2 的幂就是地址数,前缀等于 32 减去指数。以 50 台主机为例:需要 52,下一个 2 的幂是 64,即 2^6 = 64,前缀是 32 − 6 = /26。
为什么计算器有时会说这个方案装不下?
通常是因为基础地址块太小,或者某个单项需求对它来说太大。六个 /26 装不进一个 /24,一个 /23 的需求也永远装不进 /24。另一个原因是需求为 0 或 1 台主机 —— 那需要 /32,而只有在对齐位置上能容纳单个地址的块里才放得下。
要不要预留扩展空间?
要,而且 VLSM 让这件事成本很低。按你预计两年后的数量来定每个子网的尺寸,而不是今天的数量,然后把地址块尾部留空。在一份用掉 256 个地址中 240 个的方案里,那 16 个地址的空隙就是一块备用的 /28,可以给下一批摄像头或测试机架用 —— 不需要重新编任何地址就能直接使用。
VLSM 也适用于公网地址吗?
算术完全相同,不同的只是地址块的来源。用 RFC 1918 私有地址时你可以宽松一些,因为地址池实际上不花钱。用委派的公网地址块时,通常希望方案尽量紧凑,并保留连续的储备空间,以便日后汇总向运营商通告的路由。
方案里没用上的地址会怎样?
它们就留在地址块内未被分配。它们并不存在真正意义上的浪费 —— 不产生任何成本,而且如果日后需要更大的子网,它们仍是一段可用的连续空隙。唯一要避免的是在地址块中间留下无法利用的小碎片,而这正是从大到小分配所防止的碎片化。