連結狀態路由(link-state routing)
想像一座城市裡每個人都拿到同一份完整的城市地圖,上面標好每條街的長度。一旦你有了整張地圖,你就能自己私下規劃到任何地方的最佳路線,不必向任何人問路。連結狀態路由(link-state routing)就是這樣運作:每台路由器先學到整張網路地圖,再自己算出路徑。
它分兩個階段。第一,氾流(flooding):每台路由器量出到它每個直連鄰居的成本,並把這個小事實——它的『連結狀態』——廣播給網路中其他所有路由器,封裝在一種叫連結狀態通告(LSA)的封包裡。因為每個人都氾流自己的 LSA,最終每台路由器都握有一份相同、完整的圖:所有節點、所有連結、所有成本。第二,計算:每台路由器在那張圖上以自己為根執行 Dijkstra 演算法,找出到每個目的地的最低成本路徑,並把每條路徑的第一跳裝進它的轉送表。
最大的好處是收斂快速且可預測,並且對多數路由迴圈免疫,因為每台路由器都依據同一張全域地圖來決定,而不是依據二手傳聞。這個家族裡著名的真實協定是 OSPF,用在無數公司與 ISP 網路內部。連結狀態正是多數大型、對效能敏感的網路所跑的東西。
一個誠實的提醒:知道整張地圖要花記憶體與頻寬,而把 LSA 氾流到上千台路由器,本身無法擴展。解法是階層化——OSPF 把網路切成多個區域(area),讓路由器只對自己區域保有詳細地圖,對其餘部分只保有摘要。此外,所有路由器都必須對同一套 Dijkstra 規則達成共識;若它們意見不合,收斂期間仍可能出現短暫的迴圈。
路由器 R 注意到它通往鄰居 S 的連結成本從 1 變成了 10。R 就氾流出一個新的 LSA,告訴所有路由器『R-S = 10』。每台路由器更新它那份相同的地圖並重跑 Dijkstra,於是整個網路對新路徑達成一致。
單一連結的變動觸發一次氾流通告,接著每台路由器各自從同一張地圖重新計算。
連結狀態的意思是『每個人都學到整個拓樸並在本地計算』——對照距離向量,那裡路由器永遠只從鄰居聽到距離摘要,從不見到完整地圖。