1. 程式人生 > >路由原理與路由表生成

路由原理與路由表生成

何為路由

路由工作在TCP/IP四層協議棧的網路層,通過轉發分組實現網路互連,並連線兩個IP子網。是指分組從源端到目的端時路徑的程序。在我國,路由一般支援TCP/IP協議。路由器根據網路層的地址和路由器內部維護的路由表決定下一跳地址,分組到達路由時,更改鏈路層MAC幀的報頭繼續轉發。
  平常人們一直容易將路由與橋接弄混,但是橋接和路由的區別非常明顯:路由與橋接的關鍵區別點在於路由發生在網路層,橋接發生在鏈路層。

路由轉發過程

路由轉發過程:先確定最短路徑,然後再通過所選路徑上的網路傳輸資料。
  一個分組到達路由器之後,先於本地路由表中的對應的子網掩碼做按位與運算,然後再在本地的路由表中查詢,如果與本地IP相同,則已經到達目的端,由當前路由解析資料;如果計算出不是本地IP地址,則此IP為下一跳的路由IP,繼續進行路由轉發;若在當前路由器中查詢不到下一跳地址,即轉向預設的下一跳IP。轉發分組不可能在一個路由停下,這樣會給當前路由的效能造成負擔,且每個轉發分組的IP資料包的報頭中都有一個8位的生存時間TTL,這個生存時間並不是以時間單位計數,而是計算當前已經轉發過的路由次數,在源端,設定好最大轉發次數值,即生存時間,每經過一個路由,數值減一,直到最終路由器檢查到生存時間為0。則丟棄該分組。

路由演算法的區分要素

靜態

嚴格意義上來說,靜態演算法並不能稱之為演算法。
  是網路在開始執行前由閘道器建立的對映關係,在閘道器不更改的情況下,這種靜態演算法基本不會變,且設計也相對簡單。但因為無法變化的原因,靜態演算法不能對網路關係的變化做出改變。所以在大型網路中並不適用。

動態

動態路由是在靜態路由上發展出現的,當使用場景變大,網路服務存在變化,必須在某些使用者不使用路由傳送資料時,斷開他的連線,給所需使用者。且在最終不可分組路由時可以進行靜態演算法的補充。

路徑演算法

一些複雜的協議支援源端到目的端的多條路徑,例如:源端A經路由B、路由C可以到達目的端E,A亦可以經路由D到達目的端E。此時,源端A到目的端E有兩條路徑可走,經過路徑演算法,將會選擇一條最短、最高效、最快的路徑。
  本例中,若沒有其他情況的話,路徑演算法將會選擇A–D--E路徑,但若是A–D路徑發生擁塞,那麼根據路徑演算法將會選擇A–B--C–E路徑。

平坦與分層

平坦路由工作在平坦的環境中,指的是每個路由之間的地位是平等的;在分層的路由系統中,各個路由網路猶如一個多叉樹一般,存在主幹路由,非主幹路由上的資料由非主幹路由流向主幹路由,再由主幹路由流向目的端所在的非主幹路由。
  例如:A是一個雙親節點,B和C是A的孩子節點,這裡面,A、B、C都是路由,不同的是,A是主幹路由,B、C是非主幹路由,B的資料要往C發,路徑為:B–A--C。

主機與路由器

一些路由演算法中,因為源端路由功能的強大性,所以在源端傳送資料時已經計算好源端資料的所有轉發分組的路由路徑。源端路由在探索過所有可以到達目的端的路徑之後,根據演算法,得到一個最佳路徑。
  主機智慧系統通常能選擇更佳的路徑,因為在傳送資料前,已經計算所有的路徑而得到了一條最佳路徑。
  路由器智慧則是每個路由均認為主機路由對路徑一無所知,每個路由根據自己的演算法將分組轉發到下一個路由中。

連結與Bellman-Ford演算法

連結演算法將路由的路由表中已確定的、已連線的部分發給網路中的每個路由節點,則此網路中的每個路由都知道所有路由的路由資訊。如此一來,根據演算法得到最佳路徑的速度快,得到的最佳路徑也準確。
  Bellaman-Ford演算法則是將路由中路由表的全部資訊傳送給與他相連的鄰居節點。

路由演算法的衡量標準

因為路由演算法多種多樣,在何種情況下使用何種路由演算法,則成了網路路由佈置的重中之重,所以,路由的衡量標準必須最科學,最準確。
  1、可靠性
  路由演算法計算得到的路徑,在一段時間後可能失效,或者自身計算得到路徑是一條不存在的路徑,導致分組在網路中成為“流浪兒”。
  2、路徑長度
  即分組在路由過程中轉發的次數。
  3、路由延遲
  資料從源端傳送,到目的端接收資料的所花時間。
  4、負載
  網路中路由器的繁忙程度。
  5、通訊代價
  即通訊花費的運作費,維護費等資金費用。

路徑演算法的代表演算法

LS演算法

在連線初,源端路由會向全網路中的各個路由傳送一個分組資料包,每個路由則會回覆給他一個分組資料包,其中包含自己的IP地址。
  
  源端路由向全網路傳送一個響應資料包,每個接收到的路由則會回覆一個應答陣列包,收到應答資料包後,將往返時間除以2,得到路由時間以及延時時間的總和。
  
  向網路中公佈自己的資訊,同時接收其他路由發來的資訊。,這樣,每個路由都會及時更新自己的路由表等其他資訊,維持自己的路由資訊時最新的。
  
  選擇一個合適的演算法,得到兩個端的最佳路徑。
  
  由此看來,LS演算法貌似是一個站在大局上對待網路上所有路由的架構的建立,而不針對的那個路由之間的轉發分組。

Dijkstra演算法

路由器先建立一張網路圖,確定源端、目的端,然後建立一個鄰接矩陣,每兩個路由節點之間都有自己的鏈路權值,例如a,b節點的鏈路權值就是[i,j],i和j分別是a路由和b路由的權值。
  
  路由器為每個節點維護一個狀態記錄,包含三個欄位:
  1、前序欄位–當前節點的前一節點;
  2、長度欄位–從源端到當前路由的權值之和;
  3、標號欄位–表示節點的狀態–永久或暫時
  
  然後路由器初始化所有節點的狀態紀錄,長度設定為無窮大,標號為暫時。

路由器將源端路由的標號設為“永久”,記為T節點,隨即檢查與標號為“永久”節點直接相連的路由節點,選擇路徑最近節點將其標號設為“永久”,此節點為最新的T節點。
  
  檢查當前T節點是否為目的端節點,如果不是,則繼續上述操作,如果是,則根據回溯法記錄經過的每一個節點,則為源端到目的端的路徑。

鏈路演算法及Bellman-Ford演算法

本演算法在之前已有提及,不作描述。