1. 从一个真实翻车现场说起为什么固定子网掩码不够用刚入行那会儿我接手过一个园区网的地址规划。当时拿到手的任务很简单把 192.168.10.0/24 这个 C 类网段分给四个部门用。我心想这有什么难的直接一分为四每个部门 /26也就是 64 个地址整整齐齐收工。结果第二天就出事了。研发部那边跑过来拍桌子说他们 40 多号人加上测试机、虚拟机、容器实例64 个地址根本不够用光 Docker 网桥就吃掉一大片。而行政部那边呢一共就 8 个人每人一台电脑加一台打印机分给他们的 64 个地址用掉了不到 15 个剩下的全在那儿晒太阳。运维总监把我叫过去问了一句让我记到现在的话“你分地址是按人头平均分的还是按实际需求分的”这就是**固定长度子网掩码FLSM**最要命的地方——它要求每个子网大小完全一样。可现实世界里需求从来就不是均匀的。研发部要 100 个地址财务部只要 10 个你按最大需求切小部门浪费你按平均切大部门不够。两头堵。VLSMVariable Length Subnet Mask可变长子网掩码就是来解决这个矛盾的。它的核心思想一句话就能说清同一个主网段内不同子网可以使用不同长度的掩码。需求大的子网借位少一点留出更多主机位需求小的子网借位多一点把省下来的地址让给别的子网用。这就像切蛋糕不是平均切成八块而是谁饭量大给谁切大块最后整块蛋糕几乎不浪费。这篇文章我打算把 VLSM 从“为什么要用”到“怎么算”到“怎么排坑”完整讲一遍。适合正在备考网络方向认证的读者也适合刚接触 IP 规划、被 FLSM 折磨过的运维新人。我会尽量用生活化的类比加上可以直接抄的算例把这块硬骨头啃下来。2. VLSM 到底解决了什么问题从“平均分”到“按需分”2.1 先搞清楚子网掩码在干什么要理解 VLSM得先把子网掩码的本质说透。IP 地址由网络部分和主机部分组成子网掩码就是一把尺子用来量出哪几位是网络位、哪几位是主机位。掩码里连续的 1 对应网络位连续的 0 对应主机位。举个例子192.168.1.0/24 这个写法斜杠后面的 24 表示前 24 位是网络位剩下 8 位是主机位。8 位主机位能表示 2 的 8 次方等于 256 个地址去掉网络地址全 0和广播地址全 1可用主机地址是 254 个。这里有个很多人一开始会绕晕的点借位。当你把掩码从 /24 变成 /26意味着你从主机位里“借”了 2 位给网络位。借 2 位能划分出 2 的 2 次方等于 4 个子网每个子网剩 6 位主机位也就是 64 个地址、62 个可用。借得越多子网越多但每个子网越小。这就是子网划分的基本盘。2.2 FLSM 的死穴在哪里FLSM 要求所有子网掩码长度一致。假设你有一个 172.16.0.0/16 的 B 类私网地址段下面有三个部门部门 A 需要 500 个主机地址部门 B 需要 200 个主机地址部门 C 需要 50 个主机地址如果用 FLSM你得按最大的需求来切。500 个主机需要多少主机位2 的 9 次方是 512够用所以主机位至少 9 位掩码就是 /23。那么每个子网都是 /23能容纳 510 个可用地址。部门 A 用掉 500 个剩 10 个勉强部门 B 用掉 200 个浪费 310 个部门 C 用掉 50 个浪费 460 个三个部门一共用掉 750 个地址却占用了 3 乘以 512 等于 1536 个地址空间。浪费率超过一半。如果部门再多几个这种浪费会指数级放大。更要命的是如果后面又来了一个需要 600 个地址的新部门你连塞都塞不进去因为剩下的空间可能都是零碎的 /23 块。2.3 VLSM 的破局思路VLSM 的做法完全不同。它允许你给部门 A 分 /23510 个可用给部门 B 分 /24254 个可用给部门 C 分 /2662 个可用。同样是 172.16.0.0/16 这个大池子你可以这样排部门需求主机数分配网段掩码可用地址数实际浪费部门 A500172.16.0.0/23/2351010部门 B200172.16.2.0/24/2425454部门 C50172.16.3.0/26/266212总占用从 1536 个地址降到 826 个省下来的地址还能继续分给其他部门或者留给未来扩展。这就是 VLSM 的威力——按需分配颗粒度精细。注意VLSM 的前提是你用的路由协议必须支持传递掩码信息。像 RIPv1、IGRP 这类有类路由协议是不支持 VLSM 的因为它们在进行路由通告时不携带子网掩码。RIPv2、OSPF、EIGRP、BGP 这些无类路由协议才支持。这一点在实际组网时如果搞错会出现路由黑洞或者邻居关系起不来的问题。3. 手把手算一遍VLSM 子网划分的完整流程3.1 划分前的准备工作动手算之前先把三样东西准备好第一确定主网段。比如你拿到的是 192.168.100.0/24这就是你的总池子一共 256 个地址。第二列出所有子网的需求并且按主机数量从大到小排序。这一步非常关键排序错了后面会乱套。假设有四个部门研发部100 台主机市场部50 台主机财务部20 台主机管理层5 台主机第三确认每个子网需要的地址块大小。这里有个公式要记住满足 N 台主机所需的最小地址块 2 的 k 次方其中 k 是满足 2 的 k 次方减 2 大于等于 N 的最小整数。减 2 是因为要去掉网络地址和广播地址。如果算出来刚好等于 2 的幂比如需要 62 台主机2 的 6 次方减 2 等于 62刚好够那就用 64 的块。如果需求是 63 台那就得往上取到 128 的块。3.2 按需求从大到小依次分配现在开始分配。核心原则是先满足大需求再满足小需求每次分配都从当前可用空间的起始位置开始并且分配的块大小必须是 2 的幂。第一步研发部需要 100 台主机。2 的 7 次方减 2 等于 126够用。所以块大小是 128主机位需要 7 位掩码是 /25因为 32 减 7 等于 25。从 192.168.100.0 开始分配 192.168.100.0/25。网络地址192.168.100.0广播地址192.168.100.127可用范围192.168.100.1 到 192.168.100.126下一个可用起始地址192.168.100.128第二步市场部需要 50 台主机。2 的 6 次方减 2 等于 62够用。块大小 64主机位 6 位掩码 /26。从 192.168.100.128 开始分配 192.168.100.128/26。网络地址192.168.100.128广播地址192.168.100.191可用范围192.168.100.129 到 192.168.100.190下一个可用起始地址192.168.100.192第三步财务部需要 20 台主机。2 的 5 次方减 2 等于 30够用。块大小 32主机位 5 位掩码 /27。从 192.168.100.192 开始分配 192.168.100.192/27。网络地址192.168.100.192广播地址192.168.100.223可用范围192.168.100.193 到 192.168.100.222下一个可用起始地址192.168.100.224第四步管理层需要 5 台主机。2 的 3 次方减 2 等于 6够用。块大小 8主机位 3 位掩码 /29。从 192.168.100.224 开始分配 192.168.100.224/29。网络地址192.168.100.224广播地址192.168.100.231可用范围192.168.100.225 到 192.168.100.230下一个可用起始地址192.168.100.232剩下的 192.168.100.232 到 192.168.100.255 一共 24 个地址可以留着做未来扩展或者再切成更小的块给点对点链路用。3.3 用表格复盘整个分配过程顺序部门需求块大小掩码网络地址可用范围广播地址1研发部100128/25.0.1-.126.1272市场部5064/26.128.129-.190.1913财务部2032/27.192.193-.222.2234管理层58/29.224.225-.230.231预留--24-.232.233-.254.255这张表建议你每次做 VLSM 划分时都画一遍肉眼检查有没有重叠、有没有漏掉。尤其是网络地址和广播地址一旦算错轻则地址冲突重则整个子网通信异常。3.4 点对点链路的特殊处理实际组网里经常遇到路由器之间的互联链路这种点对点链路只需要两个可用地址。如果用 /30块大小 4可用地址 2 个刚好。但 /30 有个问题一个 /24 最多只能切出 64 个 /30如果链路特别多地址消耗还是不小。现在很多场景会用 /31这是 RFC 3021 定义的点对点链路专用块大小 2两个地址都可用不需要网络地址和广播地址。不过 /31 需要设备支持老设备可能不认。还有一种做法是用 /32 配环回口这个在 OSPF、BGP 里很常见用来做 Router ID 或者建立邻居。实操心得做 VLSM 规划时我习惯先把所有点对点链路单独拎出来统一用 /30 或者 /31 规划在一个连续的地址段里不要和主机子网混在一起。这样后期排查路由问题的时候一眼就能看出哪些网段是链路、哪些是用户网段维护成本低很多。4. VLSM 在实际组网中的落地要点与避坑指南4.1 路由协议的支持情况VLSM 能不能跑起来取决于路由协议是否传递掩码。这个点我在前面提过但值得展开说因为这是实际项目里最容易翻车的地方。有类路由协议RIPv1、IGRP在通告路由时只通告网络地址不带掩码。接收方会根据自己接口的掩码或者默认的有类掩码来推断。如果你在一个主网段里用了不同长度的掩码接收方推断出来的掩码可能和实际不一致导致路由表里出现错误的条目流量被导向错误的方向。无类路由协议RIPv2、OSPF、EIGRP、IS-IS、BGP在通告时携带掩码信息接收方直接使用通告里的掩码不会推断错误。所以只要你用的是这些协议VLSM 就能正常工作。路由协议是否支持 VLSM是否支持 CIDR备注RIPv1否否有类通告不带掩码IGRP否否有类已淘汰RIPv2是是无类组播更新OSPF是是链路状态区域化设计EIGRP是是高级距离矢量IS-IS是是链路状态运营商常用BGP是是路径矢量互联网骨干如果你接手的是一个老网络里面还跑着 RIPv1那要么升级协议要么就别用 VLSM否则一定出问题。升级协议之前也要评估设备兼容性有些老设备可能不支持 RIPv2 的认证或者组播更新。4.2 地址规划的顺序原则VLSM 划分有一个铁律从大到小分配从低位到高位使用。这句话听起来简单但实际做的时候很多人会搞反。为什么从大到小因为大块需要连续的空间如果你先分了小块把地址空间切碎了后面大块就找不到连续的整块了。就像停车场停车大卡车需要连续的车位你先塞了一堆摩托车大卡车就进不来了。为什么从低位到高位这是个人习惯问题但统一之后好处很明显所有子网的起始地址都是某个 2 的幂的倍数算起来快看起来也整齐。比如 /25 的起始地址一定是 0 或 128/26 的起始地址一定是 0、64、128、192。你一眼就能判断某个地址属于哪个子网。4.3 子网掩码计算的快速心算技巧做 VLSM 的时候频繁要在掩码长度和块大小之间转换。我总结了一个快速对照表背下来能省很多时间掩码主机位块大小可用主机数常见用途/248256254中型用户网段/257128126大型部门/2666462中型部门/2753230小型部门/2841614小型办公区/29386管理层、设备管理/30242点对点链路/31122点对点链路RFC 3021/32011环回口、主机路由这张表建议打印出来贴在工位上用多了自然就记住了。心算的时候看到 /27 立刻反应出块大小 32、可用 30看到 /29 反应出块大小 8、可用 6。速度提上来之后规划一个 /16 的网段也就十几分钟的事。4.4 常见错误与排查思路错误一子网重叠。这是最致命的错误。两个子网如果地址范围有交集设备就会懵不知道该往哪个接口转发。排查方法是把所有子网的网络地址和广播地址列出来两两对比。如果 A 子网的广播地址大于等于 B 子网的网络地址且 A 子网的网络地址小于等于 B 子网的广播地址那就重叠了。错误二网关地址配错。网关地址必须在子网的可用范围内不能是网络地址或广播地址。我见过有人把网关配成网络地址的结果整个子网上不了网。排查方法是 ping 网关如果不通先检查网关地址是否合法。错误三掩码写错。比如把 /26 写成 /27可用地址数从 62 变成 30多出来的设备就上不了线。这种错误在手工配置时很常见建议用配置模板或者自动化工具来减少人为失误。错误四路由汇总没做。VLSM 划分之后如果每个子网都单独通告路由路由表会变得很大。应该在边界路由器上做路由汇总把连续的多个子网合并成一条汇总路由。比如 192.168.100.0/25 和 192.168.100.128/26 可以汇总成 192.168.100.0/24。汇总的前提是这些子网在地址空间上连续并且都走同一个下一跳。提示做路由汇总时汇总路由的掩码长度不能小于主网段的掩码长度。比如主网段是 /24你就不能汇总成 /23因为那会覆盖到主网段之外的地址。这个坑我在实际项目里踩过汇总配错导致流量被黑洞路由吸走排查了大半天。5. 从 VLSM 到 CIDR地址规划思维的延伸5.1 VLSM 和 CIDR 的关系VLSM 和 CIDR无类别域间路由经常被放在一起讲但它们是两个层面的东西。VLSM 是在一个主网段内部用不同长度的掩码划分子网解决的是子网划分的灵活性问题。CIDR 是在互联网骨干层面把多个连续的主网段合并成一条路由解决的是路由表膨胀问题。打个比方VLSM 像是你把一套房子隔成不同大小的房间主卧大一点、次卧小一点、储物间再小一点。CIDR 像是把整栋楼里相邻的几套房子合并成一个单元对外只报一个门牌号。两者配合使用才能把地址空间管得既精细又高效。5.2 超网与路由汇总的实操CIDR 的核心操作是超网Supernetting也就是把多个连续的子网合并成一条路由。比如你有四个连续的 /24 网段192.168.0.0/24192.168.1.0/24192.168.2.0/24192.168.3.0/24这四个网段可以汇总成 192.168.0.0/22。怎么算的四个 /24 需要 2 位来区分所以掩码从 /24 减 2 变成 /22。汇总后的网络地址是这四个网段的共同前缀也就是 192.168.0.0。汇总的时候要注意这四个网段必须在地址空间上连续并且汇总后的网段不能包含不属于你的地址。比如你不能把 192.168.0.0/24 和 192.168.2.0/24 汇总成 /23因为 /23 会覆盖到 192.168.1.0/24而那个网段可能不属于你。5.3 地址规划的最佳实践清单做了这么多年的地址规划我总结了几条经验列出来供你参考预留足够的扩展空间每个子网的实际分配量不要超过可用地址的 70%留 30% 给未来增长。比如需要 100 个地址别用 /25 的 126 个直接用 /24 的 254 个虽然当下浪费但省去了后期重新规划的麻烦。按区域或功能划分大块比如办公区用 10.1.0.0/16服务器区用 10.2.0.0/16链路区用 10.3.0.0/16。这样路由汇总的时候一条 10.1.0.0/16 就能覆盖整个办公区路由表干净。文档化每次划分完把网段、掩码、网关、用途、负责人记在表格里存到共享文档。我见过太多项目因为没文档换个人接手就得从头猜。用工具验证手工算完之后用 IP 计算器或者在线子网划分工具验证一遍。推荐几个常用的ipcalc、subnet-calculator、还有各种网络认证备考的练习工具。工具不会骗你手工算错了工具能帮你抓出来。考虑 IPv6 的过渡虽然现在很多网络还在用 IPv4 加 VLSM但 IPv6 的地址规划思路完全不同。IPv6 不需要 VLSM 这种精细切分因为地址空间大到几乎用不完。但 VLSM 培养出来的“按需分配”思维在 IPv6 的地址规划里依然适用。5.4 一个完整的综合案例最后用一个综合案例把 VLSM 和 CIDR 串起来。假设某公司拿到 10.10.0.0/16 这个私网地址段需要规划以下子网总部办公区500 台主机分部 A200 台主机分部 B100 台主机服务器区50 台主机管理网段20 台主机路由器互联链路6 条第一步按需求排序。500、200、100、50、20、6 条链路。第二步逐个分配。总部办公区500 台需要 512 的块/23。分配 10.10.0.0/23可用 10.10.0.1 到 10.10.1.254。分部 A200 台需要 256 的块/24。分配 10.10.2.0/24可用 10.10.2.1 到 10.10.2.254。分部 B100 台需要 128 的块/25。分配 10.10.3.0/25可用 10.10.3.1 到 10.10.3.126。服务器区50 台需要 64 的块/26。分配 10.10.3.128/26可用 10.10.3.129 到 10.10.3.190。管理网段20 台需要 32 的块/27。分配 10.10.3.192/27可用 10.10.3.193 到 10.10.3.222。路由器互联6 条链路每条需要 4 个地址的 /30 块。6 条链路需要 6 个 /30总共 24 个地址。从 10.10.3.224 开始分配 6 个 /30链路 110.10.3.224/30链路 210.10.3.228/30链路 310.10.3.232/30链路 410.10.3.236/30链路 510.10.3.240/30链路 610.10.3.244/30第三步路由汇总。总部办公区 10.10.0.0/23 和分部 A 10.10.2.0/24、分部 B 10.10.3.0/25 可以汇总成 10.10.0.0/22。服务器区和管理网段在 10.10.3.128 到 10.10.3.222 之间可以汇总成 10.10.3.128/25。链路区在 10.10.3.224 到 10.10.3.247 之间可以汇总成 10.10.3.224/27。这样对外通告的时候只需要三条汇总路由10.10.0.0/22、10.10.3.128/25、10.10.3.224/27。路由表从十几条缩减到三条效率提升非常明显。汇总路由覆盖范围包含子网10.10.0.0/2210.10.0.0 - 10.10.3.255总部、分部 A、分部 B10.10.3.128/2510.10.3.128 - 10.10.3.255服务器区、管理网段10.10.3.224/2710.10.3.224 - 10.10.3.2556 条互联链路注意这里有个细节10.10.3.128/25 和 10.10.3.224/27 在地址范围上有重叠因为 /25 覆盖了 128 到 255而 /27 覆盖了 224 到 255。实际配置的时候更精确的汇总应该是把服务器区和管理网段汇总成 10.10.3.128/26覆盖 128 到 191链路区汇总成 10.10.3.224/27覆盖 224 到 255中间 192 到 223 留给管理网段单独通告或者再汇总。这个细节说明汇总不是越粗越好要精确匹配实际使用的地址范围避免把不属于自己的地址也通告出去。6. 我在实际项目里踩过的坑和总结的技巧6.1 别忽视广播域和地址浪费的平衡VLSM 让地址利用率提高了但有个副作用子网变小了广播域也变小了。这本来是好事因为广播域越小广播风暴的影响范围越小。但如果你把子网切得太碎比如一个部门 30 个人切成 /27 的 30 个可用地址结果部门扩招到 35 人你就得重新规划。所以切分的时候要留余量宁可稍微浪费一点也别卡得太死。我的经验是按当前需求的 1.5 到 2 倍来分配。需要 30 个地址就给 /26 的 62 个需要 100 个就给 /24 的 254 个。多出来的地址不是浪费是给未来买的保险。6.2 网关地址的选择有讲究网关地址通常选子网的第一个可用地址或者最后一个可用地址。选第一个的好处是直观比如 192.168.1.1 是网关大家一看就懂。选最后一个的好处是方便记忆比如 192.168.1.254。两种都行关键是整个网络统一。但有一个坑要注意如果你用的是 HSRP 或者 VRRP 做网关冗余虚拟网关地址不能和物理接口地址冲突。通常的做法是物理接口用 .2 和 .3虚拟网关用 .1。这个规划要在 VLSM 阶段就定好别等到配置的时候才发现地址不够用。6.3 文档和自动化工具能救命我见过一个项目地址规划做得挺漂亮但文档只存在某个工程师的脑子里。后来那个工程师离职了新来的人对着网络设备一脸懵不知道哪个网段是干什么的不敢动任何配置。最后花了两个月重新梳理期间出了好几次故障。所以我现在做任何地址规划都会同步维护一份表格包含以下字段子网名称、网络地址、掩码、可用范围、网关、VLAN ID、用途、负责人、分配日期。这份表格放在共享文档里任何人接手都能看懂。如果团队有自动化平台还可以把这份表格导入 IPAMIP 地址管理系统自动检测冲突和利用率。6.4 常见问题速查表问题现象可能原因排查方法解决方法部分主机无法上网网关地址配错或掩码错误ping 网关检查 IP 配置修正网关或掩码两个子网互相 ping 不通子网重叠或路由缺失检查路由表对比子网范围重新规划子网添加路由路由表条目过多未做路由汇总查看路由表条目数在边界做 CIDR 汇总新设备接入后冲突地址池耗尽或 DHCP 范围重叠检查 DHCP 日志和地址池扩大地址池或重新划分路由协议邻居起不来协议不支持 VLSM 或掩码不匹配检查协议版本和接口掩码升级协议或统一掩码这张表是我从多次故障处理中总结出来的基本上覆盖了 VLSM 相关的常见问题。遇到问题的时候按表排查能省不少时间。6.5 最后分享一个练习方法VLSM 这个东西看再多不如自己动手算。我的练习方法是随机选一个 /16 或者 /24 的网段随机生成 5 到 8 个不同大小的需求然后限时 10 分钟完成划分和汇总。算完之后用工具验证错了就重来。练上二三十遍基本就能做到看到需求就能在脑子里出方案。推荐几个练习工具ipcalc 命令行工具、各种在线子网计算器、还有网络认证的模拟题库。工具只是辅助核心还是要把那套“从大到小、从低位到高位”的逻辑刻在脑子里。等你哪天拿到一个 /22 的网段能在五分钟内把十个部门安排得明明白白VLSM 这块就算真正过关了。