首页 > 常见的路由选择算法

常见的路由选择算法

一、路由表

所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。

二、常见路由表生成算法

路由算法是提高路由协议功能,尽量减少路由时所带来开销的算法。当实现路由算法的软件必须运行在物理资源有限的计算机上时高效尤其重要。路由算法必须健壮,即在出现不正常或不可预见事件的情况下必须仍能正常处理,例如硬件故障、高负载和不正确的实现。因为路由器位于网络的连接点,当它们失效时会产生重大的问题。最好的路由算法通常是那些经过了时间考验,证实在各种网络条件下都很稳定的算法。

此外路由算法必须能快速聚合,聚合是所有路由器对最佳路径达成一致的过程。当某网络事件使路径断掉或不可用时,路由器通过网络分发路由更新信息,促使最佳路径的重新计算,最终使所有路由器达成一致。聚合很慢的路由算法可能会产生路由环或网路中断。

(一)静态路由算法

1.Dijkstra算法(最短路径算法)

Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权回路。

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的最佳路由。

2.扩散法

事先不需要任何网络信息;路由器把收到的每一个分组,向除了该分组到来的线路外的所有输出线路发送。 将来会有多个分组的副本到达目的地端,最先到达的,可能是走了“最优”的路径 常见的扩散法是选择性扩散算法。

(二)动态路由算法

1.距离向量路由算法

距离向量路由算法(Bellman-Ford Routing Algorithm),也叫做最大流量演算法(Ford-FulkersonAlgorithm),其被距离向量协议作为一个算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用这个算法的路由器必须掌握这个距离表(它是一个一维排列-“一个向量”),它告诉在网络中每个节点的最远和最近距离。在距离表中的这个信息是根据临近接点信息的改变而时时更新的。表中数据的量和在网络中的所有的接点(除了它自己本身)是等同的。这个表中的列代表直接和它相连的邻居,行代表在网络中的所有目的地。每个数据包括传送数据包到每个在网上的目的地的路径和距离/或时间在那个路径上来传输(我们叫这个为“成本”)。这个在那个算法中的度量公式是跳跃的次数,等待时间,流出数据包的数量,等等。在距离向量路由算法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。 其优点是算法简单容易实现。缺点是慢收敛问题,路由器的路径变化需要像波浪一样从相邻路由器传播出去,过程缓慢。

每一个相邻路由器发送过来的路由表都要经过以下步骤:

1)对地址为X的 路由器发过来的路由表,先修改此路由表中的所有项目:把”下一跳”字段中的地址改为X,并把所有”距离”字段都加1。

2)对修改后的路由表中的每一个项目,进行以下步骤:

(1)将X的路由表(修改过的),与S的路由表的目的网络进行对比。若在X中出现,在S中没出现,则将X路由表中的这一条项目添加到S的路由表中。

(2)对于目的网络在S和X路由表中都有的项目进行下面步骤 :

(2.1)在S的路由表中,若下一跳地址是x,则直接用X路由表中这条项目替换S路由表中的项目。

(2.2)在S的路由表中,若下一跳地址不是x

,若X路由表项目中的距离d小于S路由表中的距离,则进行更新。

3)若3分钟还没有收到相邻路由器的更新表,则把此相邻路由器记为不可到达路由器,即把距离设置为16。

2.链路状态最短路由优先算法SPF

1)发现邻居结点,并学习它们的网络地址;

2)测量到各邻居节点的延迟或者开销;

3)创建链路状态分组;

4)使用扩散法发布链路状态分组;

5)计算到每个其它路由器的最短路径。

使用Dijkstra算法处理链路信息

四、路由收敛原理

路由收敛:指网络的拓扑结构发生变化后,路由表重新建立到发送再到学习直至稳定,并通告网络中所有相关路由器都得知该变化的过程。也就是网络拓扑变化引起的通过重新计算路由而发现替代路由的行为。

通过路由收敛可以使路由域中所有路由器对当前的网络结构和路由转发达成一致的状态。

