更新时间:2023-02-13 21:14
静态路由算法不能根据网络流量和拓扑结构的变化来调整自身的路由表,也就不能找出最佳路由,动态路由算法则是节点的路由选择要依靠网络当前的状态信息来决定。这种策略能较好地适应网络流量、拓扑结构的变化,有利于改善网络的性能。但由于算法复杂,会增加网络的负担。
动态路由算法
静态路由算法不能根据网络流量和拓扑结构的变化来调整自身的路由表,也就不能找出最佳路由,动态路由算法则是要依靠网络当前的状态信息来决定节点的路由选择。这种策略能较好地适应网络流量、拓扑结构的变化,有利于改善网络的性能。但由于算法复杂,会增加网络的负担。实用的三种路由策略是:
(1)分布式路由选择。基本算法有距离向量算法和链路状态算法;
(2)集中式路由选择。由网络控制中心(Network Control Center,NCC)负责全网状态信息的收集、路由计算及最佳路由的实现。最简单的方法是将最新路由定期发送到网络中各节点上去。
下面主要介绍分布式路由选择的两种算法。
1.距离向量路由选择算法(Distance Vector Routing)
各节点周期性地向所有相邻节点发送路由刷新报文,报文由一组(V,D)有序数据对组成,V表示该节点可以到达的节点,D表示到达该节点的距离(跳数)。收到路由刷新报文的节点重新计算和修改它的路由表。
距离向量路由算法具有简单,易于实现的优点。但它不适用于路由剧烈变化的或大型的网络环境。因为某个节点的路由变化像波动一样从相邻节点传播出去,其过程是非常缓慢的,称之为“慢收敛”。因此,在距离向量路由选择算法的路由刷新过程中,可能会出现路由不一致问题。距离向量路由选择算法的另一个缺陷是它需要大量的信息交换,但很多都可能是与当前路由刷新无关的。
2.链路状态路由选择
链路-状态路由选择算法的基本思想很简单,可以分成以下五个部分叙述:
⑴ 每个节点必须找出它的所有邻居
当一个节点启动后,通过在每一条点到点的链路上发送一个特殊的HELLO报文,并通过链路另一端的节点发送一个应答报文告诉它自己是谁。
⑵ 每个节点测量到它的每个邻居的时延或其他参数
链路-状态路由选择算法要求每个节点都知道到它的每个邻居的时延。
测量这种时延的最直接的方法是在它们之间的链路上发送一个特殊的ECHO响应报文,并且要求对方收到后立即再将其发送回来。将测量得到的来回时间除以2,即可得到一个比较合理的估计。为了得到更准确的结果,可以将测试重复多次,取平均值。
⑶ 建立链路-状态报文
收集齐了用于交换的信息后,下一步就为每一个节点建立一个包含所有数据的报文。报文以发送者的标识符开始,随后为顺序号以及它的所有邻居的列表。对于每一个邻居,给出到此邻居的时延。
建立链路-状态报文很容易,困难是决定何时建立它们。一种可行的方法是每隔一段规律的时间间隔周期性地建立它们。另一种可行的方法是当节点检测到了某些重要事件的发生时建立它们。例如,一条链路或一个邻居崩溃或恢复时,建立它们。
⑷ 分发链路-状态报文
基本的分发算法是使用顺序号的洪泛法。这种分发算法由于循环使用顺序号、某个节点曾经崩溃或某个顺序号曾经被误用过等原因,可能会使不同的节点使用不同版本的拓扑结构,这将导致不稳定、循环、到达不了目的机器及其他问题。为了防止这类错误的发生,需要在每个报文中包含一个年龄域,年龄每秒减1,当年龄减到0时,丢弃此报文。
⑸ 计算新路由
一旦一个节点收集齐了所有来自于其他节点的链路-状态报文,它就可以据此构造完整的网络拓扑结构图,然后使用Dijkstra算法在本地构造到所有可能的目的地的最短通路。
链路-状态路由选择算法具有各节点独立计算最短通路、能够快速适应网络变化、交换的路由信息少等优点,但相对于距离向量路由选择算法,它较复杂、难以实现。