【计算机网络自顶向下方法】路由选择算法及分类

路由选择算法

        其目的是从发送方到接收方的过程中确定一条通过路由网络的好的路径(等价于路由)。通常一条好的路径指具有最低开销的路径。

最低开销路径

        找出源和目的地之间具有最低开销的一条路也即是最短路径,即在源和目的地之间的具有最少链路数量的路径。

路由选择算法分类

第一种分类:根据该算法是集中式还是分散式来划分

        集中式路由选择算法(centralized routing algorithm)用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径。也就是说,该算法以所有节点之间的连通性及所有链路的开销为输入。这就要求该算法在真正开始计算以前,要以某种方式获得这些信息。计算本身可在某个场点进行,或在每台路由器的路由选择组件种重复进行。然而,这里的主要区别在于,集中式算法具有关于连通性和链路开销方面的完整信息。具有全局状态信息的算法常被称作链路状态(Link State,LS)算法,因为该算法必须要知道网络中每条链路的开销。

        分散式路由选择算法(decentralized routing algorithm)路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。相反,每个节点仅有与其直接相连链路的开销知识即可开始工作。然后,通过迭代计算过程以及与相邻节点的信息交换,一个节点逐渐计算出到达某目的节点或一组目的节点的最低开销路径。距离向量(Distance-Vector,DV)算法是分散式路由选择算法的一种,之所以叫作DV算法,是因为每个节点维护到网络中所有其他节点的开销(距离)估计的向量。这种分散式算法,通过相邻路由器之间的交互式报文交换,也许更为天然地适合那些路由器直接交互的控制平面。

第二种分类:根据算法是静态的还是动态的进行分类

        静态路由选择算法(static routing algorithm)路由随时间的变化非常缓慢,通常是人工进行调整。

        动态路由选择算法(dynamic routing algorithm)随着网络流量负载或者拓扑发生变换而改变路由选择路径。一个动态算法可周期性地运行或者直接响应拓扑或链路开销的变换而运行。

第三种分类:根据它是负载敏感的还是负载迟钝的进行划分

        负载敏感算法(load-sensitive algorithm)链路开销会动态地变化以反映出底层链路的当前拥塞水平。如果当前拥塞的一条链路与高开销相联系,则路由选择算法趋于绕开该拥塞链路来选择路由。(ARPAnet路由选择算法就是负载敏感的,遇到很多问题)。

        当今的因特网路由选择算法(RIP\OSPF、BGP)都是负载迟钝的(load-insensitive),因为某条链路的开销不明确地反映其当前的拥塞水平。

链路状态路由选择算法

         在链路状态算法中,网络拓扑和所有的链路开销都是已知的,也就是说可以用作LS算法的输入。实践中这是通过让每个节点向网络中所有其他节点广播链路状态分组来完成,其中每个链路状态分组包含它所连接的链路的标识和开销。在实践中,这经常由链路状态广播(link state broadcast)算法来完成。节点广播的结果是所有节点都具有该网络的统一、完整的视图。于是每个节点都能够像其他节点一样,运行LS算法并计算出相同的最低开销路径集合。

Dijkstra算法

        该算法计算从某节点(源节点,我们称之为u)到网络中所有其他节点的最低开销路径。Dijkstra算法是迭代算法,其性质是经算法的第k次迭代之后,可知道到k个目的节点的最低开销路径,在到所有目的几点的最低开销路径之中,这k条路经具有k个最低开销。

我们定义下列标记:

        D(v):到算法的本次迭代,从源节点到目的节点v的最低开销路径的开销

        p(v):从源到v沿着当前最低开销路径的前一节点(v的邻居)

        N':节点子集;如果从源到v的最低开销路径已确认,v在N'中

        该集中式路由选择算法由一个初始化步骤和其后的循环组成。循环执行的次数与网络中节点个数相同。一旦终止,该算法就计算出了从源节点u到网络中每个其他节点的最短路径。

距离向量路由选择算法

        距离向量(Distance-Vector,DV)算法是一种迭代的、异步的和分布式的算法,而LS算法是一种使用全局信息的算法。说它是分布式的,是因为每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果分发给邻居。说它是迭代的,是因为此过程一直要持续到邻居之间无更多信息要交换为止。说它是异步的,是因为它不要求所有节点相互之间步伐一致地操作。

Bellman-Ford方程关于最低开销路径的开销之间的一种重要关系

