在上一节中我们介绍了路由算法中的链路状态路由算法,介绍它基于Dijkstra算法来实现,同时分析了其缺点。接下来,我们继续介绍另外两种路由算法:距离向量路由算法和层次化路由算法
距离向量路由算法
距离向量路由算法实际上是基于Bellman-Ford方程(动态规划的思想)来实现的。
同样的,这里先列举出后续算法介绍中会使用到的符号定义:
-
令dx(y) = 从x到y最短路径的费用(距离)
则dx(y) = minv{ c(x,v) + dv(y) }
其中
- minv表示 在x节点的所有邻居v中取最小值。
- c(x,v)表示x到邻居v的费用(距离)。
- dv(y)表示从邻居v到目的节点y的费用(距离)。
有了上述公式后,作为x节点就不需要知道整个网络的拓扑结构和路径费用,而只需要知道跟所有邻居节点间的费用,以及每个邻居节点到目的节点的最短路径费用即可。
Bellman-Ford算法举例
如下图所示,假设我们希望计算节点u到节点z的最短路径。
根据图上的路径费用,显然有:
- dv(z) = 5
- dx(z) = 3
- dw(z) = 3
因此, 根据Bellman-Ford算法公式可以得到:
du(z) = min{ c(u,v) + dv(z),
c(u,x) + dx(z),
c(u,w) + dw(z) }
= min{ 2+5,
1+3,
5+3}
= 4

可以看出,在这种算法中,节点u不需要知道完整的网络拓扑,只需要知道跟所有邻居节点间的费用,以及每个邻居节点到目的节点的最短路径费用即可。
在上面的例子中,当节点u知道到达节点z的最短路径是从邻居节点x中获取的,就会把这个信息记录在转发表中。后续数据报达到需要转发到z节点上时,就会经过路由器的u->x的接口转发出去。
重点:节点获得最短路径的下一跳,该信息用于转发表中
距离向量路由算法
在上述公式:dx(y) = min

本文介绍了距离向量路由算法,基于Bellman-Ford算法,强调每个节点只需知道邻居节点信息即可计算最短路径。接着,层次化路由概念被提出,以解决大规模网络和管理自治问题,通过自治系统划分和网关路由器实现跨区域路由。层次化路由在Internet网络中广泛应用。

2万+

被折叠的 条评论
为什么被折叠?



