☰
子网划分与子网汇总实战:从固定掩码到VLSM与路由聚合
2026/10/9 5:55:38 网站建设 项目流程

做网络这行,子网划分和子网汇总属于那种“看起来简单,一动手全是坑”的基础功。不管是给客户规划办公网段,还是配置核心交换机上的静态路由、写ACL,甚至排查一个VLAN间不通的问题,最后都得落在子网计算上。我见过不少干了三五年的人,遇到/25、/26还能掰扯清楚,一到VLSM变长子网掩码或者手工汇总就卡壳。这篇文章把子网划分和子网汇总从需求分析到二进制计算、从固定掩码到VLSM、从基本换算到手工汇总的完整链路捋一遍,再附上我实际踩过的坑和一套能天天练的实操方法。适合刚入行的网络工程师、正在备考网络认证的朋友,也适合所有需要在交换机、路由器和防火墙前“徒手算网段”的人。

1. 子网划分到底在解决什么问题

1.1 不划子网会怎样:一个广播域引发的混乱

很多人刚学网络时有个疑问:192.168.1.0/24用得挺好的,为什么非要把它切开?原因有三层。

第一层是广播域的问题。一个不划分的网段就是一个广播域,所有设备都在里面。ARP请求、DHCP Discover这些广播报文,每一台主机都要接收并处理。设备少还好,设备一多,广播风暴能把整段网络拖垮。你可以把广播域理解成一个没有隔断的大办公室:一个人喊一嗓子,全公司的人都得停下来听,人越多越没法干活。划分子网等于在办公室里加隔断,每个部门自己喊话自己听,互不干扰。

第二层是地址浪费。一个/24网段理论上有254个可用地址,但实际使用中根本用不了那么多。20台设备占一个/24,剩下230多个地址闲置,这在公网地址规划时代是极度奢侈的。即便现在私网地址不稀缺,浪费也会导致后续扩容时无地址可用,被迫重新规划、全部返工。

第三层是管理与安全边界。不同业务、不同部门混在同一网段,ACL怎么写?QoS怎么做?故障怎么定位?这些都是灾难。划分子网之后,每个子网就是一个清晰的逻辑边界,哪些网段允许互访、哪些禁止,规则一目了然。

所以子网划分解决的不只是地址数量问题,它同时解决了广播域隔离、地址利用率、管理边界三个问题,这是所有网段规划的出发点。

1.2 借位:子网划分的本质动作

子网划分在操作上做了一件事:把原来属于主机位的比特,挪过来当网络位用。每向主机位借1位,子网数量就翻一倍,每个子网里的可用主机数就减半。这个过程叫“借位”,也叫“扩展网络前缀”。

为什么借1位就能分出两个子网?道理很简单:被借走的那一位可以是0也可以是1,天然就把原来的地址空间一分为二。再借1位,每一个半区又按0/1再分一次,得到4个子网。借3位得到8个,借n位得到2的n次方个子网。

举个例子。192.168.1.0/24本来网络位是24位,主机位8位。现在我借2位主机位,前缀就变成/26,主机位剩6位。原来256个地址被切成四块,每块64个地址。这时候整个地址空间的“边界”就变了:网络位变长,每个子网的规模变小,但子网总数变多。

必须记住一对公式:

  • 子网数量 = 2的“借位数”次方
  • 每个子网可用主机数 = 2的“剩余主机位数”次方 - 2

这里的减2永远不能忘,因为每个子网都有一个网络地址(主机位全0)和一个广播地址(主机位全1),这两个地址不能分配给任何设备。

1.3 先有需求再动手:别上来就分

实际工作里最常见的错误就是拿到一个网段,随手就拆成四个,根本不看需求。子网划分的正确顺序是先收集需求,再定掩码,最后分配网段。

需求清单至少包含这些:每个部门或业务需要多少台主机,当前多少、未来三年预计多少;点对点链路需要几个地址;网关和管理地址需不需要单独占用;是否要给未来新业务预留连续整块的地址空间。

