Linux核心工程導論 網路 路由 路由原理

2021-07-09 15:05:06 字數 4727 閱讀 8245

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的路由器天生的支援簡單的負載均衡。

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資源

Linux核心project導論 前言

想要研究linux核心。使用linux核心,首先要知道linux核心能做到什麼,提供了什麼。我看過非常多剛開始學習的人一進入公司就開始使用linux核心開發核心模組。使用的不管是通訊方式 記憶體介面還是裝置介面仍都是核心早已淘汰掉的。原因是他們一般是直接在網路上搜尋來怎樣完畢工作的。但他們手中的卻是...

網路工程 靜態路由 預設路由筆記

幾個注意點 1 配置loopback介面 虛介面 命令 inte ce loopback 0 2147483647 ip add 網路位址 掩碼 例如配置r1的虛介面 inte ce loopback 1 ip add 1.1.1.1 255.255.255.0 2 配置靜態路由 ip route ...

Linux核心分析 網路 四 路由表

路由表 在核心中存在路由表 fib table hash 和路由快取表 rt hash table 路由快取表主要是為了加速路由的查詢,每次路由查詢都會先查詢路由快取,再查詢路由表。這和 cache 是乙個道理,快取儲存最近使用過的路由項,容量小,查詢快速 路由表儲存所有路由項,容量大,查詢慢。首先...