開放最短路徑優先(OSPF)
/ O-S-P-F /
OSPF,開放最短路徑優先(Open Shortest Path First),是企業與 ISP 網路內部的連結狀態路由主力協定。如果 RIP 是簡單的『問鄰居』方案,OSPF 就是把『每個人都拿到整張地圖、自己算路由』方案做得既穩健又可擴展。『開放』意味著它是公開、不綁特定廠商的標準,任何人都能實作。
它的運作如下。每台 OSPF 路由器發現它直接相連的鄰居,並量出到每條連結的成本(通常設定為與頻寬成反比)。它把這打包成一個連結狀態通告,可靠地氾流給它所在區域內的每台路由器,於是所有路由器都建出一份相同的連結狀態資料庫——那個區域的完整地圖。每台路由器接著在那份資料庫上以自己為根執行 Dijkstra 演算法(OSPF 稱之為最短路徑優先,SPF),算出最低成本路徑並填好它的轉送表。當一條連結改變時,只有受影響的路由器氾流一次更新,大家就重算,得到快速、無迴圈的收斂。
關鍵在於,OSPF 靠階層化來擴展:一個大型網路被切成多個區域(area),全都連到一個中央骨幹(區域 0)。路由器只對自己所在區域保有完整詳細的地圖,跨區域邊界時只交換摘要,這大幅削減了純連結狀態原本會要求的氾流與計算。OSPF 把自己的封包直接承載在 IP 之上(協定編號 89),而非 TCP 或 UDP,並以成本作為無上限的度量,不像 RIP 有 16 跳的上限。
一個誠實的提醒:OSPF 是一個內部閘道協定——它在單一行政管理網域(一個自治系統)內部選路,而非在更廣的網際網路上不同組織之間選路,後者是 BGP 的工作。它的豐富功能換來的是設定複雜度與每區域的狀態,但對於正經的網域內路由,這個取捨非常值得,這也是為什麼主導真實部署的是 OSPF 而非 RIP。
某銀行的網路被切成區域 0(骨幹)外加給兩個園區的區域 1 與區域 2。區域 1 裡的一台路由器握有完整的區域 1 地圖並在其上跑 Dijkstra,但對區域 2 只看到摘要過的路由——所以區域 2 的一次連結抖動不會逼得區域 1 的路由器把一切都重算。
OSPF 的區域把氾流與 SPF 計算圈住,所以本地的擾動就留在本地——連結狀態正是這樣擴展的。
OSPF 在單一自治系統內部選路(屬於內部閘道協定)。網際網路上自治系統之間的路由是 BGP 的工作,不是 OSPF 的。