常见的路由条目生成算法

来源:互联网 发布:php extract函数 编辑:程序博客网 时间:2024/05/16 06:45

前言:

路由:数据包从源地址到目的地址所需要经过的路径,由一系列节点组成。 

路由节点:一个具有路由功能的主机或者路由器,维护一张路由表,通过查询路由表来决定向那个节点发送数据包。 
路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接收和发送,其中最后一个是缺省路由条目。 

路由条目:路由表中的每一行,每个条目主要由网络地址、子网掩码、下一跳地址、发送接收四部分组成,如果要发送的数据报的目的网络地址匹配到路由表中的某一行,就按照规定接受发送到下一跳。


Linux中的路由表:


Destination目的网络 
Gateway下一跳 
Genmask子网掩码 
Flags 标记 :U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发,因此下一跳地址处记为* 号。 
Use 此路由项被路由软件查找的次数 
Iface 使用接口


路由选择算法

(1)距离-向量算法 
距离-向量路由选择算法 

路由器周期性地向其相邻路由器广播自己知道的路由信息,用以通知相邻路由器自己可以到达的网络以及到达该网络的距离。相邻路由器可以根据收到的路由信息修改和刷新自己的路由表。 优点是算法简单容易实现。缺点是慢收敛问题,路由器的路径变化需要像波浪一样从相邻路由器传播出去,过程缓慢。

路由表基本表项如图:

 


每一个相邻路由器发送过来的路由表都要经过以下步骤: 
1、对地址为X的 路由器发过来的路由表,先修改此路由表中的所有项目:把”下一跳”字段中的地址改为X,并把所有”距离”字段都加1。 
2、对修改后的路由表 中的每一个项目,进行以下步骤: 
2.1、将X的路由表(修改过的),与S的路由表的目的网络进行对比。 
若在X中出现,在S中没出现,则将X路由表中的这一条项目添加到S的路由表中。 
2.2、对于目的网络在S和X路由表中都有的项目进行下面步骤 
2.2.1、在S的路由表中,若下一跳地址是x 
则直接用X路由表中这条项目替换S路由表中的项目。 
2.2.2、在S的路由表中,若下一跳地址不是x 
若X路由表项目中的距离d小于S路由表中的距离,则进行更新。 
3、若3分钟还没有收到相邻路由器的更新表,则把此相邻路由器记为不可到达路由器,即把距离设置为16。


(2).链路-状态算法 
也称最短路径优先算法,他的主要思想如下: 
(1)路由器向相邻路由器发送查询报文。测试他和相邻路由器的链路状态,如果可以收到相邻路由器发回的响应,说明该路由器和相邻路由器可以正常通信。 
(2)收到该路由器和其他相邻路由器的链路状态后,还向系统中所有参加最短路径优先算法的路由器发送链路状态报文。 
(3)各路由器收到其他路由器发送到链路状态后,根据报文中的数据刷新本路由器保存的网络拓扑结构图。如果链路发生变化,路由器将采用Dijkstra算法生成新的最短路径优先数并刷新路由表。 


(3).Dijkstra算法 
(1)路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。 
(2)路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段: 
前序字段——表示当前节点之前的节点。 
长度字段——表示从源节点到当前节点的权值之和。 
标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。 
(3)路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。 
(4)路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,它将不再改变。一个T节点仅仅是一个代理而已。



原创粉丝点击