歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核工程導論——網絡:路由:路由原理

Linux內核工程導論——網絡:路由:路由原理

日期:2017/3/1 12:17:43   编辑:Linux內核

總覽

路由表

IP層通過路由將數據包送達該送達的目的地址,這就要求在整個網絡中建立正確的路由表。路由表的內容是記錄要到達哪裡下一跳需要發到哪裡(可以是端口可以是ip),如此整個網絡在單個節點只知道自己局部轉發信息的情況下就能正確的轉發。

路由協議

路由表的原理簡單,難的是維護。如何在全網絡形成這樣一張大表,如果在網絡變動的時候全網的表快速收斂聚合?如果全部是手動的固然可以實現,但是成本太高。這就需要自動化的協議。這種形成並更新路由表的協議叫做路由協議。

內部網關協議和外部網關協議

世界如果是一個集權國家,就可以統一規劃一個網絡(即使如此,可能也會有試驗網絡)。但是世界各個組織和國家的博弈過程,各組織內部的網絡協議不可能統一,但是因特網又希望可以在世界各國自由的通信。唯一的解決方法就是各個組織之間的交換路由表的方式盡可能的統一,但是各個組織內部怎樣組織和更新自己的路由表,各組織是自由的。這就是外部網關協議和內部網關協議。

常見的路由協議

常見的內部網關協議有RIP、RIPv2,OSPF,IS-IS。常見的外部網關協議有EGP、BGP。其中內部網關協議目前最常用的是OSPFh和IS-IS,事實上這兩個協議幾乎是一樣的。RIP比較老,用的算法問題比較多,逐漸退出使用。BGP是EGP的升級版,現在一般使用BGP。

分布式分層網絡

網絡是集中式和分布式的合體,集中式的網絡最好管理,但是現實的網絡大部分是分布式的。即使是一個組織內部,也被刻意的實現為了分層的分布式的。同一層次之間的節點的路由表靠同層通信形成,而不是靠上層下發(當然使用上層網絡向自治區外的路由仍然需要上層網絡的參與)。如此設計的好處是自動化。集中式的需要頂層管理,而分布式的靠互相協商。
但是像中國這麼大的國家,全部路由節點同一層次分布式,必然導致信息爆炸。現實世界使用聚合的思想(也就是分層的思想),將一個區域的節點聚合為一個節點,如此每個層級都有較少的節點。每個節點的下部就又構成了一個自治域。

分布式網絡路由表可行更新策略與成本

目的是更新同層次和上下層次路由器的路由表,最直觀的方案是各個節點都同層廣播自己的路由表,再仔細想還有更新部分條目的做法,再深入路由表結構,還有發布節點狀態或者鏈路狀態,相關節點自己去計算路由表的做法。無論協議如何設計,都是要解決以下問題:
- 傳輸問題:
- 傳輸內容是什麼
- 傳輸給誰
- 是周期性傳輸還是觸發性傳輸
- 傳輸想要更新的內容全網更新要多久(收斂、聚合速度)
- 描述問題
- 對不同網絡的描述方式是怎樣的
- 如何評價一條鏈路與另一條可行鏈路的質量孰好孰壞
- 如何定義與劃分同一個層級的網絡節點
- 如何與不同層次的節點交互信息
- 認證
- 如何確定發布路由信息的節點是可信的

這裡的路由表都是指路由器上的,而不是普通的主機。普通主機的路由工作都是設置一個網關,將所有上網的數據包直接發送給網關即可,無需關心路由問題。

傳輸問題

