
上周帮朋友排查他公司网络的毛病二十多人的小团队扩到八十多人之后共享打印机时不时找不到、监控画面偶尔掉线、视频会议卡成PPT。我进路由器一看服务器、监控、打印机、员工电脑、访客手机一百多台设备全挤在 192.168.1.0/24 这一个网段里地址池已经用掉一大半广播包满天飞。问题的根子不在设备新旧而在于从头到尾没人做过网段划分。这篇就聊聊网段计算和划分这件事从二进制怎么算、掩码怎么切到一份能直接抄的地址规划表再到实际踩过的坑。不管你是刚接手公司网络的小白还是想把子网划分这块知识重新捋一遍的老手下面这些内容都能直接用上。1. 先搞清楚网段划分到底在解决什么问题很多人对网段划分的理解停留在“考试要考”觉得拿个计算器算算掩码就完事了。但在真实环境里划分网段从来不是为了好看而是为了解决三类具体问题广播域的规模控制、不同业务之间的隔离、以及地址资源的精细分配。这三件事不解决网络规模一上去各种莫名其妙的故障就会冒出来。1.1 一个扩容场景引出的真实需求回到开头那个例子。朋友公司最初只有二十几个人一个 192.168.1.0/24 能提供 254 个可用地址怎么看都够用。但他们没算过的是这个网段里同时挂了三台监控NVR、两台网络打印机、一台文件服务器、一套考勤机还有员工的手机、平板、笔记本。等到人数涨到八十多实际在线设备轻松破百地址池占用率超过七成DHCP 开始出现分配失败。更麻烦的是广播。二层网络里ARP 请求、DHCP 发现报文、NetBIOS 名称查询这些广播流量会发给同一个广播域内的所有设备。设备数量越多每台机器被迫处理的无效广播就越多CPU 占用上升、网卡中断变频繁表现出来就是“网络一卡一卡的”。监控掉线尤其典型——监控码流本身对丢包敏感广播风暴一来最先受影响的就是它。所以划分网段的第一层动机就是把一个大广播域切成几个小广播域。这里要区分两个概念广播域是二层概念指同一个 VLAN 内能收到彼此广播的所有设备冲突域是更早的以太网概念现在交换机组网基本可以忽略。我们做网段划分本质上就是在规划广播域的边界。1.2 隔离需求比省地址更重要第二个动机是隔离。财务的电脑、研发的代码仓库、访客的WiFi、车间的工控设备这几类东西放在同一个二层网络里风险完全不对等。访客手机中个病毒广播和扫描流量会直接打到财务的共享目录工控设备一旦收到大量无关广播还可能触发通信异常。用网段划分把不同角色切开之后再做三层访问控制就能实现“研发能访问代码仓库但进不了财务访客只能出公网”。这套东西的前提就是每个角色处在不同的网段。反过来如果你只有一个大网段想在交换机上做 ACL 是做不到的——二层转发只看 MAC不看业务身份。第三个动机才是大家最熟悉的地址节约。比如两个路由器之间的互联链路只需要两个地址你给它分一个 /24 就是白白浪费 252 个。用 /30 或者 /31 才是正确做法。大型网络里这种细节累积起来能省下相当可观的地址空间。1.3 划分之前先回答三个问题我在动手写规划表之前一定会先问清楚三件事现在有多少设备未来一年可能涨到多少按当前数量的 1.5 到 2 倍预留不要按正好够用来切。哪些角色必须互相隔离把需要隔离的分成组每组一个网段组内再考虑是否需要二次细分。有没有必须固定的地址网关、服务器、打印机、监控设备通常要配静态地址这部分要单独预留一段不能丢进 DHCP 池。这三个问题答完网段数量和大致大小就定了接下来才是计算。跳过这一步直接算掩码最后大概率要返工重划——而重划意味着改网关、改服务器地址、改防火墙策略代价比一开始想清楚大得多。2. 把二进制这层窗户纸捅破网段计算之所以让很多人头疼是因为它默认你已经理解了二进制和掩码的关系。但实际工作中我发现卡住的人八成是卡在这一步。所以这一章不急着讲算法先把底层的东西用能听懂的话说清楚。2.1 点分十进制其实就是32位二进制一个 IPv4 地址比如 192.168.10.37写成这样是为了方便人看机器眼里它是 32 个 0 和 1192 .168 .10 .37 11000000 .10101000 .00001010 .00100111每个点分开的部分叫一个八位组取值 0 到 255。这个换算需要练几遍才能形成肌肉记忆但好在常用值就那么些。我建议至少把这几组记住128、192、224、240、248、252、254、255它们对应的是二进制里从高位开始连续填 1 的结果也正是子网掩码每一段会出现的所有值。十进制二进制含义12810000000最高位为119211000000前2位为122411100000前3位为124011110000前4位为124811111000前5位为125211111100前6位为125411111110前7位为1255111111118位全1记住这个表你看到 255.255.255.224 就知道它是“前三段全满第四段前3位为1”也就是 /27。看到 255.255.252.0 就知道是“前两段全满第三段前6位为1第四段全0”也就是 /22。掩码的规则永远是左边连续的一串 1后面跟着一串 0中间不允许出现 0 和 1 交替。2.2 子网掩码的本质是“划线”掩码的作用只有一个告诉设备32 位地址里哪几位是网络部分哪几位是主机部分。1 对应网络位0 对应主机位。就像给一张长纸条画一条竖线线左边是“楼号”右边是“房间号”。以 192.168.10.37/24 为例掩码是 255.255.255.0二进制是 24 个 1 加 8 个 0。网络位就是前 24 位主机位是后 8 位地址: 11000000.10101000.00001010.00100111 掩码: 11111111.11111111.11111111.00000000 网络: 11000000.10101000.00001010.00000000 - 192.168.10.0把地址和掩码做一次按位与运算主机位全部归零得到的就是网络地址。这个运算是网段计算里所有花招的源头理解了它后面的“块大小法”“借位法”都只是它的简化口诀而已。CIDR 表示法 /24 里的 24就是掩码中 1 的个数。它比写 255.255.255.0 更简洁也更容易看出网络位有多少。现在配置设备基本都用 CIDR 写法。2.3 网络地址、广播地址和可用地址范围一个网段里有三个关键地址必须记牢网络地址主机位全 0代表这个网段本身不能分配给设备。广播地址主机位全 1用来向本网段所有设备发广播也不能分配给设备。可用地址夹在中间的所有地址可以分配给主机。可用地址数量的公式是 2 的32 减掩码长度次方再减 2。举个例子/24 的主机位是 8 位2 的 8 次方等于 256减去网络地址和广播地址剩 254 个可用地址。再比如 /26主机位 6 位2 的 6 次方等于 64可用 62 个。这里有个例外要特别说明/31 和 /32。按老规矩 /31 应该有 2 的 1 次方减 2 等于 0 个可用地址但 RFC 3021 给点对点链路开了口子规定 /31 的两个地址都可以用专门用于路由器之间的互联。而 /32 只有一个地址通常用在环回口或者主机路由上。这两个特殊情况在实际配置里很常见别被公式套死了。还有一个常见误解有人以为 192.168.1.0 和 192.168.1.255 在 /24 里不能用其实更准确的说法是“这两个是网络地址和广播地址不能用”。如果换成 /25那么 192.168.1.0 是网络地址、192.168.1.127 是广播地址而 192.168.1.128 反而是另一个网段的网络地址。地址能不能用取决于掩码划到哪里不是看最后一段数字。3. 网段计算的四种常用手法概念讲完进入动手环节。我把日常最常用的四种计算方法整理出来从纯手工到脚本化你可以按场景选用。3.1 手算四步法块大小最快如果你在机房现场、手边只有手机最实用的就是块大小法。它的核心是一句话用 256 减去掩码所在那一段的值得到块大小网络地址按块大小递增。以 192.168.10.37/26 为例走一遍掩码 /26 255.255.255.192最后一段是 192。块大小 256 - 192 64。子网按 64 递增0、64、128、192。37 落在 0 到 63 之间所以网络地址是 192.168.10.0。广播地址是下一个子网减 1即 64 - 1 63也就是 192.168.10.63。可用范围是 192.168.10.1 到 192.168.10.62。整个过程不需要换算二进制心算就能完成。再看一个跨八位组的例子172.16.35.200/22。/22 255.255.252.0第三段是 252。块大小 256 - 252 4注意这个块是作用在第三段上的。第三段按 4 递增0、4、8、12……32、36。35 落在 32 到 35 之间所以网络地址是 172.16.32.0。广播地址是把第四个八位组填满后的最后一个地址即 172.16.35.255。可用范围是 172.16.32.1 到 172.16.35.254。这里的关键是判断块大小作用在哪一段。掩码里第一个不是 255 的段就是块大小生效的位置它右边所有段都跟着一起变化。注意块大小法在掩码为 /25 到 /30 这类小范围时最顺手一旦掩码小于 /16比如 /12、/13块大小会跨好几个八位组手算容易出错这时候建议直接上脚本。3.2 等长划分从一个大网段切出多个小网段等长划分就是所有子网大小一致最常见的需求是把一个 /24 切成若干个 /26 或 /27。方法叫“借位”从主机位最左边借若干位当子网位。借 1 位得 2 个子网借 2 位得 4 个借 3 位得 8 个规律是 2 的 n 次方。每借一位主机位就少一位每个子网的可用地址也跟着减半。以 192.168.1.0/24 切成 4 个等长子网为例需要借 2 位得到 /26子网序号网络地址可用范围广播地址可用数量1192.168.1.0/26192.168.1.1 - 192.168.1.62192.168.1.63622192.168.1.64/26192.168.1.65 - 192.168.1.126192.168.1.127623192.168.1.128/26192.168.1.129 - 192.168.1.190192.168.1.191624192.168.1.192/26192.168.1.193 - 192.168.1.254192.168.1.25562四个子网加起来可用地址 248 个比原来的 254 少了 6 个这是划分子网的固有损耗——每多一个子网就多消耗一个网络地址和一个广播地址。这个损耗在小网段上不明显但如果你把一个 /24 切成 32 个 /29损耗就是 64 个地址接近四分之一该心疼的时候还是要心疼。3.3 VLSM按实际人数分配不搞平均主义等长划分的问题在于“一刀切”。研发部 60 个人、财务部 8 个人如果都分 /26财务那边浪费一大半。VLSM变长子网掩码就是解决这个的不同子网用不同掩码按需分配。做法有一个铁律从大到小分配。先满足最大的需求再在剩余空间里切小的否则地址空间会被碎片化后面的需求塞不进去。假设 192.168.1.0/24 要分配给四个部门研发部 60 人需要 /2662 个可用销售部 28 人需要 /2730 个可用财务部 12 人需要 /2814 个可用出口互联链路 2 个地址需要 /30从大到小依次占位顺序部门需求分配网段可用范围实际可用1研发部60192.168.1.0/26.1 - .62622销售部28192.168.1.64/27.65 - .94303财务部12192.168.1.96/28.97 - .110144互联链路2192.168.1.112/30.113 - .1142剩下的 192.168.1.116 到 192.168.1.255 还可以继续留给未来的部门或者访客网络。这个例子里最关键的一步是第 2 步研发部占了 0 到 63销售部的下一个可用起点必须是 64而不是 63——因为 63 是研发的广播地址已经被占用了。判断下一个起点有个简单办法把上一个子网的广播地址加 1。研发广播是 .63加 1 得 .64销售广播是 .94643094加 1 得 .95这里要小心销售是 /27块大小 32起点 64广播应该是 6432-1 95。所以财务起点是 96。财务 /28 块大小 16起点 96广播 111互联链路起点 112。提示做 VLSM 规划时拿一张纸把每个网段的起点和终点写出来逐一核对“上一段终点加一等于下一段起点”能挡住绝大多数重叠错误。3.4 用脚本批量算Python 的 ipaddress 模块手工算三五个网段还行一旦要规划几十个网段手算就不靠谱了。Python 标准库里的 ipaddress 模块是我最常用的工具不需要装任何第三方包。import ipaddress # 场景一给定地址和掩码输出网段信息 def show_net(addr): net ipaddress.ip_network(addr, strictFalse) print(f网段: {net}) print(f网络地址: {net.network_address}) print(f广播地址: {net.broadcast_address}) print(f掩码: {net.netmask}) print(f可用数量: {net.num_addresses - 2}) hosts list(net.hosts()) if hosts: print(f首个可用: {hosts[0]}) print(f末个可用: {hosts[-1]}) print(- * 40) show_net(192.168.10.37/26) show_net(172.16.35.200/22) # 场景二把一个大网段等分 base ipaddress.ip_network(192.168.1.0/24) for i, sub in enumerate(base.subnets(new_prefix26), 1): print(f子网{i}: {sub} 可用 {sub.num_addresses - 2} 个) # 场景三从闲置空间里按需切分模拟 VLSM pool ipaddress.ip_network(192.168.1.0/24) requirements [(研发部, 60), (销售部, 28), (财务部, 12), (互联链路, 2)] for name, need in requirements: for prefix in range(32, 15, -1): candidate_size 2 ** (32 - prefix) if candidate_size - 2 need: break subnets pool.subnets(new_prefixprefix) chosen next(subnets) print(f{name}: {chosen} 可用 {chosen.num_addresses - 2} 个) pool ipaddress.ip_network((int(chosen.broadcast_address) 1, 32))第三段脚本是 VLSM 的自动化版本从 /32 往下试找到第一个可用地址数够用的掩码切出来然后把剩余空间重新赋值给 pool 继续下一轮。这段逻辑在实际做地址规划表时特别省事改一下需求列表就能重新生成整套方案。4. 落地一份能直接抄的地址规划方案算明白之后真正的难点是把它变成一张团队能执行的表。我见过太多规划只存在于某个人脑子里人一走网络就没人敢动。所以规划必须写下来且要让非网络岗的同事也能看懂。4.1 分层结构怎么定我习惯用私有地址空间做三层结构借用 10.0.0.0/8 这个大池子按站点和角色分层10.站点.角色.0/24比如 10.1.0.0/16 给总部10.2.0.0/16 给分部10.1.10.0/24 是总部办公区10.1.20.0/24 是总部服务器区。这种层级划分的好处是看地址前两段就知道设备在哪运维排查时定位极快路由汇总也简单——总部所有网段汇总成 10.1.0.0/16 一条就够了。如果公司规模没那么大用 192.168.x.0/24 也完全可以但要有意识地留出间隔比如办公区 192.168.10.0/24、服务器 192.168.20.0/24、监控 192.168.30.0/24中间空出来的留给未来。区域网段网关用途地址方式办公区A10.1.10.0/2410.1.10.1员工电脑、笔记本DHCP办公区B10.1.11.0/2410.1.11.1备用工位、临时工位DHCP服务器区10.1.20.0/2410.1.20.1文件、数据库、应用静态监控设备10.1.30.0/2410.1.30.1摄像头、NVR静态打印机10.1.40.0/2410.1.40.1网络打印机静态访客WiFi10.1.50.0/2410.1.50.1外来人员仅出公网DHCP设备互联10.1.99.0/24无路由器/防火墙互联静态这张表的重点在于固定设备集中在一个网段。很多人把打印机、监控和员工电脑混在一起结果每次DHCP池调整都要担心会不会撞地址。分开之后静态地址段和动态池各管各的清爽很多。4.2 静态地址段的预留规则以 10.1.20.0/24 服务器区为例我会这样切10.1.20.1 到 10.1.20.9网络设备管理地址交换机、AP控制器10.1.20.10 到 10.1.20.49物理服务器10.1.20.50 到 10.1.20.99虚拟机10.1.20.100 到 10.1.20.199DHCP 保留池给需要固定但通过DHCP下发的设备10.1.20.200 到 10.1.20.254临时调试地址把规则写进运维文档谁要新增服务器就按段位申请不会出现两个人抢同一个地址的情况。这里有个细节值得留意网关尽量放在网段的第一个可用地址比如 10.1.20.1。这样做的好处是所有网段的网关规律一致写脚本、排查故障时不用翻文档。4.3 三层设备的配置与验证网段划分最终要落到 VLAN 和三层接口上。以常见的组网为例核心交换机上大概是这样# 创建 VLAN 并配置网关 vlan 10 name Office-A vlan 20 name Server-Zone interface Vlan10 ip address 10.1.10.1 255.255.255.0 no shutdown interface Vlan20 ip address 10.1.20.1 255.255.255.0 no shutdown # 接入口划入对应 VLAN interface GigabitEthernet0/1 switchport mode access switchport access vlan 10配置完之后验证比配置本身更重要。我一般按这个顺序查看接口状态show ip interface brief确认 Vlan 接口是 up 且地址正确。看路由表show ip route确认每个网段都有直连路由而且没有被意外汇总掉。跨网段测通从办公区机器 ping 服务器区网关和一台服务器。查 ARPshow arp看是否有地址冲突导致的异常条目。DHCP 那侧也要对上。比如办公区网关是 10.1.10.1DHCP 池就要配 network 10.1.10.0/24、default-router 10.1.10.1、dns-server 填内网DNS地址地址范围避开保留段。提示改完 VLAN 和网关记得同步更新防火墙的策略表。我遇到过网段调整完了但防火墙还按老网段放行结果业务不通排查了半小时才发现是策略没改。5. 常见问题与排查技巧实录理论再清楚实际做的时候还是会踩坑。这一章整理的都是在真实环境里反复出现过的问题希望能帮你少走点弯路。5.1 常见问题速查表现象可能原因排查动作同网段设备互相不通掩码配错、VLAN 不同核对掩码是否一致查接口 VLAN跨网段不通但网关能 ping 通目标机没配网关或防火墙拦截检查目标机网关、检查ACL网关地址冲突告警有人手动占用了网关地址扫描网段找出冲突设备DHCP 分配失败地址池耗尽、掩码不匹配查池使用率核对 network 语句部分设备能通部分不通网段重叠、路由汇总错误逐段核对地址规划表网络时快时慢广播域过大统计网段设备数考虑细分新加网段外部访问不到路由未发布检查三层设备路由和上联通告5.2 五个最容易踩的坑坑一掩码不统一。同一网段里有设备配 /24有设备配 /25表面上都能拿到地址但 /25 那台会把 128 到 255 当成另一个网段通信时好时坏。这种问题最难查因为不报错。解决办法是把掩码写进配置模板不让任何人手填。坑二网段重叠。给分部配了 10.1.10.0/24总部也有一模一样的网段两边一连起来就冲突。规划阶段就要有一张全局地址表新网段先查表再分配。用 Excel 或者内部 Wiki 都行关键是有人维护。坑三以为 /31 不能用。早期资料都写着“点对点必须用 /30”导致大量地址被浪费。现代设备普遍支持 /31 互联两个地址全用上省一半。前提是设备支持配置前确认一下。坑四网关随手放。有人把网关放在网段中间比如 10.1.10.100。虽然不影响通信但后面做地址规划、写脚本、做巡检时会很难受。统一放第一个可用地址规矩比聪明重要。坑五划分完不更新文档。这是最要命的。三个月后新来的同事要加设备翻到的还是旧表随便挑了个地址结果撞上了。我的习惯是每次变更当天更新文档并在变更记录里写上时间、操作人、原因。5.3 上线前的自检清单正式启用新网段之前我会走一遍下面这份清单每项都确认过才敢切流网段的网络地址和广播地址确认无误没有把这两个分配给设备。网关地址已配置在三层设备上且掩码与规划表一致。新网段与已有网段没有重叠全局地址表已更新。DHCP 池的范围避开了静态预留段网关和DNS指向正确。路由已发布或已配置静态路由上下游设备都能学到。防火墙和 ACL 策略已按新网段更新双向放行规则都测过。至少用两台设备做过跨网段连通性测试包括 ping 和实际业务访问。监控或网管系统里已把新网段加入扫描范围能及时发现异常。这套流程走下来基本不会出现“切完才发现不通”的尴尬。5.4 一个用 ping 和 ARP 快速定位的小技巧最后分享一个我在现场常用的手法。当你怀疑某个地址被别人占用了直接 ping 一下ping 10.1.20.50 # Windows 环境 arp -a | findstr 10.1.20.50 # Linux 环境 ip neigh show | grep 10.1.20.50如果 ping 通并且 ARP 表里出现了 MAC 地址说明这个地址确实有设备在用。再去交换机的 MAC 地址表里反查这个 MAC 挂在哪个端口顺着端口就能找到那台机器。整个排查过程通常两三分钟比挨个问人快得多。另一个技巧是检查网段广播是否异常。在核心交换机上抓一段时间的广播包如果广播占比超过总流量的百分之几就说明广播域太大了该考虑把网段再切细一点。这个比例的阈值因业务而异办公网一般比较宽松监控和工控网络就要更敏感一些。我个人在实际操作中的体会是网段划分这件事花在规划上的时间永远比花在返工上的时间划算。一份清晰的地址表、一套统一的命名规则、一个每次变更都更新的习惯比任何高端的工具都管用。计算本身并不复杂难的是让整个团队长期保持一致而这一点只能靠文档和流程来保证。