天天看點

路由表轉發最長比對原則

當路由器收到一個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
  • 這是一般情況,當然有二般情況,這就要看特定的環境和特定的路由協定了
  • 預設采用最長比對原則,比對,則轉發;無比對,則找預設路由,預設路由都沒有,則丢棄
  • 路由器的行為是逐跳的,到目标網絡的沿路徑每個路由器都必須有關于目的地的路由
  • 資料是雙向的,考慮流量的時候,要關注流量的往返。