可变长度子网掩码(VLSM)在子网划分中的应用
在学习可变长度子网掩码时,必须先熟练掌握二进制与十进制的转化、计算机中数据的单位(字节、位)等知识。
一、什么是可变长度子网掩码?
要理解可变长度子网掩码,先要理解子网掩码;要理解子网掩码,先要理解IP地址的组成。
在互联网上,每台计算机必须有一个唯一的IP地址作用这台计算机在身份标志,可以将IP地址理解成一台计算机的身份证号码。在互联网上不允许出现相同的IP地址(NAT技术另论,它是一种IP地址共享技术,用于解决IP地址资源不足的问题)。身份证的编号要按照一定的规则进行,同样,IP地址的编号也要按照一定的规则进行。
IP地址(本文的IP指的都是IP v4)编号规则或特征:
-
一个IP地址由4个字节组成,采用点分十进制方式表示
例如,一个4个字节的IP地址的二进制形式是:11000000 10101000 11000111 00000001,其点分十进制表示就是将每个字节依次转化为十进制并用点分隔开,即:192.168.199.1。
在全国计算机等级考试一级中常会出现一道这样的题目:
判读以下IP地址哪个是正确的IP地址()
(A)192.256.4.4 (B)124.45.2.3.3 (C)45.21.4.3 (D)78.4.5
很明显正确答案是C。
A错在点分十进制表示的IP地址中,每个点分隔开的数值不能大于255,因为一个字节转化为十进制最大为255;B、D错在IP使用点分十制表示是4段(三个点分隔开4个十进制数)。
2. IP地址的分类
类别 |
第一个字节 |
示例IP |
子网掩码 |
|
二进制 |
十进制 |
|||
A类 |
00000001-01111110 |
1-126 |
12.0.0.1 |
255.0.0.0 |
B类 |
10000000-10111111 |
128-191 |
133.25.0.4 |
255.255.0.0 |
C类 |
11000000-11011111 |
192-223 |
200.18.19.4 |
255.255.255.0 |
D类 |
11100000-11101111 |
224-239 |
||
E类 |
11110000-11111110 |
240-254 |
IP地址以第一个字节进行分类的,可分为五类:A、B、C、D、E。
D类地址用于多点广播,E类地址用于科研、保留(目前找不到具体的应用资料),这两类地址不在本文中讨论。
3.各类IP地址的特征及判断依据
A类地址:第一个字节第一位二进制位为0,第一个字节十进制值为[1,126];
B类地址:第一个字节前两位二进制位为10,第一个字节十进制值为[128,191];
C类地址:第一个字节前三位二进制位为110,第一个字节十进制值为[192,223];
D类地址:第一个字节前四位二进制位为1110,第一个字节十进制值为[224,239]
E类地址:第一个字节前五位二进制位为11110,第一个字节十进制值为[240,254]。
在全国计算机计算机等级考试一级中,经常给出多个IP地址,判断这些IP地址所属的类别,判断的方法就是根据第一个字节的前几位二进制值或第一个字节的十进制进行判断的。
4. IP地址由两部分组成:网络号与主机号
身份证号前两位表示省代码,3、4位表示市代码,5、6位表示区代码……通过每位赋予不同的意义可以分解出身份证的信息。IP地址也一样,一个IP地址包含两部分信息,一部分代表IP地址属于哪个网络的,另一部分代表IP地址在这网络中的编号是多少。IP地址属于哪个网络称之为该IP地址的网络号,IP地址在其网络中的编号称之为该IP地址的主机号,而且,网络号在前,主机号在后。(备注:D、E两类地址不区分网络号与主机号)
5. 通过子网掩码计算网络号与主机号
子网掩码与IP地址的表示类似,也是使用4个字节(32bit)表示,也可以用点分十进制表示。只是子网掩码没有网络号、主机号之分了,而且它只有与IP地址一起合用,用于计算IP地址的网络号与主机号才有意义。
4个字节32位bit位的子网掩码组成:N个1后面跟着M个0(N+M=32)。
A类地址,子网掩码为11111111 00000000 00000000 00000000(二进制),即255.0.0.0。
B类地址,子网掩码为11111111 11111111 00000000 00000000(二进制),即255.255.0.0。
C类地址,子网掩码为11111111 11111111 11111111 00000000(二进制),即255.255.255.0。
通过子网掩码计算网络号与主机号的方法是:将IP地址转化为二进制数,再与其对应的子网掩码(二进制数)进行与运算,得到的是网络号,剩下的是主机号。
例如:
地址 |
计算 |
A类地址:25.4.5.6 子网掩码:255.0.0.0 |
A类地址二进制为:00011001 00000100 00000101 00000110 子网掩码二进制为:11111111 00000000 00000000 00000000 00011001 00000100 00000101 00000110 与 11111111 00000000 00000000 00000000 00011001 00000000 00000000 00000000 -> 25.0.0.0 则该IP地址的网络号为:25.0.0.0 主机号为:4.5.6 |
B类地址:146.100.15.96 子网掩码:255.255.0.0 |
A类地址二进制为:10010010 01100100 00001111 01100000 子网掩码二进制为:11111111 11111111 00000000 00000000 10010010 01100100 00001111 01100000 与 11111111 11111111 00000000 00000000 10010010 01100100 00000000 00000000 -> 146.100.0.0 则该IP地址的网络号为:146.100.0.0 主机号为:15.96 |
C类地址:198.150.1.6 子网掩码:255.255.255.0 |
A类地址二进制为:11000110 10010110 00000001 00000110 子网掩码二进制为:11111111 11111111 11111111 00000000 11000110 10010110 00000001 00000110 与 11111111 11111111 11111111 00000000 11000110 10010110 00000001 00000000 -> 198.150.1.0 则该IP地址的网络号为:198.150.1.0 主机号为:6 |
备注:将点分十进制的IP地址转化为二进制时,如果转化后不足8位,要在前面补0,补到8位满为止。
通过上面的计算,可以观察到,对于有类地址:A类IP的网络号就是前面一个字节(或者前面8个bit位),B类IP的网络号就是前面二个字节(或者前面16个bit位),C类IP的网络号就是前面三个字节(或者前面18个bit位),剩余部分就是其主机号。
6. IP地址中的保留地址
IP地址中有一些是保留地址,不能在公网中使用的。
序号 |
地址 |
说明 |
1 |
0.0.0.0 |
路由表中默认路由使用 |
2 |
255.255.255.255 |
通常在广播中使用 |
3 |
127.0.0.0-127.255.255.255 |
常用做循环测试用的,也代表本机地址 |
4 |
10.0.0.0-10.255.255.255 |
A类私有地址(即只能在局域网中使用,不能在公网使用) |
5 |
169.254.0.0-169.254.255.255 |
保留,听说微软专用了:) |
6 |
172.16.0.0-172.31.255.255 |
B类私有地址 |
7 |
192.168.0.0-192.168.255.255 |
C类私有地址 |
每个网络中还有两个地址不能使用:一个是主机位全为0,用于表示这个网络使用,另一个是主机位全为1,用于这个网络的广播使用。
例如:A类12.5.4.3/8(通常在IP地址后面加上/N用于表示子网掩码的位数),其IP地址的二进制表示是00001100 00000101 00000100 00000011,子网掩码的二进制是1111111100000000 00000000 00000000,其网络号00001100 00000000 00000000 00000000(12.0.0.0),后面三个字节用于表示主机号。主机号上的二进制全为0时,即00001100 00000000 00000000 00000000(12.0.0.0),这个地址不能用于表示主机;当主机号全为1时,即00001100 11111111 11111111 11111111(12.255.255.255),这个地址也不能用于表示主机(它用于12.0.0.0这个网络的广播使用)。
7. 三类网络的数量与每个网络的主机数
类别 |
网络数 |
表示主机的二进制位数 |
每个网络中的主机数 |
A类 |
126 |
后三个字节共24位 |
224-2=16777214 |
B类 |
约214=16384 |
后两个字节共16位 |
216-2=65534 |
C类 |
约221=2097152 |
后一个字节共8位 |
28-2=254 |
二、可变长度子网掩码能干什么?
在现实中,如果将一个A类网络分配给一个组织使用,但是这个组织内部的计算机又没有16777214台,这就会造成大量的IP地址闲置与浪费。因此,需要有一种更加灵活的方式根据网络规模的大小来划分网络。思路就是将一个网络再划分为更小的多个子网供不同组织使用。这种划分网络的方式使用的技术就是可变长度子网掩码(VLSM)。可变长度子网掩码在公网与企业内部中都可以使用。
采用可变长度子网掩码,网络的类别已不重要了,网络中主机的数量也不是固定的而是依据实际需要定。为了实现灵活的网络大小规划,在网络号与主机号中间增加了一个概念——子网。子网概念的增加并没有改变IP v4中IP地址的实际长度,而是采用:从表示主机的二进制位位数中借用一定的位数来表示子网的方法实现(网络中主机数会减少)。同时,子网掩码也不再是8位、16、24位这些8的倍数了,它会根据实际需要使用不同的位数来表示网络号。
例如:146.45.182.6/20
表示IP地址是146.45.182.6,子网掩码是20位,即:255.255.240.0
子网掩码二进制的表示是11111111 11111111 11110000 00000000
20位
该地址如果按类分是个B类地址,子网掩码应该是255.255.0.0,即16位,主机数应该可达65534。而采用可变长度子网掩码后,子网掩码是255.255.240.0,即20位,主机数减少了(用于表示主机的二进制位拿出4位,表示子网)。
计算该IP的网络号、主机数的方法如下:
146.45.182.6 转为二进制表示 10010010 00101101 10110110 00000110
255.255.240.0 转为二进制表示 11111111 11111111 11110000 00000000
两者进行与运算得 10010010 00101101 10110000 00000000
10010010 00101101 10110000 00000000转为十进制146.45.176.0,即为网络号
主机数=232-20-2=4094,前20位二进制位表示网络号(含子网),剩下12位二进制位表示主机号,可表示212-2个(要扣掉全0,和全1两个IP)。
网络中可用的IP地址从:10010010 00101101 10110000 00000001(146.45.176.1)
到:10010010 00101101 10111111 11111110(146.45.191.254)
该IP地址的网络号:146.45.176.0,广播地址:146.45.191.255,子网掩码:255.255.240.0
三、怎么确定可变子网掩码的长度?
确定可变子网掩码长度的过程其实就是划分子网的过程。
当从主机位中借1位二进制位时,当前网络可划分出2个子网,每个子网主机数是原来的1/2-2;当从主机位中借2位二进制位时,当前网络可划分出4个子网,每个子网主机数是原来的1/4-2……当从主机位中借N位二进制位时,当前网络可划分为2N个子网,每个子网主机数是原来的2-N-2。
例如:192.168.10.0/24这个C类网络要划分出2个相等主机数的子网,则
1.网络号与子网掩码转为二进制
网络号 192.168.10.0 转为二进制 11000000 10101000 00001010 00000000
子网掩码 255.255.255.0 转为二进制 11111111 11111111 11111111 00000000
2.要把一个网络划分成两个相等子网,子网掩码要加1位,变成
11111111 11111111 11111111 10000000
3.网络号从主机位借一位用于子网11000000 10101000 00001010 XYYYYYYY
X位代表借入的,用于表示子网号,7个Y代表剩余主机位,X有两个值0和1。
1)为0时:
11000000 10101000 00001010 0YYYYYYY
当Y全为0,表示划分出的这个子网的网络号,为11000000 10101000 00001010 00000000
其主机可用IP地址范围是:
11000000 10101000 00001010 0 0000001(192.168.10.1,掩码:255.255.255.128)
至
11000000 10101000 00001010 0 1111110(192.168.10.126,掩码:255.255.255.128)
2)为1时
11000000 10101000 00001010 1YYYYYYY
当Y全为0,表示划分出的这个子网的网络号,为11000000 10101000 00001010 10000000
其主机可用IP地址范围是:
11000000 10101000 00001010 1 0000001(192.168.10.129,掩码:255.255.255.128)
至
11000000 10101000 00001010 1 1111110(192.168.10.254,掩码:255.255.255.128)
综述,192.168.10.0/24要划分成两个相等主机数的子网,子网掩码要改为25位,划分出的两个子网情况是:
子网1:
网络号:192.168.10.0 子网掩码:255.255.255.128 广播地址:192.168.10.127
主机IP地址范围:192.168.10.1至192.168.10.126
子网2:
网络号:192.168.10.128 子网掩码:255.255.255.128 广播地址:192.168.10.255
主机IP地址范围:192.168.10.129至192.168.10.254
在子网划分的实际应用中,制定子网划分的方案,要首先确定子网的规模,即子网包含的主机数是多少,再根据主机数的确定要借用多少主机位用于表示子网。
例如:某学校有个部门获得一个C类网络(地址段)的独立使用权,该网络(网段)为192.168.20.0。该部门有三间机房和一间办公室,每间机房有51台计算机,办公室有10台计算机,机房和办公室都需要使用该网络(网段)。请为该部门做一份子网规划方案以满足这个部门的需要,要求每间机房、办公室的主机在各自的一个子网中。
对一个网络进行子网划分,根据其每个子网需要容纳的主机数来确定需要从主机位中借几位的二进制位用于表示子网。假设一个子网的主机数有51台,则主机位最少要使用6个二进制位才能满足主机的编号,即2n-2>51(n就是二进制的位数)。
在现实应用中,对C类网络划分子网的应用明显比A、B两类多得多。对于一个C类的网络进行子网划分,可以参照下面总结的这张表:
借主机位数 |
可划分子网数 |
每个子网可容纳下主机 |
掩码 |
1 |
21=2 |
27-2=126 |
255.255.255.128 |
2 |
22=4 |
26-2=62 |
255.255.255.192 |
3 |
23=8 |
25-2=30 |
255.255.255.224 |
4 |
24=16 |
24-2=14 |
255.255.255.240 |
5 |
25=32 |
23-2=6 |
255.255.255.248 |
6 |
26=64 |
22-2=2 |
255.255.255.252 |
7 |
没划分下去的必要了,没有用于表示主机的编号了 |
||
8 |
(备注:有些教科书中把划分出的子网再减2,即借来的二进制位全0和全1代表的子网不使用,个人实践验证,使用也没有问题)
通过对上面表格的参照,每间机房51台主机,如果加上网关就是52个IP,30<52<62,为最大化利用IP地址,应采用向主机位借2位的。即:
机房一:子网络为192.168.20.0,掩码为255.255.255.192,IP范围为192.168.20.1至192.168.20.62,广播地址192.168.20.63;
机房二:子网络为192.168.20.64,掩码为255.255.255.192,IP范围为192.168.20.65至192.168.20.126,广播地址192.168.20.127;
机房三:子网络为192.168.20.128,掩码为255.255.255.192,IP范围为192.168.20.129至192.168.20.190,广播地址192.168.20.191;
办公室10台,如果加上网关是11个IP,6<11<14,为最大化利用IP地址,可采用向主机位借4位。其中借两位的00、01、10(二进制代码)的子网已在三个机房中使用,可以从11开始再借2位。即:
子网络为192.168.20.192,掩码为255.255.255.240,IP范围为192.168.20.193至192.168.20.206,广播地址192.168.20.207。
(备注:如果上面的表述看不清,就把点分十进制转化为二进制表示会有助于理解)
四、PacketTracer模拟器中模拟
拓扑图:
在三层交换机Multilayer Switch0上做如下配置:
Switch>enable
Switch#configure terminal
Switch(config)#interface f0/1
Switch(config-if)#no switchport
Switch(config-if)#ip address 192.168.20.1 255.255.255.192
Switch(config-if)#no shutdown
Switch(config-if)#interface f0/2
Switch(config-if)#no switchport
Switch(config-if)#ip address 192.168.20.65255.255.255.192
Switch(config-if)#no shutdown
Switch(config-if)#interface f0/3
Switch(config-if)#no switchport
Switch(config-if)#ip address 192.168.20.129255.255.255.192
Switch(config-if)#no shutdown
Switch(config-if)#interface f0/4
Switch(config-if)#no switchport
Switch(config-if)#ip address 192.168.20.193255.255.255.240
Switch(config-if)#no shutdown
Switch(config-if)#interface f0/5
Switch(config-if)#no switchport
Switch(config-if)#ip address 172.16.0.1 255.255.255.252
Switch(config-if)#no shutdown
Switch(config-if)#exit
Switch(config)#ip routing
Switch(config)#ip route 0.0.0.0 0.0.0.0 172.16.0.2
在Router0上做如下配置:
Router>enable
Router#configure terminal
Router(config)#interface f0/0
Router(config-if)#ip address 172.16.0.2 255.255.255.252
Router(config-if)#no shutdown
Router(config-if)#interface f0/1
Router(config-if)#ip address 192.168.30.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#ip route192.168.20.0 255.255.255.0 172.16.0.1
在Router0上做回程路由时,采用路由汇聚将到达4个子网的4条路由汇聚成一条,这也是采用VLSM划分子网带来的一个好处,减少了路由条目。