目录
一.划分子网
划分子网的方法是从网络的主机号借用若干位作为子网号 (subnet -id),当然主机号也就相应减少了同样的位数。于是两级IP地址在本单位内部就变为三级IP地址:网络号、子网号和主机号。也可以用以下记法来表示:
凡是从其他网络发送给某个单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付目的主机。
下面用例子说明划分子网的概念。图表示某单位拥有一个B类IP地址,网络地址是145.13.0.0(网络号是145.13)。凡目的地址为145.13.x.x的数据报都被送到这个网络上的路由器R1。
现把上图的网络划分为三个子网。这里假定子网号占用8位,因此在增加了子网号后,主机号就只有8位。所划分的三个子网分别是:145.13.3.0,145.13.7.0和145.13.21.0.在划分子网后,整个网络对外部仍表现为一个网络,其网络地址仍为145.13.0.0。但网络145.13.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网.
总之,当没有划分子网时,IP地址是两级结构。划分子网后P地址变成了三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。
二.子网掩码
假定有一个数据报(其目的地址是145.13.3.10)已经到达了路由器R1。那么这个路由器如何把它转发到子网145.13.3.0呢?
我们知道,从IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分。这是因为32位的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此必须另外想办法,这就是使用子网掩码( subnet mask)。
、
图(a)是IP地址为145.13.3.10的主机本来的两级IP地址结构。
图(b)是这个两级IP地址的子网掩码。
图(c)是同一地址的三级IP地址结构,也就是说,现在从原来16位的主机号中拿出8位作为子网号,而主机号由16位减少到8位。
请注意,现在子网号为3的网络的网络地址是145.13.3.0(既不是原来两级IP地址的网络地址145.13.0.0,也不是简单的子网号3)。为了使路由器R1能够很方便地从数据报中的目的IP地址中提取出所要找的子网的网络地址,路由器R1就要使用三级IP地址的子网掩码。
图(d)是三级IP地址的子网掩码,它也是32位,由一串24个1和跟随的一串8个0组成。子网掩码中的1对应于IP地址中原来二级地址中的16位网络号加上新增加的8位子网号,而子网掩码中的0对应于现在的8位主机号。
图(e)表示R1把三级IP地址的子网掩码和收到的数据报的目的P地址145.13.3.10逐位相“与”(AND),得出了所要找的子网的网络地址145.13.3.0。
使用子网掩码的好处就是:不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算(AND),就立即得出网络地址来。
归纳一下上述的要点。从网络145.13.0.0外面看,这就是一个普通的B类网络,其子网掩码为16个连1后面跟上16个连0.但进入到这个网络后(即到了路由器R1),就看到了还有许多网络(即划分了子网后的许多网络),其网络地址是145.13.x.0(这里x可以表示不同的数值),而这些网络的子网掩码都是24个连1后面跟上8个连0。总之,在这个B类网络的外面和里面,看到的网络是不一样的。
一个问题:在不划分子网时,既然没有子网,为什么还要使用子网掩码?
这就是为了更便于查找路由表。现在互联网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。默认子网掩码中1的位置和IP地址中的网络号字段 net -id正好相对应。因此,若用默认子网掩码和某个不划分子网的IP地址逐位相“与”(AND),就应当能够得出该IP地址的网络地址来。这样做可以不用查找该地址的类别位就能知道这是哪一类的IP地址。
三.子网划分的方法
我们以一个B类地址为例,说明可以有多少种子网划分的方法。在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
我们以第一个 子网划分的方法来解释:
我们看到子网号的位数为2,即该子网掩码的二进制可以表示为 :
11111111 11111111 11000000 00000000
前面的16为全为1,代表网络位,而第17,18位代表子网位,那么剩余的14位代表主机位。
子网数=2^2-2=4-2=2,减2的原因是减去全为1或全为0,即11 或 00 两种情况。
每个子网的主机数=2^14-2=16384-2=16382。
表中的“子网号的位数”中没有0,1,15和16这四种情况,因为这没有意义。
我们可以看出,若使用较少位数的子网号,则每一个子网上可连接的主机数就较多反之,若使用较多位数的子网号,则子网的数目较多但每个子网上可连接的主机数就较少。
四.例题讲解
【例1】已知IP地址是141.14.72.24,子网掩码是255.255.192.0.试求网络地址。
【解】子网掩码的二进制是11111111 11111111 11000000 00000000,请注意,掩码的前两个字节都是全1,因此要求的网络地址的前两个字节可写为141.14。子网掩码的第四字节是全0,因此要求的网络地址的第四字节是0,可见本题仅需对地址中的第三字节进行计算。我们只要把IP地址和子网掩码的第三字节用二进制表示,就可以很容易地得出网络地址。
【例2】在上例中,若子网掩码改为255.255.224.0.试求网络地址,并讨论所得结果。
这个例子说明,同样的IP地址和不同的子网掩码可以得出相同的网络地址。但是,不同的掩码的效果是不同的。
【例3】下图有三个子网,两个路由器,以及路由器R1中的部分路由表。现在源主机H1向目的主机H2发送分组。试讨论R1收到H1向H2发送的分组后查找路由表的过程。
【解】源主机H1向目的主机H2发送的分组的目的地址是H2的IP地址128.30.33.138,源主机H1首先要进行的操作是要判断:发送的这个分组,是在本子网上进行直接交付还是要通过本子网上的路由器进行间接交付?
源主机H1把本子网的“子网掩码255.255.255.128”与目的主机H2的“IP地址128.30.33.138”逐位相“与”(即逐位进行AND操作),得出128.30.33.128,它不等于H1的网络地址(128.30.33.0).这说明H2与H1不在同一个子网上。因此H1不能把分组直接交付H2,而必须交给子网上的默认路由器R1,由R1来转发。
路由器R1在收到一个分组后,就在其路由表中逐行寻找有无匹配的网络地址。先看R1路由表中的第一行。用这一行的“子网掩码255.255.255.128”和收到的分组的目的地址128.30.33.138逐位相“与”(即逐位进行AND操作),得出128.30.33.128。
然后和这一行给出的目的网络地址128.30.33.0进行比较。但比较的结果不一致(即不匹配)。用同样方法继续往下找第二行。用第二行的“子网掩码255.255.255.128”和该分组的目的地址128.30.33.138”逐位相“与”(即逐位进行AND操作),结果也是128.30.33.128。这个结果和第二行的目的网络地址128.30.33.128相匹配,说明这个网络(子网2)就是收到的分组所要寻找的目的网络。于是不需要再继续查找下去。R1把分组从接口1直接交付主机H2(它们都在一个子网上)。
即我们可以总结出在划分子网的情况下,路由器转发分组的算法如下:
- 从收到的数据报的首部提取目的IP地址D。
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
- 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- 报告转发分组出错。