路由表条目生成算法

来源:互联网 发布:京东比价软件 编辑:程序博客网 时间:2024/05/17 09:21

路由表:路由表(routing table)存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。

linux下路由表的查看:
这里写图片描述
Destination:目的网络地址
Genmask:子网掩码
Gateway:下一跳地址
Iface:发送接口
Flags中的U标志表示此条目有效(可以禁用某些 条目)G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的⽹网络地 址是与本机接口直接相连的网络,不必经路由器转发,因此下一跳地址处记为*号。
default:必须存在的字段,当目的地址与路由表中其他行都不匹配时,就按照缺省路由条目发送到指定的下一跳接口。

路由表分为静态路由表和动态路由表
静态路由表
由系统管理员事先设置好固定的路由表称之为静态(static)路由表,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络结构的改变而改变。

静态路由表需要手工配置规定的路由表,在大型网络上手工编辑路由表是一件十分困难的工作,还有可能造成难以管理的冗余路径
动态路由表
动态(Dynamic)路由表是路由器根据网络系统的运行情况而自动调整的路由表。路由器根据路由选择协议(RoutingProtocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。

路由器自动获取路径信息的方法:

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

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

例:已知路由器R6有表a所示的路由表,现在收到相邻路由器R4发来的路有更新信息,如表b所示,。试更新路由器R6的路由表。
表a
这里写图片描述
表b
这里写图片描述
解:
先把表b中的距离都加1,并把下一跳路由器都改为R4,得到表c.
表c
这里写图片描述
把这个表的每一行和表a进行比较。
第一行在表a中没有,因此要把这一行添加到表a中。
第二行的Net2在表a中有,且下一跳路由器也是R4。因此要更新(距离增大了)。
第三行的Net3在表a中有,但下一跳路由器不同。于是就要比较距离,新的路由信息的距离是2,小于原来表中的4,因此要更新。
这样,得出更新后的R6的路由表如下所示。
这里写图片描述

2、链路-状态路由选择算法

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

a、首先由路由器向相邻路由器发送查询报文,测试和它相邻路由器的链路状态。如果可以收到相邻路由器发回的响应,则说明该相邻路由器和这个路由器之间可以正常通信。
b、在收到该路由器和其他相邻路由器的链路状态后,还向系统中所有参加最短路径优先算法的路由器发送链路状态报文。
c、各路由器收到其他路由器发来的链路状态报文后,根据报文中的数据刷新本路由器所保存的网络拓扑结构图。如果链路发生变化,路由器将启用Dijkstra算法生成新的最短路径优先数,并刷新本地路由表。

3、Dijkstra算法
具体步骤如下:
a、 路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。
b、路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
前序字段——表示当前节点之前的节点。
长度字段——表示从源节点到当前节点的权值之和。
标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。
c、路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。
d、路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,
它将不再改变。一个T节点仅仅是一个代理而已。
e、路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。
f、路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。
g、如果这个节点不是V2(目的节点),路由器则返回到步骤5。
h、如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。

原创粉丝点击