计算机网络4——网络层(下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaocong1993/article/details/83904273

九、路由算法

网络抽象“图”,图的抽象在网络领域应用很广泛,如P2P,其中N是peers集合,E是TCP连接集合。图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(x,x’)=链路(x, x’)的费用。每段链路的费用可以总是1,或者是带宽的倒数、拥塞程度等。路径费用(x1, x2, x3,…, xp) = c(x1,x2) + c(x2,x3) + … + c(xp-1,xp)

路由算法是寻找最小费用路径的算法。

路由算法分类:静态路由,手工配置、路由更新慢、优先级高;动态路由,路由更新快、定期更新、及时响应链路费用或网络拓扑变化。全局信息,所有路由器掌握完整的网络拓扑和链路费用信息,如链路状态(LS)路由算法;分散(decentralized)信息,路由器只掌握物理相连的邻居以及链路费用,邻居间信息交换、运算的迭代过程,如距离向量(DV)路由算法。

1、链路状态路由算法

Dijkstra算法:每个路由器构造链路状态分组且广播出去(链路状态广播),包括与该路由器相连的所有路由器的id及链路费用,所有结点拥有相同信息,所有结点(路由器)掌握网络拓扑和链路费用;计算从一个结点(“源”)到达所有其它结点的最短路径,获得该结点的转发表;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’中

Dijkstra算法的算法复杂性:n个结点,每次迭代需要检测所有不在集合N’中的结点w,n(n+1)/2次比较O(n2),更高效的实现O(nlogn)。

存在震荡(oscillations)可能,如假设链路费用是该链路承载的通信量。

2、距离向量路由算法

猜你喜欢

转载自blog.csdn.net/yaocong1993/article/details/83904273