举个例子,一个公司有销售、研发、人事三个部门,分别需要50、30、8个地址,还有两条设备互联链路。这时你先算出各自的掩码:50台主机需要至少62个可用地址,对应/26;30台对应/27(30个可用);8台对应/28(14个可用);两条链路用/30。然后把这些网段按从大到小的顺序排布在连续的地址空间里,这就是后面要讲到的VLSM。

总的原则是:划分太粗,地址浪费、广播域大;划分太细,路由表膨胀、维护成本高、每个子网可用地址捉襟见肘。先算需求再划网段,是避免返工的唯一办法。

2. 掩码、CIDR与块大小的快速换算

2.1 掩码的二进制本质

子网掩码的作用,是告诉设备“网络位到哪里结束”。从二进制看,掩码就是一连串的1接一连串的0。比如255.255.255.192,二进制是11111111.11111111.11111111.11000000,前26位是1,对应/26,后6位是0,对应主机位。

路由器收到一个IP包,把目标IP和掩码做AND运算,就能提取出网络号。这就像一个路牌,只看你属于哪个片区,不看你具体是片区里哪一户。

判断一个地址是网络地址还是主机地址,全部依赖掩码。192.168.1.63如果配/26掩码,主机位全1,就是广播地址;如果配/27掩码,同样的地址就只是一个普通主机地址。同一个IP,掩码不同,身份完全不同。这就是为什么排查网络问题第一步永远是对掩码。

2.2 块大小计算:256减法的魔法

手工划分子网时,最实用的技巧是“块大小”计算法。所谓块大小,就是相邻两个子网网络地址之间的间隔,算法是256减去掩码中不是255的那个十进制值。

举几个例子。

255.255.255.192,最后一个八位组是192,块大小 = 256 - 192 = 64。子网按64递增:0、64、128、192。

255.255.255.224,块大小 = 256 - 224 = 32。子网按32递增:0、32、64、96、128、160、192、224。

255.255.255.240,块大小 = 256 - 240 = 16。

这个方法为什么好用?因为八位组一共就256个值。掩码值划定了用于网络位的部分,剩下的就是主机位空间的大小,也就是每个子网的地址块规模。拿到一个子网网络地址后,加上块大小减1就是广播地址,广播地址再加1就是下一个子网的网络地址。

我在面试里快速判断一个人基本功是否扎实,就问两个问题:/26的块大小是多少?/27的块大小是多少?答不出这两个数的人,后面VLSM基本没法聊。

2.3 常用掩码速查表

以下这张表是干这行必须刻在脑子里的,尤其是从/24往下拆的几档。

前缀掩码块大小每个子网地址数可用主机数适用场景
/24255.255.255.01256254标准C类网段
/25255.255.255.128128128126拆2段
/26255.255.255.192646462拆4段
/27255.255.255.224323230拆8段
/28255.255.255.240161614拆16段
/29255.255.255.248886小型分支机构
/30255.255.255.252442点对点链路
/31255.255.255.254222RFC 3021点对点链路,无需广播地址
/32255.255.255.255111主机路由

记忆的窍门在于理解掩码值规律:128、192、224、240、248、252、254,这串数就是二进制里从左往右逐个补1得到的十进制值。从/24开始熟悉,后面所有非标准前缀都能推算出来。

3. 子网划分实操:从/24到VLSM

3.1 C类地址固定划分:拆成4个和8个子网

先来一个最经典的练习:把192.168.10.0/24拆成4个子网。

要拆4个,需要借2位主机位,2的2次方等于4,前缀变成26。掩码255.255.255.192,块大小64。然后从0开始,按64递增:

  • 192.168.10.0/26,地址范围192.168.10.0到192.168.10.63,可用地址1到62,广播地址63
  • 192.168.10.64/26,地址范围64到127,可用65到126,广播地址127
  • 192.168.10.128/26,地址范围128到191,可用129到190,广播地址191
  • 192.168.10.192/26,地址范围192到255,可用193到254,广播地址255

