常见的路由表生成算法
发表于2017/6/18 17:00:31 481人阅读
分类: 网络
基本概念
路由节点:一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包。
接口:路由节点与某个网络相连的网卡接口
路由表:由很多路由条目组成,每个条目都指明去往某个网路的数据包应该由哪个接口发送,最后一条是缺省路由条目
路由条目:路由表中的一行,每个条目主要由目的网络地址,子网掩码,下一跳地址,发送接口四部分组成,如果要发送的数据包目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。
缺省的路由条目:路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中的其他地址都不匹配的时候,就按缺省路由条目规定的接口发送到下一跳地址。
可以用route查看路由表。
主要算法
大的方向分为静态路由和动态路由,也可称为非自适应路由选择和自使用路由选择。
静态路由特点:简单和开销较小,但不能适应网络状态的变化。适用简单的小网络,可人工配置每一条路由。
动态路由特点:较好的适应网络状态的变化,但实施起来比较复杂,开销也较大。使用较复杂的大网络。
Internet选择的是动态路由。
距离向量算法:
步骤:
(1)对地址中为X的相邻路由器发来的数据报,先修改此报文的所有项目:把“下一跳”的字段中地址都改为X,并把所有的“距离”字段的值加1(见后面解释1)。每一个项目都有三个关键数据,即:到目的网络N,距离是d,下一跳路由器是X。
(2)对修改后的数据报的每一个项目,进行以下步骤:
①若原来的路由表中没有目的网络N,则把该项目添加到路 由表中。(见解释2)。
②若则(即原来的路由表中有目的网络N,这时就再看下一跳路由器地址)
若下一跳路由器地址是X,则把收到的项目替换为 原来的路由表项目(见解释3)。
否则(即这个项目是:到目的地址N,但下一跳路由器不是X)
若收到的项目中的距离d小于路由表中的距离,则进行更新(见解释4),否则什么也不做(见解释5)。
(3)若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即距离置为16(16表示距离不可达)。
(4)返回。
解释1:便于更新本路由器表。比如说位于地址X的相邻路由器发来的报文为:“NET2,3,Y”,意思是“我经过路由器Y到NET2的距离是3”,那么本路由器就可推断出:“我经过路由器X到NET2的距离是3+1=4”,路由器把收到的该报文项目修改为“NET2,4,X”,作为下一步和路由器中原来项目进行比较时使用。
解释2:表明这是新的目的网络,应当加入到路由表中。例如表中没有到NET2的路由,那么就要在表中加入新的项目“NET2,4,X”。
解释3:保证这是最新的消息。
解释4:例如,若路由表中已有项目为“NET2,5,Y”,就要更新为“NET2,4,X”。因为到网络NET2的距离原来为5,现在减到4,更短了,所以需要更新。
解释5:若距离更大或者距离不变,就不用更新。
LS算法
步骤:
1、确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO”分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。
2、测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。
3、向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。
在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。
4、使用一个合适的算法,确定网络中两个节点之间的最佳路由。
在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。
Dijkstra算法
步骤:
1、路由器建立一张网络图,并且确定源节点和目的节点,在这个例子里我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。
2、路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
前序字段——表示当前节点之前的节点。
长度字段——表示从源节点到当前节点的权值之和。
标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。
3、路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。
4、路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,它将不再改变。一个T节点仅仅是一个代理而已。
5、路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。
6、路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。
7、如果这个节点不是V2(目的节点),路由器则返回到步骤5。
8、如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。
链路向量选路算法
链路状态算法(也称最短路径算法)发送路由信息到互联网上所有的结点,然而对于每个路由器,仅发送它的路由表中描述了其自身链路状态的那一部分。
路由收敛
概念:
路由收敛指网络的拓扑结构发生变化后,路由表重新建立到发送再到学习直至稳定,并通告网络中所有相关路由器都得知该变化的过程。也就是网络拓扑变化引起的通过重新计算路由而发现替代路由的行为。
作用:
通过路由收敛可以使路由域中所有路由器对当前的网络结构和路由转发达成一致的状态。
触发条件:
路由器失效
连接失效
管理度量调整