根据我的理解,当一个路由器提供另一个旧信息时,会发生计数到无穷大,这些旧信息继续通过网络向无限远传播。根据我的阅读,删除链接时肯定会发生这种情况。
因此,在此示例中,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的成本,依此类推。但是,如果成本在融合路线上降低,则不会导致变化。它是否正确?链接之间的成本增加可能导致问题,而不是降低成本?还有其他可能的原因吗?使路由器脱机与链接出去是一样的吗?
答案 0 :(得分:26)
看看这个例子:
路由表将是:
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)
坚持:
限制: