距离向量(Distance Vector, DV)路由协议中,路由环路和计数到无穷问题是常见的两个问题。以下是它们的详细解释及如何产生的例子:
路由环路(Routing Loop)
路由环路指的是数据包在网络中无休止地循环,而不能到达目标节点。举例说明:
假设有三个路由器A、B、C,初始状态下它们的路由表如下:
-
A的路由表:
- 到达B:1跳,下一跳B
- 到达C:2跳,下一跳B
-
B的路由表:
- 到达A:1跳,下一跳A
- 到达C:1跳,下一跳C
-
C的路由表:
- 到达A:2跳,下一跳B
- 到达B:1跳,下一跳B
假设C到B的链路断开。现在B和C之间不能直接通信,但A和B、A和C之间的链路还在。B在下一次路由更新时,认为自己到C的路径变长了,但A仍然认为通过B到达C是可行的:
-
B更新路由表,删除到C的路由。
-
A发送路由更新消息给B,说到C的距离是2跳。
-
B接收到A的更新,以为A有到C的路径,因此更新其路由表:
- B的路由表:
- 到达A:1跳,下一跳A
- 到达C:3跳,下一跳A
- B的路由表:
-
A再次接收来自B的路由更新,更新自己的路由表:
- A的路由表:
- 到达B:1跳,下一跳B
- 到达C:4跳,下一跳B
- A的路由表:
如此反复更新,数据包在A和B之间循环,形成路由环路。
计数到无穷问题(Count to Infinity)
计数到无穷问题是距离向量协议中由于路由环路导致的距离逐渐增加的现象,直到达到协议定义的最大值。这个问题的产生如下:
继续使用上面的例子,在C到B的链路断开后:
-
C断开到B的连接,B删除到C的路由。
-
A仍然认为通过B到达C是可能的,通知B到C的距离是2跳。
-
B更新路由表:
- 到达C:3跳,下一跳A
-
B通知A更新后的路由信息。
-
A更新路由表:
- 到达C:4跳,下一跳B
这种反复更新,B和A之间互相通知彼此到C的距离,每次增加跳数:
- 5跳,6跳,7跳,直到达到一个协议规定的最大值。
在RIP(Routing Information Protocol)中,这个最大值是16,即16跳表示网络不可达。这就是计数到无穷问题。