SPF演算法介紹

2021-09-21 09:08:30 字數 2191 閱讀 5369

當鏈路狀態路由演算法構建完lsdb後,接下來節要呼叫spf演算法,對lsdb內的lsa進行處理,計算出所有路徑。spf演算法在《routing tcp/ip volmun i》的ospf章節中有描述。

spf演算法簡單描述如下(lsdb已收斂):

一、選定根節點;

二、遍歷該選定節點的所有直連節點。遍歷過程中,若根與某節點的分支為

l 新分支,則新增該分支到

分支列表

,並記錄分支的權重、根的下一跳;

l 已存在於分支列表,則與

分支列表

中已存在分支的權重值比較優劣,並把較優值更新到

分支列表中;

l 已存在於權重列表,則忽略;

三、把分支列表

中的最優分支移出至

權重列表

,並選定該

分支的節點;

四、若分支列表

非空,則繼續步驟三;否則演算法結束。

演算法結束後,

權重列表

即為最短路徑樹,用於生成路由表或其它後續工作。

下面舉個簡單例子,箭頭方向為節點配置鏈路權重(metric),注意權重是單向的,修改權重一般情況下要確保兩端一致。a為執行spf演算法的節點,lsdb已收斂:

*下述顯示含義為節點(

下一跳) 權重

一、spf把a、b、c、d、e、f、g、h置為未遍歷狀態,並以本節點(r1)為根。新增a(a)到

權重列表

,權重為0,下一跳為a。接著遍歷a的直連節點b、c、d,並把b(b) 50,c(c) 85,d(d) 20新增到

分支列表

。其中d(d)的權重最優,為20。新增d(d)到

權重列表

,權重為20,下一跳為d,並選定d;

二、遍歷d所有連線的節點。這裡d-b 20,d-c 20,d-g 20,d-h 20。

分支列表

中b(b)從50改為40,下一跳改為d;c(c)從85改為40,下一跳改為d;新增g(d) 40,h(d) 40。這時

分支列表

包含:b(d) 40,c(d) 40,g(d) 40,h(d) 40。新增b(d)到

權重列表

,權重為40,下一跳為d,並選定b;

三、遍歷b所有連線的節點。這裡分支為b-e 80,b-d 20,由於d已以被新增到

權重列表

,不再考慮。

分支列表

中新增e(d) 120。這時

分支列表

包含:c(d) 40,g(d) 40,h(d) 40,e(d) 120。新增c(d)到

權重列表

,權重為40,下一跳為d,並選定c;

四、遍歷c。這裡分支為c-f 20,c-d 20,由於d已被新增到

權重列表

,不再考慮。

分支列表

新增f(d) 60。這時

分支列表

包含:g(d) 40,h(d) 40,e(d) 120,f(d) 60。新增g(d) 到

權重列表

,權重為40,下一跳為d,並選定g;

五、遍歷g。g分支為g-e 20,g-h 50。

分支列表

修改e(d) 60。這時

分支列表

包含:h(d) 40,e(d) 60,f(d) 60。新增h(d)到

權重列表

,權重為40,下一跳為d,並選定h;

六、遍歷h。h分支為h-g 50,h-f 20。g已被新增到

權重列表

,不考慮;而a-d-c-f和a-d-h-f同為60,下一跳同為d,該新分支與

分支列表

中的分支並無差異。這時

分支列表

包含:e(d) 60,f(d) 60。新增e(d)到

權重列表

,權重為60,下一跳為d,並選定e;

七、遍歷e。分支為e-b 80,e-g 20,由於b、g已在

權重列表

,分支列表

無需改變,為f(d) 60。新增f(d)到

權重列表

,權重為60,下一跳為d。

八、由於

分支列表

為空,因此spf演算法結束。這時

權重列表為:

節點 a

d bc g

e f權重 a

d dd d

d d下一跳 0

20 40

40 40

60 60

LSDB和SPF演算法

1.鏈路狀態資料庫 lsdb 除了洪氾擴散lsa,發現鄰居外,鏈路狀態協議的第三個任務就是建立鏈路狀態資料庫。鏈路狀態資料庫把接收的lsa作為一串記錄儲存下來。雖然lsa中包括年齡 序列號和其他資訊,但這些資訊都是用於管理lsa洪氾擴散程序。對於最短路徑的決策程序來說,通告路由器id,連線網路和鄰居...

SPF(最短路徑樹)演算法

構造一棵樹 a 使n個節點之間的總長最小 樹是乙個在每兩個節點之間僅有一條路徑的圖 在我們給出構造過程中,分支被分成3個集合 被明確分配給構造中的樹的分支 他們將在子樹中 這個分支的隔壁分枝被新增到集合1 剩餘的分支 拋棄或不考慮 節點被分成兩個集合 a 被集合1中的分支連線的節點 b 剩餘的節點 ...

SPF的最短路徑演算法

常見的路由協議比如rip igrp bgp是距離向量協議,ospf和isis是資料鏈路狀態協議。向量協議路由器只知道本身和與自身相連的介面路由資訊,向量圖只是一張方向圖,在路由傳播的過程中,容易造成環路。rip路由器採用扁平化設計規避環路,bgp則採用as path規避環路。ospf是資料鏈路狀態路...