我們的目的是更新網絡中的路由表,傳輸內容就有:路由表、路由條目、鏈路狀態。前兩個很直觀,鏈路狀態是指一個路由器的所有端口連接的對端路由器的狀態(或者是這個端口自己的狀態),比如掉線了,改網段了,連到其他的路由器了等事件。
傳輸路由表是RIP采用的方法,並且采用周期性的全網廣播(RIPv2引進了多播),當網絡比較大時,對應的路由表也就比較大,如此傳輸無論對帶寬還是收斂速度來說都是幾乎不可接受的。收斂太慢,網絡的波動性就大,有的時候第一個路由表還沒收到,第二個同一個節點的更新已經來了。對於變化比較多的大型網絡拓撲來說幾乎無法使用。
所以OSPF和IS-IS采用傳輸鏈路狀態的方法。我們知道路由表中記錄的是下一跳,並不是鏈路狀態,但是每個路由器可以根據其他路由器的鏈路狀態動態計算出下一跳(例如B到10.0.0.0/24網段的鏈路斷掉了,A就可以計算出要到10.0.0.0/24網段的嚇一跳不能是B了,要看看其他路由器有沒有鏈接到這個網段的鏈路)。

網絡變化帶來的傳輸量

RIP采用距離矢量,OSPF采用的是鏈路狀態。距離矢量路由協議,更新的是“路由條目”,一條重要的鏈路如果發生變化,意味著需通告多條涉及到的路由條目。鏈路狀態路由協議,更新的是“拓撲”,每台路由器上都有完全相同的拓撲,他們各自分別進行SPF算法,計算出路由條目。一條重要鏈路的變化,不必再發送所有被波及的路由條目,只需發送一條鏈路通告,告知其它路由器本鏈路發生故障即可。其它路由器會根據鏈路狀態,改變自已的拓撲數據庫,重新計算路由條目。

收斂速度

從一個節點變化到全網絡都改變路由表的速度。RIP的模式自然很慢,OSPF和IS-IS等先進算法目前都對鏈路方式進行了大量的研發。例如在SPF的基礎上發展出了部分更新的ISPF。針對不是掉線,而只是路由信息發生變化的情況(拓撲沒變),發展了PRC(Partial Route Calculate,部分路由計算算法)。針對擴散和計算是否可以重疊以加速響應的問題,發展出了LSP快速擴散算法
當然,這遠不是這兩個協議發展的終點。比如通過鏈路質量的變化做預測的預測方法也可以繼續向協議整合。

描述問題

對網絡的描述

對於傳統的IP劃分,有A、B、C等網段。但這只是約定劃分的,實際的使用中很多網段都是非標准的VLSM,RIP不認識Variable Length Subnet Masks (VLSM),通過VLSM可以有效指定一大片網絡,可以非常靈活的合並以減少網絡條目。RIPv2引入了這個特性。但是OSPF和IS-IS原生的支持。
RIP將整個層次的網絡缺點為一個一個點,到一個點是一跳,最多支持15跳。這樣對於大於15跳到達的網絡對於RIP來說是不可達的。並且,如此的跳,一定得注意避免環的問題。OSPF則是鏈路概念,沒有跳數限制,通過收到全網每個節點的每個端口的狀態,在本機畫出一張網絡圖,進而計算出網絡拓撲。如此的信息持有量是不會出現環路的。
這裡的OSPF不會出現環路是針對自治區內部的,自治區之間是可以產生環路的,可以通過OSPF骨干網解決。

同一層次節點劃分和與其他層次節點的通信

RIP是完全扁平的,同一層次的所有節點都是在一個廣播域。ospf和IS-IS可以將一個層次的節點進一步劃分和聚合。如此如果在一個層次中如果有很多節點,RIP也無法適應。
OSPF也是會洪泛廣播鏈路變化,如果網絡太大,這也是個問題。所以OSPF加入了自治區域(AS)的概念。洪泛只發生在自治區域內,所以一個AS內部所有節點的拓撲數據庫是相同的。連接AS的路由器叫做ABR(Area Border Router),也就是說一台路由器可以同時在兩個AS,只要是不同的端口就好。任何一個AS中的任何一台路由器都可以作為ASBR與外部網絡相連(這個外部網絡可以不是OSPF)。

根據路徑質量選擇下一跳

