简单易懂的距离向量算法DV阐述(附伪代码)

算法说明

距离向量算法是一种迭代的、异步的、分布式的、能够自我终止的算法。

在计算机网络中,该算法主要用在路由选择上。本文的讨论范围就限于计网中的路由选择算法。以下展开算法解释。

  • 异步:该算法不要求所有结点之间相互保持一致地进行操作和计算。
  • 分布式:每个结点都只维护一张局部的路由表,每个路由结点需要从一个或者多个直接相邻的邻接结点接收某些链路信息,执行计算,然后将计算结果分发给邻接结点
  • 迭代:结点之间交换信息的过程需要持续到邻居之间无更多信息要交换为止。
  • 自我终止:从开始交换到终止交换称为收敛。没有收到计算终止的信号就可以自行终止。

假设网络拓扑图中是一个无向有权的连通图。两个路由结点之间的最低费用路径的费用之间存在一种重要的关系。该关系可以由以下Bellman-Ford方程表出:

d_x(y) = min_v [c(x, v) + d_v(y)]

其中d_x(y)代表着从开始结点x到目的y的最低费用路径的费用。 c(x,v) 表示从结点x到邻接结点v的费用,d_v(y)表示从邻接结点v到目的结点y的最小费用路径的费用。 min_v 表示在所有邻接结点v的方程计算中取一个最小值。

也就是说:我到目的地的最小距离,等于 我到邻居距离与邻居到目的地最小距离之和(存在一个或多个邻居) 的最小值。

从该方法就可以看出该算法是迭代计算的,需要依赖于结点之间的消息交换,具有一定的收敛时间。

如下图,如果已知各链路距离,A到邻居结点E, D, C的距离为de,dd,dc,  要计算A到B的最小距离,先求出邻居结点E、D、C到B的最小距离Me,Md, Mc。那么A到B的最小距离可以通过枚举  de + Me, dd + Md,dc + Mc,其中的最小值就是A到B的最小距离。

进一步说明:如果每个结点x以D_x(y)开始,对网络N中所有结点,估计从它自己到结点y的最低路径费用。

设计一个结点x的距离向量,为:D_x= [D_x(y): y \in N ]。该向量是从x到N中所有其他结点y的费用估计的向量。使用DV算法,对每个结点维护以下路由选择信息:

  • 1. 对每个邻居结点v,从x到相邻邻居v的费用为c(x,v)。
  • 2. 结点x的距离向量Dx,包含了x到N中所有目的地y的费用估计值。
  • 3. 每个邻居的距离向量Dv。

接下来每个结点不时地向它的每个邻居发送它自身地距离向量副本。

当结点x从其他每一个邻居v接收到一个新距离向量的时候,它将保存v的距离向量,然后使用Bellman-Ford方程来更新自身的距离向量。

如果存在更新,更新完毕后,接下来将对每个邻居发送它的距离向量副本。

最后收敛到最小路径。

 

伪代码

说人话就是:

对每个结点x进行如下操作:
    初始化:
        遍历所有网络中的所有目的地y:
            估计 x 的距离向量。如果是非邻接结点,那么距离为∞。
        遍历每个邻接结点 w:
            邻接结点 w 的距离向量。初始估计,不准确的。
        遍历每个邻接结点 w:    
            发送本结点 x 的距离向量到每个邻接结点 w。

    
    循环:
        等待(知道存在链路状态变化或者收到其他结点的距离向量之后终止等待)
        
        遍历网络N中的每个结点 y:
            依照bellman-ford方程更新本地 x 距离向量

        如果 x 的距离向量存在变化
            发送 x 的距离向量给每一个邻居结点。

 

  • 25
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
距离向量算法(Distance Vector Algorithm,简称DVA)是一种用于计算网络中路由表的分布式算法。它是一种基于距离的路由选择算法,常用于计算机网络中的路由器之间的通信。 在C语言中,实现距离向量算法需要考虑以下几个方面: 1. 路由表的表示:可以使用数组或者结构体来表示路由表,其中每个元素包含目标节点、下一跳节点和距离等信息。 2. 初始化路由表:在开始时,需要初始化每个节点的路由表。一般情况下,节点会将自己到达其他节点的距离设置为无穷大,将自己到达自己的距离设置为0,并将下一跳节点设置为空。 3. 距离更新:节点会周期性地向相邻节点发送距离向量信息,并接收相邻节点发送过来的距离向量信息。通过比较接收到的距离向量信息和自身的路由表,节点可以更新自己的路由表。 4. 路由选择:根据路由表中的信息,节点可以选择最短路径来进行数据传输。当网络拓扑发生变化时,节点会根据接收到的距离向量信息更新自己的路由表,以适应新的网络环境。 以下是C语言中实现距离向量算法的一些关键步骤: 1. 定义路由表的数据结构,包含目标节点、下一跳节点和距离等信息。 2. 初始化路由表,将自己到达其他节点的距离设置为无穷大,将自己到达自己的距离设置为0,并将下一跳节点设置为空。 3. 周期性地向相邻节点发送距离向量信息,并接收相邻节点发送过来的距离向量信息。 4. 根据接收到的距离向量信息更新自己的路由表。比较接收到的距离向量信息和自身的路由表,更新距离和下一跳节点等信息。 5. 根据路由表中的信息选择最短路径进行数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值