史上最強動態路由協議知識分解,3分鐘帶你入門到精通!
路由選擇協議基礎
所有路由選擇協議都是圍繞著一種算法而構建的。通常,一種算法是一個逐步解決問題的過程。一種路由算法至少應指明以下內容:
- 向其他路由器傳送網絡可達性信息的過程。
- 從其他路由器接收可達性信息的過程。
- 基于現有可達性信息決策最優路由的過程以及在路由表中記錄這些信息的過程。
- 響應、修正和通告網絡中拓撲變化的過程。
對所有路由選擇協議來說,幾個共同的問題是路徑決策、度量、收斂和負載均衡。
路徑決策
在網絡內的所有子網都必須連接到一臺路由器上, 無論什么情況下,只要路由器有接口連接到一個網絡上,那么該接口必須具有一個屬于該網絡的地址。這個地址就是可達性信息的起始點。
圖41給出了一個包含3臺路由器的網絡。路由器A知道網絡192.168.1.0、192.168.2.0和192.168.3.0的存在,因為路由器有接口連接到這些網絡上,并 且配置了相應的地址和掩碼。同樣的,路由器B知道網絡192.168.3.0、 192.168.4.0、 192.168.5.0 和192.168.6.0的存在,路由器C知道網絡192.168.6.0、192.168.7.0 和192.168.1.0的存在。由于每個接口都實現了所連接網絡的數據鏈路和物理層協議,因此路由器也知道網絡的狀態(工作正常“up”或發生故障“down").
信息共享過程看上去很簡單。考慮路由器A:
- 步驟1:路由器A檢查自己的IP地址和相關掩碼,然后推導出與自身所連接的網絡是192.168.1.0、192.168.2.0 和192.168.3.0.
- 步驟2:路由器A將這些網絡連同某種標記-起保存到路由表中,其中標記指明了網絡是直連網絡。
- 步驟3:路由器A向數據包中加入以下信息:“我的直連網絡是 192.168.1.0、192.168.2.0和192.168.3.0.
- 步驟4:路由器A向路由器B和路由器C發送這些路由信息數據包的拷貝,或者叫做路由選擇更新。
路由器B和路由器C執行與路由器A完全相同的步驟,并且也向路由器A發送帶有與它們直接相連的網絡的更新信息。路由器A將接收到的信息連同發送路由器的源地址一起寫入路由表。現在,路由器A知道了所有的網絡,而且還知道連接這些網絡的路由器的地址。
這個過程看似非常簡單。那么為什么路由選擇協議比這更復雜呢?讓我們重新看一下圖4-1。
- 路由器A將來自路由器B和路由器C的更新信息保存到路由表之后,它應該用這些信息作什么?例如,路由器A是否應該將路由器C的數據包信息傳遞給路由器B,還是將路由器B的路由選擇信息包傳遞給路由器C呢?
- 如果路由器A沒有轉發這些更新消息,那么就不能完成信息共享。例如,如果路由器B和路由器C之間的鏈路不存在,那么這兩臺路由器就無法知道對方的網絡。因此路由器A必須轉發那些更新信息,但是這樣做又產生了新的問題。
- 如果路由器A從路由器B和路由器C那里知道網絡192.168.4.0, 那么為了到達該網絡應該使用哪一臺路由器呢?它們都合法嗎?誰是最優路徑呢?
- 什么機制可以確保所有路由器能接收到所有的路由選擇信息,而且這種機制還可以阻止更新數據包在網絡中無休止地循環下去呢?
- 如果路由器共享某個直連網絡(192.168.1.0、 192.168.3.0 和192.168.6.0) ,那么路由器是否仍舊應該通告這些網絡呢?
這些問題同開頭解釋路由選擇協議一樣顯得有點過分單純,但是它們給讀者的感覺卻是:正是這些問題造成了協議的復雜性。
度量
當有多條路徑到達相同目標網絡時,路由器需要一種機制來計 算最優路徑。度量(metric)是指派給路由的一種變量,作為一種手段,度量可以按最好到最壞,或按最先選擇到最后選擇的順序對路由進行等級劃分。考慮下面的例子,了解為什么需要度量。
如圖4-1所示,假設在網絡中信息共享可以正常進行,并且路由器A中的路由表如表41所示。
路由表說明了前3個網絡直接連接到路由器,因而從路由器A到達它們不需要進行路由選擇。根據路由表,后4個網絡需要經過路由器B或路由器C才能到達。這些信息同樣是正確的。但是,如果通過路由器B或路由器C都可以到達網絡192.168.7.0,那么優先選擇哪一條路徑呢?這時就需要度量對這兩條路徑進行等級劃分。
不同的路由選擇協議使用不同的度量。例如,RIP定義含有路由器跳數最少的路徑是最優路徑; EIGRP基于路徑沿路最小帶寬和總時延定義最優路徑。
1. 跳數
跳數(Hop Count)度量可以簡單地記錄路由器跳數。例如,如果數據包從路由器A的接口192.168.3.1發出,經過路由器B到達網絡192.168.5.0,則記為!跳;如果從路由器接口192.168.1.1發出,經路由器C和路由器B到達網絡192.168.5.0, 記為2跳。假設僅使用跳數作為度量,那么最優路徑就是跳數最少的路徑,在本例中就是A-B。
但A-B是真正的最優路徑嗎?如果A-B是一條DS-0鏈路,并且A-C和C-B都是TI鏈路,那么跳數為2的路由實際上可能是最優路徑,因為帶寬對如何有效地使流量通過網絡影響很大。
2. 帶寬
帶寬(Bandwidth)度量將會選擇高帶寬路徑,而不是低帶寬鏈路。然而帶寬本身可能不是一個好的度量。如果兩條TI鏈路或其中一條被其他流量過多占用,那么與一個56KB的空閑鏈路相比到底誰好呢?或者一條高帶寬但時延也很大的鏈路又如何呢?
3. 負載
負載(Load)度量反應了流量占用沿途鏈路帶寬的數量。最優路徑應該是負載最低的路徑。不像跳數和帶寬,路徑上的負載會發生變化,因而度量也會跟著變化。這里要當心,如果度量變化過于頻繁,路由波動——最優路徑頻繁變化——可能就發生了。路由波動會對路由器的CPU.數據鏈路的帶寬和全網穩定性產生負面影響。
4. 時延
時延(Delay)是度量數據包經過一條路徑所花費的時間。使用時延作度量的路由選擇協議將會選擇最低時延的路徑作為最優路徑。有多種方法可以測量時延。時延不僅要考慮鏈路時延,而且還要考慮路由器的處理時延和隊列時延等因素。另一方面,路由的時延可能根本無法測量。因此,時延可能是沿路徑各接口所定義的靜態延時量的總和,其中每個獨立的時延量都是基于連接接口的鏈路類型估算得到的。
5. 可靠性
可靠性(Reliability)度量是用來測量鏈路在某種情況下發生故障的可能性,可靠性可以是變化的或固定的。可變可靠性度量的例子是鏈路發生故障的次數,或特定時間間隔內收到錯誤的次數。固定可靠性度量是基于管理員確定的一條鏈路的已知量.可靠性最高的路徑將會被最優先選擇。
6. 代價
由管理員設置的代價(Cost) 度量可以反應更優或更差路由。通過任何策略或鏈路特性都可以對代價進行定義,同時代價也可以反應出網絡管理員對路徑的隨意判斷。因而代價是一個描述無量綱度量的術語。
每當談論起路由選擇的話題時,常常會把代價作為-種通用術語。例如,“RIP基于跳數選擇代價最低的路徑”。還有一個通用術語是最短(shortest), 如“RIP基于跳數選擇最短路徑”。當在這種情況中使用它們時,最小代價(最高代價)或最短(最長)僅僅指的是路由選擇協議基于自己特定的度量對路徑的一種看法。
收斂
動態路由選擇協議必須包含一系列過程, 這些過程用于路由器向其他路由器通告本地的直連網絡,接收并處理來自其他路由器的同類信息,以及傳遞從其他路由器接收到的信息。此外,路由選擇協議還需要定義已確定的最優路徑的度量。
對路由選擇協議來說,另一個標準是網絡上所有路由器的路由表中的可達性信息必須一致。在圖4-1中,如果路由器A確定了經過路由器C到達網絡192.168.5.0是最優路徑,而路由器C確定到達相同網絡的最優路徑是經過路由器A.那么路由器A發向192.168.5.0 的數據包到達路由器C后又被發回給路由器A.路由器A又再次發給路由器C,如此往復循環。
我們稱這種在兩個或多個目標網絡之間流量的持續循環為路由選擇環路(routing loop)。使所有路由表都達到-致狀態的過程叫做收斂(convergence)。全網實現信息共享以及所有路由器計算最優路徑所花費的時間總和就是收斂時間。
圖4-2所示的網絡已經收斂,但是現在拓撲又發生了變化。最左邊的兩臺路由器之間的鏈路發生故障,這兩臺直接相連的路由器都從數據鏈路協議獲知鏈路故障,轉而通知它們的鄰居該鏈路不再可用。鄰接路由器立即更新路由表并通知它們的鄰居,這個過程一直持續到所有路由器都知道此變化為止。
注意,在立時刻,最左邊的3臺路由器知道拓撲發生了變化,但最右邊的3臺路由器依然不知道。最右邊的3臺路由器仍舊保存著原來的路由信息并繼續交換數據包。這時網絡處于未收斂狀態,正是在這段時間里可能發生路由選擇錯誤。因此,在任何路由選擇協議里收斂時間是一個重要的因素。在拓撲發生變化之后,一個網絡的收斂速度越快越好。
負載均衡
為了有效地使用帶寬,負載均衡作為一種手段,將流量分配到相同目標網絡的多條路徑上。如圖4-1所示,再讓我們考慮一下這個討論負載均衡有效性的例子。圖中所有網絡都存在兩條可達路徑。如果網絡192.168.2.0.上的設備向192.168.6.0上的設備發送一組數據包流,路由器A可以經過路由器B或路由器C發送這些數據包。在這兩種情況下,到日的網絡的距離都是1跳。然而,在一條路徑上發送所有的數據包不能最有效地利用可用帶寬:因此應該執行負載均衡交替使用兩條路徑。正加第3章所述,負載均衡可以是等代價或不等代價,基于數據包或基于目標地址的。