簡介 路由
算法 是提高
路由協定 功能,儘量減少路由時所帶來開銷的
算法 。當實現路由
算法 的軟體必須運行在
物理 資源有限的計算機上時高效尤其重要。路由
算法 必須健壯,即在出現不正常或不可預見事件的情況下必須仍能正常處理,例如硬體故障、高
負載 和不正確的實現。因為
路由器 位於
網路 的連線點,當它們
失效 時會產生重大的問題。最好的路由
算法 通常是那些經過了時間考驗,證實在各種
網路 條件下都很穩定的算法。
此外路由
算法 必須能快速聚合,聚合是所有
路由器 對最佳路徑達成一致的過程。當某
網路 事件使路徑斷掉或不可用時,
路由器 通過網路分發路由更新
信息 ,促使最佳路徑的重新計算,最終使所有路由器達成一致。聚合很慢的路由
算法 可能會產生路由環或網路中斷。
主要目的 路由器 使用路由
算法 來找到到達目的地的最佳路由。當說“最佳路由”時,考慮的參數包括諸如跳躍數(分組
數據包 在
網路 中從一個
路由器 或中間
節點 到另外的
節點 的行程)、延時以及分組數據包
傳輸 通信耗時。關於
路由器 如何收集
網路 的結構
信息 以及對之進行分析來確定最佳路由,有兩種主要的路由
算法 :
路由算法流程圖 總體式路由
算法 和分散式路由
算法 。採用分散式路由
算法 時,每個
路由器 只有與它直接相連的路由器的
信息 ——而沒有
網路 中的每個路由器的信息。這些
算法 也被稱為DV(
距離 向量 )算法。採用總體式路由
算法 時,每個
路由器 都擁有
網路 中所有其他路由器的全部
信息 以及網路的流量狀態。這些算法也被稱為LS(鏈路狀態)算法。
設計目標 路由
算法 通常具有下列設計目標的一個或多個:
最佳化 、簡單、低耗、健壯、穩定、快速聚合、靈活性。
(1)最
最佳化 :指路由算法選擇最佳路徑的能力。根據metric的值和權值來計算。
(2)簡潔性:
算法 設計必須簡潔。
路由協定 在
網路 中必須高效地提供其功能,儘量減少軟體和套用的開銷。這在當實現路由算法的軟體必須運行在
物理 資源有限的計算機上時尤其重要。
(3)堅固性:路由
算法 處於非正常或不可預料的環境時,如硬體故障、
負載 過高或操作失誤時,都能正確運行。由於
路由器 分布在
網路 聯接點上,所以在它們出故障時會產生嚴重後果。最好的
路由器 算法 通常能經受時間的考驗,並在各種
網路環境 下被證實是可靠的。
路由算法 (4)
快速收斂 :收斂是在最佳路徑的判斷上所有
路由器 達到一致的過程。當某個
網路 事件引起路由可用或不可用時,
路由器 就發出更新
信息 。路由更新
信息 遍及整個
網路 ,引發重新計算最佳路徑,最終達到所有
路由器 一致公認的最佳路徑。收斂慢的路由
算法 會造成路徑循環或
網路 中斷。
(5)靈活性:路由
算法 要求可以快速、準確地適應各種
網路環境 。例如,某個
網段 發生故障,路由
算法 要能很快發現故障,並為使用該網段的所有
路由選擇 另一條最佳路徑。
技術要素 路由
算法 的核心是
路由選擇 算法,設計路由算法時要考慮的技術要素有:
1、選擇最短路由還是最佳路由;
路由算法 最佳化指路由
算法 選擇最佳路徑的能力,根據metric的值和權值來計算。例如有一種路由
算法 可能使用跳數和延遲,但可能延遲的權值要大些。當然,
路由協定 必須嚴格定義計算metric的
算法 。
區分要素 靜態與動態 靜態路由
算法 很難算得上是算法,只不過是開始路由前由
網管 建立的表映射。這些映射自身並不改變,除非
網管 去改動。使用
靜態路由 的
算法 較容易設計,在
網路通信 可預測及簡單的
網路 中工作得很好。由於
靜態路由 系統 不能對網路改變做出反映,通常被認為不適用於的大型、易變的網路。九十年代主要的路由
算法 都是
動態路由算法 ,通過分析收到的路由更新
信息 來適應
網路 環境的改變。如果
信息 表示網路發生了變化,路由軟體就重新計算路由並發出新的路由更新信息。這些信息滲入
網路 ,促使
路由器 重新計算並對
路由表 做相應的改變。
動態路由算法 可以在適當的地方以
靜態路由 作為補充。例如,最後可選路由(router of last resort),作為所有不可路由分組的去路,保證了所有的
數據 至少有方法處理。
路由算法 單路徑與多路徑 平坦與分層 一些
路由協定 在平坦的空間裡運作,其它的則有路由的層次。在平坦的路由
系統 中,每個
路由器 與其它所有路由器是對等的;在分層次的路由系統中,一些路由器構成了路由主幹,
數據 從非主幹路由器流向主幹路由器,然後在主幹上
傳輸 直到它們到達目標所在區域,在這裡,它們從最後的主幹路由器通過一個或多個非主幹路由器到達終點。路由
系統 通常設計有邏輯
節點 組,稱為域、自治
系統 或區間。
在分層的
系統 中,一些
路由器 可以與其它域中的路由器通信,其它的則只能與域內的路由器通信。在很大的
網路 中,可能還存在其它級別,最高級的
路由器 構成了路由主幹。
分層路由 的主要優點是它模擬了多數公司的結構,從而能很好地支持其通信。多數的
網路通信 發生在小組中(域)。因為域內
路由器 只需要知道本域內的其它路由器,它們的路由
算法 可以簡化,根據所使用的路由算法,路由更新的通信量可以相應地減少。
主機與路由器 主機 智慧型和
路由器 智慧型的折衷實際是最佳路由與額外開銷的平衡。
主機 智慧型
系統 通常能選擇更佳的
路徑 ,因為它們在傳送
數據 前探索了所有可能的路徑,然後基於特定系統對“
最佳化 ”的定義來選擇最佳路徑。然而確定所有
路徑 的行為通常需要很多的探索通信量和很長的時間。
域內與域間 一些路由
算法 只在域內工作,其它的則既在域內也在域間工作。這兩種
算法 的本質是不同的。其遵循的理由是
最佳化 的域內路由
算法 沒有必要也成為最佳化的域間路由算法。
連結與距離 由於連結狀態
算法 聚合得較快,它們相對於
距離 算法產生路由環的傾向較小。在另一方面,連結狀態
算法 需要更多的CPU和記憶體資源,因此連結狀態算法的實現和支持較昂貴。雖然有差異,這兩種
算法 類型在多數環境中都可以工作得很好。
度量標準 路由
算法 使用了許多種不同的度量標準去決定最佳路徑。複雜的路由
算法 可能採用多種度量來選擇路由,通過一定的加權運算,將它們合併為單個的複合度量、再填入
路由表 中,作為尋徑的標準。
通常所使用的度量有:
路徑 長度、可靠性、時延、
頻寬 、
負載 、通信成本等。
路徑長度 路徑 長度是最常用的路由metric。一些
路由協定 允許
網管 給每個
網路連結 人工賦以代價值,這種情況下,路由長度是所經過各個連結的代價總和。其它
路由協定 定義了跳數,即分組在從源到目的的路途中必須經過的
網路 產品,如
路由器 的個數。
可靠性 可靠性,在路由
算法 中指
網路連結 的可依賴性(通常以位誤率描述),有些網路連結可能比其它的
失效 更多,網路失效後,一些網路連結可能比其它的更易或更快修復。任何可靠性因素都可以在給可靠率賦值時計算在內,通常是由
網管 給網路連結賦以metric值。
路由延遲 路由延遲指分組從源通過
網路 到達目的所花時間。很多因素影響到延遲,包括中間的網路連結的
頻寬 、經過的每個
路由器 的連線埠
佇列 、所有中間網路連結的擁塞程度以及
物理 距離 。因為延遲是多個重要變數的混合體,它是個比較常用且有效的metric。
頻寬 頻寬 指連結可用的流通
容量 。在其它所有條件都相等時,10Mbps的
乙太網 連結比64kbps的專線更可取。雖然
頻寬 是連結可獲得的最大
吞吐量 ,但是通過具有較大頻寬的連結做路由不一定比經過較慢連結路由更好。例如,如果一條快速鏈路很忙,分組到達目的所花時間可能要更長。
負載 負載 指
網路 資源,如
路由器 的繁忙程度。
負載 可以用很多方面計算,包括CPU使用情況和每秒處理分組數。持續地監視這些參數本身也是很耗費資源的。
通信代價 通信代價是另一種重要的metric,尤其是有一些公司可能關心運作費用甚於關心性能。即使線路延遲可能較長,他們也寧願通過自己的線路傳送
數據 而不採用昂貴的公用線路。
典型種類 LS算法 1、確認在
物理 上與之相連的
路由器 並獲得它們的IP位址。當一個
路由器 開始工作後,它首先向整個
網路 傳送一個“HELLO”分組
數據包 。每個接收到
數據包 的
路由器 都將返回一條訊息,其中包含它自身的IP位址。
2、測量相鄰
路由器 的延時(或者其他重要的
網路 參數,比如平均流量)。為做到這一點,
路由器 向整個
網路 傳送回響分組
數據包 。每個接收到
數據包 的路由器返回一個應答分組
數據包 。將路程往返時間除以2,
路由器 便可以計算出延時。(路程往返時間是
網路 當前延遲的量度,通過一個分組
數據包 從遠程
主機 返回的時間來測量。)該時間包括了
傳輸 和處理兩部分的時間——也就是將分組
數據包 傳送到目的地的時間以及接收方處理分組數據包和應答的時間。
在這一步中,所有的
路由器 共享它們的知識並且將自身的
信息 廣播給其他每一個路由器。這樣,每一個
路由器 都能夠知道
網路 的結構以及狀態。
Dijkstra算法 Dijkstra
算法 執行下列
步驟 :1、
路由器 建立一張
網路 圖,並且確定源
節點 和目的
節點 ,在這個例子裡我們設為V1和V2。然後
路由器 建立一個矩陣,稱為“鄰接矩陣”。在這個矩陣中,各矩陣元素表示權值。例如,[i, j]是
節點 Vi與Vj之間的鏈路權值。如果
節點 Vi與Vj之間沒有鏈路直接相連,它們的權值設為“無窮大”。
Dijkstra算法 2、
路由器 為網路中的每一個
節點 建立一組狀態記錄。此記錄包括三個欄位:
標號欄位——表示
節點 的狀態。每個
節點 都處於一個狀態模式:“永久”或“暫時”。
3、
路由器 初始化(所有
節點 的)狀態記錄集參數,將它們的長度設為“無窮大”,標號設為“暫時”。
4、
路由器 設定一個T
節點 。例如,如果設V1是源T節點,
路由器 將V1的標號更改為“永久”。當一個標號更改為“永久”後,它將不再改變。一個T
節點 僅僅是一個代理而已。
5、
路由器 更新與源T
節點 直接相連的所有暫時性節點的狀態記錄集。
6、
路由器 在所有的暫時性節點中選擇
距離 V1的權值最低的節點。這個
節點 將是新的T節點。
8、如果
節點 是V2,
路由器 則向前回溯,將它的前序節點從狀態記錄集中提取出來,如此循環,直到提取到V1為止。這個
節點 列表便是從V1到V2的最佳路由。
鏈路向量選路算法 鏈路狀態
算法 (也稱
最短路徑 算法)傳送路由
信息 到網際網路上所有的結點,然而對於每個
路由器 ,僅傳送它的
路由表 中描述了其自身鏈路狀態的那一部分。
鏈路狀態路由算法 距離向量算法 距離向量
算法 (也稱為
Bellman-Ford算法 )則要求每個
路由器 傳送其
路由表 全部或部分
信息 ,但僅傳送到鄰近結點上。從本質上來說,鏈路狀態
算法 將少量更新
信息 傳送至
網路 各處,而距離向量算法傳送大量更新信息至鄰接
路由器 。 ——由於鏈路狀態
算法 收斂更快,因此它在一定程度上比距離向量算法更不易產生路由循環。但另一方面,鏈路狀態
算法 要求比距離向量算法有更強的CPU能力和更多的記憶體空間,因此鏈路狀態算法將會在實現時顯得更昂貴一些。
分級路由 在下述情形中,
網路 中的每個
節點 保存了一個有17個記錄的
路由表 。在分級路由中,
路由器 被分成很多組,稱為區域。每個
路由器 都只有自己所在區域路由器的
信息 ,而沒有其他區域路由器的信息。所以在其
路由表 中,
路由器 只需要存儲其他每個區域的一條記錄。在這個例子中,我們將
網路 分為5個區域。
如果A想傳送分組
數據包 到在區域2中的一個
路由器 (D、E、F或G),它就將分組數據包先傳送到B,依此類推。可以看到,在這種類型的路由中,可以對
路由表 進行概括,因此
網路 效率提高了。上面的例子描述了一個兩級的分級路由。同樣我們也可以採用三級或者四級的分級路由。
在一個三級的分級路由中,
網路 被分為很多
簇 。每個簇由很多個區域組成,每個區域包含很多個
路由器 。分級路由廣泛套用於網際網路路由中,並且使用了多種
路由協定 。