2

我正在尝试为模拟路由器的类编写程序,到目前为止我已经设置了基础知识(“路由器”可以通过模拟服务器向连接到服务器的其他“路由器”发送和接收数据包)。每个数据包仅包含该路由器的距离矢量。当路由器接收到一个数据包时,它应该使用 Bellman-Ford 算法相应地更新它自己的距离矢量。我遇到的问题是我发现自己无法在不作弊和使用邻接矩阵的情况下实现实际算法。

例如,假设我有 3 个路由器连接如下:

A ---1--- B ---2--- C

也就是说,A 和 B 以链路成本 1 连接,B 和 C 以链路成本 2 连接。所以当路由器都启动时,它们会向每个直接连接的邻居发送一个数据包,其中包含它们的距离矢量信息。所以 A 会发送路由器 B (0, 1, INF),B 会发送 A 和 C (1, 0, 2),C 会发送 B (INF, 2, 0),其中 INF 表示 2 个路由器没有直接连接。

因此,让我们看看路由器 A 从路由器 B 接收数据包。使用 Bellman-Ford 算法计算到其他路由器的最小成本如下。

Mincost(a,b) = min((cost(a,b) + distance(b,b)),(cost(a,c) + distance(c,b))

Mincost(a,c) = min((cost(a,b) + distance(b,c)),(cost(a,c) + distance(c,c))

所以我遇到的问题是,我一生都无法弄清楚如何实现一个算法来计算一个路由器到每个其他路由器的最小路径。如果您确切知道将有多少个路由器,那么制作一个很容易,但是当路由器的数量可以任意大时,您会怎么做呢?

4

1 回答 1

2

您永远无法确定使用 DVMRP 的最短路径。一方面,您没有网络的全局视图。每个路由器都在尽可能多地运行它所看到的并且它所看到的受到限制 - 可能会产生误导。查找 DVMRP 的循环问题。DVMRP 永远无法拥有要处理的完整网络信息。

它也不是可扩展的。随着路由器数量或路由器数量的增加,其性能会越来越低。这是因为距离矢量更新消息泛滥和这些消息的当前准确性。

它是最早的多播协议之一。它的性能与单播规模的 RIP 相当。

于 2012-11-23T01:22:36.523 回答