RIP選擇下一跳完全根據跳數,哪個跳數少選擇哪個。而OSPF的通知鏈路狀態的時候會同時通知鏈路質量。每兩個節點之間的鏈路都有權重值來表示質量。如此就很實際的選擇鏈路質量好的下一跳。但是這裡也還是有問題的,幾個斷點兩兩間的鏈路都好,也並不一定意味著整條鏈路就是最好的(通常情況是),所以很多大公司都會在應用層次再檢測一遍,在一個公司的各個機房內重新做路由。可以說,運營商通過OSPF提供的路由可以滿足大部分使用,但是對性能的極致追求還是需要自己優化。
OSPF(IS-IS)采用dijkstra算法來找最短路徑,由於每個節點都有完整的整個自治區內的節點鏈路狀態,所以dijkstra降本節點放在樹的根部,然後生成樹。兩個節點之間的連接完全是基於鏈路速度,所以這顯然不科學,但是又足夠科學可以使用。當然,你可以強制的手動指定一個節點到另一個節點的鏈路質量,這是一個優化網絡該有的做法。
OSPF有一個對等路由的概念,到一個節點經過幾個開銷相等的節點時,OSPF會傳輸到任意一個,這就是負載均衡。所以支持OSPF的路由器天生的支持簡單的負載均衡。

OSPF數據包類型

外部網關協議

名詞解釋

1、 SPF是目前被各種基於鏈路狀態的路由協議,它采用Dijkstra算法計算最短路徑。其基本思路是根據LSDB裡描述的拓撲信息構建SPT(Shortest Path Tree,最短路徑生成樹),然後將LSDB裡描述的路由信息作為樹上的葉子生成最終路由
2、 ISPF(Incremental SPF,增強SPF算法),主要用於部分拓撲發生變化的情況,在這種情況下不需要重新計算整個網絡拓撲,而只是將變化了的少量拓撲進行修正,從而大大節約路由計算時間。
3、 PRC(Partial Route Calculate,部分路由計算算法),主要用於只是路由信息發生變化的情況,在這種情況下不需要重新計算網絡拓撲,只是根據原有的拓撲生成新的路由信息即可,從而大大節約路由計算時間。
4、 LSP快速擴散。為了加快整個網絡的收斂速度,當收到其它路由器發來的LSP時,如果此LSP比自己LSDB中的要新,按原來RFC協議的實現,則是用一個定時器,定時將LSDB內的LSP擴散出去,所以LSDB的同步會比較緩慢。LSP快速擴散特性改進了這種方式,配置此特性的路由器收到一個或多個比較新的LSP時,在路由計算之前,先將小於指定數目的LSP擴散出去,加快LSDB的同步過程。這種方式在很大程度上可以提高整個網絡的收斂速度
5、 ISIS智能定時器。改進了路由算法後,如果觸發路由計算的間隔較長,同樣會影響網路的收斂速度。使用毫秒級定時器可以縮短這個間隔時間,但如果網絡變化比較頻繁,又會造成過度占用CPU資源。SPF智能定時器既可以對少量的外界突發事件進行快速響應,又可以避免過度的占用CPU。
通常情況下,一個正常運行的IS-IS網絡是穩定的,發生大量的網絡變動的幾率很小,IS-IS路由器不會頻繁的進行路由計算,所以第一次觸發的時間可以設置的非常短(毫秒級)。如果拓撲變化比較頻繁,智能定時器會隨著計算次數的增加,間隔時間也會逐漸延長,避免占用大量的CPU資源。
與SPF智能定時器類似的還有LSP生成智能定時器。在IS-IS協議中,當LSP生成定時器到期時,系統會根據當前拓撲重新生成一個自己的LSP。原有的實現機制是采用間隔時間定長的定時器,不能同時滿足快速收斂和低CPU占用率的需要。為此將LSP生成定時器也設計成智能定時器,使其可以對於突發事件(如接口Up/Down)快速響應,加快網絡的收斂速度。同時,當網絡變化頻繁時,智能定時器的間隔時間會自動延長,避免過度占用CPU資源

Copyright © Linux教程網 All Rights Reserved