路由算法(Dijkstra, Bellman-Ford算法)


前言


提示:以下是本篇文章正文内容

一、路由算法引入

路由器的功能:
在这里插入图片描述
路由算法(协议)确定去往目的网络的最佳路径,转发表确定在本路由器如何转发分组

将实际中的路由器之间的关系抽象成图
在这里插入图片描述

图: G = (N, E)

N = 路由器集合= { u, v, w, x, y, z }

E = 链路集合 ={ (u,v), (u,x), (v,x), (v,w), (x,w), (x,y), (w,y), (w,z), (y,z) }

费用(Costs):链路的费用,C(u,v) = 2

路由算法: 寻找源到目的最小费用路径的算法

路由器分组转发是通过路由表转发的,而路由表是通过各种算法得到的,从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可分为两大类:静态路由与动态路由

二、静态路由

静态路由:需要手工配置,路由更新慢,优先级高,不适用于大型网络

三、动态路由

路由器间彼此交换信息,按照路由算法优化出路由表项

动态路由算法分为全局信息和分散信息

全局信息所有路由器掌握完整的网络拓扑和链路费用信息,链路状态(LS)路由算法

分散(decentralized)信息:路由器只掌握物理相连的邻居以及链路费邻居间信息交换、运算的迭代过程,距离向量(DV)路由算法

1.链路状态(LS)路由算法

Dijkstra 算法:所有结点(路由器)掌握网络拓扑和链路费用,通过“链路状态广播”使所有结点拥有相同信息,计算从一个结点(“源” )到达所有其他结点的最短路径获得该结点的转发表,k次迭代后,得到到达k个目的结点的最短路径

符号标记:
(1)c(x,y): 结点x到结点y链路费用;如果x和y不直接相连,则=∞

(2)D(v): 从源到目的v的当前路径费用值

(3)p(v): 沿从源到v的当前路径, v的前序结点

(4)N’: 已经找到最小费用路径的结点集合

算法描述:

1 初始化:
2 N’ = {u}
3 for 所有结点v
4 if v毗邻u
5 then D(v) = c(u,v)
6 else D(v) = ∞
7
8 Loop
9 找出不在 N’中的w ,满足D(w)最小
10 将w加入N’
11 更新w的所有不在N’中的邻居v的D(v) :
12 D(v) = min( D(v), D(w) + c(w,v) )
13 /*到达v的新费用或者是原先到达v的费用,或者是
14 已知的到达w的最短路径费用加上w到v的费用 */
15 until 所有结点在N’中 (loop 8)

示例一:
在这里插入图片描述

在这里插入图片描述
找出到目的地址的路径,求出最短路径即可

示例二:
在这里插入图片描述
在这里插入图片描述
u的最终最短路径树:
在这里插入图片描述

u的最终转发表:

目的链路
v(u,v)
x(u,x)
y(u,x)
w(u,x)
z(u,x)

算法分析:假设有n个结点
1.每次迭代: 需要检测所有不在集合N’中的结点w
2.n(n+1)/2次比较: O(n2)
3.更高效的实现: O(nlogn)
存在震荡(oscillations)可能

2.距离向量(DV)路由算法

Bellman-Ford方程(动态规划):

假设,dx(y):=从x到y最短路径的费用(距离)
则有:
在这里插入图片描述
核心思想:每个结点不定时地将其自身的DV估计发送给其邻居,当x接收到邻居的新的DV估计时, 即依据B-F更新其自身的距离向量估计:Dx(y) ← minv{c(x,v) + Dv(y)} for each node y ∊ N,Dx(y)将最终收敛于实际的最小费用 dx(y),结点获得最短路径的下一跳, 该信息用于转发表中

在这里插入图片描述
每个结点的作用:
x维护距离向量(DV): Dx = [Dx(y): y є N ]
结点x:已知到达每个邻居的费用: c(x,v),维护其所有邻居的距离向量: Dv = [Dv(y): y є N ]

根据B-F方程:
du(z) = min { c(u,v) + dv(z), c(u,x) + dx(z), c(u,w) + dw(z) }
= min {2 + 5,1 + 3,5 + 3}
= 4
最短路径由该结点的到邻居的最小费用再加上邻居的最短距离向量

特点:
(1)异步迭代: 引发每次局部迭代的因素:局部链路费用改变 和 来自邻居的DV更新

(2)分布式: 每个结点只当DV变化时才通告给邻居,邻居在必要时(其DV更新后发生改变)再通告它们的邻居

每个结点必做的工作
在这里插入图片描述

链路费用变化:
结点检测本地链路费用变化,更新路由信息,重新计算距离向量,如果DV改变,通告所有邻居

(1)当路径费用减小
在这里插入图片描述
更新过程:
t0 : y检测到链路费用改变 ,更新DV,通告其邻居

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

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

路径费用减小传播速度较快

(2)当路径费用增加
在这里插入图片描述
会产生无穷计数问题,传播速度慢

跟新过程:
在这里插入图片描述

解决办法:

1.毒性逆转(poisoned reverse): 如果一个结点(Z)到达某目的(X)的最小费用路径是通过某个邻居(Y),则:通告给该邻居结点到达该目的的距离为无穷大
在这里插入图片描述

2.定义最大度量(maximum metric): 定义一个最大的有效费用值,如15跳步, 16跳步表示∞

在这里插入图片描述

总结

提示:这里对文章进行总结:

  • 17
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值