要理解子网划分,必须先回到IP地址本身的设计逻辑。互联网工程任务组最早在RFC 791中定义了IPv4地址的三十二位二进制结构,采用点分十进制表示法,将三十二位平分为四个八位组,每组用零到二百五十五之间的十进制数表示。这种表示法是为了方便人类阅读和记忆,但在网络设备内部,一切运算仍然基于二进制位进行。IP地址的原始分类方案将地址空间划分为A类、B类、C类、D类和E类五个大类,A类地址第一个八位组最高位固定为零,网络号占七位,主机号占二十四位;B类前两位固定为一零,网络号十四位,主机号十六位;C类前三位固定为一一零,网络号二十一位,主机号八位;D类用于组播,E类保留实验用途,这两类在子网划分讨论中通常不涉及。
这种有类编址方案在互联网早期确实简单直接,路由器只需要检查IP地址前几位就能判断网络类别和网络号长度。但它有一个致命缺陷:地址浪费极为严重。试想一个拥有三百台主机的机构,如果分配一个C类地址只能容纳二百五十四台,不够用;如果分配一个B类地址可容纳六万五千多台,但实际只需三百台,剩余六万多台被白白浪费。在互联网高速扩张的二十世纪九十年代初期,这种浪费直接加速了IPv4地址枯竭危机的到来。正是在这个背景下,子网划分技术应运而生。
子网划分的核心思想是打破有类地址中网络号和主机号的固定边界,允许网络管理员从主机号部分借用若干高位作为子网号,从而将一个大的网络地址块切割成多个更小的子网。这种设计一举解决了两个问题:一是提高了地址利用率,一个B类地址不再被一个机构独占,可以划分出数十甚至数百个子网按需分配;二是优化了路由效率,同一子网内的主机可通过二层交换直接通信,减少广播域范围,提升网络性能。子网划分技术最早在RFC 917和RFC 950中标准化,后来成为每一个网络工程师必须掌握的核心技能。
子网掩码是整个子网划分体系的运算核心,它的作用就是告诉网络设备:一个三十二位的IP地址中,哪些位是网络部分包括子网号,哪些位是主机部分。子网掩码同样是三十二位二进制数,由一串连续的一后面跟一串连续的零组成,这是现代网络的硬性要求,非连续掩码在RFC 1812之后已被明确废弃。其中一对应的位表示网络位,零对应的位表示主机位。默认情况下A类地址的掩码是二五五点零点零点零即斜杠八,B类是二五五点二五五点零点零点即斜杠十六,C类是二五五点二五五点二五五点零即斜杠二十四。子网划分之后掩码不再是这些默认值,而是根据借位情况重新确定。掩码的十进制数值与借位数之间有精确的数学对应关系,这是后面要重点展开的内容。
网络设备在收到数据包时,需要判断目标IP地址是否与自己在同一子网内。这个判断过程全部依赖子网掩码完成,具体运算逻辑是将目标IP地址与本机子网掩码做按位与运算,将本机IP地址也与同一掩码做按位与运算,然后比较两个结果是否相等。如果相等,说明目标与本机在同一子网,数据包可通过二层交换直达;不相等则必须交给默认网关通过三层路由转发。按位与的运算规则是:两个位都为一结果才为一,否则为零。
按位与运算之所以能精确分离出网络地址,是因为子网掩码中网络位全为一而主机位全为零。IP地址任意位与一做与运算保留原值,与零做与运算强制归零。这就相当于用掩码把主机位全部抹掉,只保留网络位和子网位的原始值,得出的结果即为该IP地址所在的网络地址。
举个例子来具象化:IP地址一九二点一六八点一点一百,子网掩码二五五点二五五点二五五点一百九十二。将地址和掩码都转换为二进制。一九二是11000000,一六八是10101000,一是00000001,一百是01100100。掩码最后一个八位组一百九十二是11000000。做按位与运算后,网络地址最后一个八位组为01000000即六十四,所以子网地址为一九二点一六八点一点六十四。
所谓借位,本质上是把原本预留给主机号的二进制位重新定义为子网号的扩展。借一位可区分两个子网,借两位四个子网,借三位八个子网,以此类推。但每借走一位,主机号就少一位,可用主机数减半。以C类地址为例,默认主机号八位,可容纳二百五十四台主机。借两位后子网号变成两位产生四个子网,但主机号只剩六位,每子网最多六十二台。借三位变成八个子网每子网三十台。借四位变成十六个子网每子网十四台。若借用n位,子网数为二的n次方,每子网主机数为二的主机剩余位数次方减二。
这里必须解释减二的原因。每个子网中有两个地址被保留为特殊用途:一个是网络地址即主机位全为零的地址,它标识子网本身,路由器在转发数据包时依靠网络地址判断目标子网;另一个是广播地址即主机位全为一的地址,用于向该子网内所有主机发送广播数据包,比如ARP请求就是依赖广播地址来发现目标主机的MAC地址。这两个地址不能分配给实际主机接口,因此可用主机数等于二的剩余位数次方减二。这个减二规则是子网划分考题中最频繁出现的考点,许多考生在紧张的计算中忘记减二导致直接丢分,而且往往一组题中多道子题都依赖同一个减二前提,一处出错则整组覆没。
基本子网划分解决了地址浪费和广播域控制问题,而VLSM的引入则进一步把地址利用效率推向极致。VLSM全称Variable Length Subnet Mask,译为可变长子网掩码,最早在RFC 1009和RFC 1812中正式引入路由协议规范。它的核心思想是允许同一个有类网络内部使用不同长度的子网掩码,根据各网段实际主机数量需求精确分配地址块,而非一刀切使用统一掩码。
理解VLSM的关键在于打破一个思维定式:子网划分不一定要把大网络等分成大小相同的子网。以C类地址一九二点一六八点一点零斜杠二十四为例,假设企业有四个部门,研发部需六十台主机,市场部需三十台,财务部需十五台,行政部需五台。若用固定长度掩码,必须统一划出至少容纳六十台的子网,需借两位产生四个各含六十二台的子网。实际使用下来研发部用满,市场部仅用一半,财务部用四分之一,行政部用不到十分之一,大量地址被闲置。
VLSM的做法是先处理需求最大的网段。研发部需六十台主机,二的六次方为六十四减二得六十二,刚好够用,所以主机位留六位,子网位借两位,掩码斜杠二十六,子网地址为一点零斜杠二十六,可用范围为一点一到一点六十二。市场部需三十台,二的五次方为三十二减二得三十,主机位留五位,掩码斜杠二十七,从一点六十四开始分配,子网地址为一点六十四斜杠二十七,可用范围为一点六十五到一点九十四。财务部同样需斜杠二十七,从一点九十六开始,子网地址为一点九十六斜杠二十七,可用范围为一点九十七到一点一百二十六。行政部需五台,二的三次方为八减二得六,主机位留三位,掩码斜杠二十九,从一点一百二十八开始,子网地址为一点一百二十八斜杠二十九,可用范围为一点一百二十九到一点一百三十四。通过这个逐级剖分的实例可以看到,VLSM的本质是递归式地址分配策略,从剩余空间中切出恰好满足需求的块,最大限度压缩地址碎片。
CIDR全称Classless Inter-Domain Routing,译为无类域间路由,在RFC 1518和RFC 1519中标准化。CIDR与VLSM常被一起讨论,但两者关注层面不同:VLSM侧重地址分配层面的灵活子网划分,CIDR侧重路由表层面的地址聚合。CIDR彻底废除IP地址的ABC类概念,取而代之以网络前缀表示法即斜杠加数字格式,掩码长度可以是零到三十二的任意整数。
CIDR最核心的应用是路由聚合,也叫路由汇总或超网化。其原理是将多个连续的地址块合并为一个更大的地址块,用一条汇总路
本篇完!