網路層——AS 內路由選擇協議
在開始閱讀之前,請先閱讀部落格——網路層——路由選擇演算法。
RIP 協議#
跳數#
RIP 協議是分散式的基於 DV 演算法的路由選擇協議,下面我們分析一下 RIP 協議在 DV 演算法的基礎上提出怎樣的封裝。首先 RIP 協議中的距離得到了定義,從一路由器到直接連線的網路的距離定義為 1,到非直接連線的網路距離定義為所經過的路由器數量加 1。由於這個定義,RIP 協議的“距離”也稱之為“跳數”。
最大度量#
在前一篇部落格我們提到的無窮計數的問題,毒性逆轉能夠完全解決無窮計數的問題嗎?答案是否定的,因為當網路規模增大,涉及到了 3 個及以上的更多節點的環路,毒性逆轉將不能探測到故障。對於這個問題,RIP 協議提供瞭解法——定義最大度量。RIP 協議允許一條路徑最多隻能包含 15 個伺服器,若距離等於或大於 16 時將直接不可達。出現無窮計數時,路由器之間相互傳播錯誤的資訊會使最短距離增長到 16,這就到達了最大度量,就可以規避故障鏈路了。
但是這也引發了新的問題,要是 2 個路由器之間的距離本身就超過 16 呢?這沒有辦法,也會被認為是不可達的,因此 RIP 協議無法適用於較大的網際網路。
週期性廣播#
路由器之間將按照固定的時間間隔交換路由資訊,同時當網路拓撲發生變化時也會及時通告拓撲變化之後的路由資訊。
- RIP 協議的其他內容,和 DV 演算法差別不大,這裡不再重複描述。
自治系統#
對於路由選擇演算法來說,我們忽略了很多細節,把複雜的網路抽象成圖結構來描述雖然形象,但是這是一種理想化的說法。在實踐中往往不會使用圖結構加使用統一的路由選擇演算法的同質路由器去進行說明,主要體現在以下 2 個方面:
- 規模:當今因特網由數億臺主機組成,這種規模的主機儲存路由資訊需要大量記憶體。對於所有路由器之間的廣播連通性和鏈路開銷的更新,無疑需要佔用很多的資源和很大的負擔,對於 LS 演算法的計算負擔極其大,DV 演算法更是無法收斂。因此就必須採取一些措施,來縮小計算和儲存路由資訊的規模。
- 管理自制:因特網是 ISP 網路,其中每個 ISP 都有自己的路由網路,因此因特網也可以認為是“網路之網路”。一般來說一個 ISP 總是傾向於按照自己的想法去執行路由器,而且對外保留隱私,隱藏內部的網路結構。因此對於一個組織不僅希望能夠按自己的意願管理網路,也要滿足和其他網路進行通訊的需求。
針對這 2 個問題,可以使用自治系統(AS)來解決,也就是聚合多個處在相同的管理之下的路由器為一個區域,通常來說一個 ISP 中的路由器及其互聯的鏈路構成一個 AS。對於不同的 AS 內的路由器可以執行不同的 AS 內部路由協議,反之相同 AS 中的路由器執行相同的路由選擇演算法並且擁有彼此的資訊。
OSPF 協議#
開放最短路徑優先#
開放最短路徑優先(OSPF) 協議被廣泛用於因特網 AS 內部路由選擇,開放指的是路由選擇協議規範是公眾可用的,而並非屬於某一廠家(例如 Cisco 的 EIGRP 協議到近期才變為開放)。OSPF 協議是一種鏈路狀態協議,它使用洪泛鏈路狀態資訊和
Dijkstra 演算法實現,下面看一些 OSPF 協議的具體實現方式:
鏈路狀態資料庫#
運載 OSPF 協議的所有路由器最終會建立一個鏈路狀態資料庫,這個資料庫包含 3 張表來協同工作:
- 鄰居表:鄰居表之間通過問候報文聯絡,確認相鄰拓撲是否正常;
- 鏈路狀態表:通過交換鄰居表,形成完整的網路拓撲圖,該表在 AS 內的所有路由器是一致的;
- 計算路由表:運載 Dijkstra 演算法,獲得最佳路徑。
接下來我們來看一下路由器和鄰居之間,是怎麼通過這 3 張表進行工作的。
洪泛法#
由於需要讓所有的路由器得到自己的路由資訊,因此需要向 AS 內的所有相鄰路由器傳送資訊。實現這個功能的是洪泛法,路由器通過所有輸出埠向相鄰路由器傳送資訊,而每一個相鄰路由器再把資訊傳送給相鄰的路由器,最終 AS 內的所有路由器都會得到這個路由資訊。
同時 OSPF 協議的洪泛法是可靠地,因為對於任何路由器,收到其他路由器發來的分組之後需要傳送 ACK,這就可以保證路由資訊的傳遞正確。
鏈路權重#
最佳路徑的計算是按照鏈路權重來計算的,鏈路鑽中可以反映開銷、距離、時延和頻寬。這些資訊的配置並非是協議自行生成的,而是通過網路管理員進行配置的。也就是說 OSPF 並不不強制使用的鏈路權重的設定策略,而是讓網路管理員自己決定度量的方式,它提供了一種機制來為路由器確定最低開銷路徑的選擇。
觸發式更新#
路由表的更新並非是週期性的,而是當鏈路狀態發生變化時,路由器才向所有的路由器使用洪泛法傳送資訊。由於這種方式,使得鏈路狀態表更新很快,使得最低開銷路徑的收斂速度加快,同時也可以保證 AS 內的所有路由器的鏈路狀態表一致。
OSPF 資料報#
欄位#
分組型別#
- Hello:發現、維持鄰居路由器的可達性;
- 資料庫描述:向鄰居給出自己的鏈路狀態資料庫中,所有鏈路狀態專案的摘要資訊;
- 鏈路狀態請求:向鄰居請求傳送某些鏈路狀態的詳細資訊;
- 鏈路狀態更新:使用洪泛法對全網更新鏈路狀態;
- ASK:對更新分組的確認。
報文承載#
OSPF 報文由 IP 協議承載,而不是使用 UDP 協議,此時的 IP 資料報的協議欄位為 89。OSPF 報文的篇幅很小,這就可以加快資料報的傳輸速度。
協議優勢#
安全性#
OSPF 協議能夠鑑別 OSPF 路由器之間的交換,僅有收到信任的路由器可以參與 AS 內的 OSPF 協議,因此可以防範入侵者將不正確的資訊注入路由表中。可以使用簡單鑑別或 MD5 鑑別實現,可以驗證分組的真實性。
多條相同開銷路徑#
當到達某目的地的多條路徑具有相同的開銷時,OSPF 協議允許使用多條路徑,這就使得轉發資料報時無需令單一路徑承載所有流量。
單播、多播路由綜合支援#
多播 OSPF(MPSPF)利用現有鏈路資料庫,提供了 OSPF 的簡單拓展,提供了多播路由的選擇。
支援單個 AS 中的層次結構#
OSPF 協議支援大規模 AS 分層,一個 OSPF 自治系統能工層次化地配置多個區域。每個區域都執行自己的 OSPF 鏈路狀態路由選擇演算法,區域內的每臺路由器都向區域內的所有其他路由器廣播鏈路狀態。在層次結構的區域劃分中,上層區域為主幹區域,可以用來連線其他下層區域。主幹區域的路由器叫主幹路由器,而與其它區域通訊則使用區域邊界路由器。
為劃分區域提供支援,可以使得洪泛法交換鏈路狀態資訊的範圍縮小的某一個區域中,這樣可以減少 OSPF 協議在整個網路中的通訊量。