每个子网可用主机数为2的6次方减2,等于62。四个子网合计可用248个地址,比原来254个只少了6个,代价是2个子网位不能用于主机。

拆成8个子网同理,借3位,前缀变/27,块大小32,子网依次是0、32、64、96、128、160、192、224。每个子网可用30个地址,网络地址和广播地址依次错开。

这里有一个容易忽略的点:网关地址应该怎么选?通常用每个子网的第一个可用地址或者最后一个可用地址,建议全网统一风格,要么都用第一个,要么都用最后一个,方便后续脚本化和自动化巡检。

3.2 B类大网段拆60个子网:第三段怎么算

C类地址练熟之后,要练B类。拿172.16.0.0/16为例,现在需要60个子网。

要得到60个子网,借6位因为2的6次方是64,刚好大于60。前缀从16变成22,掩码是255.255.255.252的前半段?不是,这里容易出错,/22掩码是255.255.252.0。因为网络位22位落在第三个八位组,第三个八位组里有6位是网络位、2位是主机位,主机位是第三段的低2位加上第四段的8位,一共10位。

计算块大小要看255.255.252.0这个掩码中不为255的那个八位组,也就是252所在的位置。块大小 = 256 - 252 = 4,但注意这个4体现在第三个八位组上。所以子网按第三个八位组递增4:

  • 172.16.0.0/22
  • 172.16.4.0/22
  • 172.16.8.0/22
  • 172.16.12.0/22
  • 一直到172.16.252.0/22,共64个子网

每个子网的地址范围是多少?以172.16.4.0/22为例,它覆盖172.16.4.0到172.16.7.255,可用主机数2的10次方减2,等于1022。网络上有个高频笔试误区:看到/22就问“怎么块大小是4,可用地址却这么多”,原因就在主机位横跨了第三段的低2位和整个第四段,块大小说的是第三段的递增量,可用主机数要看总共剩余多少主机位,这两件事不是一个维度的。

3.3 VLSM变长子网掩码:按需分配才是真功夫

固定子网划分虽然规则简单,但实际项目里各个部门的主机数很难一样,用同一个掩码必然造成浪费。VLSM允许一个主网段内部使用多种掩码,核心原则是从大到小分配。

假设手头有192.168.20.0/24,需求如下:研发部60台主机,市场部20台,财务部10台,外加两条路由器互联链路,各需要2个地址。

先算每个需求的掩码。60台主机需要可用地址至少60,/26提供62个,够了。20台用/27提供30个。10台用/28提供14个。点对点链路用/30,每个提供2个可用地址。

然后按从大到小顺序排布:

  • 研发部:192.168.20.0/26,覆盖0到63
  • 市场部:192.168.20.64/27,覆盖64到95
  • 财务部:192.168.20.96/28,覆盖96到111
  • 互联链路1:192.168.20.112/30,覆盖112到115
  • 互联链路2:192.168.20.116/30,覆盖116到119

剩余从192.168.20.120到255一共136个地址,可以作为未来扩展的整块预留区域。

这里有两个关键经验。第一,为什么必须从大到小排?因为大的子网必须落在块大小的边界上,如果先把小网段塞进开头,后面的大子网可能找不到足够大的连续空间,导致碎片化。第二,VLSM不是所有路由协议都支持,部署前必须确认用的OSPF、EIGRP、BGP这类无类别路由协议,老旧的RIP v1是不支持的。

4. 子网汇总实操:路由聚合的计算与对齐

4.1 为什么要做汇总

子网划分是“把大网段切成小网段”,子网汇总正好反过来,是“把小网段合并成大网段”,也叫路由聚合。核心路由器的路由表如果堆满了几百条/24明细路由,转发性能受影响不说,任何一条链路抖动都会引起全网路由震荡。把多个连续子网合并成一条更短前缀的路由,能显著缩小路由表、减少路由更新流量、缩短故障收敛时间。

