路由算法简介与分类
转发表中的路径是由路由算法决定的
- 路由算法(协议)确定去往目的网络的最佳路径
- 转发表确定在本路由器如何转发分组
网络抽象:图
c(x, x’) = 链路(x, x’)的费用
eg:c(w, z) = 5
每段链路的费用可以总是1,或者是带宽的倒数、拥塞程度等
路径费用:(x1, x2, x3,…, xp) = c(x1,x2) + c(x2,x3) + … + c(xp-1,xp)
关键问题: 源到目的(如u到z)的最小费用路径是什么
路由算法分类
-
静态路由 与 动态路由
静态路由:手工配置、路由更新慢、优先级高
动态路由:路由更新快、定期更新、及时响应链路费用或、网络拓扑变化 -
全局信息路由 与 分散信息路由
全局信息:所有路由器掌握完整的网络拓扑和链路费用信息——链路状态(LS)路由算法
分散信息:路由器只掌握物理相连的邻居以及链路费用、邻居间交换信息——距离向量(DV)路由算法
链路状态路由算法(LS)
Dijkstra 算法:
- 链路状态路由算法是全局信息路由算法,所有结点(路由器)掌握网络拓扑和链路费用
- 通过“链路状态广播”,所有结点拥有相同信息
- 计算从一个结点(“源”)到达所有其他结点的最短路径
- 通过获得该结点的转发表
- 迭代: k次迭代后,得到到达k个目的结点的最短路径
符号:
- c(x,y): 结点x到结点y链路费用;如果x和y不直接相连,则=∞
- D(v): 从源到目的v的当前路径费用值
- p(v): 沿从源到v的当前路径,v的前序结点
- N’: 已经找到最小费用路径的结点集合
图例:以节点 u 向其他节点计算
Dijkstra 算法存在震荡(oscillations)可能——假设链路费用是该链路承载的通信量
每当数据到达D,D有可能刚好计算新的路由逆时针发送;到达B时,又有可能顺时针发,导致数据始终不能到达目的A
距离向量路由算法(DV)
Bellman-Ford方程(动态规划)
令: dx(y):=从x到y最短路径的费用(距离)
则:
举例:
显然: dv(z) = 5, dx(z) = 3, dw(z) = 3
根据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
核心思想:
- 每个结点不定时地将其自身的DV估计发送给其邻居
- 当x接收到邻居的新的DV估计时,即依据B-F更新其自身的距离向量估计:
Dx(y) ← minv{c(x,v) + Dv(y)} for each node y ∊ N - Dx(y)将最终收敛于实际的最小费用 dx(y)
特点:
- 异步迭代:引发每次局部迭代的因素——局部链路费用改变、来自邻居的DV更新
- 分布式:每个结点只当DV变化时才通告给邻居——邻居在必要时(其DV更新后发生改变)再通告它们的邻居
图例:
每一个圆圈表示DV发生变化,箭头表示通告给其他邻居
链路费用变化——好消息传播快!坏消息传播慢!
- 结点检测本地链路费用变化
- 更新路由信息,重新计算距离向量
- 如果DV改变,通告所有邻居
好消息:
- t0 : y检测到链路费用改变 ,更新DV,通告其邻居.
- t1 : z收到y的DV更新,更新其距离向量表,计算到达x的最新 最小费用,更新其DV,并发送给其所有邻居.
- t2 : y收到z的DV更新,更新其距离向量表,重新计算y的DV,
未发生改变,不再向z发送DV.
坏消息:
- 当X、Y之间的距离变为 60,Y在转发表中发现Z到X的距离只有 5,那么更新转发表Y到X为Y到Z再到X为 1+5 = 6并通知Z,Z收到后转发表里由Z到Y到X更新为1+6 = 7,如此往复更新
解决方法:
-
毒性逆转(poisoned reverse)
如果一个结点(e.g. Z)到达某目的(e.g.X)的最小费用路径是通过某个邻居(e.g.Y),则:
通告给该邻居结点到达该目的的距离为无穷大
毒性逆转不能彻底解决无穷计数问题——网络足够大不满足条件 -
定义最大度量(maximum metric)
定义一个最大的有效费用值,如15跳步,16跳步表示∞
层次路由
将任意规模网络抽象为一个图计算路由过于理想化
标识所有路由器、 “扁平”网络——在实际网络(尤其是大规模网络)中,不可行!
网络规模:
- 考虑6亿目的结点的网络
- 路由表几乎无法存储
- 路由计算过程的信息(eg. 链路状态分组、DV)交换量巨大,会淹没链路
管理自治:
- 每个网络的管理可能都期望自主控制其网内的路由
- 互联网(internet) = 网络之网络(network of networks)
聚合路由器为一个区域:自治系统AS(autonomous systems)
- 同一AS内的路由器运行相同的路由协议(算法)
- 不同自治系统内的路由器可以运行不同的AS内部路由协议
- 网关路由器(gateway router):通过链路连接其他AS的网关路由器、位于AS“边缘”
转发表由AS内部路由算法与AS间路由算法共同配置
- AS内部路由算法设置 AS内部目的网络路由入口(entries)
- AS内部路由算法与AS间路由算法共同设置 AS外部目的网络路由入口
自治系统间(Inter-AS)路由任务
假设AS1内某路由器收到一个目的地址在AS1之外的数据报
AS1必须:
- 学习到哪些目的网络可以通过AS2到达,哪些可以通过AS3到达
- 将这些网络可达性信息传播给AS1内部路由器
———————————————————————————————————————————————————————
由于水平有限及时间仓促或疏忽大意以及其他的一些原因,文中难免会存在一些错误,如若有发现不正确的地方,还请大佬们评论或私信告之于我,以便及时纠错