1. 程式人生 > >IP路由查詢的“最長匹配原則”

IP路由查詢的“最長匹配原則”

      最長匹配原則是CISCO IOS路由器預設的路由查詢方式。當路由器收到一個IP資料包時,會將資料包的目的IP地址與自己本地路由表中的表項進行bit by bit的逐位查詢,直到找到匹配度最長的條目,這叫最長匹配原則。


這裡有幾個概念要先搞清楚:

    看上面的圖,灰色的空間172.16.0.0/16,這個網路號,我們稱為主類網路號,所謂主類網路號,意思是該網路號,按照其所屬的IP地址類別區分後,對應上的預設的子網掩碼長度後得到的網路號。如172.16.0.0這是一個B類地址,B類地址的預設子網掩碼長度是16位,因此172.16.0.0/16本身就是一個主類網路號。再舉過一個例子,10.1.12.0/24,首先10開頭的,這是一個A類地址,A類地址預設的掩碼是255.0.0.0,因此10.1.12.0/24它的主類網路號是10.0.0.0/24。

    我們首先順著上面的圖,從172.16.0.0/16開始往裡走,下一個我們看到的網路號是172.16.10.0/24,這很明顯是應用了VLSM可變長子網掩碼之後,得到的一個172.16.0.0/16這個主類網路的一個子網。所以所謂的子網,我們可以理解為是在網路號所屬類別的預設掩碼長度的基礎上,將掩碼“拉長”或者向主機位借位從而得到的一個網路號。實際上172.16.0.0/16是將172.16.10.0/24囊括在內的一個區間。那麼在這裡,如果我們有一個IP:172.16.10.1,實際上這個IP既可以理解為在172.16.0.0/16網路內,也是在172.16.10.0/24網路內,當然,這裡我們能看出來,誰更精確呢?很明顯是172.16.10.0/24更精確,我們說,它的匹配長度相比172.16.0.0更長。

    當然子網172.16.0.0/16還可以進一步劃分子網,得到172.16.10.0/30,甚至172.16.10.1/32,那麼如果這些字首都存在的情況下,當我要去找172.16.10.1,誰的匹配度最高呢?很明顯,是172.16.10.1/32這條主機字首,或者說,主機路由吧?這就是最長匹配原則。
OK,現在回到172.16.0.0/16這個主類網路號,然後我們向外走,看上圖。172.0.0.0/8實際上是將這個B類地址的掩碼向左移了8bits,這樣一來得到的這個網路號實際上是囊括了172.16.0.0/16在內的一個大的網路號,我們稱其為超網。


      因此,當路由器的路由查詢方式為classless也就是無類路由查詢方式時,路由器預設的查詢動作是最長匹配原則。例如上圖,當R3收到一個數據包,去往172.16.1.1,那麼實際上,172.16.1.1是“掉落”在172.16.1.0/24及172.16.0.0/16網路中的,兩者貌似皆可,但是172.16.1.0/24顯然,匹配度要更長,因此,最終這個資料包被丟給了R1。同理若有資料包去往172.16.2.1呢?由於根據最長匹配原則,172.16.2.0/24這個條目匹配度最高,因此資料被扔給了R2。這個過程有點類似下面的樣子:


並且,當R2掛掉之後,172.16.2.0/24的條目失效,去往2.0子網的資料此時匹配的路由條目是172.16.0.0/16這條路由,因此被送往了R1。
這就是利用最長匹配原則,實施的一種簡單的資料分流及路徑冗餘的方法。

下面我們總結一下路由器關於路由查詢的幾個重點內容:


  • 不同的字首(網路號+掩碼,缺一不可),在路由表中屬於不同的路由
  • 相同的字首,通過不同的協議獲取,先比AD,後比metric
  • 這是一般情況,當然有二般情況,這就要看特定的環境和特定的路由協議了
  • 預設採用最長匹配原則,匹配,則轉發;無匹配,則找預設路由,預設路由都沒有,則丟棄
  • 路由器的行為是逐跳的,到目標網路的沿路徑每個路由器都必須有關於目的地的路由
  • 資料是雙向的,考慮流量的時候,要關注流量的往返。