设想一下:分公司有四个连续网段,总部核心路由器上原本需要维护四条/24静态路由,汇总后一条/22就搞定。如果分公司扩容,只要新网段还在汇总范围内,总部路由器完全无感知。

4.2 手工汇总步骤:二进制找共同前缀

子网汇总的计算方法非常固定,分四步。

第一步,把起始和结束网段的网络地址写成二进制,逐位对比,从最高位开始找,直到出现第一个不同的位。第二步,数一数相同位的个数,这个数就是新的前缀长度。第三步,网络号取所有人的共同前缀,后面不同的位全部置0。第四步,验证汇总范围是否正好覆盖需要汇总的网段、有没有多包或少包。

来一个标准例子。要把下面四个网段汇总:

  • 10.1.0.0/24
  • 10.1.1.0/24
  • 10.1.2.0/24
  • 10.1.3.0/24

前两段10.1完全一样,只需要比第三个八位组。0到3的二进制是:

  • 0 = 00000000
  • 1 = 00000001
  • 2 = 00000010
  • 3 = 00000011

从高位看,前6位全是000000,到第7位(对应数值2的那一位)开始出现差异。所以共同前缀是前16位加6位,等于22位。网络号第三段取00000000,汇总结果就是10.1.0.0/22,覆盖10.1.0.0到10.1.3.255,正好把这四个/24包含进去,没有多包也没有少包。

再看一个常见的非连续例子。10.1.2.0/24和10.1.4.0/24想合并,第三段二进制是00000010和00000100,从高位数,前5位相同(00000),到第6位出现差异,所以共同前缀是21位,汇总出来是10.1.0.0/21,范围覆盖10.1.0.0到10.1.7.255,多包了1、3、5、6、7这几个本不属于你的网段。这种汇总就是灾难,会吸走不属于你的流量。遇到这种设计,要么保持两条明细路由,要么调整规划让网段落在同一个对齐的大块里。

4.3 对齐规则与最长前缀匹配

汇总结果必须是一个“合法”的网络地址,也就是说它自己要落在对应块大小的边界上。/22的块大小是4,所以/22网络地址的第三段必须是4的倍数;/23块大小是2,第三段必须是偶数;/24块大小是1,任意数都可以。这个规则叫对齐。

很多人在这里翻车。比如以为10.1.1.0/24和10.1.2.0/24可以汇总成10.1.1.0/23。但/23要求第三段是偶数,10.1.1.0不满足对齐条件。如果真的配了10.1.1.0/23,设备要么拒绝,要么按10.1.0.0/23理解,把本不属于你的10.1.0.0/24也包进去。正确做法是扩大范围到10.1.0.0/22,同时明确它包含10.1.0.0/24,或者干脆不汇总,保持两条明细。

实际路由表里,汇总路由和明细路由是可以并存的,关键是最长前缀匹配原则:去往某个目标IP时,路由器在所有匹配的路由里选掩码最长的那条。所以就算整个区域有一条10.1.0.0/22的汇总路由,只要单独再配一条10.1.2.0/24的路由,去10.1.2.x的流量就会走明细,其他网段走汇总。这个特性常被用来“预留例外”:汇总覆盖大部分网段,同时用几条例外路由修正。

5. 常见错误、排查技巧与练习方法

5.1 我见到的几个高频翻车现场

第一,把网络地址和广播地址分给设备。有人把192.168.10.63配给服务器,结果全网怎么ping都不通。原因就是63在/26子网里是广播地址,广播地址不可能作为主机地址通信。查这类问题直接看掩码,把IP和掩码做AND运算,对比主机位是否全0或全1。

第二,分不清“块大小”和“可用主机数”。/30的块大小是4,可用主机数是2,很多人把4当成可用主机数,分配了4个地址结果两个废掉。这里时刻记住:块大小是整个子网的地址数,可用主机数永远是地址总数减2。

