图 一 子网划分
设一个分组的目的地址为172. 24. 51. 90, 当该分组到达路由器凡后,凡如何把它转发正确的子网 172. 24. 48. 0 呢?我们知道,IP 地址本身及分组的首部都没有包含任何有关子网划分的信息。因此必须引入一个新的机制,这就是子网掩码(Subnet Mask )。图二 可形象地说明子网掩码的工作原理。图 二( a ) 所示为目的地址172. 24. 51. 90 在未划分子网前的两级结构。图 二( b) 所示为该地址在划分子网后的 3级地址结构,从图中可以看出,该子网的二进制表达为0011 , 即子网号为 3。请读者注意:该子网的网络地址是 172. 24. 48. 0 ( 二进制00110000 对应的十进制数值为48 ) , 既不是原来的网络地址172. 24. 0. 0 , 也不是子网号3。为了使路由器 R1能够很方便地从分组中的目的 IP 地址中提取出所要找的子网的地址,路 由器 R1就要使用子网掩码。如图 二 ( c) 所示为子网掩码,其 长度和 IP 地址相同,均为32 位。子网掩码一般由一串 l 和跟随的一串 0 组成,其中 1 对应于1P 地址中原来的 Net - id 加上Subnet - id , 而子网掩码中的 0 对应千现在的 Host - id。路由器将该子网掩码和分组的目的 IP 地址 172. 24. 51. 90 逐位相” 与" ( AND ) , 就得出了应该将此分组发往的子网的地址172. 24. 48. 0 , 如图 二( d ) 所示。
图 二 通过子网掩码计算网络地址
如果一个网络并不划分子网,那么还需要设置子网掩码吗?答案是肯定的。这样做是为了提高路由器的效率。众所周知,计算机(电子芯片)进行逻辑运算的效率是非常高的,路由器只要把子网掩码和 IP 地址进行逐位的” 与“运算,就能立即得出网络地址来,而无须判别该地址的类别位 。因此,Inte rnet 的标准规定,所有的网络都必须使用子网掩码,同时路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。由以上讨论可知,此时 1P 地址中的网络号字段 Net - id 与主机号字段 Host - id 分别对应默认子网掩码中的 1 和 0。这样,无论一个网络有没有划分子网,在路由器处理到来的分组时就可采用同样的算法。显然,A、B、C 3 类地址对应的默认子网掩码分别为 255. 255. 255. 0、255. 255. 0. 0 和 255. 255. 255. 0。
在引入子网后,由千路由表增加了子网掩码这一项,因此路由器分组转发算法修订如下:
( 1) 从收到的分组的首部提取目的IP 地址A。
( 2 ) 判断是否为直接交付。将与路由器直接相连的各网络的子网掩码和 A 逐位相” 与“看 结果是否和相应的网络地址相匹配 。若是,则 直接交付分组;否则执行步骤( 3 ) 。
( 3 ) 若路由表中有目的地址为A 的特定主机路由 ,则 把分组传送给路由表中所指明的下一跳路由器;否则 ,执行步骤( 4)。
( 4 ) 对路由表中的每一行(目的网络地址、子网掩码、下一跳地址,用)其中的子网掩码和A 逐位相” 与",其结果为 D。 若 D 与该行的目的网络地址匹配 ,则 把分组传送给该行指明的下 一跳路由器;否则 ,执行步骤( 5 ) 。
( 5 ) 若路由表中存在默认路由项,则 把分组传送给路由表中所指明的默认路由器;否则,执行步骤( 6 ) 。
( 6 ) 报告转发分组出错。
最后以B 类地址为例,给出一些常见的子网划分方法,见下表。
表 B 类地址的子网划分选择
从表中可以看到,若使用较少位数的子网号,则每个子网可包含的主机数量就比较多。反之,若使用较多位数的子网号,则每个子网包含的主机数量就较少。在实际应用中可以根据实际情况进行选择。同时不难发现,划分子网后在一定程度上减少了原网络可容纳的最大主机数。例如一个B 类地址可容纳的主机数为 65534 个,但表 3. 4 中任意一行的子网数和子网可容纳主机数的乘积都小于65534 个。