最短路徑優先算法,正如OSPF路由協議的名字所告訴我們的,該協議用來計算路由的算法,稱為最短路徑優先(Shortest Path First)算法。該算法是由一位荷蘭計算機科學家Dijkstra于1959年發現的,所以該算法又稱為Dijkstra算法。
該算法把網絡考慮為一組點到點連接的結點,每條鏈路有一個開銷值,每個結點有它自己的名字及一個包含已知物理拓撲的完整鏈路信息的數據庫。圖1 表現了一個這樣的網絡。
圖1 運行OSPF的網絡環境
表1描述了圖1中每一臺路由器到達鄰居路由器的鏈路開銷。
表1 在圖1中各個路由器到達鄰居路由器的鏈路開銷
在圖1及表1中,我們可以看到整個網絡的拓撲,這就是反映在路由器的拓撲表里的網絡信息。
但是,這個拓撲還有環路存在。比如,從路由器B到達路由器D就存在著環路,數據包經過路由器A和路由器C都可以到達路由器D。我們需要使用最短路徑優先算法從這個拓撲中計算出最短路徑優先樹。在計算出路由的同時,避免路由環路。
圖2顯示了在路由器B上經過最短路徑優先算法計算之后形成的樹型結構。
圖2 在路由器B上經過最短路徑優先算法計算之后形成的樹型結構
從圖2我們可以看出,從路由器B到路由器D的最短路徑,并不是經過路由器C直接到達路由器D,因為這條路徑的開銷比經過路由器C和路由器E這條路徑的開銷還要大。在最短路徑優先算法中,到達目的網段開銷最低的那條路徑是最短的路徑。
圖2實際上就是路由器B的路由表的圖形化表現形式。