夜光序言:
有些回忆,注定只能沉淀;
有些缘分,注定只能错过。
千回百转,柔情纠缠。化作一抹难以触碰的柔软。宛如春雨中的青藤,蔓延攀援成不朽的缱绻温柔。
正文:
选路算法
网络层必须确定从发送方到接收方分组所经过的路径。选路就是在网络中的路由器里的给某个数据报确定好路径(即路由)。
一台主机通常直接与一台路由器相连接,该路由器即为该主机的默认路由器,又称为该主机的默认网关。每当某主机向外部网络发送一个分组时,该分组都被传送给它的默认网关。
如果将源主机的默认网关称为源路由器,把目的主机的默认网关称为目的路由器。为一个分组从源主机到目的主机选路的问题于是可归结为从源路由器到目的路由器的选路问题。
选路算法的目标很简单:给定一组路由器以及连接路由器的链路,选路算法要找到一条从源路由器到目的路由器的最好路径,通常一条好路径是指具有最低费用的路径。
图 G=(N,E)是一个 N 个节点和 E 条边的集合,其中每条边是来自 N 的一对节点。在网络选路的环境中,节点表示路由器,这是做出分组转发决定的节点,连接节点的边表示路由器之间的物理链路。
一条边有一个值表示它的费用。通常一条边的费用可反映出对应链路的物理长度、链路 速度或与该链路相关的费用。
对于 E 中的任一条边(xy)可以用 c(xy )表示节点 x 和 y 间边的费用。一般考虑的都是无向图,因此边(xy)与边(y x)是相同的并且开销相等。节点 y 也被称为节点 x 的邻居。
在图中为各条边指派了费用后,选路算法的目标自然是找出从源到目的间的最低费用路径。图 G=(N,E)中的一条路径(Path)是一个节点的序列1, x2, x3,…, xp>,使得每一对以(x1,x2), (x2,x3),…,是 E 中的边。路径1, x2, x3,…, xp>的费用是沿着路径所有边费用的总和。
从广义上来说,我们对选路算法分类的一种方法就是根据该算法是全局性还是分布式 来区分的。
.全局选路算法:用完整的、全局性的网络信息来计算从源到目的之间的最低费用路径。
实际上,具有全局状态信息的算法常被称作链路状态 LS 算法,因为该算法必须知道网络中每条链路的费用。
.分布式选路算法:以迭代的、分布式的方式计算出最低费用路径。通过迭代计算并与相邻节点交换信息,逐渐计算出到达某目的节点或一组目的节点的最低费用路径。
DV 算法是分布式选路算法,因为每个节点维护到网络中的所有其他节点的费用(距离) 估计的矢量。
选路算法的第二种广义分类方法是根据算法是静态的还是动态的来分类。
1 链路状态选路算法 LS
在链路状态算法中,通过让每个节点向所有其他路由器广播链路状态分组,每个链路状 态分组包含它所连接的链路的特征和费用,从而网络中每个节点都建立了关于整个网络的 拓扑。
Dijkstra 算法计算从源节点到网络中所有其他节点的最低费用路径。
Dijkstra 算法是迭代算法,经算法的第 k 次迭代后,可知道到 k 个目的节点的最低费用 路径。
定义下列记号:
D(V)随着算法进行本次迭代,从源节点到目的节点的最低费用路径的费用。
P(v)从源节点到目的节点 v 沿着当前最低费用路径的前一节点(,的邻居)。
N`节点子集;如果从源节点到目的节点 v 的最低费用路径已找到,那么 v 在 N`中。
Dijkstra 全局选路算法由一个初始化步骤和循环组成。循环执行的次数与网络中的节点个数相同。在结束时,算法会计算出从源节点 u 到网络中每个其他节点的最短路径。
例子,考虑图中的网络,计算从 u 到所有可能目的地的最低费用路径。