《用tcp/ip进行网际互联》第9章 无分类和子网地址扩展(CIDR)

目前IP地址资源紧缺,为了使得IP地址能够高效地利用,所以发明了很多方式来节省或者“创造”出IP地址,这篇博文主要讨论的就是这个方面。

第一种——代理ARP

我个人对这个东西的理解不透彻,只能谈一些概念了。


假设有两个物理网络,但是都被H4这个路由器相连接,假设H1想和H5进行通信,发送ARP报文,由于ARP报文是广播的,所以H4可以将其截获,H4发现它可以把报文转发给H5,所以,它将自己的物理地址反馈给H1,同时将报文传给H5。同理,H2想要和H5通信,也是如此。这就是代理ARP。书上对这个方面的讨论不是那么详细,我对此也很有疑问。

第二种——子网编址

这个处理方法在当前的网络中的应用应该可以算得上是广泛的了。


这里路由器R连接了两个物理网络,如果没有子网划分的技巧,那么应该申请两个IP地址来分别标识两个物理网络,子网编址的出现改善了这种情况。在路由器R外部的其他网络上来看这两个物理网络是一个网络,但是在网络内部,却用本地部分的一个八位组来标识子网络,其中一个子网络是128.10.1.X另一个是128.10.2.X。


这里可以看出本地部分被划分出了两个部分,一部分标识本地的物理网络,另一个标识每个物理网络上的主机。这里需要有一个注意的地方,由于全0的本地部分和全1的本地部分有特殊的含义,所以在物理网络和主机好这两个部分不能出现全0和全1的情况。所以下面这幅图就比较好理解了。


这里就体现了子网划分的灵活性,可以根据实际情况中的主机数量和物理网络数量指定合适的子网划分。

为了区分本地部分的物理网络地址,就需要子网掩码,用子网掩码和IP地址相与就能推算出本地部分的物理网络地址。举个例子,假设128.10.1.2这个IP地址有八位物理网络地址(不考虑不连续的情况)那么在这里子网掩码就是255.255.255.0。IP地址和子网掩码相与得到128.10.1.0这个就是子网的网络号。

我们之前介绍了IP数据报的标准转发算法,其实子网转发算法和标准转发算法是可以同意起来了,只需要在路由表的每一项当中加入一个属性——子网掩码。我个人觉得书上给出的算法有些问题,这里我参考了其他的书籍,认为合理的算法应该是这样的。

(1)从收到的数据报的首部提取目的IP地址D

(2)先查看是否是直接转发。抽取与路由器相连接的网络的子网掩码,将掩码和D相与得到网络地址N,看网络地址是否和对应的网络地址相匹配,如果匹配就转发,不匹配就说明是间接转发,执行(3)

(3)查看路由表中是否有特定的路由,如果有则将数据报转发给改路由器,否则执行(4)

(4)对路由表(目的网络地址,子网掩码,下一跳)中的每一行抽取子网掩码,并用掩码和D相与得到N,查看是否和目的网络地址相同,如果相同,则将数据报传给下一跳。

(5)查看是否有默认路由,如果有则将数据报转发给默认路由,否则执行(6)

(6)转发数据报出错。

第三种——CIDR(无分类域间路由选择)

CIDR的特点主要有两个。

第一点,CIDR消除了传统的A类,B类,C类地址以及划分子网的概念,因此也就可以更好地分配IP地址空间。这个时候IP地址分为两个部分 IP地址 = {<网络前缀> , <主机号>}。CIDR还使用斜线记法,在IP地址的后面加上/,再跟上网络前缀的位数。

第二点,CIDR将网络前缀相同的IP地址组成一个“CIDR”块。给定一个斜线记法的IP地址,我们就可以很容易地得出这个CIDR块的范围。例如:128.14.35.7/20


当然,在这里全0和全1的地址一般不会使用。 

CIDR 的功能一般被称为“构成超网”和“路由聚合”,可以有效地使路由表中的项数变少。 例如:206.0.64.0/18这个CIDR块,如果按照分类的方法,那么要想完全到达块中的所有网络需要64个路由表项(这个CIDR块包含了64个C类网络),而使用CIDR的表示方法,这里就只需要1个路由表项。

现在路由表中只有网络前缀和下一跳的地址,但是在CIDR的匹配过程中可能会出现两个路由表项都成功的情况,这个时候应该选择最长前缀匹配的方法。因为这样可以使得数据报到达的地方更为具体,网络前缀越短所包含的IP地址就越多,范围就越不精确。

现在我们讨论在使用CIDR情况下的路由转发算法,由于路由转发算法从某种程度上决定了一个网络的吞吐率,所以,这个算法的速度尤为重要,如何快速的选择路由那?

首先将每个路由项中的目的地址取唯一前缀,再用唯一前缀构建一个二叉树。这颗二叉树的每一个叶节点都代表着一个目的网络地址。







                                                                                                   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章