ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

子网划分详解:从网络地址计算到VLSM实战的网工必修课

子网划分详解:从网络地址计算到VLSM实战的网工必修课 子网划分这活儿我干了十年网络运维依然觉得它是最容易被轻视、又最容易翻车的知识点。你看着“网络地址计算”这几个字简单真正手算的时候二进制位数、借位、广播地址、可用主机数哪一个算错了整段地址段就废了。前阵子有个做网管的朋友发来一道“子网作业111”让我帮验算题目本身不难但把行内新手常踩的坑全踩了一遍掩码写错、网段起点算错、广播地址占掉可用地址、网关没有预留。我正好借这个机会把子网划分的原理、手算步骤、工具辅助和排查思路完完整整梳理一遍。这篇文章适合正在啃CIDR和变长子网掩码的网工、被学校网络作业折磨的同学也适合那些平时只依赖在线计算器却从没搞懂背后逻辑的人。读完你至少能独立完成从需求分析到地址规划的全过程。1. 子网划分到底解决了什么问题——先建立全局思路1.1 为什么需要子网划分从广播域说起先说个最常见的场景。公司买了一台三层交换机接了三百多台电脑如果所有人都在同一个192.168.1.0/24网段里表面上“简单”实际体验非常糟糕。Windows电脑开机、打印机请求、ARP广播全都能把二层网络塞满任何一个端口出现广播风暴全公司跟着断网。子网划分最核心的意义就在这把一个大的广播域切成多个小的广播域让网络故障的影响半径缩小到可控范围。这里我习惯用一个比喻来理解一个班五十个学生老师喊一嗓子全班都能听到只要有一个学生乱喊所有人都得停下来。子网划分相当于把一个大班分成几个小班每个班单独管理一班吵闹二班不用陪着遭殃。技术上的做法就是通过掩码来限定“广播能到达的范围”把原来的大网段拆成若干逻辑隔离的网段。从地址利用角度看传统的A类、B类、C类地址划分非常浪费。一个C类地址默认256个IP给一个只有十个人的财务部用剩下两百多个地址全闲置一个B类地址能容纳六万多个主机给研究所用又用不完。子网划分允许你把大块地址按实际需求切成大小不一的片段既不浪费也能满足不同部门的规模差异。这也是为什么在IP地址规划领域第一优先级永远是“能省则省该分则分”。1.2 划分之前先搞清楚IP、掩码、CIDR三个概念很多同学一说子网划分就头疼本质是把三个基础概念混在一起了。我先用大白话捋一遍。IP地址是台设备的身份标识就像快递包裹上的收件人地址由“网络部分主机部分”组成。掩码则是用来划界的那条线用二进制表示为连续的1后面跟连续的01表示网络位0表示主机位。以255.255.255.0为例二进制展开是11111111.11111111.11111111.00000000代表前24位是网络部分后8位是主机部分可以容纳2的8次方减2个可用地址。CIDR则是把掩码简写成斜杠后跟数字的表示方式比如192.168.1.0/24的意思就是“192.168.1.0这个网段前24位是网络位”。以前你会写“子网掩码255.255.255.0”现在统一写作/24两者是一回事。凡是在资料里看到“/26”“/28”这种写法第一反应就是“斜杠后面数字代表掩码中连续1的个数”。需要特别强调一个判断什么时候一个地址段“能直接用”你得保证网络部分在路由表中能被精确匹配。举例来说192.168.1.100/24这个地址只要改掉最后的100比如改成192.168.1.188它依然属于同一个子网但如果你把掩码改成/25那么192.168.1.100和192.168.1.188很可能是两个不同的子网它们之间通信必须经过三层路由。初学者最容易忽略的就是这一点改IP之前先想清楚掩码掩码一变整个网络归属就跟着变。2. 改不掉的手算基本功——网络地址、广播地址与可用主机数2.1 二进制与十进制的换算别再用笨办法计算子网说到底就是在算二进制。这一步躲不掉但也没有想象中难。网工常用的二进制数其实非常有规律你只需要记住几个关键值2的0次方到2的8次方分别是1、2、4、8、16、32、64、128、256。这个数列是全部计算的地基。换算的核心原则只有一句话掩码里的1对应网络位0对应主机位网络地址是主机位全0的地址广播地址是主机位全1的地址。拿172.16.120.66/26来说“/26”意味着掩码是255.255.255.192网络位占了26位主机位剩6位。十进制66转成二进制是01000010前两位属于网络位后6位是主机位。这种情况下怎样算网络地址把66的主机位清0也就是把01000010的后6位变成000000得到01000000也就是64所以网络地址是172.16.120.64。很多人到这里就开始掏出手机用计算器我建议你先把心算步骤练熟。拆乘法的思路可以快速把十进制转二进制66拆成642二进制就是100000010得到1000010前面补0凑满8位就是01000010。熟练之后看到IP一串数字脑子里先出现二进制分段再逐步计算掩码归属。2.2 已知IP和掩码怎么确定网络地址和广播地址实际工作里最常遇到的场景是IT同事开了台新服务器给了个IP比如10.10.10.130/27问你这个地址的网段、广播地址分别是多少能不能和另一台10.10.10.158通信。我习惯的步骤是分三步走。第一步把掩码换算成“块大小”也就是下一个子网的步长。用256减去掩码最后一个非0的十进制数就能得到块大小。/27的掩码是255.255.255.224那么块大小就是256减224等于32。第二步确定网络地址规则是“IP地址所在的那一块的起始位置”。130除以32商4余24乘32等于128所以网络地址是10.10.10.128。第三步广播地址就是下一块的起始位置减1128加32减1等于159所以广播地址是10.10.10.159。于是10.10.10.130/27属于10.10.10.128/27网段可用地址范围是129到15810.10.10.158恰好在这个范围内能和10.10.10.130互通。这个方法比逐位做“按位与”快得多关键在于先记住块大小和子网步长的规律。很多配置脚本和网工考试都喜欢拿这类题来考原理也不复杂因为掩码的“最后一个非0值”决定了主机位的最高权重块大小实际上就是主机位能表达的范围大小。2.3 借位划分子网子网数量、块大小和可用主机数的关联划分VLAN或者做多部门隔离时我们通常要从一个大的网段里“借”主机位来扩充网络位这个过程叫借位。借位规则需要记住三句话借n位子网数量就是2的n次方块大小就是2的原主机位数减n次方每个子网可用主机数是2的主机位个数减2。比如原始网段192.168.1.0/24掩码是/24主机位有8位。现在要给四个部门各分配独立网段需要借2位于是掩码从/24变成/26子网数量是4块大小是64每个子网的可用主机数是2的6次方减2等于62。四个子网分别是192.168.1.0/26、192.168.1.64/26、192.168.1.128/26、192.168.1.192/26可用地址范围是1到62、65到126、129到190、193到254。这个例子说服力很强因为很多人不理解为什么192.168.1.0/26和192.168.1.1/26是两个不同的逻辑隔离网段却不知道其实只要掩码保持/26第一个网段范围就是0到63第二个就是从64开始。每一段最后一位落到第一个子网的广播地址第二个的广播地址第三个的广播地址第四个的广播地址也有规律块大小减1、块大小乘以2减1、块大小乘以3减1以此类推。我认为掌握这张“块大小和网络地址对应表”比死记硬背公式更管用。3. 跟着“子网作业111”做一次完整的划分实操3.1 题目拆解先明确需求再动手“子网作业111”这个题目我按实际工程标准重新构造了一下某公司有四个部门研发部需要120个可用IP市场部需要50个财务部需要22个运维部需要10个后端出口还需要一个互联网段2个可用IP。整个项目要求使用10.0.0.0/22这个地址域做一次有计划的子网划分。拿到这类需求第一反应不是立刻拿计算器敲掩码而是先把需求转成“主机位个数”再定掩码。120个可用IP比2的6次方64大、比2的7次方126小所以至少需要7个主机位即/2550个可用IP需要6个主机位即/2622个可用IP需要5个主机位即/2710个可用IP需要4个主机位即/282个可用IP需要2个主机位理论上留2位就能满足但实际配置互联地址通常会用/30因为/30可用地址正好2个符合规则。3.2 第一步算出新掩码和子网块的步长明确了主机位需求后掩码也就确定了。生产环境我强烈建议用“从小到大”的顺序划分也就是先分小的、再分大的这样能最大程度减少地址碎片。但正规的VLSM变长子网掩码做法是从大到小分先满足研发部。研发部需要/25也就是掩码255.255.255.128块大小128。从10.0.0.0开始第一个子网就是10.0.0.0/25网络地址10.0.0.0广播地址10.0.0.127可用地址1到126对120个需求来说刚好够。市场部需求/26块大小64从10.0.0.128开始子网是10.0.0.128/26可用地址129到190。财务部需求/27块大小32从10.0.0.192开始子网是10.0.0.192/27可用地址193到222。运维部需求/28块大小16从10.0.0.224开始子网是10.0.0.224/28可用地址225到238。互联网段只用/30块大小4从10.0.0.240开始子网是10.0.0.240/30可用地址241和242另外两个地址243到244可以留作后续扩展。3.3 第二步列出各子网的网络地址、广播地址和可用地址范围我在实际操作中一定会把划分结果整理成一张表写好部门名、子网、掩码、网络地址、广播地址再核一遍每段末位数字是否连续。因为只要有一个段的起始地址算错后面的全盘会跟着错。部门子网掩码网络地址可用范围广播地址研发部10.0.0.0/25255.255.255.12810.0.0.010.0.0.1~10.0.0.12610.0.0.127市场部10.0.0.128/26255.255.255.19210.0.0.12810.0.0.129~10.0.0.19010.0.0.191财务部10.0.0.192/27255.255.255.22410.0.0.19210.0.0.193~10.0.0.22210.0.0.223运维部10.0.0.224/28255.255.255.24010.0.0.22410.0.0.225~10.0.0.23810.0.0.239互联段10.0.0.240/30255.255.255.25210.0.0.24010.0.0.241~10.0.0.24210.0.0.243这里面最容易写错的两个细节一个是广播地址能不能当普通地址用答案是不能二层广播帧会发到该网段所有主机占用了就冲突另一个是网络地址能不能当普通地址用同样不行。所以表里可用范围总是比理论主机数少两个这需要时刻提醒自己。3.4 第三步留好网关、广播与未来扩展位地址表出来后别急着配置设备。网关地址建议统一放在每个子网的第一个可用地址。比如研发部网关用10.0.0.1市场部用10.0.0.129财务部用10.0.0.193运维部用10.0.0.225互联段用10.0.0.241。这样做的好处是以后排查问题时记住一个规律只要看到网段的第一个可用IP就知道它大概率是网关。另外我还会在规划时留出“扩展余量”。比如财务部只有22个真实需求为什么给/27而不是/28因为/28只有14个可用地址太紧一旦设备加点量就爆宁可多占几个地址也要留缓冲。生产环境里最怕的不是规划时多占地址而是上线三个月后发现地址不够要重新划网段那动静比省几个IP大得多。4. 能提升效率的子网计算工具与自动化自查4.1 为什么我还是建议你掌握手算你可能会说现在网上随便搜就能跳出来一堆子网计算工具网页版、手机App都有学手算是不是浪费时间我的看法恰恰相反。工具能告诉你结果但不会告诉你结果错了。我就遇到过同事用网页工具算完一个/23的划分直接复制结果配置上线结果把业务网段的可用地址算成了从2开始而不是从1开始导致第一批IP全部冲突。掌握手算最大的价值不是“不算错”而是“能快速验证”。一个成熟的网工判断一个配置对不对往往几秒钟心算出网络地址和广播地址立刻发现异常。这种能力是身体本能不是查表查出来的。当然工具仍然值得用但要把工具定位成“辅助校验器”而不是“唯一答案来源”。4.2 自制“子网计算工具v1.1”的思路前阵子我整理了自己的“子网计算工具v1.1”功能不复杂但很实用输入所需的子网数量或主机数立刻返回推荐的掩码、块大小、可用地址数和可生成的子网列表。网上现成工具做不到的一点是会根据我的实际规划习惯加上“网关预留”“广播地址高亮”“冲突检测”几个模块。工具后面是个很朴素的逻辑把需求映射到主机位个数再结合给定网段循环生成子网块。我在这里贴一段核心计算逻辑用Python写版本无所谓思路通用。import ipaddress def plan_subnets(network_str, host_need_list): network ipaddress.ip_network(network_str, strictFalse) for i, need in enumerate(host_need_list): # 需求主机数转为需要的主机位 host_bits max((need 2).bit_length(), 2) prefix 32 - host_bits subnets list(network.subnets(new_prefixprefix)) # 直接取当前网段的第一块 sub subnets[0] print(f网段{i1}: 子网{sub}, 可用地址范围: {sub.network_address 1} - {sub.broadcast_address - 1}) # 把新的起点推进到下一块 network ipaddress.ip_network( f{sub.broadcast_address 1}/{network.prefixlen}, strictFalse )这段逻辑写的比较直白重点是host_bits的计算需求主机数加2之后求最小二进制位数比如120加2等于122bit_length是7所以前缀是32减7等于25。这里加2的原因就是必须保留网络地址和广播地址这提醒初学者不要把可用主机数当成总IP数。工具里除了计算我还会加一层自动校验给定一个IP和掩码判断它落在哪个子网内再判断是否与另一个地址段冲突。这部分用ipaddress库非常顺手路由表巡检、VLAN上线前自检都能用。4.3 用Python ipaddress库做一次自动校验我们来实际验证一下前面那个规划例子。写一个简短脚本输入IP和掩码输出它所属的网络地址、广播地址和可用地址范围。这个脚本值得收藏进自己的工具库。import ipaddress ip_str 10.0.0.66 prefix 26 addr ipaddress.ip_interface(f{ip_str}/{prefix}) network addr.network print(网络地址:, network.network_address) print(广播地址:, network.broadcast_address) print(可用主机数:, network.num_addresses - 2) print(可用范围:, list(network.hosts())[0], -, list(network.hosts())[-1])运行后输出是 网络地址: 10.0.0.64 广播地址: 10.0.0.127 可用主机数: 62 可用范围: 10.0.0.65 - 10.0.0.126对比前面的手算结果完全一致说明逻辑没跑偏。这里的ipaddress库还有个小技巧network.hosts()是个生成器只掐头去尾返回可用地址学名叫“排除网络地址和广播地址后的主机列表”这个库内部已经替我们做了最繁琐的减法。5. 实际工作中最容易翻车的7个点与排查笔记5.1 主机位全0、全1的地址能不能用这是新手最纠结的问题答案很干脆不能。主机位全0代表网络本身全1代表广播地址这两个地址被协议强制占用。任何设备如果把广播地址配到自己的接口上立刻会让网段内所有主机响应形成广播风暴。我曾经在测试环境看到某同事把一台服务器的IP配成了192.168.1.127/25当即广播地址被他占了全网段瞬间“回应”这个地址所有交换机的ARP表全部被打爆。排查花了三小时最后发现只是地址位没避开。所以每次规划完我习惯用表格把“网络地址”和“广播地址”两列标红提醒这些位置绝对不能填设备。5.2 掩码不一致导致不同子网无法互通同一个交换机下接了两台机器IP分别是192.168.1.10/24和192.168.1.20/25你认为它们能通吗答案是不一定。192.168.1.20/25属于192.168.1.0/25这个子网而192.168.1.10/24属于192.168.1.0/24这个子网。从路由角度看前者会认为广播地址是192.168.1.127后者认为广播地址是192.168.1.255它们对“这个二层域到底有多大”的理解完全不同。此时如果要求互通必须通过三层网关设备路由或三层交换机来做转发跨网段互通逻辑会依赖网关掩码是否涵盖了这两个地址。这类问题的排查思路很简单同一VLAN里如果发现有的机器能通有的不通先敲ipconfig /all或ip addr检查掩码是否一致很多“疑难杂症”最后都是掩码配错的坑。5.3 规划时把网关放在最后一个可用地址在实际生产里路由器和三层交换机的网关地址可以放在网段内任何一个可用地址但为了让运维少动一次脑筋我强烈建议固定在第一个可用地址。原因有两点第一大多数三层设备默认配置里网关一般写在网段起始位置以后接手的人一眼能认出来第二当你写ACL或者防火墙策略时通常会默认“这个网段的首个地址是网关”如果网关放在末尾排查时还要多算一步。当然有些老项目的网关确实放在广播地址前一位比如192.168.1.254这属于历史习惯不算错误。但新项目我从第一天就按统一标准规划没有例外。5.4 为什么你算出的可用地址总数总差2这是学校作业里出现频率最高的问题明明是/24为什么可用地址不是256而是254因为网络地址占掉一个广播地址占掉一个。这个规则在所有子网里都成立不管/8、/24还是/30一律减2。区分关键点是/31子网是唯一例外它用于点对点链路RFC 3021允许把两个地址全部作为可用地址但日常业务网段不要用。延伸一步计算一个网段能容纳多少台主机时公式是2的主机位个数减2。如果你需要50个可用地址至少要选/2664减2等于62而不是用/2732减2等于30。我见过有人用“2的n次方”去套需求结果上线前一天才发现不够临时改掩码下游一堆设备全部重配。5.5 子网汇总的常见错误子网汇总也称路由聚合是反向操作把多个连续子网合并成一个更大的路由条目。最常见的错误是“连续但不齐”的两个子网不能直接汇总。比如192.168.1.0/26和192.168.1.64/26可以汇总成192.168.1.0/25因为它们是从0开始的连续块。但192.168.1.128/26和192.168.1.192/26也能汇总成192.168.1.128/25恰好以128开头。而192.168.1.64/26和192.168.1.128/26则是不能直接汇总的因为它们不在一块“天然的半分块”内强行汇总会写错成192.168.1.0/24吗也不行那样会把中间一大段没分配的子网也汇总进去引起路由黑洞。判断汇总是否可行的技巧是看“起始网络地址能否被汇总后的块大小整除”。192.168.1.64/26的块大小是6464除64等于1余0可以192.168.1.128/26也是64除64等于2也能汇总。而如果起始地址是192.168.1.4/30块大小是44除4等于1同样可以。所以你在做汇总前先把起始地址和块大小除一除远比凭感觉靠谱。5.6 工具算出的结果和网络设备配置不一致很多在线子网计算器默认网络地址和广播地址都给你列出来了但不同工具对“可用地址”的定义略有差异。有的工具会把网关地址单独默认扣掉有的则直接按全部可用地址展示。我用过一个工具输入/30后返回“可用IP: 4”差点误导我把四个地址全填到设备上。这种踩坑没法完全避免最好的办法是弄一个“最小可视规则”从你的计算器里看到结果后手动验证广播地址是不是块大小减1可用地址范围首尾是不是网络地址加1和广播地址减1。只要这三个地方对得上基本可以放心用。5.7 配置时把路由表方向写反子网划分顺利完成后下一步通常是配静态路由或防火墙策略。这时最常见的错误是把“去往子网A的流量走接口1”写成了“从接口1进来的流量送往子网A”方向反了业务自然不通。排查这类问题的工具是tracert和路由器上的debug ip packet先确认哪个方向丢包再回来看路由表。最后再分享一个我私藏的小习惯每次做完一个VLAN规划我都会把子网表存在运维笔记里不是只存IP段而是把“网关地址、广播地址、下一个可用块起点”三样一起写进去。后面新增交换机堆叠、旁路防火墙或专线对接需要加一段地址时我直接查表格里最后一个块的广播地址加1就知道下一个网段从哪里开始了完全不用重新计算。子网划分本身不是高深算法但它是所有上层网络设计的地基。地基歪了HA集群会分裂跨机房通信会绕路安全策略会漏网。手算能力保证你有判断力工具脚本保证你有执行力两者配合才能既算得对又配得快。等你把前面几节练成肌肉记忆再看各种“子网作业”“地址规划表”会发现自己已经过了“解题”的阶段开始真正享受“设计”网络的乐趣。
返回列表