ARTICLE DETAIL

资讯详情

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

子网划分实战:从两级IP到三级地址,掩码计算与规划全解析

子网划分实战:从两级IP到三级地址,掩码计算与规划全解析 经常有人问我一个网段到底怎么规划才合理说实话我刚接触网络那会儿也搞不懂看到IP就分A类、B类、C类C类填255.255.255.0B类填255.255.0.0从来不关心子网号这个概念。直到有一次帮一家两百多台设备的现场做网络整改才发现原来那套“两级IP地址”的打法根本撑不住设备一多广播报文满天飞交换机CPU告警排查到最后全是子网划分没做好。这篇文章就围绕“子网划分”这条主线把从两级IP地址到三级IP地址的演变、子网掩码的计算方法、实操案例、常见坑位一次说清楚适合刚入行的网络运维、桌面支持以及所有需要自己动手规划办公室网络的人。1. IP地址为什么从两级变三级先看懂两级地址的结构1.1 两级IP地址的本质网络号决定“你在哪”主机号决定“你是谁”两级IP地址指的是IP地址内部只分成两个部分网络号网络位和主机号主机位。比如C类地址192.168.10.66前三个字节192.168.10是网络号最后一个字节66是主机号。这个概念放到现在看很简单但它是理解三级IP地址的基础务必先吃透。为什么叫“两级”因为路由器的转发行为完全由网络号决定数据包到了目标网络之后再由主机号找到具体设备。你可以把IP地址想象成快递地址网络号相当于“北京市海淀区”主机号相当于“xx路xx号”。快递员先看城市和区域分拣到对应的网点再由网点快递员找到具体门牌。没有网络号路由器根本不知道该往哪个方向扔数据包没有主机号数据到了目标网络也不知道该投给谁。两级结构的好处是路由简单转发决策只需要比对网络号完全符合早期互联网分层的设计思路。两级IP地址的实现依赖“分类编址”也就是最早期的A、B、C类地址方案。A类地址第一位固定为0范围是1.0.0.0到126.255.255.255默认掩码255.0.0.0网络号占8位主机号占24位B类地址前两位固定为10范围128.0.0.0到191.255.255.255默认掩码255.255.0.0网络号16位主机号16位C类地址前三位固定为110范围192.0.0.0到223.255.255.255默认掩码255.255.255.0网络号24位主机号8位。这种设计把地址空间切成三块分别面向超大型网络、中型网络和小型网络早期用起来确实直观。地址类别首字节范围默认掩码网络号长度最大主机数适用场景A类1 - 126255.0.0.08位约1677万超大型运营商骨干B类128 - 191255.255.0.016位约65534大型企业和高校C类192 - 223255.255.255.024位254小型局域网不过这套分类方案放到今天看问题很大。两级IP地址并不是说地址本身只有两级信息而是说它缺少“子网”这个灵活粒度所有同网络号的设备天然属于同一个广播域不能根据实际物理位置或部门需求再细分。于是就有了“从两级IP地址到三级IP地址”的演进需求。1.2 两级地址的3个硬伤浪费、广播风暴、路由表膨胀先说浪费。C类地址最多254台主机小型公司够用但如果一个学校或者一个中型企业需要分配B类地址那就要面对65534个主机地址。实际上大多数单位撑死几千台设备剩下几万个地址全部闲置又不能让给别的网络用这就是典型的地址浪费。A类更夸张一个A类地址段包含一千多万个地址早期分配给一些大机构之后大量地址长期空置这是IP地址枯竭的重要原因之一。两级分类的最大问题就是“粒度太粗”没有精确匹配需求的子网划分能力。再说广播风暴。同一个网络号下所有主机处于同一个广播域只要有设备发ARP广播全网的机器都会收到。设备少的时候无所谓设备一旦超过一两百台广播帧数量会持续增加交换机CPU和端口处理压力跟着上来网络时延变大严重时会出现“一广播就卡顿”的现场。我记得有一次在客户那边做网络优化接入交换机上接了两百多台机器一开视频会议就丢包最后用抓包软件一看广播报文占比接近30%。这种问题靠换交换机是治标不治本真正解法就是把大网络切成多个子网。最后是路由表膨胀。如果每家单位分配一个B类或C类网络核心路由器上就要为每个网络记录一条路由。互联网规模越来越大路由表条目数量会爆炸式增长转发性能必然受影响。后来虽然出现了CIDR无类别域间路由来做路由聚合但理解子网划分依然是前置条件。简单说两级IP地址的设计思路是“把网络分大块”而实际网络的需求是“在块内再细分、在外部能聚合”这就是为什么需要三级IP地址的原因。2. 三级IP地址怎么来的子网号与子网掩码的关系2.1 借位从主机号里“抠”出子网号三级IP地址的结构是“网络号 子网号 主机号”。它没有改动IP地址的32位长度也没有增加新的地址字段而是把原来的主机号“拆”成了两部分前面几位作为子网号后面剩余几位作为真正的主机号。这个过程在实际工作中叫“借位”也就是向主机位借出若干比特位。举一个最经典的例子。C类地址192.168.10.0/24原始主机号8位最多254台主机。如果网络管理员觉得这台交换机下设备太多想把这个网段切成4个子网那就需要向主机号借2位。借位后结构变成网络号24位 子网号2位 主机号6位。子网号有00、01、10、11四种组合对应4个子网每个子网的主机号还有6位对应2的6次方减2等于62台可用主机。这4个子网分别是192.168.10.0/26、192.168.10.64/26、192.168.10.128/26、192.168.10.192/26。借位是子网划分的核心操作理解它需要抓住一个关键点子网划分不是改变IP地址本身而是改变“掩码长度”。IP地址还是那32个比特但掩码从原来的/24变成了/26多出来的2个比特被当作子网号。这也是“从两级IP地址到三级IP地址”最本质的变化原来只要区分网络号和主机号现在还要通过掩码进一步区分子网号。为什么说借位能解决广播域过大的问题因为4个子网的广播域彼此隔离。192.168.10.0/26这个子网内的广播只会在子网内传播不会跑到192.168.10.64/26去。这样即使总设备量没变每个广播域的规模却缩小到原来的四分之一网络卡顿问题随之缓解。借位多的还有个好处是增强了网络安全性不同部门放在不同子网里不能直接二层互访必须经过路由或防火墙。2.2 子网掩码三级地址里必须带的那把尺子既然引入了子网号那路由器也好主机也好怎么知道一个IP地址里哪些比特是网络号、哪些是子网号、哪些是主机号不能靠猜必须有一个显式的参数来标记这就是子网掩码简称掩码。掩码的规则很简单用一串连续的1表示网络位和子网位剩下的0表示主机位。IP地址和掩码做按位与运算得到的结果就是网络地址。还是用192.168.10.66这个地址举例。如果掩码是255.255.255.192换算成二进制就是11111111.11111111.11111111.11000000前面26位是1。192.168.10.66的最后一个字节66换成二进制是01000010和掩码最后一个字节11000000做按位与得到01000000也就是64。于是网络地址就是192.168.10.64说明这个IP属于192.168.10.64/26这个子网。从这里能看出子网掩码的历史意义在两级IP地址时代掩码是由地址类别决定的A类默认8位B类默认16位C类默认24位所以叫“默认掩码”。引入子网划分之后掩码不再固定而是根据借位数动态变化必须显式配置和传递。没有掩码三级IP地址根本没法工作因为你看一个IP地址是看不出来子网号的。这也解释了为什么现在配置IP时掩码和IP总是成对出现两者缺一不可。实际操作中我们通常用“斜杠前缀长度”代替完整的掩码比如/26就代表掩码前26位为1换算成十进制是255.255.255.192。/24就是255.255.255.0/25就是255.255.255.128/27就是255.255.255.224。看到前缀长度心里要立刻反应出对应掩码值看到掩码也要能说出前缀长度这是子网规划的基本功。2.3 为什么不能再用“类别”来区分第三级有人可能会问既然一级不够用为什么不直接设计成三级固定结构比如互联网规定“所有IP地址都按8位网络号、8位子网号、16位主机号”来分配答案很简单网络规模的差异太大了固定结构只会制造新的浪费。如果固定子网号长度那些只有几十台设备的小型办公室也得分配一个可容纳6万多主机的子网这和B类地址的浪费没有本质区别。引入子网划分的意义恰恰在于它取消了固定类别的限制让你可以根据实际需要决定借几位。部门有200台设备就划个/24部门只有30台设备就划个/27路由器之间的点对点链路只需要2个可用地址那就划个/30。这种按需分配的思路后来发展成VLSM可变长子网掩码是三级IP地址走向成熟的标志。另外还有一个原因如果严格按照类别来识别第三级意味着所有路由器都要记住“哪些地址有子网号、子网号占几位”这和集中式管理没两样根本不适合分布式网络。而把子网信息编码进掩码每个网络管理员可以独立决定自己网段内的子网结构只要保证子网内部掩码一致即可灵活度完全不在一个级别。所以“类别”逐渐被“掩码”取代三级IP地址的本质不是新增一层固定编号而是引入一个可调节的掩码机制。3. 子网划分实操计算掩码换算、借位权衡和完整案例3.1 掩码和前缀换算口诀256减去掩码值就是块大小子网划分最常用的计算叫“块大小”block size公式非常简单块大小等于256减去掩码的十进制数值。比如掩码是255.255.255.192256减192等于64块大小就是64意味着每个子网占用64个地址子网的起始地址一定是64的倍数。掩码是255.255.255.224256减224等于32块大小32子网起始地址一定是32的倍数。掩码是255.255.255.240256减240等于16块大小16子网地址按16递增。块大小就是子网内地址的总数包括网络地址、广播地址和可用主机地址。前面前提是只考虑最后一个字节设计子网时IP地址前三个字节通常不变。记住这个口诀可以快速心算子网范围不用每次都翻计算器。顺便把前缀长度和掩码的对应关系列一张常用表建议收藏前缀长度子网掩码块大小可用主机数借位数C类/24255.255.255.02562540/25255.255.255.1281281261/26255.255.255.19264622/27255.255.255.22432303/28255.255.255.24016144/29255.255.255.248865/30255.255.255.252426为什么可用主机数要减2因为每个子网里有两个地址不能用一个是主机位全为0的网络地址代表整个子网本身一个是主机位全为1的广播地址用于向子网内所有主机广播。除了这两个特殊地址其余地址才分配给主机、打印机、网关等设备。3.2 借几位才合适子网数与主机数的权衡表子网划分的本质就是“拿主机位换子网位”两者此消彼长。借1位子网数变成2可用主机数从254降到126借2位子网数变成4可用主机数降到62借3位子网数变成8可用主机数降到30。子网数等于2的借位数次方每个子网可用主机数等于2的剩余主机位次方减2。以C类地址为例借位和结果如下表借位数子网掩码子网数每子网可用主机数适用场景0/241254小办公室单网段1/252126两区域简单隔离2/264624个部门中等规模3/278308个工位/小型分支4/281614小型设备组5/29326远程办公点对点6/30642路由器间链路这表格里的关键是“需求驱动借位”。你首先得知道子网里最多会有多少台设备然后反推需要多少主机位最后再算借几位。比如某部门计划放20台电脑主机位数至少要满足2的n次方减2大于等于20n取5就够了32减2等于30所以主机位是5位对应C类地址借3位子网掩码/27。如果只考虑“能塞下”而不考虑余量很容易精确算成5位但实际工程里建议多预留一点按25到30台需求甚至直接划/26留出未来扩展空间。这里还有一个坑要提醒有些旧教材说子网号全0和全1不能使用所以子网总数要按2的借位数次方减2算。但在现代路由协议和设备上子网全0和全1早就默认支持了实际操作中不需要减2按2的借位数次方算即可。如果你是在老设备上做兼容再按减2处理。3.3 手把手规划一个办公网络4个部门怎么分下面用一个完整案例演示规划过程。假设公司拿到一个C类私有地址段192.168.10.0/24现在有研发部、销售部、行政部、财务部4个部门每个部门设备数量大约在50台左右要求彼此隔离、能通过网关互访。需求不是特别大用固定长度子网划分就够了。先确定借位数需要4个子网2的2次方等于4所以借2位掩码从/24变成/26每个子网可用主机数62台满足50台的预期。4个子网分别是子网1192.168.10.0/26可用地址192.168.10.1 - 192.168.10.62广播地址192.168.10.63。子网2192.168.10.64/26可用地址192.168.10.65 - 192.168.10.126广播地址192.168.10.127。子网3192.168.10.128/26可用地址192.168.10.129 - 192.168.10.190广播地址192.168.10.191。子网4192.168.10.192/26可用地址192.168.10.193 - 192.168.10.254广播地址192.168.10.255。子网起始地址怎么来的用块大小64从0开始累加0、64、128、192。子网内第一个地址是网络地址最后一个地址是广播地址中间的都是可用主机。网关通常取子网内第一个可用地址方便记忆比如子网1的网关192.168.10.1子网2的网关192.168.10.65。实际部署时每个部门交换机上划分一个VLANVLAN接口IP就是对应子网的网关。比如VLAN 10对应研发部网关192.168.10.1VLAN 20对应销售部网关192.168.10.65。这样三层交换机负责子网间路由二层广播被限制在各自子网内整体清晰很多。等以后设备超过62台就要再细化到/27甚至/28或者改用VLSM按部门实际规模分。3.4 用Python脚本辅助计算省得每次手算规划大型网络时手动一个个算子网范围很容易出错我习惯写个简单的Python脚本辅助。下面这个脚本输入IP和掩码会自动输出网络地址、广播地址、可用主机范围和地址总量。def ip_to_bin(ip): return .join([f{int(x):08b} for x in ip.split(.)]) def bin_to_ip(b): return ..join([str(int(b[i:i8], 2)) for i in range(0, 32, 8)]) def calc_subnet(ip, mask): ip_bin ip_to_bin(ip) mask_bin ip_to_bin(mask) prefix mask_bin.count(1) net_bin .join([str(int(ip_bin[i]) int(mask_bin[i])) for i in range(32)]) broad_bin net_bin[:prefix] 1 * (32 - prefix) net_addr bin_to_ip(net_bin) broad_addr bin_to_ip(broad_bin) ip_int int(net_bin, 2) broad_int int(broad_bin, 2) total broad_int - ip_int 1 print(f网络地址: {net_addr}) print(f广播地址: {broad_addr}) print(f掩码前缀: /{prefix}) print(f可用范围: {bin_to_ip(net_bin[:prefix] 0 * (32 - prefix))} - {bin_to_ip(net_bin[:prefix] 1 * (32 - prefix))}) print(f地址总量: {total}) calc_subnet(192.168.10.66, 255.255.255.192)脚本输出里有一个点需要展开说明可用范围我直接用网络地址的主机位全0到全1代替但真正分配给设备要排除首尾两个地址。比如/26段计算结果是192.168.10.64到192.168.10.127实际可用是65到126。这个脚本适合快速确认每个子网的边界尤其是做VLSM多级细分时能明显降低心算压力。平时在Linux或macOS上也可以用sipcalc、ipcalc这些命令行工具一条命令直接给出子网信息比手算快得多。4. 子网划分后的工程细节网关、广播地址和静态IP配置4.1 网络地址、广播地址与合法主机范围子网划分完紧接着要明确三件事网络地址、广播地址、合法主机范围。网络地址也叫子网号是主机位全为0的地址它不能分配给设备用途是标识这个子网本身。广播地址是主机位全为1的地址也不能分配给设备用途是向子网内所有主机发送广播报文。剩下的地址才是合法主机地址可以分配给电脑、服务器、打印机、网关等。以192.168.10.64/26这个子网为例主机位6位。网络地址是主机位全0对应192.168.10.64广播地址是主机位全1对应192.168.10.127可用主机地址从192.168.10.65到192.168.10.126共62个。网关一般选择192.168.10.65或192.168.10.126也就是可用范围最开头或最末尾的地址这样后续加设备时不容易乱排查问题也好记。实际配置时还有个容易搞混的点网关到底能不能和主机不在同一个子网答案是不能。网关IP必须和主机IP属于同一子网因为主机要通过ARP去解析网关的MAC地址而ARP只能在同一个二层广播域内工作。如果网关和主机不在同一个子网主机会认为网关不可达直接丢弃数据包。很多人网络不通查到最后就是网关没配对。4.2 静态IP配置里最容易翻车的掩码和网关组合部署阶段最常见的任务就是给设备配置静态IP这里最容易翻车的三个参数是IP地址、子网掩码、网关。Windows上打开网络适配器属性填IPv4地址的时候很多人只注意IP和网关却忘了改掩码。比如规划的是/26子网IP填了192.168.10.66掩码却保留默认的255.255.255.0网关填192.168.10.65。表面上看着也能通实际上掩码变了主机会认为192.168.10.0/24整个网段都在本地访问其他子网时不走网关直接发ARP结果当然不通。正确的做法是IP、掩码、网关三者必须匹配同一个子网规划。Linux桌面系统如果走图形界面配置Ubuntu一般是Settings - Network - IPv4Manual模式填Address、Netmask、Gateway如果要写配置文件常见用netplan示例配置如下network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.10.66/26 routes: - to: default via: 192.168.10.65 nameservers: addresses: [223.5.5.5, 114.114.114.114]注意addresses这里写的是192.168.10.66/26相当于同时指定了IP和掩码netplan会自动算出掩码255.255.255.192。routes里default网关填192.168.10.65。这个组合和刚才子网2的规划完全一致。很多新手总喜欢把掩码写成255.255.255.0结果网关地址又不在/24范围里就会出现“能ping通同网段、出不去外网”的怪现象。如果要批量确认本机当前IP、掩码、网关Windows下命令行执行ipconfig /allLinux下执行ip addr和ip route。排查时我会先看掩码和网关是否匹配再ping网关一步一步缩小范围。4.3 为什么同一网段才能直接通信子网与三层路由子网划分不仅仅是地址规划它还决定了设备之间的通信方式。同一个子网内的两台主机IP地址的网络号相同数据包会通过ARP获取对方MAC地址在二层交换机直接转发不同子网内的两台主机网络号不同数据包必须先发给自己的网关由网关设备做三层路由转发。为了方便理解可以把子网想象成小区。同一子网就是同一栋楼住户之间可以直接串门不同子网就是不同小区你出门得先经过小区大门这个大门就是网关。如果大门设错了你连小区都出不去。这也是为什么子网划分通常和VLAN规划绑在一起一个VLAN对应一个子网网关就是VLAN接口的IP。三层交换机上配置了多个VLAN接口后就能自动在不同子网之间路由终端设备只需要把默认网关指到对应VLAN接口IP即可。这里有个值得注意的场景如果你在一个没有DHCP的网络里手动给两台设备配置了不同子网的IP它们之间是ping不通的即使连着同一台交换机。很多人以为插在同一台交换机上必然能通其实二层交换机不处理三层路由不同子网通信必须依赖网关。接口不在同一子网又没有三层设备介入通信就是不通。理解了这一点很多莫名其妙的网络故障其实都能解释通。5. 常见问题与排查记录掩码配错、VLSM分配和规划思维5.1 掩码配错的典型症状能ping通网关上不了网排查经历里最常见的一个现象是设备能ping通自己的网关但访问其他网段或者上外网就超时。第一反应通常怀疑DNS但有时候问题就出在子网掩码上。举个例子一台电脑IP是192.168.10.66网关是192.168.10.65这本来属于192.168.10.64/26这个子网。如果配置时把掩码填成了255.255.255.0电脑会认为整个192.168.10.0/24都在同一个子网内凡是目标地址在这个范围内的请求都直接发ARP而不是交给网关。可实际上旁边的设备可能分布在192.168.10.0/26等多个子网里如果目标设备在不同子网ARP就找不到请求超时。更隐蔽的是如果目标设备正好也在/24掩码下被错误识别为“同网段”就会触发二层转发而实际二层交换机做了VLAN隔离数据包根本过不去。排查思路我一般按这个顺序来第一步用ipconfig /all看本机IP、掩码、网关确认掩码是否与规划一致第二步ping网关判断本机到网关的二层链路是否正常第三步ping一个外网IP或者对端子网的网关判断三层路由是否正常第四步看DNS能不能解析域名。如果前三步正常但网页打不开大概率是DNS问题如果第二步正常但第三步失败优先怀疑掩码或网关配置不对。用这个顺序排错基本能快速锁到问题点上。5.2 VLSM变长子网掩码实战按真实需求切分固定长度子网划分简单但有个致命弱点是浪费地址。前面3.3的案例里4个部门各分一个/26每个子网可用62台如果部门只有20台设备那43个地址就闲置了。遇上地址段不够用的场景就需要VLSM可变长子网掩码让不同子网使用不同的掩码长度。拿192.168.10.0/24继续举例假设部门需求变为A部门30台、B部门25台、C部门12台、D部门6台。按固定/26会消耗4个子网浪费大量地址用VLSM可以这样切A部门分/27可用地址30个范围192.168.10.0/27可用1到30B部门也分/27范围192.168.10.32/27可用33到62C部门分/28可用14个范围192.168.10.64/28可用65到78D部门分/29可用6个范围192.168.10.80/29可用81到86。整个规划只用了87个地址剩余地址还能继续给未来扩容使用。部门需求分配网段掩码可用主机数网关建议A30台192.168.10.0/27255.255.255.22430192.168.10.1B25台192.168.10.32/27255.255.255.22430192.168.10.33C12台192.168.10.64/28255.255.255.24014192.168.10.65D6台192.168.10.80/29255.255.255.2486192.168.10.81VLSM的划分顺序有一个实操习惯先规划需求最大的子网再规划较小的子网否则容易把大子网挤到不连续的地址空间里后续路由不好聚合。从大到小连续切最终外部路由可以聚合比如把0到127这段聚合成192.168.10.0/25对上游设备来说只要一条路由即可路由表更干净。5.3 我的子网规划习惯先统计、再计算、多留余量这几年做网络规划我总结了一套自己的习惯分享出来供参考。第一步永远不是拿掩码表开算而是先把需求统计清楚每个物理区域、每个部门未来三到五年大概会有多少台设备有没有无线接入有没有监控、门禁这种容易忽略的IP设备统计漏了后面一定返工。第二步才是计算子网大小。我的习惯是宁可多留20%到30%的地址余量也不要卡着刚好够用的线去划。比如部门现在30台设备未来可能加到35台那就不要用/27卡得刚刚好直接分/26代价只是多浪费一些地址换来的却是未来不用折腾IP重规划。IP地址相对便宜而网络割接的人工成本和时间成本才是大头。第三步是统一网关位置。同一台三层交换机下管理的子网网关统一取每个子网的第一个可用地址比如/27子网取.1、.33、.65规律性强后续写文档、排查都不用反复翻表。小型企业网络我还会顺手把DHCP的地址池排除掉网关和打印机等固定设备地址避免地址冲突。最后一个建议所有子网规划一定要落到文档里包括网段、掩码、网关、VLAN号、使用部门、负责人。我见过太多网络设备多了之后IP地址全靠“谁先抢到谁用”最后连网管自己都说不清某个地址属于哪个子网排查故障全靠猜。规划这件事三分靠划分七分靠记录记录做好了后续不管遇到什么网络问题都能快速定位到“哪个子网、哪台网关、哪个VLAN”效率完全是两个级别。我个人在实际操作中还有一个比较受用的小技巧批处理快速收集全网设备的IP段信息。Windows下可以用一条命令把所有主机当前IPv4地址导出到文本再结合Excel的IP排序功能整理成表做地址台账非常省事。命令行如下for /f tokens2 delims: %%a in (ipconfig ^| findstr /c:IPv4) do echo %%a ip_list.txt拿到这份IP清单后按子网段的起始地址排个序哪些机器在哪个子网一眼就能看出来特别适合清点历史遗留的不规范配置。子网划分这件事说难并不难核心就是“借位、算掩码、留余量”但真正到工程里细心和规范比速度重要得多。希望这篇内容能帮你少踩几个坑。
返回列表