DV算法

来源:互联网 发布:ptgui mac 编辑:程序博客网 时间:2024/05/01 22:42

转自:点击打开链接


关于路由器如何收集网络的结构信息以及对之进行分析来确定最佳路由,我们有两种主要的路由算法:总体式路由算法和分散式路由算法。采用分散式路由算法时,每个路由器只有与它直接相连的路由器的信息——而没有网络中的每个路由器的信息。这些算法也被称为DV(距离向量)算法。采用总体式路由算法时,每个路由器都拥有网络中所有其他路由器的全部信息以及网络的流量状态。这些算法也被称为LS(链路状态)算法。

DV算法也被称为Bellman-Ford路由算法和Ford-Fulkerson路由算法。在这些算法中,每个路由器都有一个路由表,用来表示到任何目的地的最佳路由。一个典型的路由器J的网络图以及路由表如下所示。

如表格所示,如果路由器J想发送分组数据包到路由器D,它应该将分组数据包先发送到路由器H。分组数据包到达路由器H后,它将检查自己的路由表来决定怎样将分组数据包发送到路由器D

DV算法中,每个路由器遵循以下步骤:

计算所有与本身直接相连的链接的权值并且将信息保存到路由器的路由表中。

一段时间后,路由器将其路由表发送给相邻路由器(不是所有的路由器),同时也收到每个相邻路由器的路由表。

根据其相邻路由器的路由表信息,路由器更新自己的路由表。

DV算法的一个最主要的问题是无穷计数。让我们通过一个例子来研究一下这个问题: 

假设一个网络图如下所示。如图所示,A与网络的其他部分只有一条链路。所有节点的路由表以及网络图如下所示:

 

现在假设、 B之间的链路被剪断了。在这个时候,B修正了自己的路由表。经过一段时间后,路由器交换它们的路由表,因此B接收到了C的路由表。因为C不知道B之间的链路上发生了什么事,所以它说它有一条权值为2的到A的链路(从CB权值为1,从BA权值为1——它不知道B已经没有到A的链路了)。B接收到路由表之后认为有另外一条链路从CA,所以它修正了自己的路由表,即将无穷大更改为3C认为,BC权值为1CA权值为2)。路由器然后再一次交换它们的路由表。当C接收到B的路由表后,它发现BA的链路权值从1更改为3,所以C更新了它的路由表,即将它到A的链路权值更改为4(根据B的描述,CB权值为1BA权值为3)。

这个循环过程到最后,所有的节点发现到A的链路权值变成无穷大。这个情形如下表所示。因此,专家称DV算法具有低收敛率

 

解决这个问题的一种方法是,路由器只发送信息给相邻路由器,且该相邻路由器不是通往目的地的唯一链接。比如在这个例子中,C就不应该发送任何关于A的信息给B,因为B是通往A的唯一路径。

原创粉丝点击