一、子网掩码的计算
TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的。网间网规
模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性,而是会带来两方面的负担:第一,巨
大的网络地址管理开销;第二,网关寻径急剧膨胀。其中第二点尤为突出,寻径表的膨胀不仅会降低网关寻径
效率(甚至可能使寻径表溢出,从而造成寻径故障),更重要的是将增加内外部路径刷新时的开销,从而加重
网络负担。
因此,迫切需要寻求新的技术,以应付网间网规模增长带来的问题。仔细分析发现,网间网规模的增长在内部
主要表现为网络地址的增减,因此解决问题的思路集中在:如何减少网络地址。于是IP网络地址的多重复用技
术应运而生。通过复用技术,使若干物理网络共享同一IP网络地址,无疑将减少网络地址数。
子网编址(subnet addressing)技术,又叫子网寻径(subnet routing),英文简称subnetting,是最广泛使
用的IP网络地址复用方式,目前已经标准化,并成为IP地址模式的一部分。
32位的IP地址分为两部分,即网络号和主机号,分别把他们叫做IP地址的“网间网部分”和“本地部分”。子
网编址技术将“本地部分”进一步划分为“物理网络”部分和“主机”两部分,其中“物理网络”部分用于标
识同一IP网络地址下的不同物理网络,常称为“掩码位”、“子网掩码号”,或者“子网掩码ID”,不同子网
就是依据这个掩码ID来识别的。
按IP协议的子网标准规定,每一个使用子网的网点都选择一个32位的位模式,若位模式中的某位置1,则对应IP
地址中的某位为网络地址(包括网络部分和子网掩码号)中的一位;若位模式中的某位置0,则对应IP地址中的
某位为主机地址中的一位。
例如二进制位模式:11111111 11111111 11111111 00000000中,前三个字节全1,代表对应IP地址中最高的三
个字节为网络地址;后一个字节全0,代表对应IP地址中最后的一个字节为主机地址。为了使用的方便,常常使
用“点分整数表示法”来表示一个IP地址和子网掩码,例如B类地址子网掩码(11111111 11111111
1111111100000000)为:255.255.25.0。
IP协议关于子网掩码的定义提供一定的灵活性,允许子网掩码中的“0”和“1”位不连续。但是,这样的子网
掩码给分配主机地址和理解寻径表都带来一定困难,并且,极少的路由器支持在子网中使用低序或无序的位,
因此在实际应用中通常各网点采用连续方式的子网掩码。像255.255.255.64和255.255.255.160等一类的子网掩
码不推荐使用
子网掩码与IP地址结合使用,可以区分出一个网络地址的网络号和主机号。例如:有一个C类地址为:
192.9.200.13,按其IP地址类型,它的缺省子网掩码为:255.255.255.0,则它的网络号和主机号可按如下方法
得到:
第1步,将IP地址192.9.200.13转换为二进制11000000 00001001 11001000 00001101
第2步,将子网掩码255.255.255.0转换为二进制11111111 11111111 11111111 00000000
第3步,将以上两个二进制数逻辑进行与(AND)运算,得出的结果即为网络部分。“11000000 00001001
11001000 00001101”与“11111111 11111111 11111111 00000000”进行“与”运算后得到“11000000
00001001 11001000 00000000”,即“192.9.200.0”,这就是这个IP地址的网络号,或者称“网络地址”。
第4步,将子网掩码的二进制值取反后,再与IP地址进行与(AND)运算,得到的结果即为主机部分。如将
“00000000 00000000 00000000 11111111(子网掩码的取值)反”与“11000000 00001001 11001000
00001101”进行与运算后得到“00000000 00000000 00000000 00001101”,即“0.0.0.13”,这就是这个IP地
址主机号(可简化为“13”)。
二、子网掩码的划分
如果要将一个网络划分成多个子网,如何确定这些子网的子网掩码和IP地址中的网络号和主机号呢?本节就要
向大家介绍。子网划分的步骤如下:
第1步,将要划分的子网数目转换为2的m次方。如要分8个子网,8=2*2*2。如果不是恰好是2的多少次方,则取
大为原则,如要划分为6个,则同样要考虑2*2*2。
第2步,将上一步确定的幂m按高序占用主机地址m位后,转换为十进制。如m为3表示主机位中有3位被划为“网
络标识号”占用,因网络标识号应全为“1”,所以主机号对应的字节段为“11100000”。转换成十进制后为
224,这就最终确定的子网掩码。如果是C类网,则子网掩码为255.255.255.224;如果是B类网,则子网掩码为
255.255.224.0;如果是A类网,则子网掩码为255.224.0.0。
在这里,子网个数与占用主机地址位数有如下等式成立:2m≥n。其中,m表示占用主机地址的位数;n表示划分
的子网个数。根据这些原则,将一个C类网络分成4个子网。
为了说明问题,现再举例。若我们用的网络号为192.9.200,转化为二进制为:11000000 00001001 11001000 则
该C类网内的主机IP地址就是192.9.200.1~192.9.200.254,现将网络划分为4个子网,按照以上步骤:
4=2*2,则表示要占用主机地址的2个高序位,即为11000000,转换为十进制为192。这样就可确定该子网掩码为
:192.9.200.192。4个子网的IP地址的划分是根据被网络号占住的两位排列进行的,这四个IP地址范围分别为
:
(1)第1个子网的IP地址是从“11000000 00001001 11001000 00000001”到“11000000 00001001 11001000
00111110”,注意它们的最后8位中被网络号占住的两位都为“00”,因为主机号不能全为“0”和“1”,所以
没有11000000 00001001 11001000 00000000和11000000 00001001 11001000 00111111这两个IP地址(下同)
。注意实际上此时的主机号只有最后面的6位。对应的十进制IP地址范围为192.9.200.1~192.9.200.62。而这个
子网的子网掩码(或网络地址)为 11000000 00001001 11001000 00000000,为192.9.200.0。
(2)第2个子网的IP地址是从“11000000 00001001 11001000 01000001”到“11000000 00001001 11001000
01111110” ,注意此时被网络号所占住的2位主机号为“01”。对应的十进制IP地址范围为
192.9.200.65~192.9.200.126。对应这个子网的子网掩码(或网络地址)为 11000000 00001001 11001000
01000000,为192.9.200.64。
(3)第3个子网的IP地址是从“11000000 00001001 11001000 10000001”到“11000000 00001001 11001000
10111110” ,注意此时被网络号所占住的2位主机号为“10”。对应的十进制IP地址范围为
192.9.200.129~192.9.200.190。对应这个子网的子网掩码(或网络地址)为 11000000 00001001 11001000
10000000,为192.9.200.128。
(4)第4个子网的IP地址是从“11000000 00001001 11001000 11000001”到“11000000 00001001 11001000
11111110” ,注意此时被网络号所占住的2位主机号为“11”。对应的十进制IP地址范围为
192.9.200.193~192.9.200.254。对应这个子网的子网掩码(或网络地址)为 11000000 00001001 11001000
11000000,为192.9.200.192。
在此列出A、B、C三类网络子网数目与子网掩码的转换表,如表5.1所示,供参考。
表1 子网划分与子网掩码对应表
A类网络划分子网数与对应的子网掩码
子网数目 占用主机号位数 子网掩码 子网中可容纳的主机数
2 1 255.128.0.0 8388606
4 2 255.192.0.0 4194302
8 3 255.224.0.0 2097150
16 4 255.240.0.0 1048574
32 5 255.258.0.0 524286
64 6 255.253.0.0 262142
128 7 255.254.0.0 131070
256 8 255.255.0.0 65534
B类网络划分子网数与对应的子网掩码
子网数目 占用主机号位数 子网掩码 子网中可容纳的主机数
2 1 255.255.128.0 32766
4 2 255.255.192.0 16382
8 3 255.255.224.0 8190
16 4 255.255.240.0 4094
32 5 255.255.248.0 2046
64 6 255.255.252.0 1022
128 7 255.255.254.0 510
256 8 255.255.255.0 254
C类网络划分子网数与对应的子网掩码
子网数目 占用主机号位数 子网掩码 子网中可容纳的主机数
2 1 255.255.255.128 126
4 2 255.255.255.192 62
8 3 255.255.255.224 30
16 4 255.255.255.240 14
32 5 255.255.255.248 6
64 6 255.255.255.252 2
三、快速计算子网掩码的方法
最后介绍三种快速计算机子网掩码的方法。
1. 利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。然后按以下基本步骤进
行计算:
第1步,将子网数目转化为二进制来表示;
第2步,取得子网数二进制的位数(n);
第3步,取得该IP地址类的子网掩码,然后将其主机地址部分的的前n位置“1”,即得出该IP地址划分子网的子
网掩码。
为了便于理解,现举例说明如下:现假如要将一B类IP地址168.195.0.0划分成27个子网,则它的子网掩码的计
算机方法如下(对应以上各基本步骤):
第1步,首先要划分成27个子网,“27”的二进制为“11011”;
第2步,该子网数二进制为五位数,即n = 5;
第3步,将该B类地址的子网掩码255.255.0.0的主机号前5位全部置“1”,即可得到 255.255.248.0,这就是划
分成 27个子网的B类IP地址 168.195.0.0的子网掩码。
2. 利用主机数来计算
利用主机数来计算子网掩码的方法与上类似,基本步骤如下:
第1步,将子网中需容纳的主机数转化为二进制;
第2步,如果主机数小于或等于254(因为要去掉保留的两个IP地址),则取得该主机的二进制位数,为n,这里
肯定 n8,这就是说主机地址将占据不止8位。
第3步,将255.255.255.255的主机地址位数全部置1,然后从后向前的将n位全部置为 0,即为子网掩码值。
举例如下。如要将一B类IP地址为168.195.0.0的网络划分成若干子网,要求每个子网内有主机数为700台,则该
子网掩码的计算方法如下(也是对应以上各基本步骤):
第1步,首先将子网中要求容纳的主机数“700”转换成二进制,得到1010111100。
第2步,计算出该二进制的位数为10位,即n = 10
第3步,将255.255.255.255从后向前的10位全部置“0”,得到的二进制数为
“11111111.11111111.11111100.00000000”,转换成十进制后即为255.255.252.0,这就是该要划分成主机数
为700的B类IP地址 168.195.0.0的子网掩码。
3. 子网ID增量计算法
其基本计算步骤如下:
第1步,将所需的子网数转换为二进制,如所需划分的子网数为“4”,则转换成成二进制为00000100;
第2步,取子网数的二进制中有效位数,即为向缺省子网掩码中加入的位数(既向主机ID中借用的位数)。如前
面的00000100,有效位为“100”,为3位;
第3步,决定子网掩码。如IP地址为B类1129.20.0.0网络,则缺省子网掩码为:255.255.0.0,借用主机ID的3位
以后变为:255.255.224(11100000)0,即将所借的位全表示为1,用作子网掩码。
第4步,将所借位的主机ID的起始位段最右边的“1”转换为十进制,即为每个子网ID之间的增量,如前面的借
位的主机ID起始位段为“11100000”,最右边的“1”,转换成十进制后为25=32。
第5步,产生的子网ID数为:2m-2 (m为向缺省子网掩码中加入的位数),如本例向子网掩码中添加的位数为3
,则可用子网ID数为:23-2=6个;
第6步,将上面产生的子网ID增量附在原网络ID之后的第一个位段,便形成第一个子网网络ID 129.20.32.0;
第7步,重复上步操作,在原子网ID基础上加上一个子网ID增量,依次类推,直到子网ID中的最后位段为缺省子
网掩码位用主机ID位之后的最后一个位段值,这样就可得到所有的子网网络ID。如缺省子网掩码位用主机ID位
之后的子网ID为255.255.224.0,其中的“224”为借用主机ID后子网ID的最后一位段值,所以当子网ID通过以
上增加增量的方法得到129.20.224.0时便终止,不要再添加了。