现在的位置: 首页 > 综合 > 正文

选路算法

2013年03月13日 ⁄ 综合 ⁄ 共 2423字 ⁄ 字号 评论关闭

关于网络层选路处理,先了解下相关概念。

一台主机通常直接与一台路由器相连接,该路由器即为该主机的默认路由器,又称为该主机的第一跳路由器。我们将源主机的默认路由器称为源路由器,把目的主机的默认路由器称为目的路由器。

接下来了解下链路状态选路算法的机制,每个链路的特征和费用 ,都是由链路状态广播来完成。

Dijkstra算法是迭代算法,其性质是经算法的第k此迭代后,可知道到k个目的节点的最低费用路径,在到所有目的节点的最低费用路径之中,这k条路径具有k个最低费用。我们定义下列记号:

D(v):从源节点到目的节点v的最低费用路径的费用

p(v):从源节点到目的节点v沿着当前最低费用路径的前一个节点(v的邻居)

N':节点子集

c(x,y):表示节点x和y间边的费用

伪代码:

//Initialization

N'={u}

for all nodes v

     if v is a neighbor of u

           then D(v)=c(u,v)

     else D(v)=∞

 

Loop

    find w not in N' such that D(w) is a minimum

    add w to N'

    update D(v) for each neighbor v of w and not in N':

           D(v)=min(D(v),D(w)+c(w,v))

until N'=N

最后计算完成后每个节点的p(v)值就是当前节点的最低费用路径的前一节点,该算法的复杂性是O(n2)。LS算法是一种全局算法,在计算前需要获取该网络的完整信息。另外LS算法需要注意选路振荡问题(通常该算法的链路费用依赖于该链路上承载的负载)。如何防止呢?一种解决方案是强制链路费用不依赖于承载的流量,另一种是确保并非所有的路由器都同时运行LS算法(那种方案更可行,留给网友思考哦)。

 

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

方程如下:

dx(y)=minv{c(x,v)+dv(y)}

方程中dx(y)是从节点x到节点y的最低费用路径,minv是指取遍x的所有邻居。实际上,从x到v遍历之后,如果我们取从v到y的最低费用路径,该路径费用将是c(x,v)+dv(y)。

伪代码如下:

//Initialization:

  for all destinations y in N:

     Dx(y)=c(x,y)   //if y is not a neighbor then c(x,y)=∞

  for each neighbor w

    Dx(y)=∞ for all destinations y in N

  for each neighbor w

    send distance vector Dx=[Dx(y):y in N] to w

//Loop

   wait( until I see a link cost change to some neighbor w or until I receive a distance vector from some neighbor w)

   for each y in N:

   Dx(y)=minv{c(x,v)+Dv(y)}

   for  Dx(y) changed for any destination y

     send distance vector Dx=[Dx(y): y in N] to all neighbor

//forever

但是距离向量算法当链路费用降低时能够正确处理,当链路费用增加时,那就会碰到选路环路问题。

 

LS与DV选路算法比较

报文复杂性。在LS算法中无论何时一条链路的费用改变,都必须向所有节点发送新的链路费用。而DV算法只在两个直接相连邻居之间交换报文。

收敛速度。LS算法是一个要求O(|N||E|)个报文的O(|N|2)算法。DV算法收敛较慢,因为收敛时会碰到选路环路。

健壮性。对于LS算法路由器可以向其连接的一条链路广播不正确的费用,在一定程度上路由计算在某种程度上时分离的,提供了一定的健壮性,而DV算法,一个节点的计算会传递给邻居,然后再下次迭代时间接地传递给邻居的邻居,那么一个不正确的节点计算会扩散到整个网络中。

 

在LS和DV的算法中,我们将网络看作一个互连路由器的集合。从所有路由器执行相同的选路算法以计算整个网络的选路路径这个意义上来说,一台路由器很难同另一台路由器区分开来。那么关于一组执行同样选路算法的同质路由器集合的观点有一单简单化,至少出于两个重要原因:

规模。因为随着路由器数目变大,选路信息的计算、存储及通信的开销将高的惊人。

管理自治。一个组织按自己的愿望运行和管理其网络,还要能将其网络与其他外部网络连接。

这两个问题都可以通过将路由器组织进自治系统(AS)来解决,在一个自治系统内运行的选路算法叫做自治系统内部选路协议。因为将AS彼此互连将是必要的,因此在一个AS内的一台或多台路由器将负责向本AS之外的目的地转发分组,这些路由器被称为网关路由器。

那么在因特网上被广泛使用的AS内部选路协议:选路信息协议(RIP)与开发最短路径优先(OSPF)。

用于因特网AS之间的选路协议:边界网关协议(BGP)

 

为什么会有AS间选路协议和AS内部选路协议呢?

策略。在AS间,策略问题至关重要。例如一个给定AS产生的流量不能穿过另一个特定的AS,这也许很重要。但是在AS内可以忽略其作用。

规模。一个选路算法及其数据结构在处理大量网络的选路或大量网络之间的选路时的适应能力,是AS间选路的一个关键问题。在AS内部,可缩扩性是第二个要关心的问题。第一个关心是,如果单个管理域过大,总是可以将其分成两个AS。

性能。AS间选路时策略的,所以路由的质量(如性能)通常是次要关心的问题。但是在一个AS的内部,更多集中在一条路由实现的性能级别上。

抱歉!评论已关闭.