何為路由?
所謂路由就是指通過相互連接的網絡把信息從源地點移動到目標地點的活動。一般來說,在路由過程中,信息至少會經過一個或多個中間節點。通常,人們會把路由和交換進行對比,這主要是因為在普通用戶看來兩者所實現的功能是完全一樣的。其實,路由和交換之間的主要區別就是交換發生在OSI參考模型的第二層(數據鏈路層),而路由發生在第三層,即網絡層。這一區別決定了路由和交換在移動信息的過程中需要使用不同的控制信息,所以兩者實現各自功能的方式是不同的。
早在40多年之間就已經出現了對路由技術的討論,但是直到80年代路由技術才逐漸進入商業化的應用。路由技術之所以在問世之初沒有被廣泛使用主要是因為80年代之前的網絡結構都非常簡單,路由技術沒有用武之地。直到最近十幾年,大規模的互聯網絡才逐漸流行起來,為路由技術的發展提供了良好的基礎和平臺。
路由技術的構成
我們通常所說的路由技術其實是由兩項最基本的活動組成,即決定最優路徑和傳輸信息單元(也被稱為數據包)。其中,數據包的傳輸和交換相對較為簡單和直接,而路由的確定則更加復雜一些。
確定路由
度量標準(metric),例如路徑長度等,是被路由算法用來計算和確定到達目的地的最優路徑的標準。為了幫助確定數據傳輸的路徑,路由算法可以建立和維護路由表。路由表中包含了各種路由信息。路由信息根據所使用的路由算法的不同而各異。
路由算法在路由表中寫入各種不同的信息,路由器會根據數據包所要到達的目的地選擇最佳路徑把數據包發送到可以到達該目的地的下一臺路由器處。當下一臺路由器接收到該數據包時,也會查看其目標地址,并使用合適的路徑繼續傳送給后面的路由器。依次類推,直到數據包到達最終目的地。
除了我們在上圖中看到的兩項信息之外,路由表中還會包含其它一些對路由的計算和選擇有價值的信息。路由器通過比較不同路徑的度量值決定最優路徑,而具體的度量值則要視所使用的路由算法而定。我們將會在文章稍后對一些較為常用的度量標準進行詳細的介紹。
路由器之間可以進行相互通訊,而且可以通過傳送不同類型的信息維護各自的路由表。路由更新信息就是這樣一種信息,一般是由部分或全部路由表組成。通過分析其它路由器發出的路由更新信息,路由器可以掌握整個網絡的拓撲結構。鏈路狀態廣播是另外一種在路由器之間傳遞的信息,它可以把信息發送方的鏈路狀態及時的通知給其它路由器。
數據包交換
交換算法相對路由算法來說更加簡單,而且絕大多數的路由協議都可以使用相同的交換技術。當數據包的發送方通過一定的方式獲取到路由器的地址之后,就會把數據包以該路由器的物理地址(MAC地址)發送出去,同時使用網絡層地址標識數據包的最終目的地。
當路由器接收到數據包后將查看標明其目的地的協議地址,并決定是否按照該地址將數據包轉發到下一臺路由器。如果路由器不知道如何把數據包轉發到其目的地的話,一般會丟棄該數據包。如果路由器知道數據包的轉發路徑,則會將其中的物理地址改為下一臺路由器的地址,然后將其發送出去。以此類推,直到數據包到達最終的目的地。在整個過程中,數據包的物理地址會隨著移動過程中所經過的不同的路由器而變化,但是代表目的地的協議地址一直保持不變。
路由算法
路由算法主要由幾個關鍵因素決定。首先,算法的設計意圖對路由協議的實際運作具有很大的影響。其次,目前存在許多不同類型的路由算法,每一種算法對網絡和路由器資源都有不同的要求和影響。最后,路由算法使用不同的度量標準,從而使最優路徑的計算結果不同。
設計意圖
通常,一種路由算法可以體現出以下幾方面的設計意圖:
最優性 簡單,低開銷 健壯,穩定 快速聚斂 適用性強 最優性是指路由算法選擇最佳路徑的能力,這主要取決于計算最佳路徑所使用的度量標準。舉例來說,一種路由算法可以同時采用數據包經過路由器的跳數和時延作為度量標準,而其中又以時延為主要標準。每一種路由協議都必須嚴格定義度量值的計算方法。
路由協議的設計應當盡可能的簡單。換句話說,路由算法必須能夠以最有效的方式發揮其功能,最大程度的降低軟件和使用開銷。尤其是當實現路由算法的軟件只能在資源有限的機器上運行時,有效性就變得更為重要。
路由算法必須具有良好的健壯性,能夠在出現異常或突發事件(例如硬件損壞,負載過高以及執行錯誤等)時正常運行。因為路由器往往是網絡的連接節點,所以如果出現問題將會帶來非常嚴重的后果。因此,最好的路由算法應當能夠經受時間的考驗,在不同的網絡條件下都能夠保持穩定的運行狀態。
路由算法還應當能夠快速聚斂。所謂聚斂就是指所有路由器就最優路徑重新達成一致的過程。當因為某種原因使路由器出現問題而無法繼續正常使用時,路由器會發出路由更新信息傳遍整個網絡,重新計算最優路徑,并最終使所有路由器就新路徑達成一致。聚斂速度慢的路由算法可能會導致路由回路的出現。
在下圖所示的路由回路中,一個數據包在時間t1到達路由器1。因為路由器1中的信息已經被更新,所以該路由器知道到達數據包目的地的最優路徑應當通過路由器2。因此,路由器1把數據包轉發到路由器2。但是路由器2中的信息沒有被更新,所以仍然認為最優路徑應當通過路由器1,并因此把數據包又轉發回路由器1。這樣,數據包只能在兩臺路由器之間來回傳遞,直到路由器2接收到了路由更新信息或者數據包超出了最大存活時間。
路由算法還應當具有非常好的適應性,能夠快速準確的適應不同的網絡環境。例如,假設某一個網段出現問題,許多路由協議都可以快速的選擇新的最佳路徑替代已經無法使用的原由路徑。路由算法應當能夠通過編程,適應網絡帶寬,網絡時延等參數變量的變化。
算法類型
路由算法可以被劃分成許多不同的類型。主要的分類標準如下:
靜態vs動態 單路徑vs多路徑 單層結構vs分層結構 主機智能vs路由器智能 域間vs域內 鏈路狀態vs距離向量 靜態vs動態
靜態路由算法并不是一種真正意義上的路由算法,而只是由網絡管理員在啟動網絡路由功能之前預先建立起來的路由映射表。除非管理員人為修改,否則映射表的內容不會發生任何變化。使用靜態路由的算法在設計上非常簡單,主要適合在那些數據流量的可預測性強,網絡結構相對簡單的環境中使用。
因為靜態路由系統無法對網絡變化作出響應,所以對今天的大型,動態網絡來說并不適用。目前所使用的絕大多數的主流路由算法都是動態路由算法,可以通過分析接收到的路由更新信息針對變化的網絡環境作出相應的調整。如果網絡發生變化,路由軟件就會重新計算新路由,并將新的路由更新信息發送出去。更新信息可以傳遍整個網絡,所有接收到該信息的路由器都會重新執行各自的路由算法,對路由表作出相應的修改。
靜態路由和動態路由并不是完全對立的,在適當的環境下,兩者可以有機的結合在一起,互為補充。例如,我們可以創建靜態路由,指定一臺專門的路由器作為最后訴求(last resort)路由器來接收所有無法被正確路由的數據包,這樣,我們就可以保證所有的信息都能夠以某種方式被處理。 單路徑vs多路徑
一些復雜的路由協議可以支持到同一目的地的多條路徑。與單路徑算法不同,多路徑算法可以在多條路徑之間實現數據流量的多路復用。多路徑路由算法的優勢是非常明顯的,可以提供更大的數據吞吐量,同時增強了網絡的可靠性。
單層結構vs分層結構
在單層次的路由系統中,所有的路由器都是對等的;而在分層路由系統中,則是由一部分路由器組成路由主干。任何一臺主機發送出的數據包首先經過非主干路由器到達主干路由器,然后沿著路由主干傳遞。當到達目的地的網絡區域時,從主干路由器轉入非主干路由器,并最終抵達目標接收方。
通常,我們把路由系統中的本地節點群稱為域,自主系統,或區域。在分層路由系統中,一個域中的某些路由器可以與位于其它域中的路由器進行通訊,而另外一些路由器則只能與本域中的路由器通訊。在規模更大的網絡中,可能會存在更多的路由等級,而路由主干一般都是由位于最高等級的路由器組成。
分層路由的最大優勢就在于其組成結構與我們在現實企業中所采用的管理和組織結構相符,因而可以非常好的支持公司內部的數據流量和模式。舉例來說,在企業網中,絕大多數的網絡通訊都發生在小范圍內的組或域中,所以域內路由器只需要知道如何與本域中的其它路由器通訊即可,不必關心其它域中的路由器。這樣,就可以使路由算法得到簡化,并相應降低了路由的更新流量。
主機智能vs路由器智能
所謂主機智能算法就是指由數據包的發送方決定整個傳輸過程中的完整路由,通常也被稱為源路由。在源路由系統中,路由器的作用只是簡單的存儲和轉發。
路由器智能算法的基礎就是假定數據包的發送方對路由沒有任何決定能力,完全由路由器基于各自的計算方法選擇和確定數據的傳輸路徑。
域間vs域內
有些路由算法只能在單獨的域中使用,而另外一些路由算法則既可以在域間也可以在域內使用。這兩種算法的性質是不同的,因此,一種好的域內路由算法往往并不一定能夠在域間環境下使用。
鏈路狀態vs距離向量
鏈路狀態算法(又稱為最短路徑優先算法)可以把路由信息傳遞到網絡上的所有節點。不過每一臺路由器只是向外界發送描述自己鏈路狀態的那一小部分路由表信息。距離向量算法(又稱為Bellman-Ford算法)要求每一臺路由器向外發送全部或絕大部分的路由表信息,不過該信息只能發送給臨近的路由器。因此,兩者的區別就是鏈路狀態算法可以向整個網絡范圍發送數據量較小的更新信息,而距離向量算法則是只能向臨近的路由器發送大批量的更新信息。
因為鏈路狀態算法的聚斂速度相對較快,所以要比距離向量算法更能有效的避免路由回路的出現。不過,從另一方面來說,鏈路狀態算法需要占用更多的CPU處理時間和系統內存,因此比距離向量算法的實現和支持成本更高。除了我們在這里所提到的區別之外,兩種路由算法都可以在絕大多數的網絡環境中使用。
路由度量標準
路由算法使用很多不同的度量標準來確定最佳路徑。一些復雜的路由算法更是可以把幾個獨立的度量標準綜合起來,作出更為全面和準確的路由決定。以下是最為常用的路由度量標準:
路徑長度
可靠性 時延 帶寬 負載 通訊成本 路徑長度是最為常用的一種路由度量標準。有些路由協議可以允許網絡管理人員為每一條網絡連接指定路由成本。在這種情況下,路徑長度就是所有有關連接的路由成本的總和。其它一些路由協議還可以定義跳數,即數據包從源地址到目的地所必須經過的網絡互連設備(如路由器等)的個數。
在路由算法的范疇內,可靠性主要是指每一條網絡連接的可使用性(通常使用誤碼率表示)。一些網絡連接可能比其它連接更容易出現問題。在網絡故障修復之后,有些網絡連接可能比其它連接的恢復速度更快或更方便。網絡管理人員可以把任何可靠性因素考慮在內,并據此為每一條網絡連接指定相應的可靠值。
路由時延是指通過網絡把數據包從源地址移動到目的地所需要的時間總和。有許多因素可以造成路由時延,其中包括網絡連接的帶寬,每一臺途經路由器的負載,網絡擁擠狀況以及數據包所需要經過的物理距離等。因為路由時延是多項重要變量的綜合反映,所以被普遍的采用。
帶寬是指一條網絡連接所能提供的流量吞吐能力。很明顯,10-Mbps以太網的帶寬要大大高出64-kbps專線的帶寬。雖然帶寬反映了一條網絡連接所能夠提供的最大速率,但是有時使用寬帶連接的路由并不一定是最優路徑。例如,如果一條高速連接非常繁忙,那么實際等待發送數據包的時間可能會更長。
負載是指象路由器這樣的網絡資源和設備的繁忙程度。我們可以通過多種方式計算負載,例如CPU的使用率以及每秒鐘可以處理的數據包的數目等。對路由負載進行長期的持續監控可以更加有效的管理和配置網絡資源。
通訊成本是另外一種非常重要的路由度量標準,尤其是對那些相對于網絡性能更加關注運行成本的企業來說,其重要性就更加明顯。舉例來說,有時企業會為了節省公用線路的使用成本而改用延遲更大的私人線路,這就是通訊成本的具體體現。 |