路由表的建立算法和有关的刷新协议

来源:互联网 发布:java取地址符 编辑:程序博客网 时间:2024/04/28 20:53

   在这篇文章中主要解决的就是路由表的建立和刷新机制,那仫什仫是路由表呢?

   路由表就是路由器与其它互联网网络设备上存储的一张二维表,是用来反映网络结构的数据集,是数据在互联网上传输的关键。路由表的功能就是为数据包指明去往某信宿应该采用哪条路径

 一.路由表的结构

   在了解了路由表的作用之后,那仫一张基本的路由表由哪些条目组成呢?如下图所示:

   

   1).信宿地址:为目标网络的地址。在查询路由表的过程中,目标网络的IP地址与子网掩码进行按位与操作(就是得到该目标IP的网络号)再与该信宿地址进行匹配。

   2).子网掩码:用于提取目标网络IP地址所对应的网络号,提取方法在信宿地址中已经提到。

   3).下一跳地址:表示数据包在通往信宿的路上必须要走的下一步。可能是下一个路由器也可能是路由器在那个网络中的本地接口。当路由器正好和该信宿在同一个局域网上时,下一跳地址就是路由器在信宿网络上的本地接口。

   4).输出接口:表示路由器将数据包送往下一个路由器或信宿网络,一般是该接口的IP地址。

   5).度量:这个标志位一般用于度量从本设备触发去往信宿的距离,一般是路由器的数目。

   了解了基本的路由表的组成,那仫在linux中的路由表存在哪些字段呢?可以用route命令查看当前路由表的信息

   

    1).Destination:目的网络地址,与上图结构中的信宿地址匹配。

    2).Gateway:下一跳地址,详细功能见上图结构中的下一条字段分析。

    3).Genmask:是子网掩码。

    4).Iface,是接口地址,与上图中的输出接口匹配。

    5).Flags:U表示次条目有效(可以用于禁用某些条目),G表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经过路由器转发,故下一跳地址处为'*'号。

    在有些时候因为一些特殊原因,我们也可以用主机的IP地址作为信宿地址,这个用主机的IP地址做信宿地址的表项也叫特定主机路由。特定主机路由是给单个主机指定一条特别的路径,可用于安全性和网络测试等目的。

    在上述路由表的最后一行中是default,这是一个必须存在的字段,是路由表中的一个默认路由,主要由下一跳地址和发送接口组成,当目的地址与路由表中其他行都不匹配的时候,就按照缺省路由条目的规定接口发送到下一跳地址。

    在路由表中的默认路由表项所对应的信宿地址和子网掩码都是0.0.0.0,只要路由表中存在默认路由,就数据包就一定会找到下一跳。默认路由的目的是为了进一步隐藏细节,缩小路由表。

    了解了路由表的几个条目之后就让我们来回想一下实际生活中问路的情况是怎仫样的呢?

 帮助记忆的小栗子:

    A问B请问去xxx应该怎仫走?此时B的回复可能有四种情况,情况一:你想去xxx必须先到yyy;情况二:我也不知道,你去问C吧;情况三:你已经到xxx的门口了;情况四:我不知道。

    路由器的功能就是为数据包指明要走的路径,当一个数据包到达的时候查询路由器的路由表就类似实际中的问路。下面就来分析一下上面的几种情况分别对应数据包询问路由器时可能产生的几种结果。。。

    情况一:就是直接给出数据包送往该网络对应的下一跳路由器的地址

    情况二:其实就是当前路由条目的网络号与对应数据包IP的网络号不匹配,于是匹配下一个路由条目,如果都不匹配,则查看缺省的路由条目。

    情况三:在上面提到过特定主机路由,将数据包送往直接相连的信宿机。

    情况四:在数据包询问路由器的过程中是不会存在路由器不知道的情况的,则认为该路由器无效。

 二.路由表的建立算法和刷新机制

   一张路由表的建立和刷新有两种不同的方式:静态路由动态路由

    1.静态路由

    静态路由表需要手工配置规定的路由表,在大型网络上手工编辑路由表是一件十分困难的工作,还有可能造成难以管理的冗余路径。

   2.动态路由

    在这种方式下的路由表是动态建立和维护的,不需要手工编辑路由表,适用于大型网络。

    路由表的建立就是路由表的初始化过程,当路由器启动的时候,路由表的建立可以通过从外存中读取一个完整的路由表来完成,也可以根据与本路由器直接相连的网络推到出来。在初始化路由表之后要不断获取网络的最新状态来进行完善和更新路由表,这个过程就叫路由表的刷新过程。

   路由器自动获取路径信息的有两种方法:向量-距离算法链路-状态算法

    1.向量-距离算法

    向量-距离算法(vector-distance,简称VD),它的基本思想是:路由器周期性的向与他相邻的路由器广播刷新报文,报文的主要内容是一组从本路由器出发去往信宿网络的最短距离(路由器进行路由选择的原则是最短路径优先原则),各个路由器根据收到的(V,D)报文,按照最短路径优先原则对各自的路由表进行刷新。该算法的路径刷新发生在相邻网关之间,所以(V,D)不一定以广播的形式发送,也可以是组播或者是一对一的发送。(V,D)报文中的V代表"向量",标识从该路由器可以到达的网络或者是主机;D代表距离,表示从该路由器到信宿V的跳数。

     值得注意的是:该算法虽然简单,易于实现,但是它的信息交换量大(当交换路由信息的时候,几乎传输整个路由表),收敛速度慢。所谓的收敛速度慢就是当网络发生变化的时候,路由器不能及时的检测到这种情况,因为变化的扩散和传输需要一定的时间,而其他的路由器在没有获取到这种变化是不能正确的反应网络拓扑的真实情况的。所以该算法不适合那些网络结构频繁变化的或者大型的网络结构。

    2.链路-状态算法  

 链路-状态算法(link-status,简称L-S),也叫最短路径优先(shortest path first SPF)算法,它的主要做法如下:

    1).首先由路由器向相邻路由器发送查询报文,测试和它相邻路由器的链路状态。如果可以收到相邻路由器发回的响应,则说明该相邻路由器和这个路由器之间可以正常通信;

    2).在收到该路由器和其他相邻路由器的链路状态后,还向系统中所有参加最短路径优先算法的路由器发送链路状态报文;

    3).各路由器收到其他路由器发来的链路状态报文后,根据报文中的数据刷新本路由器所保存的网络拓扑结构图。如果链路发生变化,路由器将启用Dijkstra算法生成新的最短路径优先数,并刷新本地路由表;

   下面以一个详细的栗子讲解路由表的建立和刷新的向量-距离算法:

    


    假设存在上述的网络,网络与网络之间可以互相通信,在下述解释中只画出一个路由表的基本表项:目标网络,下一跳,和度量值,他们的含义在上面已经介绍过。。。

     1.开始时刻R0和R1的路由表都为空;

     

     2.对地址为x的相邻路由器发来的报文,先修改次报文中的所有项目:把目标网络修改为X的网络号,下一跳为该可以发送消息的路由器,度量值加1

     3.对修改后的报文中的每一个条目,进行以下步骤:

        1).如果原来的路由表中没有该目标网络,则直接将该目标网络的对应信息添加到该路由表中,假如该路由表中没有到达net2的路由,则将net2,R1,1添加到该路由表中

        2).如果原来的路由表中有该目标网络,此时再查看度量值,如果新的连接的度量值小于当前存在网络的度量值则更新该路径,否则忽略该新连接。因为路由器进行路由选择的原则是最短路径优先。

     4.若3分钟还未收到相邻路由器的更新路由表,则把该路由器R1标记为不可达路由器,把度量值置为16。在RIP(路由消息协议)中规定:一条有效路径的长度不能超过15,距离度量为16表示路径不存在,这是为了解决路由环路的问题。

     在这里就分享结束了~~~~

    

1 2