如果你刚接触网络,多半听过一句话:不会子网划分,等于还没真正理解IP网络。这句话不是吓唬人。我在排查网络故障时见过太多"掩码写错导致整个网段不通"、"汇总路由写错导致流量绕路"的案例。子网划分和子网汇总练习的意义不在于应付考试,而是让你在看到任何一个IP地址和掩码时,能在脑子里立刻画出它的边界、范围和归属。这篇文章就围绕这两个核心技能展开,配合由浅入深的练习题,把原理、算法、错误点和验证方法一次讲透。
1. 子网划分到底在解决什么问题:借位、掩码与"块大小"
1.1 先补一点基础:网络位和主机位
一个IPv4地址是32位二进制,平时看到的点分十进制只是给人看的。无论掩码是255.255.255.0还是/24,本质上都是在划定两个区域:网络位和主机位。网络位表示"你属于哪个网段",主机位表示"你是这个网段里的第几台设备"。
比如192.168.1.10/24,前24位是网络部分,后8位是主机部分。这个网段里最小的地址192.168.1.0是网络地址,最大的192.168.1.255是广播地址,能分配给设备的只有中间的254个。
子网划分做的事情,就是从主机位里"借"几位出来,当作额外的网络位。借出来的这几位,决定了你能分出多少个子网;剩下没借的位数,决定了每个子网里有多少台主机。
这个概念听起来简单,但很多人栽在"借位之后地址怎么算"上。所以我建议你把所有计算都回归到二进制上,至少练习阶段要这样。熟练之后再跳到十进制快速算法。
1.2 借位的数学:每借一位,子网翻倍,主机减半
假设给了一个192.168.10.0/24网段,原封不动使用,它是一个子网,256个地址,可用主机254台。
- 借1位:子网数变成2个(2的1次方),主机位剩7位,每个子网128个地址,可用主机126台
- 借2位:子网数变成4个,主机位剩6位,每个子网64个地址,可用主机62台
- 借3位:子网数变成8个,主机位剩5位,每个子网32个地址,可用主机30台
这里有一个天然的约束:每借一位,可用主机数大约减半,而且还要再减掉网络地址和广播地址。借得太狠,地址不够设备用;借得太少,子网不够部门分。这就是为什么练习时要先列需求,再反推位数。
我习惯先列一个对比表:
| 借位数 | 子网数 | 剩余主机位 | 每个子网可用主机数 | 对应掩码(以/24为基础) |
|---|---|---|---|---|
| 0 | 1 | 8 | 254 | /24 |
| 1 | 2 | 7 | 126 | /25 |
| 2 | 4 | 6 | 62 | /26 |
| 3 | 8 | 5 | 30 | /27 |
| 4 | 16 | 4 | 14 | /28 |
| 5 | 32 | 3 | 6 | /29 |
| 6 | 64 | 2 | 2 | /30 |
这张表是我练习时的老朋友,几乎每个题都要先看一下。特别是/30,只有2个可用主机地址,专门用来做路由器之间的点对点链路,这是很多初学者容易忽略的用途。
1.3 练习前必会的快速算法:256减去掩码值
十进制掩码和一个计算技巧息息相关:最后一段非255的掩码值,用256减去它,得到的就是地址块大小。
举个例子:掩码255.255.255.192,256减192等于64,说明每个子网块大小是64个地址。掩码255.255.255.240,256减240等于16,每个子网块大小是16。如果要走前缀长度路线,也可以用2的(32减前缀长度)次方来算,/26就是2的6次方等于64,/28就是2的4次方等于16。
这个"块大小"能直接决定子网的网络地址。一个子网的网络地址必须能被块大小整除。192.168.10.0/26的块是64,所以子网从0、64、128、192开始,而不是从1、2、3开始。
我有一次在配置交换机接口时,把第二个子网的网络地址写成了192.168.10.1/26,这个地址压根不是有效网络地址。设备虽然没有报错,但相邻设备通过路由协议学习到的网段完全错乱。检查了半天才发现是网络地址没按64对齐。这个教训让我养成了一个习惯:凡是涉及子网规划,先算块大小,再写网络地址。
2. 手推四道划分题:从固定均分到VLSM混合掩码
2.1 练习一:四个部门各60台主机的固定均分
需求很典型:拿到192.168.10.0/24,有4个部门,每个部门需要60个可用IP,要求网段不能重叠。
先用反向思路。60台设备,往上取2的幂,2的6次方是64,也就是说每个子网至少要保留6个主机位。64减2,可用主机62台,刚好覆盖60台。此时借位数是8减6等于2,掩码变成/26,子网数量是4个。
然后算网络地址。块大小是64,四个子网从0开始依次递增:
- 192.168.10.0/26,可用范围192.168.10.1到192.168.10.62,广播地址192.168.10.63
- 192.168.10.64/26,可用范围192.168.10.65到192.168.10.126,广播地址192.168.10.127
- 192.168.10.128/26,可用范围192.168.10.129到192.168.10.190,广播地址192.168.10.191
- 192.168.10.192/26,可用范围192.168.10.193到192.168.10.254,广播地址192.168.10.255
注意每段的网络地址都是上一段广播地址加1。这个规律在快速计算时非常有用。拿到任何一段,先写网络地址,再加块大小减1得到广播地址,中间就是可用主机段。
这道题里有个常见错误:有人看到60台主机,下意识选/30或/28,因为他们只算了2的多少次方能覆盖60,却忘了先给主机位留够位置再算借位。换句话说,题目要先确定主机位,再反推掩码,顺序反了很容易错。
2.2 练习二:8条点对点链路用/30划分配置
场景是分公司之间8条串行链路,每条链路只需要两端路由器的互联地址。如果用一个大网段去分,地址浪费严重,这时候/30就非常合适。
假设从10.10.10.0/24里取一段专门用于链路互联,掩码/30的块大小是4。借位后每个子网只有4个地址,其中2个可用。8条链路需要8个子网,占用32个地址,于是可以规划:
- 10.10.10.0/30:可用10.10.10.1和10.10.10.2,广播10.10.10.3
- 10.10.10.4/30:可用10.10.10.5和10.10.10.6,广播10.10.10.7
- 10.10.10.8/30:可用10.10.10.9和10.10.10.10,广播10.10.10.11
- 一直排到10.10.10.28/30,可用10.10.10.29和10.10.10.30
这种写法在配置设备互联端口时很常见。两端设备各取一个可用IP,通常是第一个给A端,第二个给B端,便于后期排查。运维人员看到10.10.10.1和10.10.10.2,就能猜出这是同一条链路的互联地址,省去翻文档的时间。
这道题还有个小坑:链路地址往往和业务地址混在一起。如果10.10.10.0/24这个网段既做业务网段,又做链路网段,就必须在规划表里明确标注哪些块是链路用的,哪些块是终端用的。我在实际项目里见过把10.10.10.0/30误分给办公终端的配置,结果网关和PC不在同一子网,办公网直接瘫痪。
2.3 练习三:不同规模部门用VLSM混合掩码
固定均分虽然好算,但真实环境往往不平均。比如有一个172.16.0.0/16的大网段,需要划分成:
- 研发部500台主机
- 市场部120台主机
- 财务部30台主机
- 10条点对点链路
如果全部用均分,为了满足500台的需求,每个子网至少需要512个地址,掩码是/23。再借3位,总共能分出32个/23子网。市场部120台、财务部30台也用/23,显然浪费巨大。这时候就要用VLSM,可变长子网掩码。
划分顺序有讲究,先把最大的需求分掉:
研发部需要500台,至少9个主机位,2的9次方是512。从172.16.0.0/16开始,先分一个/23网段172.16.0.0/23,可用地址从172.16.0.1到172.16.1.254,满足500台。
市场部120台,至少7个主机位,2的7次方是128。从172.16.2.0/24开始提一个网段?不对,120台需要128个地址,主机位7位,掩码是/25。但/25的块大小是128,从172.16.2.0开始有172.16.2.0/25和172.16.2.128/25两个子网,取前一个给市场部,可用172.16.2.1到172.16.2.126。
注意这里有个细节:172.16.2.0/24被拆成了两个/25子网,其中172.16.2.128/25还可以继续做别的用途。VLSM的核心思想就是允许这种"大块套小块"的层次化划分。
财务部30台,需要5个主机位,2的5次方32。可以用继续从172.16.2.128/25里取出前半段?不行,/25不能被拆成/27?其实可以,/25有128个地址,/27块大小32,可以拆成4个/27。取第一个172.16.2.128/27给财务部,可用172.16.2.129到172.16.2.158。
链路部分可以用/30,从172.16.2.192/27剩余部分继续拆,比如172.16.2.192/30、172.16.2.196/30等等,每条链路4个地址。
这样规划下来,地址利用率比固定均分高很多。但也带来了管理复杂度:一张网段表里同时存在/23、/25、/27、/30,全靠表格管理。如果你用路由协议自动汇总,VLSM环境下格外容易出路由黑洞,后面会专门说。
2.4 练习四:子网起始位置不在边界时的划分
前面几道题都是从网段起点开始分,实际运维中常常遇到"只能从某个地址开始分"的情况。比如从10.0.0.128/25这个网段里,要分出4个一样大小的子网给监控系统。
/25有128个地址,借2位变成/27,块大小32。起始地址是10.0.0.128,那么4个子网就是:
- 10.0.0.128/27:可用129到158,广播159
- 10.0.0.160/27:可用161到190,广播191
- 10.0.0.192/27:可用193到222,广播223
- 10.0.0.224/27:可用225到254,广播255
这道题想说明的是:子网划分不受"必须从0开始"的限制。只要起始地址是块大小的整数倍,就可以从中间任意位置开始切。10.0.0.128能被32整除,所以/27子网可以从128开始。如果起始地址是10.0.0.130,那就无法直接分/27,因为130不能被32整除,必须先调整起始地址到128或160。
实际做地址规划时,我会先在Excel里写一张表,列出每个子网的网络地址、广播地址、可用范围、用途,然后用"地址是否重叠"来反向校验。手工算完必须做这一步校验,特别是VLSM场景,重叠问题非常隐蔽。
3. 子网汇总练习:把一组路由合并成一条路由的完整思路
3.1 汇总的本质是找最长公共前缀
子网划分是从一个网段里切出若干小块,子网汇总正好相反:从小块向上找它们共同的前缀,再用一个更大的掩码覆盖它们。
最经典的练习题是:192.168.1.0/24和192.168.2.0/24要合并成一条路由。先看第三字节的二进制:
- 1 = 00000001
- 2 = 00000010
从最高位往下比,第一位都是0,第二位都是0,第三位都是0,第四位都是0,第五位都是0,第六位都是0。到第七位时,1是0,2是1,不一样了。所以共同前缀是前22位,汇总路由是192.168.0.0/22。
这里很多人疑惑:为什么网络地址是192.168.0.0,而不是192.168.1.0?因为前缀的后面10位主机位都归0,第三字节的00000001后两位归0后就是00000000。也就是说,汇总路由一定会把一些"额外的网段"包含进来。192.168.0.0/22不仅覆盖1.0和2.0,还覆盖了0.0和3.0。
这就是汇总的两面性:路由表更精简,但覆盖范围变大后可能引入多余的路径。如果这些额外网段实际不存在,流量会被送进黑洞。所以做汇总之前必须确认被覆盖的地址段都没有其他用途。
3.2 汇总练习:连续网段与跨网段混合
再练一个稍复杂的:把172.16.32.0/24到172.16.35.0/24这4个连续网段汇总成一条路由。
第三字节32到35的二进制:
- 32 = 00100000
- 33 = 00100001
- 34 = 00100010
- 35 = 00100011
前6位都是001000,后2位在变化。加上前16位,汇总前缀是/22,网络地址是172.16.32.0/22。覆盖范围是172.16.32.0到172.16.35.255,正好等于4个/24子网,不多不少。
再来一个不连续的:10.1.1.0/24、10.1.2.0/24、10.1.3.0/24这三个网段要汇总。
三个第三字节分别是00000001、00000010、00000011,逐位比较后,前6位相同,前缀/22,汇总后是10.1.0.0/22。这个汇总覆盖了10.1.0.0到10.1.3.255,比原来的三个网段多了一个10.1.0.0/24。
如果10.1.0.0/24已经被其他业务占用,就不能用这个汇总。退一步可以用两条:10.1.2.0/23覆盖2.0和3.0,再加一条10.1.1.0/24。这个例子说明:汇总不是唯一的,必须结合地址占用情况来选。
3.3 汇总里的常见判断误区
误区一:连续网段一定能精确汇总。实际上,只有网段数量恰好是2的整数次幂,且起始地址是对应块的倍数时,才能精确汇总。比如64个连续/24网段(从192.168.0.0到192.168.63.0)可以汇总成192.168.0.0/18。如果只有从0到62这63个网段,就不能用一个精确的聚合块覆盖,需要拆成/18加/24两条。
误区二:掩码越长越精确。在汇总语境下,掩码越短覆盖范围越大,但它们并不代表"好坏"。汇总的目的是让路由表变小,但必须以不误伤其他网段为前提。如果为了表格好看强行汇聚,把不相关的网段也罩进去,排查问题时你会付出更大的代价。
误区三:忽视黑洞路由。动态路由协议中,如果上游设备对某个大段做了汇总,但下游没有对应的明细路由,转发时就会丢包。此时往往需要配一条指向Null0的黑洞路由,把"不存在的子网"挡在边界上。这个操作在很多厂家的设备配置里都有,但要小心别把真实流量也一起黑洞了。
4. 练习中的错题集:五个反复出现的翻车点
翻车点一:可用主机数忘了减2。这是最基础也最常见的。算出来一个/27子网有32个地址就直接写"可用IP32个",结果设计文档里网关占了一个、服务器占了一个,最后终端不够用。记住公式:可用主机数等于2的主机位次方减2。
翻车点二:广播地址写错。有人会把广播地址写成"网络地址加可用主机数",比如/26网络地址0,可用主机数62,于是写广播地址62。正确算法是网络地址加块大小减1,0加64减1等于63。网络地址、可用地址、广播地址三者的关系是:可用地址范围是网络地址加1到广播地址减1。
翻车点三:掩码和前缀长度换算不熟。特别是/23这类"非整字节"掩码。255.255.254.0很多人看到254就懵。其实256减254等于2,说明块大小是2,也就是/23包含两个/24网段。我用这个方法帮好几个同事解决了"离线换算工具不能用时手算不会"的尴尬。
翻车点四:子网重叠。划分时从不同的大网段出发,最后交叠了。比如172.16.0.0/23覆盖了172.16.1.0,又单独分配了172.16.1.0/24,两个网段冲突而不自知。这种问题在路由表里会表现为路由震荡或者时通时断,非常难查。
翻车点五:只算数量不算质量。给一个部门分配了/29子网,主机数明明够6台,但部门未来要加设备,半年后又得重新规划。规划时稍微留一点余量,比以后割接省事很多。这不光是数学题,还是管理题。
我自己练题时,错题会记录在一个文档里,每道错题写三行:错在哪、为什么错、下一次怎么避免。练到后期,很多错误看一眼数字就能反应过来,这种条件反射在真实排障时很值钱。
5. 借一个真实场景:把划分和汇总串成一条线
某公司有一个总部和8个分公司,总部拿到一个10.10.0.0/16网段,分公司数量固定,未来5年内最多扩到16个。每个分公司内部需要一个业务网段和一个管理网段,总部的服务器区再单独分一段。
先给分公司编号。未来最多16个分公司,需要4位子网位,从10.10.0.0/16借4位变成10.10.0.0/20,这样有16个子网,每个子网包含4096个地址,每个子网内部还能继续细分。
分公司1拿到10.10.0.0/20。内部再分:业务段和办公段各一半,借1位变成两个/21,业务段10.10.0.0/21,办公段10.10.8.0/21。如果办公段还要细分,比如前台、研发、财务,可以从10.10.8.0/21继续借位,分出多个/24或更小段。
总部服务器的地址段可以从10.10.240.0/20里取,这个段比较大,后续做安全策略时好写规则。链路地址则单独从10.10.248.0/21里分配,用/30的子网给总部到每个分公司的互联口。
等所有规划做完,路由汇总变得很清爽。分公司1的所有业务网段都可以汇总成10.10.0.0/20,总部设备只需要维护16条分公司路由加几条本地路由,不需要把每个/24都写进路由表。当然前提是每个分公司内部的子网都落在各自的/20块内,不能跨块分配。
这个场景想表达的实践顺序是:先定整体结构,再逐层细分,最后用汇总收敛。反过来如果先零散分配地址,再想汇总,往往发现汇总不了,只能靠一大堆明细路由撑着。
6. 练完之后的几点实操心得
第一,强烈建议脱离在线计算器练一段时间。在线工具很方便,但它只给你结果,不给你思路。手算几十道题之后,你对地址块、掩码变化、边界对齐的感觉会完全不一样。之后再回到工具,也只用来验证,而不是依赖。
第二,把每一道练习题都画成表。网络地址、起止范围、广播地址、掩码、用途、状态,六列一张表。做完题目后检查一遍:相邻两行的网络地址是否连续、广播地址加1是否等于下一行网络地址、可用主机数是否满足需求。这套检查逻辑和真实网络规划完全一致。
第三,关注边界地址和设备网关之间的关系。网关通常取子网里的第一个可用地址或最后一个可用地址,但不管取哪个,团队内部要统一约定。我在一个项目里见过网关有的取.1,有的取.254,排查路由时每台设备都要看配置,效率很低。定了规范之后,一眼就能从抓包结果里判断出是哪台设备。
第四,汇总前先做"反向验证"。假设你准备把10.10.0.0/22汇总起来,先反推这个汇总覆盖了哪些/24网段:10.10.0.0到10.10.3.0。然后逐一确认这些网段是否都属于同一个业务域。只要有一个网段被其他团队占用,这个汇总就不能上。
子网划分和子网汇总练到最后,拼的不是记忆力,而是对二进制边界的敏感度。每道题都亲手推一遍,推满二三十道,你会发现自己看路由表、写掩码、配设备时的速度明显不一样了。