Alex_McAvoy

想要成为渔夫的猎手

目的节点序列距离矢量协议 DSDV

【从 DV 到 DSDV】

对于传统的距离矢量路由协议 DV,其基于 Bellman-Ford 算法,利用距离向量来进行路由表的更新,每个结点都维持一张路由表,定期的将路由表发给所有邻居

关于 DV 算法,详见:路由算法与路由选择协议

如下图,是一个使用 DV 协议的路由表传播过程

但 DV 协议存在无法发现路由回路从而导致无穷计算的问题,并不适用于 Ad-Hoc 网络,因此,在距离矢量协议 DV 的基础上出现了其改进算法:目的节点序列距离矢量协议 DSDV

DSDV 协议保持了 DV 协议的简单性,通过对新出现的路由表带有目的地序列标号,能够确保无路由回路,同时,当路由表发生重大变化时,立即启动路由通告(Route Advertisement),以保证对拓扑变化做出快速反应

DSDV 协议非常简单,几乎和 DV 协议一致,只是通过目的地赋予序号值来防止出现路由回环,其不存在路由发现带来的延迟,但使用该协议会使得没有节点睡眠,同时多数路由信息几乎从不使用,开销过大

【DSDV 路由表】

在 DV 协议中,路由表包含三项:所有可达目的地 Dest、到目的地的下一跳 Next、到目的地的跳计数 Metric

DSDV 的路由表在 DV 路由表的基础上添加了三项:

  • 序列号 Seq.no:Sequence Number,由目的端确定,用来保证不出现路由回环
  • 创建时间 Install Time:记录该路由表的创建时间,以用来删除表中过时路由信息
  • 稳定数据 Stable Data:指向其他表的指针,包含有关路由如何稳定的信息,用于缓解路由波动

【路由通告】

路由选择

在一个节点收到路由表时,会将收到的路由更新信息与自己的路由表进行比较

为确保使用的总是来自目的地的最新路由信息,会选择目的地序号大的路由,如果目的地序号相同,则选择具有较好 metric 值的路由

路由通告

当路由表发生重大变化时,会进行路由通告(Route Advertisement),以快速应对网络拓扑变化

该操作会向每个邻居通告自己的路由信息,包括:目的地址 Dest、到目的地的跳数 Metric、目的地序列号 Seq.no

在告知路由信息时,设置序列号 Seq.no 时会遵循如下规则:

  • 每次通告将自己的序号递增 $2$,且要求只用偶数值
  • 若一个节点不再可达(timeout),则将该节点的序号递增 $1$(奇数值),并置跳数 metric 为无穷

在网络拓扑结构发生变化时,路由会做出如下的响应:

  1. 立即通告:有关新路由、链路中断、metric 变化的信息立刻传播给邻居
  2. 更新:发送路由表的路由信息
    • 完全更新:发送自己路由表的全部路由信息
    • 增量更新:仅发送路由表中有变化的表项,使用一个分组即可完成更新

如下两图,是增加一个新结点 $D$ 后的路由变化


当网络拓扑变化时,得益于 DSDV 协议的立即通告,其能够很好的解决回环和无穷计算问题


【路由波动】

当任一节点更新路由,会导致不必要的路由通告,即路由表的波动,这是由序列号带来的

例如:$A$ 收到来自 $P$ 路由的更新消息 (D, 15, D-102),也收到来自 $Q$ 路由的更新信息 (D, 14, D-102),这就造成了不必要的路由通告 (D, 15, D-102)

为减缓路由波动,常采用的方法是记录不同表中给定序号值的路由过时数据,以及最近设置时间 rec.Setting Time 和平均设置时间 avg.Setting Time,其中,设置时间 Setting Time 为第一条路由和最好路由的到达时间间隔

这样,当在新序号第一条路由到达时更新路由表,但延迟广播该条路由,推迟的时间为 $2$ 倍的平均设置时间 avg.Setting Time

感谢您对我的支持,让我继续努力分享有用的技术与知识点!