在贝尔曼福特算法中究竟会导致计数到无穷大的究竟是什么

时间:2012-11-23 06:05:15

标签: algorithm networking routing bellman-ford

根据我的理解,当一个路由器提供另一个旧信息时,会发生计数到无穷大,这些旧信息继续通过网络向无限远传播。根据我的阅读,删除链接时肯定会发生这种情况。

enter image description here

因此,在此示例中,Bellman-Ford算法将针对每个路由器进行收敛,它们将具有彼此的条目。 R2会知道它可以以1的成本到达R3,而R1会知道它可以通过R2以2的成本到达R3。

如果R2和R3之间的链接断开,那么R2将知道它不能再通过该链接到达R3并将其从表中删除。在它可以发送任何更新之前,它可能会收到来自R1的更新,它将宣传它可以以2的成本到达R3.R2可以以1的成本到达R1,因此它将更新到R3通过R1,成本为3.R1然后将从R2接收更新,并将其成本更新为4.然后,他们将继续向无限远馈送不良信息。

我所看到的一件事提到,除了链接脱机之外,还有其他可能导致计数到无穷大的原因,例如更改链接的成本。我开始考虑这个问题,从我所知道的情况来看,在我看来,链接的成本增加可能会导致问题。但是,我认为降低成本可能导致问题。

例如,在上面的示例中,当算法收敛并且R2具有到R3的路由,成本为1,并且R1具有通过R2到R3的路由,成本为2.如果R2和R3之间的成本然后这会导致同样的问题,R2可以从R1获得更新广告成本为2,并通过R1,R1将其成本更改为3然后通过R2将其路由更改为4的成本,依此类推。但是,如果成本在融合路线上降低,则不会导致变化。它是否正确?链接之间的成本增加可能导致问题,而不是降低成本?还有其他可能的原因吗?使路由器脱机与链接出去是一样的吗?

4 个答案:

答案 0 :(得分:26)

看看这个例子:

enter image description here

路由表将是:

    R1   R2    R3
R1  0    1     2
R2  1    0     1
R3  2    1     0

现在,假设R2和R3之间的连接丢失(你可以断线或它们之间的中间路由器掉线)。

在发送信息一次迭代后,您将获得以下路由表:

    R1   R2    R3
R1  0    1     2
R2  1    0     3
R3  2    3     0

这是因为R2,R3不再连接,所以R2“认为”它可以通过R1将路径重定向到R3,路径为2 - 因此它将获得权重为3的路径。

经过额外的迭代后,R1“看到”R2比以前更昂贵,因此它修改了它的路由表:

    R1   R2    R3
R1  0    1     4
R2  1    0     3
R3  4    3     0

等等,直到它们收敛到正确的值 - 但这可能需要很长时间,特别是如果(R1,R3)价格昂贵。
这被称为“数到无穷大”(如果w(R1,R3)=infinity并且是唯一的路径 - 它将继续永远计数。)


请注意,当两个路由器之间的成本上升时,您将遇到相同的问题(假设w(R2,R3)在上例中达到50)。同样的事情会发生 - R2会尝试通过R3路由到R1,而不会“意识到”它也取决于(R2,R3),您将获得相同的第一步一旦找到正确的成本,就会收敛。
但是,如果成本下降 - 由于新成本优于当前成本,因此不会发生 - 并且路由器R2将坚持使用相同的路由并降低成本,并且不会尝试路由通过R1

答案 1 :(得分:2)

根据维基百科:

  

RIP使用具有毒性逆转技术的水平分割来减少形成循环的机会,并使用最大跳数来对抗“计数到无穷大”问题。这些措施避免在某些情况下(但不是所有情况)形成路由环路。增加一个保持时间(在路线撤回后拒绝路线更新几分钟)可以避免在几乎所有情况下形成回路,但会导致收敛时间显着增加。

     

最近,已经开发了许多无环路距离矢量协议 - 值得注意的例子是EIGRP,DSDV和Babel。这些在所有情况下都避免了环路形成,但是复杂性增加,并且由于OSPF等链路状态路由协议的成功,它们的部署速度变慢了。

http://en.wikipedia.org/wiki/Distance-vector_routing_protocol#Workarounds_and_solutions

答案 2 :(得分:1)

这并不承认Bellman-Ford算法部分的问题,但这是一个简化的答案。到此为止。

通过原始海报注意图像。有R1,R2和R3;分别代表路由器1,2和3。

每个链路的成本为1,每跳的成本为1.要跳转两个路由器(例如:R1到R3),需要重新计算成本为2.

每个路由器都会跟踪成本并更新信息。但是,如果缺少值(例如,路由器之间缺少链路),则跳数将被删除,并且在路由表更新时由另一个路由器填充。

示例:

如果路由器3到路由器2的链路断开,路由器2将从其表中删除该路由。路由器1仍然认为它需要两跳才能到达路由器3.这会被复制到路由器2,现在两个路由器认为它需要两个跳才能到达路由器3。

路由器1做了一些简单的数学运算,“如果我需要一跳到达路由器2,而路由器2需要两跳才能到达路由器3,它应该需要三个跳才能到达路由器3.很棒!”路由器2进行类似的数学计算,并为其路由添加一跳,依此类推。

这就是循环的工作原理。

答案 3 :(得分:0)

坚持:

  • 随着指标的增加,延迟传播信息

限制:

  • 延迟收敛循环避免
  • 路线广告中的完整路径信息
  • 循环的显式查询(例如DUAL)水平分割
  • 切勿通过下一跳广告目的地
    • A不会将C广告给B
  • 毒药逆转:在通过下一步广告目的地时发送负面信息
  • A以度量为∞的广告C到B.
    • 限制:仅适用于大小为2的“循环”