收敛时间是指从网络的拓扑结构发生变化到网络中所有路由设备中路由表重新保持一致的状态转换过程。

触发条件

1、路由器失效

2、连接失效

3、管理度量调整等







更多相关:

  • Angular的常用路由守卫有5种,按照执行顺序: ① CanLoad:进入到当前路由的时候触发(若用户没有权限访问,相应的模块并不会被加载。这里是指对应组件的代码)。 ↓② CanAcitivate:进入到当前路由的时候触发(即使返回的是false,用户并没有权限访问该路由,但是相应的模块会被加载)。 ↓③ CanActivate...

  • 深度玩家可移步Angular - 常见路由任务 1、嵌套路由 const routes: Routes = [{path: 'first',component: FirstComponent,//同步加载//这就是嵌套路由↓children:[{path:'first-sub1',component:firstSub1Com...

  • 文章目录前言语法格式命令使用输出含义使用实例 前言 route命令用于显示和配置IP路由表,在不同节点间的网络通信,想要实现同一局域网之间的通信就需要交换机,不同局域网之间的通信就需要路由器。而路由器的存在是为了提供NAT转换,即提供ip地址和物理地址之间的映射关系,因为不同局域网节点之间的通信是需要直到对方局域网的外网ip...

  • 路由对象在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新。 so , 路由对象暴露了以下属性: 1.$route.path 字符串,等于当前路由对象的路径,会被解析为绝对路径,如 "/home/news" 。 2.$route.params 对象...

  • 路由器有线桥接设置方法        如何通过网线将两个路由器进行桥接,共同实现上网?方法1:接副路由器的WAN口1.网线分别接在主路由器的LAN口和一接在副路由器的WAN口上。2.先配置好副路由器,这个时先不要接入WAN口的网线。电脑接副路由器的LAN口上,打开浏览器登陆路由器,修改副路由器的IP地址。大概在网络参数--LAN口...

  • 实验名称:HSRP路由热备份实验拓扑:实验步骤:(1)      连接交换机和路由器,分别给路由器和主机配置IP地址,连接两个交换机接口的路由器接口不配置网关,配置和主机同一个网段的IP地址(2)      给主路由器做配置(3)      给备份路由器做配置(4)      在主路由器f0/1接口没有发生故障时查看�...

  • binary search 二分查找 half-interval search  折半查找 logarithmic search  对数搜索 sentinel 哨兵 pivot 基准数 median 中位数,中值 partition 分割 percolate 过滤 sentinel 哨兵 linear time 线性时间...

  • 《数据结构与算法分析 C语言描述》Mark Allen Weiss著,冯舜玺译,机械工业出版社。Weiss教授的经典教材三部曲之一,其中的C语言描述版本,也就是本书,被称为20世纪最重要的30本计算机教材之一。Mark Allen Weiss,1987年在普林斯顿大学获得计算机科学博士学位,师从著名算法大师Robert Sedgew...

  • 实现12种不同的算法来跟踪视频和网络摄像头中的对象! 你会学到: 使用Python和OpenCV跟踪视频和网络摄像头中的对象 理解跟踪算法的基本直觉 实现12种跟踪算法 了解对象检测和对象跟踪之间的区别 要求 程序设计逻辑 基本Python编程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2...

  • 文章目录1. 算法背景2. BM(Boyer-Moore)算法2.1 坏字符规则(bad character rule)2.2 好后缀规则(good suffix shift)2.3 复杂度及完整代码3. KMP(Knuth Morris Pratt)算法3.1 好前缀 和 坏字符规则3.2 高效构建 失效函数3.3 复杂度及完整代码...

  • 文章目录前言CAP理论C consistency 一致性A availability 可用性P partition tolerance 分区容错性一致性模型弱一致性强一致性强一致性算法需要明确的问题强一致算法: 主从同步强一致性算法:多数派强一致算法:PaxosBasic PaxosMulti Paxos第一个版本:使用Propose...