资讯详情

资讯详情

从两级IP到子网划分:原理、掩码计算与VLSM实战

子网划分从两级IP地址到三级IP地址前阵子有个刚接触网络的同事问我“公司明明只有一个网段为什么领导非要我们搞个子网划分直接用192.168.1.x不香吗”我告诉他你这个问题正好是《计算机网络》里最经典的一个演进逻辑——从两级IP地址到三级IP地址。搞懂了这个你不仅面试笔试不怕平时做网络规划、配路由器、看防火墙策略心里也会有底得多。这篇文章不打算像教科书那样从OSI七层一层一层铺开讲而是直接围绕“子网划分为什么会出现、两级IP结构到底哪里不够用、三级IP结构怎么解决、实际划分时怎么算”这几个问题展开。适合刚学网络的新手也适合那些会配IP但一直没搞懂子网掩码原理的老手。我会尽量用大白话配合具体的二进制换算把每个人都能看懂的实操方法讲透。1. 两级IP地址先搞清楚“先辈”的设计思路1.1 IP地址是干嘛的先建立一个直观认识IP地址相当于网上设备的“门牌号”。你家寄快递需要收件人地址网络里发包也需要目的地址。这个地址必须全局唯一否则数据包送到谁手上容易混乱。IPv4地址总长32比特为了方便人看我们习惯写成点分十进制比如192.168.1.100。32比特就是32个二进制位看起来好长但慢慢你会发现这32位其实是划分成段的就像身份证号的前6位表示地区、中间8位表示出生日期后面是顺序码。IPv4地址在最早设计时也分了两段网络号Net ID和主机号Host ID。网络号用来标识你所在的网络主机号用来标识这个网络里的具体设备。两台设备要直接通信网络号必须相同。比如192.168.1.100和192.168.1.200只看前三段都是192.168.1通常就能判断它们在同一个网段可以直接通过交换机通信。但如果一个是192.168.1.100另一个是172.16.5.8网络号明显不同这就要靠路由器转发了普通交换机根本转发不了这种跨网段的数据包。1.2 分类编址A类、B类、C类是怎么划分的早期设计人员把32位IP地址按“最前面的几位”分成五类。A、B、C是常用的三类A类最前面的二进制位以0开头网络号占8位主机号占24位范围从1.0.0.0到127.255.255.255。B类前两位以10开头网络号占16位主机号占16位范围从128.0.0.0到191.255.255.255。C类前三位以110开头网络号占24位主机号占8位范围从192.0.0.0到223.255.255.255。D类以1110开头用于组播不区分网络号和主机号。E类以1111开头保留实验用。等级一看就明白A类网络数量少但每个网络能装的主机数量极大C类网络数量多但每个网络只能装254台主机减去网络地址和广播地址各一个。所以分类编址本质上是一种“按需取用”的设计超大规模的网络用A类中等规模用B类小规模用C类。1.3 两级结构的本质只有网络号主机号在“两级IP地址”阶段一个IP地址结构非常简单地址类别网络号位数主机号位数最大主机数可用A类8242^24 - 2 16777214B类16162^16 - 2 65534C类2482^8 - 2 254减2是因为每个网络里主机号全0表示网络本身主机号全1表示广播地址这两个地址不能分配给具体设备。这个规则在整个IP编址里都成立后面划分子网时还会用到。这个阶段“地址类别”说白了就是通过IP地址开头几位来强制决定网络号和主机号的分界线。比如你拿到一个IP 172.20.15.8因为它落在B类区间128-191所以前16位172.20是网络号后16位15.8是主机号。你不需要任何额外配置只要看IP所属的类别就知道它的网络边界在哪里这就是“两级”的含义。2. 为什么要变成三级两级编址下的三座大山2.1 地址空间浪费严重两级编址看似合理实际使用起来却极其浪费。以B类地址为例一个B类网络理论上有65534个可用主机地址但绝大多数公司根本不可能需要6万多台设备可能只有几百台。这就相当于你租了一个能容纳6万人的体育场里面只坐了300人剩下的座位全部空着。更夸张的是A类地址一个A类网络有1600多万个地址世界上没有哪个组织真的需要这么多地址分配给单个网络。这种巨大的浪费让IPv4地址空间很快变得紧张。今天大家抱怨IPv4地址枯竭很大程度是早年这种粗放式分配留下的历史包袱。2.2 路由表膨胀与广播域过大如果每个单位都按类别发放一个标准网络号那么互联网骨干路由器的路由表里就要维护大量B类、C类的路由条目。早期互联网规模小还能忍但一旦网络规模扩大路由表膨胀会拖垮路由器性能。另外一个容易被忽略的问题是广播域。同一网络内的设备某台机器发一个广播包目的地址255.255.255.255或者本网络的广播地址这个广播包会传播到整个网络段。如果一个大B类网络里接了几万台设备广播风暴会严重影响链路质量和设备CPU负载。把大网络划分成多个小网段可以有效缩小广播域减少无关广播包对全网的影响。2.3 一个真实的“借位”需求场景假设你是一家公司的网络管理员公司申请到一个B类地址172.16.0.0。全公司物理上分了很多部门比如行政部、技术部、财务部、人事部不同部门之间希望做到逻辑隔离——技术部的同事不希望财务部的广播包霸占他们的链路财务部也不希望普通员工能随便访问财务系统。按照两级编址的做法你只能把这个B类网络当成一个巨大的、内部完全平等的平面网络。所有部门都在同一个网段没有任何隔离。你想把地址拆开分给部门但“类别”已经固定了网络号和主机号的分界线你没法改变。这时自然而然地产生一个想法既然网络号到主机号之间有一个“边界”我能不能从主机号那边借几位出来当作二级网络号用比如把172.16.0.0这个B类网段借用前8位主机号当作“子网号”剩下的8位才真正作为主机号。这样就能划分出256个子网每个子网容纳254台主机等于把一个巨大的B类大饼切成了一个个大小适中的馒头。这个“借用主机号位”的操作就是子网划分的核心也是“三级IP地址结构”的由来。3. 子网掩码三级地址的“翻译官”3.1 掩码的本质和写法从两级地址变成三级地址地址本身还是那32位不再由地址类别来划分边界而是由“子网掩码”Subnet Mask来告诉你网络号和子网号的边界在哪里。子网掩码的作用就是对IP地址的每一位做一次“与运算”掩码位为1表示IP地址中这一位属于网络部分包括网络号和子网号。掩码位为0表示这一位属于主机部分。子网掩码也是32位写成点分十进制。比如255.255.255.0二进制就是11111111.11111111.11111111.00000000意思是前24位是网络部分后8位是主机部分。如果你听到有人说“/24”那就是CIDR斜杠记法意思是“前24位是网络部分”。两者是一回事只是表达方式不同。日常排障时看ipconfig输出Windows里一般显示子网掩码255.255.255.0Linux里可能看到/24要习惯这种换算。3.2 为什么说“网络号全0全1不能随便用”这个规则在子网划分后依然重要回到开头那个问题子网划分后每个子网也有自己的网络地址和广播地址。子网号可以从主机号中借位获得但子网号全0和全1能不能用在不同场景下有不同约定。传统上在早期的一些路由协议里全0子网和全1子网有特殊含义无法正常使用。后来随着CIDR和无类路由的普及全0子网在绝大多数现代设备上都可以使用了。不过有些老旧的网络设备或者保守的监控设备可能会把全0全1子网当作非法子网导致规划时踩坑。我个人的建议是如果你在配置某个不太熟悉的设备或者在做跨厂商对接时尽量避开全0和全1子网宁可用1号到254号子网别给自己挖坑。3.3 快速心法子网的“分钟级计算法”实际中很多人拿到一个IP和掩码想知道它的网络地址最笨的方法是把IP和掩码都转成二进制然后一位一位做AND运算。这是考试的标准做法但太慢。给你一个日常实用技巧记住一个规律——网络地址就是“把主机号对应的那几位全部置0网络部分保持IP原值”。掩码255.255.255.0意味着后8位是主机位那么192.168.1.200的网络地址显然是192.168.1.0。掩码255.255.255.128意味着主机位只有7位那么需要判断的是IP地址在那个128的块里。192.168.1.200200在128到255之间所以网络地址是192.168.1.128。这个方法本质就是找准“块大小”。块大小怎么算对于掩码255.255.255.x块大小等于256-x。如果掩码是255.255.255.192256-19264那就表示每个子网以64为步长递增0、64、128、192。任意IP只要处在哪个区间网络地址就是这个区间的起点。4. 子网划分实操从理论到一次标准的划分计算4.1 标准问法“求子网数、主机数、网络地址、广播地址”我当年考试和工作里最常见的划分需求是这种给定一个IP地址和子网掩码比如192.168.1.0/26划分后的子网数是多少每个子网有多少台可用主机第2个子网的网络地址是多少广播地址是多少先说子网数的计算。子网掩码/26意味着从原本/24的C类地址里借了2位26-242位作为子网位。2位二进制可以表示2^24个子网。每个子网的主机位数是32-266位可用主机数为2^6-262台。这个子网划分的结果一目了然子网序号子网地址可用IP范围广播地址1192.168.1.0192.168.1.1 - 192.168.1.62192.168.1.632192.168.1.64192.168.1.65 - 192.168.1.126192.168.1.1273192.168.1.128192.168.1.129 - 192.168.1.190192.168.1.1914192.168.1.192192.168.1.193 - 192.168.1.254192.168.1.255这里最需要注意的是网络接口/服务器一般可用IP范围里第一个或最后一个不是不能用而是看需求。如果你把网关设为192.168.1.65那这台机器就是该子网的网关。许多人第一次接触的时候容易忘记“广播地址下一个网络地址-1”这个规律算出来的可用范围里多包含广播地址配置IP时就会出错。4.2 实操案例把192.168.1.0/24划分成4个等长子网假设你负责的局域网规划要求把192.168.1.0/24这个大网段划分成4个等长子网给4个部门并且每个部门需要30台可用主机。我们来走一遍完整流程。第一步确定子网位数。4个子网需要2^24所以借2位主机位。原掩码/24新掩码/26即255.255.255.192。第二步验证主机数是否满足需求。每个子网可用主机数为2^(32-26)-262台大于30台满足需求。第三步列出所有子网。块大小为256-19264所以子网地址分别是192.168.1.0、192.168.1.64、192.168.1.128、192.168.1.192。第四步为每个子网分配IP。比如技术部用192.168.1.1到192.168.1.62网关设为192.168.1.1财务部用192.168.1.65到192.168.1.126网关设为192.168.1.65以此类推。第五步配置路由器或三层交换机。在两个子网之间通信时需要路由器或者三层交换机的接口承担不同的子网IP或者使用单臂路由/子接口。如果只是同一台交换机下的不同VLAN通常在每个VLAN的三层接口上配置对应的子网地址作为网关。4.3 变长子网掩码VLSM不同部门像不同尺寸的盒子上面那种把一个大网段平均切成4个大小相同的子网叫做等长子网划分也称为FLSMFixed Length Subnet Mask。但现实往往是部门人数不等比如技术部有50台设备人事部只有10台设备。平均分4份技术部够用人事部浪费了50多个地址财务部可能还不够。这时候就要上VLSMVariable Length Subnet Mask也就是变长子网掩码。VLSM允许在一个主类网络中使用不同的子网掩码结合按需分配的思路像按尺寸给盒子封口一样部门需求主机数需要主机位可用主机数减2后对应子网掩码技术部506位2^664可用6262/26财务部255位2^532可用3030/27人事部104位2^416可用1414/28后勤部53位2^38可用66/29划分的时候按需求从大到小分配首先给技术部切一个/26的块得到192.168.1.0/26接着给财务部切一个/27的块从192.168.1.64开始得到192.168.1.64/27然后再给人事部一个/28从192.168.1.96开始得到192.168.1.96/28最后给后勤部一个/29从192.168.1.112开始得到192.168.1.112/29。这种按需分配的思维方式比平均切块更贴近真实工作场景。很多企业网络初期规划不好后来每个部门加人地址不够用就是因为一开始用了平均切块的FLSM方式没有留出足够的余量。4.4 子网划分的常见错误速查表常见错误表现解决方法IP配置后提示“与网关不在同一网段”子网掩码算错网关IP和主机IP不在同一子网用块大小法验证网络地址确保网关在可用范围内子网设置好了但不同子网之间ping不通缺少路由或三层网关配置配置路由器/三层交换机子接口保证每个子网有网关地址广播地址被当成可用IP分配了设备IP冲突或网络异常记住“广播地址下一子网地址-1”打IP规划表时把首/末地址标红设备自动获取IP不成功子网划分与DHCP作用域不匹配检查DHCP地址池范围是否与子网范围一致一些老设备无法接入新子网默认网关、子网掩码配置未更新批量更新静态配置或改用DHCP5. 三级地址与CIDR的承上启下以及日常管理小技巧5.1 CIDR无分类编址对子网划分的“升级”子网划分解决了“一个主类网络内部逻辑隔离”的问题但它有个前提你申请到的还是一个主类地址比如一个C类192.168.1.0/24。到了90年代人们发现IPv4地址还是不够用因为分类地址的粒度太粗分配效率低。于是出现了无类别域间路由CIDR其实质是把“网络号子网号”完全融合成一个前缀不再受A/B/C类限制。CIDR最直观的体现就是/24、/25、/26这种斜杠写法。它和子网划分没有本质冲突子网划分是“把一个大的主类网络切小”CIDR是“把任意连续的前缀长度定义为网络部分”两者在计算网络地址、广播地址、可用主机数时遵循同样的规律。比如你不再说“这是一个B类地址172.16.0.0/16”你可以定义一个172.16.0.0/18等于把一个B类地址的前18位作为网络前缀后面14位作为主机位。这种写法体现了更灵活的前缀长度。理解到这一层你会突然明白为什么有些网络规划里会出现“172.16.1.0/22”这种看起来不伦不类的写法——它有效利用了地址段。5.2 从“IP地址、子网掩码、网关”三角色看网络配置实际配置设备时你一定会遇到这三个参数IP地址、子网掩码、网关。很多人能背下来但要严格理解IP地址本机在网络中的标识。子网掩码告诉本机哪些IP属于同一个子网因此可以直接通信哪些需要丢给网关处理。网关本机与外部子网通信时默认流量的下一跳地址。举个例子本机IP是192.168.1.100/24网关192.168.1.1。如果要访问192.168.1.200因为掩码相同双方在同一子网内所以本机会直接通过ARP请求找到对方的MAC地址走二层通信。如果要访问172.16.5.8本机发现对方不在本子网内就会把包发给网关192.168.1.1由网关去做路由转发。配置静态IP时最容易出现的坑就是网关和子网掩码不匹配。比如你把IP设为192.168.1.99子网掩码却设为255.255.255.192网关设为192.168.1.1那么问题来了192.168.1.1和192.168.1.99是否同一个子网按/26来看192.168.1.99落在192.168.1.64/26这个子网而192.168.1.1落在192.168.1.0/26这个子网两者网络地址不同导致你无法通过网关通信。这种现象在排查办公室网络故障时经常遇到第一反应就是核对子网掩码。5.3 批量设置与排查从命令行到排障工具实际工作里手动配置一台设备时Windows图形界面设置IP地址的顺序是“属性 - IPv4 - 使用下面的IP地址”把IP地址、子网掩码、默认网关填进三个框里就行。如果你是在Linux服务器上配置静态IP需要修改网络配置文件或者使用nmcli命令行这里不展开每种桌面的图形界面但核心参数都一样。我比较推荐在排查IP地址问题时先在Windows命令行里执行ipconfig /all在Linux里执行ip addr确认当前设备的IP、掩码、网关和DNS。然后ping网关地址如果通说明二层链路正常如果不通检查物理连接、VLAN、IP是否冲突。接着ping一个外网地址如果通说明三层路由正常如果不通检查网关路由、防火墙规则。这个排查思路基本能搞定90%的网络连通性问题。关于Windows批处理获取当前IP并手动填入网上有很多教程本质是用ipconfig命令加for循环解析出IPv4地址再写入注册表或netsh命令。这里不贴完整脚本但核心思路是先通过ipconfig获取网卡名称和当前IP再用netsh interface ip set address name网卡名 static 新IP 掩码 网关进行设置。要注意管理员权限还有执行前务必备份原配置。批处理脚本执行完后最好紧接着ping一下网关验证配置是否生效。5.4 一个小众但实用的工具思维Excel里按IP地址排序说个具体工作中常遇到的场景你导出了一堆设备的IP清单想在Excel里排序结果发现按普通方式排序10.0.0.9会排在10.0.0.11后面因为Excel把IP当成了文本字符串按第一段字符排序。这时候正确的做法是把IP按“点”拆分成四列数字再按四列依次排序。可以用分列功能指定分隔符为句点也可以用公式分别提取四段最后排序。这个问题的本质是IP地址虽然长得像数字但IPv4里的四段是0-255范围的独立数字不能直接当整数排序。类似的道理在配置ACL规则、整理防火墙白名单、规划子网地址表时也要注意别把“192.168.1.10”和“192.168.1.9”的字典序和数值序搞混。工作中如果脚本需要排序IP写Python代码时可以用socket.inet_aton把IP字符串转成32位整数排序但Excel场景下拆分四列排序更快。6. 结尾在我自己处理过的网络故障里有相当一部分问题的根源都出在子网掩码上。明明是同一个IP段因为掩码设错两台设备互相以为对方在别的子网所有流量都傻乎乎地扔给网关网关又查不到对应路由最终就是“能通但时好时坏”的诡异现象。所以我特别建议刚入门的朋友不管你是做运维、做开发还是做嵌入式把二进制换算和子网掩码这一页翻熟比记住一堆厂商的配置命令更值钱。再分享一个小技巧以后规划任何子网不要随手拿笔就算。先拿张Excel表把网络地址、广播地址、可用主机范围列出来再顺手标上VLAN编号和用途。这样后面排查故障、添加新设备、甚至写自动化脚本时都能少走很多弯路。子网划分从两级地址演进到三级地址本质上是人类对地址空间使用效率的不断优化你现在掌握的不只是计算更是一套网络设计的底层思维。希望这一篇能让你在配置IP的时候脑子里不再是“照抄模板”而是想清楚它背后的那个掩码到底在做什么。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →