路由中的路由中毒和计数到无穷大问题
距离矢量路由(DVR) 协议的主要问题是路由环路,因为贝尔曼福特算法无法防止环路。 DVR 网络中的此路由循环导致计数到无穷大问题。当一个接口出现故障或两个路由器同时发送更新时,通常会发生路由环路。
数到无穷大问题:
所以在这个例子中,Bellman-Ford 算法将为每个路由器收敛,它们将有彼此的条目。 B 会知道它可以以 1 的成本到达 C,而 A 会知道它可以通过 B 以 2 的成本到达 C。
如果 B 和 C 之间的链接断开,那么 B 将知道它不能再通过该链接到达 C 并将其从其表中删除。在它可以发送任何更新之前,它可能会收到来自 A 的更新,该更新将宣传它可以以 2 的成本到达 C。B 可以以 1 的成本到达 A,因此它将更新一条到C 通过 A 的成本为 3。然后 A 稍后会从 B 接收更新并将其成本更新为 4。然后他们将继续向无穷大提供彼此不良信息,这被称为Count to Infinity 问题。
计数到无穷大问题的解决方案:-
路线中毒:
当路由发生故障时,距离矢量协议会通过毒化路由来传播有关路由故障的坏消息。路由中毒是指广告路由的做法,但具有称为 Infinity 的特殊度量值。路由器认为以无限量度通告的路由已失败。每个距离矢量路由协议都使用表示无穷大的实际度量值的概念。 RIP 将无穷大定义为 16。毒性反转的主要缺点是它可以显着增加某些相当常见的网络拓扑中的路由公告的大小。
水平分割:
如果 B 和 C 之间的链路出现故障,并且 B 已经收到来自 A 的路由,则 B 最终可能会通过 A 使用该路由。 A 会将数据包直接发送回 B,从而形成循环。但是根据水平分割规则,节点 A 不会将其到 C 的路由(即 A 到 B 到 C)通告回 B。从表面上看,这似乎是多余的,因为 B 永远不会通过节点 A 路由,因为路由成本高于从 B 到 C 的直接路线。
考虑以下显示水平分割的网络拓扑 -
- 除了这些,我们还可以使用水平分割与路由中毒分别将上述两种技术结合使用,以实现效率和更少增加路由公告的大小。
- 路由信息协议 (RIP) 使用具有毒物反向技术的水平分割来减少路由循环。此外,可以使用抑制定时器来避免形成循环。当路由器被告知连接的链路已关闭时,抑制计时器立即启动。直到此时,路由器会忽略掉线路由的所有更新,除非它从路由器接收到该断开链路的更新。在定时器期间,如果下行链路再次可达,则可以更新路由表。
参考:
https://en.wikipedia.org/wiki/Distance-vector_routing_protocol#Count-to-infinity_problem
https://en.wikipedia.org/wiki/Route_poisoning
https://en.wikipedia.org/wiki/Split_horizon_route_advertisement