AODV 中的环路预防

网络工程 路由 环形
2021-07-25 17:34:20

我们应该做一个关于 AODV 的演讲,即使阅读了所有官方文档和一些额外的来源,我们还是被序列号如何防止循环的问题难住了。

想象一下以下粗略的网络:

AODV网络

假设最初 C 和 D 之间的链接有效并且所有节点都以序列号 1 开始。现在,发生以下情况:

  1. A 发送一个 RREQ 到达 D。A 的序列 # 增加到 2。

  2. D 收到 RREQ,增加自己的#。D 向 A 发送 RREP。

  3. A关于D序列#的最新信息是2。

  4. 现在,C 和 D 之间的联系中断了。

  5. C 仍然想发送给 D,发送一个 RREQ,带有 D 的最后一个已知目标序列#,应该是 2。

  6. A 收到 RREQ,记得有一条到 D 的路由,其目的地序列 # (2) 与 RREQ 中的相同。A 向 D 发送路由的 RREP,从而创建循环。

谁能告诉我们在这种情况下我们错在哪里?错误的信息,错误的假设?

提前致谢!

1个回答

您说您已阅读“官方文档”,但这是否包括实际的 RFC RFC 3561

我相信您的担忧已在第 6.1 节,维护序列号中得到解决它部分说:

节点可以更改其路由表条目之一中的目的地序列号的唯一其他情况是响应到通往该目的地的下一跳的链路丢失或过期。节点通过查询其路由表来确定哪些目的地使用特定的下一跳。在这种情况下,对于每个使用下一跳的目的地,节点都会增加序列号并将路由标记为无效(另见第 6.11、6.12 节)。

这意味着在您的示例中,在第 4 步之后,C 知道到 D 的链接已关闭并适当增加序列号。

然后,利用 6.11 节中描述的 RERR 方法,C 向其他路由器发送消息,让它们知道到 D 的路由是坏的。从而避免循环。

(自从我看 AODV 已经很多年了,我可能是错的/生疏的......)