1. 程式人生 > >路由表生成演算法以及收斂路由原理

路由表生成演算法以及收斂路由原理

路由表簡介

路由:資料包從源地址到目的地址所需要經過的路徑,由一系列節點組成。
路由節點:一個具有路由功能的主機或者路由器,維護一張路由表,通過查詢路由表來決定向那個節點發送資料包。
路由表:由很多路由條目組成,每個條目都指明去往某個網路的資料包應該經由哪個接收和傳送,其中最後一個是預設路由條目。
路由條目:路由表中的每一行,每個條目主要由網路地址、子網掩碼、下一跳地址、傳送接收四部分組成,如果要傳送的資料報的目的網路地址匹配到路由表中的某一行,就按照規定接受傳送到下一跳。

Linux中的路由表:
1)Destination目的網路
2)Gateway下一跳
3)Genmask子網掩碼
4)Flags 標記 :U標誌表示此條目有效(可以禁用某些條目),G標誌表示此條目的下一跳地址是某個路由器的地址,沒有G標誌的條目表示目的網路地址是與本機介面直接相連的網路,不必經路由器轉發,因此下一跳地址處記為* 號。
5)Use 此路由項被路由軟體查詢的次數
6)Iface 使用介面

常見的路由表生成演算法

路由器使用路由演算法來找到到達目的地的最佳路由。當說“最佳路由”時,考慮的引數包括諸如跳躍數(分組資料包在網路中從一個路由器或中間節點到另外的節點的行程)、延時以及分組資料包傳輸通訊耗時。

1.距離向量演算法

距離向量演算法(也稱為Bellman-Ford演算法)則要求每個路由器傳送其路由表全部或部分資訊,但僅傳送到鄰近結點上。從本
質上來說,鏈路狀態演算法將少量更新資訊傳送至網路各處,而距離向量演算法傳送大量更新資訊至鄰接路由器。 ——由於鏈路狀
態演算法收斂更快,因此它在一定程度上比距離向量演算法更不易產生路由迴圈。但另一方面,鏈路狀態演算法要求比距離向量演算法
有更強的CPU能力和更多的記憶體空間,因此鏈路狀態演算法將會在實現時顯得更昂貴一些。

2.鏈路向量選路演算法

也稱最短路徑優先演算法,主要思想如下:
1)路由器向相鄰路由器傳送查詢報文。測試他和相鄰路由器的鏈路狀態,如果可以收到相鄰路由器發回的響應,說明該路由器和相鄰路由器可以正常通訊。
2)收到該路由器和其他相鄰路由器的鏈路狀態後,還向系統中所有參加最短路徑優先演算法的路由器傳送鏈路狀態報文。
3)各路由器收到其他路由器傳送到鏈路狀態後,根據報文中的資料重新整理本路由器儲存的網路拓撲結構圖。如果鏈路發生變化,路由器將採用Dijkstra演算法生成新的最短路徑優先數並重新整理路由表。

3.Dijkstra演算法

1)路由器建立一張網路圖,並且確定源節點和目的節點,在這個例子裡我們設為V1和V2。然後路由器建立一個矩陣,稱為“鄰接矩陣”。在這個矩陣中,各矩陣元素表示權值。例如,[i, j]是節點Vi與Vj之間的鏈路權值。如果節點Vi與Vj之間沒有鏈路直接相連,它們的權值設為“無窮大”。

2)路由器為網路中的每一個節點建立一組狀態記錄。此記錄包括三個欄位:
前序欄位——表示當前節點之前的節點。
長度欄位——表示從源節點到當前節點的權值之和。
標號欄位——表示節點的狀態。每個節點都處於一個狀態模式:“久”或“暫時”。

3)路由器初始化(所有節點的)狀態記錄集引數,將它們的長度設為“無窮大”,標號設為“暫時”。

4)路由器設定一個T節點。例如,如果設V1是源T節點,路由器將V1的標號更改為“永久”。當一個標號更改為“永久”後,它將不再改變。一個T節點僅僅是一個代理而已。

5)路由器更新與源T節點直接相連的所有暫時性節點的狀態記錄集。

6)路由器在所有的暫時性節點中選擇距離V1的權值最低的節點。這個節點將是新的T節點。

7)如果這個節點不是V2(目的節點),路由器則返回到步驟5。

8)如果節點是V2,路由器則向前回溯,將它的前序節點從狀態記錄集中提取出來,如此迴圈,直到提取到V1為止。這個節點列表便是從V1到V2的最佳路由。

4.LS演算法
採用LS演算法時,每個路由器必須遵循以下步驟:

1)確認在物理上與之相連的路由器並獲得它們的IP地址。當一個路由器開始工作後,它首先向整個網路傳送一個“HELLO”分組資料包。每個接收到資料包的路由器都將返回一條訊息,其中包含它自身的IP地址。

2)測量相鄰路由器的延時(或者其他重要的網路引數,比如平均流量)。為做到這一點,路由器向整個網路傳送響應分組資料包。每個接收到資料包的路由器返回一個應答分組資料包。將路程往返時間除以2,路由器便可以計算出延時。(路程往返時間是網路當前延遲的量度,通過一個分組資料包從遠端主機返回的時間來測量。)該時間包括了傳輸和處理兩部分的時間——也就是將分組資料包傳送到目的地的時間以及接收方處理分組資料包和應答的時間。

3)向網路中的其他路由器廣播自己的資訊,同時也接收其他路由器的資訊。
在這一步中,所有的路由器共享它們的知識並且將自身的資訊廣播給其他每一個路由器。這樣,每一個路由器都能夠知道網路的結構以及狀態。

4)使用一個合適的演算法,確定網路中兩個節點之間的最佳路由。
在這一步中,路由器選擇通往每一個節點的最佳路由。它們使用一個演算法來實現這一點,如Dijkstra最短路徑演算法。在這個演算法中,一個路由器通過收集到的其他路由器的資訊,建立一個網路圖。這個圖描述網路中的路由器的位置以及它們之間的連結關係。每個連結都有一個數字標註,稱為權值或成本。這個數字是延時和平均流量的函式,有時它僅僅表示節點間的躍點數。例如,如果一個節點與目的地之間有兩條鏈路,路由器將選擇權值最低的鏈路。

收斂路由原理
路由演算法
路由演算法在路由協議中起著至關重要的作用,採用何種演算法往往決定了最終的尋徑結果,因此選擇路由演算法一定要仔細。通常需要綜合考慮以下幾個設計目標:
(1)最優化:指路由演算法選擇最佳路徑的能力。
(2)簡潔性:演算法設計簡潔,利用最少的軟體和開銷,提供最有效的功能。
(3)堅固性:路由演算法處於非正常或不可預料的環境時,如硬體故障、負載過高或操作失誤時,都能正確執行。由於路由器分佈在網路聯接點上,所以在它們出故障時會產生嚴重後果。最好的路由器演算法通常能經受時間的考驗,並在各種網路環境下被證實是可靠的。
(4)快速收斂:收斂是在最佳路徑的判斷上所有路由器達到一致的過程。當某個網路事件引起路由可用或不可用時,路由器就發出更新資訊。路由更新資訊遍及整個網路,引發重新計算最佳路徑,最終達到所有路由器一致公認的最佳路徑。收斂慢的路由演算法會造成路徑迴圈或網路中斷。
(5)靈活性:路由演算法可以快速、準確地適應各種網路環境。例如,某個網段發生故障,路由演算法要能很快發現故障,併為使用該網段的所有路由選擇另一條最佳路徑。
路由演算法按照種類可分為以下幾種:靜態和動態、單路和多路、平等和分級、源路由和透明路由、域內和域間、鏈路狀態和距離向量。前面幾種的特點與字面意思基本一致,下面著重介紹鏈路狀態和距離向量演算法。
鏈 路狀態演算法(也稱最短路徑演算法)傳送路由資訊到網際網路上所有的結點,然而對於每個路由器,僅傳送它的路由表中描述了其自身鏈路狀態的那一部分。距離向量算 法(也稱為Bellman-Ford演算法)則要求每個路由器傳送其路由表全部或部分資訊,但僅傳送到鄰近結點上。從本質上來說,鏈路狀態演算法將少量更新信 息傳送至網路各處,而距離向量演算法傳送大量更新資訊至鄰接路由器。
由於鏈路狀態演算法收斂更快,因此它在一定程度上比距離向量演算法更不易產生路由迴圈。但另一方面,鏈路狀態演算法要求比距離向量演算法有更強的CPU能力和更多的記憶體空間,因此鏈路狀態演算法將會在實現時顯得更昂貴一些。除了這些區別,兩種演算法在大多數環境下都能很好地執行。
最 後需要指出的是,路由演算法使用了許多種不同的度量標準去決定最佳路徑。複雜的路由演算法可能採用多種度量來選擇路由,通過一定的加權運算,將它們合併為單個 的複合度量、再填入路由表中,作為尋徑的標準。通常所使用的度量有:路徑長度、可靠性、時延、頻寬、負載、通訊成本等。