1. 程式人生 > >常見的路由表生成演算法

常見的路由表生成演算法

一、路由表

所謂路由表,指的是路由器或者其他網際網路網路裝置上儲存的表,該表中存有到達特定網路終端的路徑,在某些情況下,還有一些與這些路徑相關的度量。

在計算機網路中,路由表或稱路由擇域資訊庫(RIB)是一個儲存在路由器或者聯網計算機中的電子表格(檔案)或類資料庫。路由表儲存著指向特定網路地址的路徑(在有些情況下,還記錄有路徑的路由度量值)。路由表中含有網路周邊的拓撲資訊。路由表建立的主要目標是為了實現路由協議和靜態路由選擇。

在現代路由器構造中,路由表不直接參與資料包的傳輸,而是用於生成一個小型指向表,這個指向表僅僅包含由路由演算法選擇的資料包傳輸優先路徑,這個表格通常為了優化硬體儲存和查詢而被壓縮或提前編譯。本文將忽略這個執行的詳細情況而選擇整個路徑選擇/傳輸資訊子系統作為路由表來說明。

二、路由表工作流程

路由器的主要工作就是為經過路由器的每個資料包尋找一條最佳傳輸路徑,並將該資料有效地傳送到目的站點。由此可見,選擇最佳路徑的策略即路由演算法是路由器的關鍵所在。為了完成這項工作,在路由器中儲存著各種傳輸路徑的相關資料——路由表(Routing Table),供路由選擇時使用,表中包含的資訊決定了資料轉發的策略。打個比方,路由表就像我們平時使用的地圖一樣,標識著各種路線,路由表中儲存著子網的標誌資訊、網上路由器的個數和下一個路由器的名字等內容。路由表可以是由系統管理員固定設定好的,也可以由系統動態修改,可以由路由器自動調整,也可以由主機控制。

1.靜態路由表

由系統管理員事先設定好固定的路由表稱之為靜態(static)路由表,一般是在系統安裝時就根據網路的配置情況預先設定的,它不會隨未來網路結構的改變而改變。

2.動態路由表

動態(Dynamic)路由表是路由器根據網路系統的執行情況而自動調整的路由表。路由器根據路由選擇協議(Routing Protocol)提供的功能,自動學習和記憶網路執行情況,在需要時自動計算資料傳輸的最佳路徑。

路由器通常依靠所建立及維護的路由表來決定如何轉發。路由表能力是指路由表內所容納路由表項數量的極限。由於Internet上執行BGP協議的路由器通常擁有數十萬條路由表項,所以該專案也是路由器能力的重要體現。

路由表項如下:

首先,路由表的每個項的目的欄位含有目的網路字首。其次,每個項還有一個附加欄位,還有用於指定網路字首位數的子網掩碼(subnet mask).第三,當下一跳欄位代表路由器時,下一跳欄位的值使用路由的IP地址。

理解網際網路中可用的網路地址(或網路 ID)有助於路由決定。這些知識是從稱為路由表的資料庫中獲得的。路由表是一系列稱為路由的項,其中包含有關網際網路的網路 ID 位置資訊。路由表不是對路由器專用的。主機(非路由器)也可能有用來決定優化路由的路由表。

三、常見的路由演算法

路由演算法是提高路由協議功能,儘量減少路由時所帶來開銷的演算法。當實現路由演算法的軟體必須執行在物理資源有限的計算機上時高效尤其重要。路由演算法必須健壯,即在出現不正常或不可預見事件的情況下必須仍能正常處理,例如硬體故障、高負載和不正確的實現。因為路由器位於網路的連線點,當它們失效時會產生重大的問題。最好的路由演算法通常是那些經過了時間考驗,證實在各種網路條件下都很穩定的演算法。

此外路由演算法必須能快速聚合,聚合是所有路由器對最佳路徑達成一致的過程。當某網路事件使路徑斷掉或不可用時,路由器通過網路分發路由更新資訊,促使最佳路徑的重新計算,最終使所有路由器達成一致。聚合很慢的路由演算法可能會產生路由環或網路中斷。