_{}d_{x}(y)是从节点x到节点y的最低开销路径的开销

        _{}d_{x}(y) = min_{v} {c(x,v) + d_{v}(y)}

        方程中的min_{v}是对于x的所有邻居的。Bellman-Ford方程是相当直观的。实际上从x到v遍历之后,如果我们接下来取从v到y的最低开销路径,则该路径开销将是c(x,v) + d_{v}(y)。因此我们必须通过遍历某些邻居v开始,从x到y的最低开销是对所有邻居v的c(x,v) + d_{v}(y)的最小值。

        我们核查下图中源节点u和目的节点z。

源节点u有3个邻居:节点v、x、w。通过遍历该图中的各条路径,容易看出d_{v}(z) = 5、d_{x}(z) = 3和d_{w}(z) = 3。将这些值连同开销c(u,v) = 2、c(u,x) = 1和c(u,w) = 5代入方程得出

d_{u}(z) =min{c(u,v) + d_{v}(z), c(u,x) + d_{x}(z), c(u,w) + d_{w}(z) }  

         =min{2 + 5, 5 + 3, 1 + 3}

         =4

 这显然是正确的,这正是Dijkstra算法为我们提供的结果。

 Bellman-Ford方程为节点x的转发表提供了表项。为了理解这一点,令v^{*}是取得方程中最小值的任何相邻节点。接下来,如果节点x要沿着最低开销路径向节点y发送一个分组,它应该首先向节点v^{*}转发该分组。因此,节点x的转发表将指定节点v^{*}作为最终目的地y的下一跳路由器。Bellman-Ford方程的另外一个重要实际贡献是,它提出来将在DV算法中发生的邻居到邻居通信的形式。

        其基本思想如下。每个节点x以D_{x}(y)开始,对在N中的所有节点y,估计从x到y的最低开销路径的开销。令D_{x} = [D_{x}(y): y∈N]是节点x的距离向量,该向量从x到在N中的所有其他节点y的开销估计向量。使用DV算法,每个节点x维护下列路由选择信息:

        \bullet对于每个邻居v,从x到直接相连邻居v的开销为c(x,v)

        \bullet节点x的距离向量,即D_{x} = [D_{x}(y: y∈N)],包含了x到N中所有目的地y的开销估计值

        \bullet它的每个邻居的距离向量,即对x的每个邻居v,有D_{v} = [D_{v}(y): y∈N]

         在该分布式、异步算法中,每个节点不时地向它的每个邻居发送它的距离向量副本。当节点x从它的任何一个邻居v接收到一个新的距离向量,它保存v的距离向量,然后使用Bellman-Ford方程更新它自己的距离向量如下:

        D_{x}(y) = min_{v}{c(x,v) + D_{v}(y)}    对N中的每个节点

        如果节点x的距离向量因这个更新步骤而改变,节点x接下来将向它的每个邻居发送其更新后的距离向量,这继而然所有邻居更新它们自己的距离向量。只要所有的节点继续以异步方式交换它们的距离向量,每个开销估计D_{x}(y)收敛到 _{}d_{x}(y), _{}d_{x}(y)为从节点x到节点y的实际最低开销路径的开销。

         在该DV算法中,当节点x发现它的直接相连的链路开销变化或从某个邻居接收到一个距离向量的更新时,它就更新其距离向量估计值。但是为了一个给定的目的地y而更新它的转发表,节点x真正需要知道的不是到y的最短路径距离,而是沿着最短路径到y的 下一跳路由器邻居节点v^{*}(y)。如你可能期望的那样,下一跳路由器v^{*}(y)是在DV算法 第14行中取得最小值的邻居v(如果有多个取得最小值的邻居v,则v^{*}(y)能够是其中 任何一个有最小值的邻居。)因此,对于每个目的地y,在第13-14行中,节点x也决定v^{*}(y)并更新它对目的地y的转发表。

         LS算法是一种全局算法,在于它要求每个节点在运行Dijkstra算法之前,首先获得该网络的完整信息。DV算法是分布式的,它不使用这样的全局信息。实际上,节点具有的唯一信息是它到直接相连邻居的链路开销和它从这些邻居接收到的信息。每个节点等待来自任何邻居的更新(第10〜11行),当接收到一个更新时计算它的新距离向量 (第14行)并向它的邻居分布其新距离向量(第16-17行)。在实践中许多类似DV的算 法被用于多种路由选择协议中,包括因特网的RIP和BGP、ISO IDRP、Novell IPX和早期 的 ARPAneto。

        从邻居接收更新距离向量、重新计算路由选择表项和通知邻居到目的地的最低开销路径的开销已经变化的过程继续下去,直到无更新报文发送为止。在这个时候,因为无更新报文发送,将不会出现进一步的路由选择表计算,该算法将进入静止状态,即所有的节点将执行DV算法的第10〜11行中的等待。该算法停留在静止状态,直到一条链路开销发生改变。

        

   

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wellnw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值