VLSM 子网规划器
总部给你一段 IP,要分给 N 个部门(每个部门需求量不同)。如果手动算 → 浪费一下午。这个工具 3 秒出方案。
什么是 VLSM
VLSM(Variable Length Subnet Masking,可变长子网掩码)。
传统子网划分:所有子网大小相同(等长子网)。比如 /24 划成 4 个 /26,每个 62 IP —— 但销售部要 100 人,技术部只要 10 人,浪费巨大。
VLSM 按需求分配:大部门大子网,小部门小子网。最大节约地址。
它能做什么

输入原始网络 + 各部门主机需求,自动按贪心算法分配最优子网。
例:把 192.168.1.0/24 划给 4 个部门:
需求: 100, 50, 20, 10
排序: 100, 50, 20, 10(从大到小)
分配:
销售(100): 192.168.1.0/25 (126 可用)
财务(50): 192.168.1.128/26 (62 可用)
技术(20): 192.168.1.192/27 (30 可用)
行政(10): 192.168.1.224/28 (14 可用)
剩余: 22 IP
使用场景
场景 1:公司分支办公网规划
总部 IP 段:10.1.0.0/16
部门需求:
- 销售部: 500 人
- 研发部: 300 人
- 行政部: 100 人
- 财务部: 30 人
- 会议室: 20 个 AP
→ 一键出方案,按需求精准分配。
场景 2:多门店连锁
总部 IP 段:172.16.0.0/16
- 旗舰店(最大):300+ 设备
- 标准店:100 设备
- 迷你店:20 设备
→ 顶级店用 /22,普通店 /25,迷你店 /27。
场景 3:学校机房
192.168.100.0/22 划分为:
- 高三机房:100 台电脑
- 高二机房:80 台
- 阅览室:30 台
- 办公室:15 台
核心算法
贪心策略 —— 按需求从大到小逐个分配:
def vlsm_plan(network, host_needs):
sorted_needs = sorted(host_needs, reverse=True)
next_avail = int(network.network_address)
allocations = []
for need in sorted_needs:
prefix = hosts_to_prefix(need) # 计算最小前缀
candidate = IPv4Network(f'{int_to_ip(next_avail)}/{prefix}', strict=False)
allocations.append({...})
next_avail = int(candidate.broadcast_address) + 1
return allocations
为什么贪心是对的?
VLSM 的核心要求是子网连续且不重叠。贪心策略保证"先满足大需求,剩下的给小需求",避免大需求被切割成多个小段。
反例:如果先满足小需求:
192.168.1.0/27 → 30 IP ← 行政部(只要 10)
192.168.1.32/26 → 62 IP ← 研发部(要 80,不够!)
必须给研发部 /25 = 128 IP,但 /27 + /26 已经用到了 .32,/25 起始必须是 .0 或 .128,地址已经碎片化。
贪心避免这个坑。
常见陷阱
1. 算错前缀
def hosts_to_prefix(need):
n = 0
while (2**n) - 2 < need: # ← 别忘了减 2(网络+广播地址)
n += 1
return 32 - n
# hosts_to_prefix(100) → /25 (126 可用)
# hosts_to_prefix(126) → /25 (126 可用,刚好)
# hosts_to_prefix(127) → /24 (254 可用)
2. 浪费在"边界对齐"
子网必须从对齐边界开始。/26 的子网起始必须是 0, 64, 128, 192。
3. 总容量校验
如果所有需求加起来超过原网络可用 IP,会划分失败。工具会自动检测。
在线使用
简单子网划分用 CIDR 子网计算器 就行;多部门规划才用 VLSM。
学习建议
- 先手算 2 个例子 → 理解贪心
- 再用工具验证
- 最后尝试反转:给定一段 IP 划分,反推每个部门的规模
这就是 VLSM 的精髓。
📱 关注「网英的日常」,系统化学习数通知识!