(一)靜態路由演算法

1.Dijkstra演算法(最短路徑演算法)

Dijkstra(迪傑斯特拉)演算法是典型的單源最短路徑演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。Dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。Dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用OPEN, CLOSE表的方式,這裡均採用永久和臨時標號的方式。注意該演算法要求圖中不存在負權迴路。

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的最佳路由。

2.擴散法

事先不需要任何網路資訊;路由器把收到的每一個分組,向除了該分組到來的線路外的所有輸出線路傳送。 將來會有多個分組的副本到達目的地端,最先到達的,可能是走了“最優”的路徑 常見的擴散法是選擇性擴散演算法。

(二)動態路由演算法

1.距離向量路由演算法

距離向量路由演算法(Bellman-Ford Routing Algorithm),也叫做最大流量演演算法(Ford-FulkersonAlgorithm),其被距離向量協議作為一個演算法,如RIP, BGP, ISO IDRP, NOVELL IPX。使用這個演算法的路由器必須掌握這個距離表(它是一個一維排列-“一個向量”),它告訴在網路中每個節點的最遠和最近距離。在距離表中的這個資訊是根據臨近接點資訊的改變而時時更新的。表中資料的量和在網路中的所有的接點(除了它自己本身)是等同的。這個表中的列代表直接和它相連的鄰居,行代表在網路中的所有目的地。每個資料包括傳送資料包到每個在網上的目的地的路徑和距離/或時間在那個路徑上來傳輸(我們叫這個為“成本”)。這個在那個演算法中的度量公式是跳躍的次數,等待時間,流出資料包的數量,等等。在距離向量路由演算法中,相鄰路由器之間週期性地相互交換各自的路由表備份。當網路拓撲結構發生變化時,路由器之間也將及時地相互通知有關變更資訊。 其優點是演算法簡單容易實現。缺點是慢收斂問題,路由器的路徑變化需要像波浪一樣從相鄰路由器傳播出去,過程緩慢。
每一個相鄰路由器傳送過來的路由表都要經過以下步驟:

1)對地址為X的 路由器發過來的路由表,先修改此路由表中的所有專案:把”下一跳”欄位中的地址改為X,並把所有”距離”欄位都加1。
2)對修改後的路由表中的每一個專案,進行以下步驟:

(1)將X的路由表(修改過的),與S的路由表的目的網路進行對比。若在X中出現,在S中沒出現,則將X路由表中的這一條專案新增到S的路由表中。

(2)對於目的網路在S和X路由表中都有的專案進行下面步驟 :
(2.1)在S的路由表中,若下一跳地址是x,則直接用X路由表中這條專案替換S路由表中的專案。
(2.2)在S的路由表中,若下一跳地址不是x
,若X路由表專案中的距離d小於S路由表中的距離,則進行更新。
3)若3分鐘還沒有收到相鄰路由器的更新表,則把此相鄰路由器記為不可到達路由器,即把距離設定為16。

2.鏈路狀態最短路由優先演算法SPF

1)發現鄰居結點,並學習它們的網路地址;
2)測量到各鄰居節點的延遲或者開銷;
3)建立鏈路狀態分組;
4)使用擴散法釋出鏈路狀態分組;
5)計算到每個其它路由器的最短路徑。
使用Dijkstra演算法處理鏈路資訊

四、收斂路由原理

路由收斂:指網路的拓撲結構發生變化後,路由表重新建立到傳送再到學習直至穩定,並通告網路中所有相關路由器都得知該變化的過程。也就是網路拓撲變化引起的通過重新計算路由而發現替代路由的行為。

通過路由收斂可以使路由域中所有路由器對當前的網路結構和路由轉發達成一致的狀態。

收斂時間是指從網路的拓撲結構發生變化到網路中所有路由裝置中路由表重新保持一致的狀態轉換過程。

觸發條件

1、路由器失效

2、連線失效

3、管理度量調整等