链路状态路由算法

一、路由的基本概念

(1)默认路由器:与主机直接相连的路由器,又叫第一路由器。每当主机发送一个分组时,都先传送给它的默认路由器。
源主机的默认路由器被成为源路由器;目的主机的默认路由器被称为目的路由器;从源主机到目的主机的选路归结为从源路由器到目的路由器的选择。
(2)路由算法:是确定一个分组从源路由器到目的路由器所经路径的算法。
路由算法的关键:在给定的一组路由器以及连接路由器的链路中,找到一条从源路由器到目的路由器的”好“路径。
怎样才算好路径呢?就是具有”最低费用“的路径。可以是最小的链路延时,经过的最小路由器数目等。

二、网络的抽象图模型

对于一个由链路及路由器组成的网络,可以用节点图来表示网络的结构。
在这里插入图片描述
上图G=(N,E)表示N个节点和E条边的集合,每条边是来自N的一对节点。
节点:表示路由器即做出分组转发判决的点。
如上图的u、v、w、x、y、z。
边:连接节点的线段,表示路由器之间的物理链路。如图中的(u,v)、(u,x)等。
费用(cost)可以表示对应链路的物理长度、或链路速度、或与链路相关的费用。
c(x,y)表示节点x和节点y之间边的费用,即从节点x到节点y的链路费用。
(1)若节点x与节点y直接相连,也就是x和y是邻居。 则c(x,y)=链路费用
如c(u,v)=2,节点u与节点v互为邻居。
(2)若节点x与节点y不直接相连,则
c(x,y)=无穷
如c(u,y)=无穷,c(u,z)=无穷。

三、路由算法的分类

1、根据节点是否需要全局的拓扑信息分

(1)全局路由算法:所有路由器拥有完整的网络拓扑信息和链路费用信息。
链路状态路由算法属于全局路由算法,它必须知道网络中每条链路的费用。
(2)分布式路由算法:以迭代的、分布式的方式计算最低费用路径。
节点只有与其直接相连链路的费用信息:不需拥有所有网络链路费用的完整信息。
通过迭代计算,并于相邻节点交换信息。
逐步计算出到达某目的节点或一组目的节点的最低费用路径。
距离向量路由算法属于分布式路由算法:每个节点维护到网络中所有其它节点的费用的估计向量。

2、根据路径是否变化分类

(1)静态路由算法:路由确定后基本不再变化。只有人工干预调整时,可能有一些变化。
(2)动态路由算法:当网络的流量负载或拓扑发生变化时,路径可能发生改变;可以周期性地或直接地响应拓扑或链路费用地变化;易受选路循环、路由振荡之类问题的影响。

四、链路状态选路算法

本篇文章主要讲链路状态选路算法。
链路状态选路算法主要是通过Dijkstra最低费用路径算法。学过数据结构的朋友们对Dijkstra应该都不陌生。
在此算法中每个节点都需要知道网络拓扑以及每条链路的费用信息;然后计算任意一个节点到所有其它节点的最低费用路径;通过K次迭代后可以知道到达K个目的节点的最低费用路径。
基本思想:以源节点为起点,每次找出一个到源节点的费用最低的节点,直到把所有的目的节点都找到为止。

1、术语定义

(1)c(x,y):表示从节点x到节点y的链路费用,若c(x,y)=无穷则表示不是直接邻居。
(2)D(v):表示从源节点到目的节点v的当前路径的费用。
(3)p(v):表示从源节点到目的节点v的路径上的前驱节点。
(4)N’:表示已经找到最低费用路径的节点集合。

2、算法描述

Dijkstra伪代码如下:
在这里插入图片描述
(1)初始化(第一行到第6行):
N’={源节点u};
对所有不在N’中的节点v,标出其D(v)值;
若节点v与源节点u直接相连,则D(v)=c(u,v);
若节点v不与源节点u直接相连,则D(v)=无穷。
(2)找出一个到源节点的费用最低的节点w,并以此更新其它点D(v)值:
从不在N‘中的节点中找出一个D(w)值最小的节点w,并将w加入到N’中。(对应第9到第10行代码);
对不在N’中,但与节点w是邻居的节点v,用新的值更新D(v)=min[D(v),D(w)+c(w,v)],公式的含义为将节点v原值与节点v现经节点w到源节点的值比较,取小值。
(3)重复步骤(2),直到所有的网络节点都在N’中为止。
在这里插入图片描述
例如计算上图从u到所有可能目的节点的最低费用路径。
计算过程如表,其中的每一行表示一个迭代结束时的算法变量值。
在这里插入图片描述
最后根据计算结果构建出从源节点到所有目的节点的路径:
(1)对于每个节点,都得到从源节点沿着它的最低费用路径的前驱节点;
(2)每个前驱节点,又可得到它的前驱节点;以此继续,可以得到所有目的节点的完整路径。
如节点z的前驱节点依次为:z->y->x->u
(3)得出从源节点u到节点z的最低费用路径为:uxyz,费用为4。
在这里插入图片描述

3、构建最低费用路径树

(1)根据目的节点找出顺序和其费用以及前驱节点,可以画出源节点u到所有目的节点的最低费用路径树。
(2)根据得到的所有目的节点的完整路径,或最低费用路径树,可以生成源节点的转发表。
转发表:存放从源节点到每个目的节点的最低费用路径上的下一跳节点。即指出对于发往某个目的节点的分组,从该节点发出后的下一节点。
最低费用路径树以及转发表如下图所示:
在这里插入图片描述
我们看到上述转发表有一部分的下一跳是相同的,因此可以进行合并,如下图
在这里插入图片描述
默认路由*:表示所有具有相同下一跳的表项。即将下一跳相同的项合并为一项,目的节点用*表示。优先级最低,转发分组时,当找不到对应表项时,才使用默认路由。
Dijkstra算法复杂度为O(n 2 ^2 2)。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值