CN-距离向量链路算法2

Molaters Lv5

[[CN-NotesView]]

Bellman-Ford方程(动态规划)

令:

$d_x(y) = min_distance(x \to y) = min{c(x,v) + d_v(y)}$

c(x,v) 代表的是x到v的费用

$dv(y)$ 从邻居v到目的y的费用

Bellman-Ford举例

显然:$d_v(z) = 5,\ \ \ d_x = 3,\ \ \ d_w(z)=3$

image.png

根据B-F方程:

$d_u(z) = min {c(u,v) + d_v(z), \ \ c(u,x) + d_x(z), \ \ c(u,w) + d_w (z)} \ = min{\ 2+5,\ 1+3,\ 5+3} = 4$

重点: 结点获得最短路径的下一跳,该信息用于转发表中

距离向量路由算法

$D_x(y) =$ 从结点x到结点y的最小费用估计

  • x 维护距离向量(DV) : $D_x = [D_x(y): y \in N]$

结点x:

  • 已知到达每个邻居的费用: c(x,y)
  • 维护其所有邻居的距离向量:$D_v = [D_v(y): y \in N]$

核心思想

每个结点不定时的把其自身的DV估计发送给其邻居

当接收到邻居的新的DV估计的时候,也就是根据B-F更新其自身的路由向量估计:

$D_x(y) \leftarrow min{c(x,y) \ + \ D_v(y)} \ for \ each \ node\ y \in N$

最后$D_x(y)$将会收敛到最小值。

异步迭代

引发每次局部迭代的因素

  • 局部链路费用改变
  • 来自邻居的DV更新

分布式算法

每个结点只有当DV变化的时候才通告邻居

  • 邻居在必要的时候再通告它们的邻居

每个节点的阶段:

等待:每个路由器在没有发生变化的时候就保持这种状态(邻居DV没有发生更新)

重新计算 DV估计

如果DV中到达任一一个目的距离发生改变,通告所有的邻居

然后再次进入等待状态

举例

初始的距离向量为:

image.png

image.png

距离向量DV:链路费用变化

链路费用的变化

  • 结点检测本地链路费用的变化

  • 更新路由信息,重新计算距离向量

  • 如果DV改变,通告所有的邻居

$t_0$ : y检测到链路费用的改变,更新DV,通告其邻居

$t_1$ : z收到y的DV更新,更新其距离向量表,计算到达x的最新最小费用,更新其DV,并发送其所有的邻居。

$t_2$ :y收到z的DV更新,更新其距离向量表,重新计算y的DV,未发生改变,不再像z发送DV

好消息传播的快

image.png

但是可能出现无穷计数问题(如上所示)

毒性逆转

如果一个结点(e.g.z)到达某目的(e.g.X)的最小费用路径是通过某个邻居(e.g.Y),则:

  • 通告给该邻居结点到达该目的的距离为无穷大

d94597c651cb7c7656f0260d56b858d.jpg

毒性逆转是不是能够彻底的消除无穷计数问题?

简单的环路是可以消除的,更复杂的环境其实未必可以满足。

定义最大的一个距离度量值(maximum metric)

定义一个最大的有效费用值,比如15跳步,16跳步标识无穷

如果一直不可达,就会在有效费用值耗尽的时候结束传输

  • 标题: CN-距离向量链路算法2
  • 作者: Molaters
  • 创建于 : 2023-11-24 10:14:50
  • 更新于 : 2023-11-01 23:29:24
  • 链接: https://molaters.github.io/2023/11/24/计算机网络/CN-距离向量路由算法2/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论