文章目录
4 网络层
4.9 路由算法
网络抽象:图G = (N, E),N = 路由器集合,E = 链路集合
费用(Costs):每段链路的费用可以总是1,或者是,带宽的倒数、拥塞程度等
图的抽象在网络领域应用很广泛 e.g.:P2P,其中,N是 peers集合,而E是TCP连接集合
关键问题:源到目的(如u到z)的最小费用路径是什么?
路由算法:寻找最小费用路径的算法
路由算法分类
-
静态路由:手工配置;路由更新慢;优先级高
-
动态路由:路由更新快;定期更新;及时响应链路费用或网络拓扑变化
-
全局信息:所有路由器掌握完整的网络拓扑和链路费用信息。e.g. 链路状态(LS)路由算法
-
分散(decentralized)信息:路由器只掌握物理相连的邻居以及链路费用,邻居间信息交换、运算的迭代过程。e.g. 距离向量(DV)路由算法
4.9.1 链路状态路由算法
Dijkstra 算法
-
所有结点(路由器)掌握网络拓扑和链路费用:通过“链路状态广播”;所有结点拥有相同信息
-
计算从一个结点(“源”)到达所有其他结点的最短路径:获得该结点的转发表
-
迭代:k次迭代后,得到到达k个目的结点的最短路径
c(x,y):结点x到结点y链路费用;如果x和y不直接相连,则=∞
D(v):从源到目的v的当前路径费用值
p(v):沿从源到v的当前路径,v的前序结点
N’:已经找到最小费用路径的结点集合
初始化:
N' = {u}
for 所有结点v
if v毗邻u
then D(v) = c(u,v)
else D(v) = ∞
Loop
找出不在 N’中的w ,满足D(w)最小
将w加入N'
更新w的所有不在N’中的邻居v的D(v) :
D(v) = min( D(v), D(w) + c(w,v) )
/*到达v的新费用或者是原先到达v的费用,或者是已知的到达w的最短路径费用加上w到v的费用 */
until 所有结点在N’中
算法存在震荡(oscillations)可能:假设链路费用是该链路承载的通信量。初始为图1,此时会认为图2的代价更小,更新路由表为图2,又认为图3的代价更小,更新路由表为图3,又认为图2的代价更小,如此往复。如果一个B发往A的数据报恰好遇上了每次更新路由表,那么它将一直在B和B和D之间转发,直到TTL耗尽。