第三,汇总不检查对齐。前面说的10.1.1.0/23就是一个典型。我在真实设备上见过配置半天后流量走到错误区域的案例,最后发现就是汇总网段不合法,被设备静默修正成了别的含义。手工汇总之后,一定用show ip route验证实际生成的路由条目。

第四,规划时忘记预留网关和管理地址。子网可用地址算出来62个,结果62个全部分给终端,网关地址没地方放。规划任何子网前,先扣掉网关、交换机管理口、可能用的DHCP保留地址,再决定掩码。

第五,点对点链路用了过大的掩码。两个路由器互联只有2个地址需求,有人图省事用/29,白白浪费4个地址。点对点就是/30,如果链路两端设备都支持RFC 3021,/31更省,一个/24就能承载128条点对点链路。

5.2 故障自查速查表

网工排查问题的路径通常是从物理层到IP层,从本机到网关再到远端。关于子网相关的故障,下面这张表基本覆盖了高频情况。

症状排查方向常用方法
同VLAN内ping不通IP地址冲突、掩码不一致ipconfig / ip addr查看本机,arp -a查看ARP表
跨VLAN ping不通网关网关地址或子网掩码配置错误ping网关,检查网关接口IP和掩码
能ping通网关,ping不通其他网段缺少明细路由或路由汇总黑洞traceroute逐跳定位,show ip route检查路由表
配置IP时提示与现有地址重叠手工地址与DHCP池重叠检查DHCP地址池和保留地址
流量走到错误出口汇总路由包含未分配网段核查汇总前缀边界,必要时配置黑洞路由

排查中最高效的一招是traceroute。它能把路径上每一跳暴露出来,看到底是网关没配路由、中间设备汇总范围错误,还是目标端掩码不对。

5.3 每天10分钟的练习方法

子网计算熟练度没有捷径,就是高频重复。我的练习方法是每天随机抽一个范围,比如10.0.0.0/8里的某个/24,分别拆成2、4、8、16个子网,手写出每个子网的网络地址、广播地址、可用地址范围,全部写完再用工具核对。

自己写一个验证脚本也很简单,Python自带的ipaddress库就能胜任。下面这个脚本可以把一个/24按指定前缀拆出来,自动打印每个子网的关键信息。

import ipaddress net = ipaddress.ip_network("192.168.10.0/24") for sub in net.subnets(new_prefix=26): usable = list(sub.hosts()) print( f"network={sub.network_address} " f"broadcast={sub.broadcast_address} " f"usable={sub.num_addresses - 2} " f"range={usable[0]}~{usable[-1]}" )

输出结果:

network=192.168.10.0 broadcast=192.168.10.63 usable=62 range=192.168.10.1~192.168.10.62 network=192.168.10.64 broadcast=192.168.10.127 usable=62 range=192.168.10.65~192.168.10.126 network=192.168.10.128 broadcast=192.168.10.191 usable=62 range=192.168.10.129~192.168.10.190 network=192.168.10.192 broadcast=192.168.10.255 usable=62 range=192.168.10.193~192.168.10.254

有了脚本之后,每天随机改几个参数,比如把new_prefix改成28、把网络改成172.16.0.0/16,手算一份、脚本验一份,连续练两周,块大小和广播地址这些数字就长在脑子里了。

有条件的可以搭一个EVE-NG或GNS3环境,用三台路由器各建几个loopback接口模拟多个/24,然后手工配置汇总静态路由,再用traceroute验证实际路径。这种方式比刷题更能锻炼真实场景的判断力,因为你会亲眼看到一条不合法汇总路由如何把流量带偏。

我自己的习惯是纸上先算,工具后验。刚开始一天错一半,坚持一个月后基本可以做到10秒内写出任意/24子网划分的完整四元组。子网划分和子网汇总说到底就是二进制基本功加练习量,把它练到条件反射的程度,后面学路由协议、排网络故障都会轻松一大截。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询