網路層:轉送與 IP

最長前綴匹配(longest-prefix match)

最長前綴匹配是路由器在多筆項目都符合同一個目的位址時,用來決定該套用哪一筆轉送表項目的規則:它挑出最明確的那一筆——也就是網路前綴最長的那一筆。想想郵政分揀規則:「寄往美國的信進 1 號桶,但特別是寄往加州的信進 7 號桶」。一封寄往加州的信同時符合兩條規則,而較明確的加州規則勝出。

為什麼會有重疊呢。一台路由器的表裡保存著長度不同的 CIDR 前綴,它們可能涵蓋同一個位址。假設它有這些項目:10.0.0.0/8 → 第 1 埠、10.1.0.0/16 → 第 2 埠、10.1.2.0/24 → 第 3 埠。一個送往 10.1.2.99 的封包同時符合這三個前綴,因為它開頭的位元符合每一個。最長前綴匹配以「挑出符合位元數最多的那一筆」來打破平手——這裡 /24(24 位元)勝過 /16 與 /8——所以封包從第 3 埠離開。這正是讓一個網路能宣告一條籠統路由,而客戶又能用一條更明確的路由覆蓋其中一小塊的機制。

最長前綴匹配是資料平面的核心,而把它做得快是個嚴肅的工程問題,因為表可能保存上百萬個前綴,且比對必須在奈秒內、以線速完成。路由器使用專門的資料結構(trie)或特殊記憶體(TCAM),以大約常數時間找出最長匹配。一個好用的特例:預設路由 0.0.0.0/0 是長度為零的前綴,能符合任何位址,所以它永遠輸給任何更明確的項目——這正是它能擔任「最後手段的萬用出口」的原因。

表:10.0.0.0/8 → 第 1 埠、10.1.0.0/16 → 第 2 埠、10.1.2.0/24 → 第 3 埠。送往 10.1.2.99 的封包符合這三筆;/24 的符合位元數最多,於是它勝出,封包從第 3 埠送出。

當前綴重疊時,最明確(最長)的那一個勝出。

它是「最明確優先」,不是「先比中先用」:路由器會考慮所有符合的前綴、挑出最長的那個,與表中的順序無關。預設路由(/0)符合一切,但永遠輸給任何更長的前綴。

又称
LPMlongest-prefix matching最長前綴匹配最長前綴比對