IP地址的两级结构会导致IP地址的利用率并不高,比如B类网络每个网络可以容纳6万多台主机,可是一般的企业不需要这么大的容量,所以IP的资源利用率很低。另外,当一个企业需要添加新的网络时,需要到IP地址管理机构申请网络,这会带来很多不便,为了解决这些问题,提出了划分子网的概念。
划分子网的基本思路:
(1) 每个网络由若干个子网组成,网络之外不知道网络内的子网状况,整个网络对外表现的是一个整体;
(2) 划分子网需要从网络的主机号部分借用部分位作为子网号,此时两级IP地址变成了三级IP:网络号,子网络号和主机号。
(3) 在发送数据报时,仍是根据目的主机的网络号找到跟网络相连的路由器,然后根据目的网络号和子网络号找到子网络,将数据报交付给目的主机。
划分子网和子网掩码密不可分,如何得到一个划分子网的子网络地址,我们需要将IP地址和子网掩码进行按位与操作。
一个路由器的路由表中含有子网掩码一栏。
子网掩码是一个网络或者子网的重要属性。路由器在和相邻路由器交换信息时必须把自己所在的子网掩码告诉相邻路由器。在路由器路由表的每一个表项中,除了要给出目的网络地址外还要给出该网络相应的子网掩码。
划分子网后,分组转发的算法需要做如下修改:
(1) 从收到的数据报的首部提取出目的IP地址D;
(2) 先判断是否为直接交付。对路由器相连的每个网络进行检查:用各网络的子网掩码和目的IP地址进行AND与操作,看结果是否与相应的网络地址匹配,如果匹配,则直接交付,否则,间接交付,执行步骤(3);
(3) 若路由表中有目的地址为D的特定主机路由,则将数据报交给路由表中所指定的下一跳的路由器,否则执行(4);
(4) 对于路由表的每一行(包含目的网络地址,子网掩码和下一跳地址),用子网掩码与IP地址逐位相与,结果为N,若N与网络地址匹配,则将数据报传给路由表中该行所指定的下一跳路由器;否则执行(5);
(5) 若路由器有默认路由,则将数据报转发给默认路由所指定的下一跳路由器,否则执行(6);
(6) 报告数据报转发出错。
面对网络IP即将耗尽,路由表中的表项急剧增长,为了解决这些问题,IETF提出了无分类编址。
无类型域内路由CIDR(classless inter-domain routing)
CIDR最主要的两个特点:
(1) 消除了传统的A,B,C类地址和划分子网的概念,CIDR将IP地址划分为两个部分,前面是网络前缀,后面是主机。CIDR采用斜线记法,斜线后的数字表示IP地址中网络前缀所占的位数。
(2) CIDR将网络前缀都相同的IP地址组成一个CIDR地址块,只要知道了地址块中的任何一个地址,我们就可以知道这个地址块的最小IP地址和最大IP地址。
在使用CIDR时,由于采用网络前缀这种记法,因此,IP地址由网络前缀和主机号组成。相应的路由表也要做相应的修改,每个项目中包括网络前缀和下一跳地址。在查找路由表时,可能匹配的不只一个结果,我们需要从匹配结果中选择具有最长网络前缀的路由。