這個系列主要會介紹一些計算機網絡體系中“看上去稍有些復雜”但“一旦理解了又會很容易”的內容,我會嘗試通過示意圖/動圖的方式對概念進行盡量直觀的詮釋,如果能夠對大家學習計算機網絡有所啟發的話就最好了。
分層次的路由選擇協議
互聯網采用分層次的路由選擇協議。原因是:
- 互聯網的規模非常大。如果讓所有的路由器知道所有的網絡應怎樣到達,則這種路由表將非常大,處理起來也太花時間。
- 許多單位不願意外界了解自己單位網絡的布局細節和本部門所采用的路由選擇協議(這屬於本部門內部的事情),但同時還希望連接到互聯網上。
自治系統 AS (Autonomous System)
定義:在單一的技術管理下的一組路由器,而這些路由器使用一種 AS 內部的路由選擇協議和共同的度量以確定分組在該 AS 內的路由,同時還使用一種 AS 之間的路由選擇協議用以確定分組在 AS之間的路由。
盡管一個 AS 使用了多種內部路由選擇協議和度量,但重要的是一個 AS 對其他 AS 表現出的是一個單一的和一致的路由選擇策略。
兩大類路由選擇協議
“路由器”和“網關”在這里可以視作同義詞。
內部網關協議 IGP (Interior Gateway Protocol)
- 在一個自治系統內部使用的路由選擇協議
- 具體的協議有多種,如接下來會介紹的RIP和OSPF
外部網關協議 EGP (External Gateway Protocol)
- 用於將路由選擇信息傳遞到另一個自治系統中
- 目前使用的最多的是 BGP-4
內部網關協議 RIP
路由信息協議 RIP (Routing Information Protocol) 是內部網關協議 IGP 中最先得到廣泛使用的協議。
RIP 是一種分布式的、基於距離向量的路由選擇協議。
RIP 協議中的“距離”也稱為“跳數”(hop count),因為每經過一個路由器,跳數就加 1。(這里的“距離”實際上就是指“最短距離”)
RIP 允許一條路徑最多只能包含 15 個路由器。“距離”的最大值為 16 時即相當於不可達。
RIP協議的特點
- 僅和相鄰路由器交換信息
- 交換的信息是當前本路由器所知道的全部信息,即自己的路由表
- 按固定的時間間隔交換路由信息
- *“好消息傳播得快,壞消息傳播得慢”
RIP報文
以目前廣泛使用的RIP version2為例,簡單了解一下RIP報文的組成:
- RIP2 報文由首部和路由部分組成。
- RIP2 報文中的路由部分由若干個路由信息組成。每個路由信息需要用 20 個字節。地址族標識符(Address Family Identifier)字段用來標志所使用的地址協議。
- 路由標記(Route Tag)填入自治系統的號碼,這是考慮使 RIP 有可能收到本自治系統以外的路由選擇信息。
- 再后面指出某個網絡地址(IP Address)、該網絡的子網掩碼(Subnet Mask)、下一跳路由器地址(Next Hop)以及到此網絡的距離(Metric)。
- 一個 RIP 報文最多可包括 25 個路由。
路由表的建立與更新
距離向量算法
路由器收到相鄰路由器(其地址為 X)的一個 RIP 報文:
(1) 先修改此 RIP 報文中的所有項目:把“下一跳”字段中的地址都改為 X,並把所有的“距離”字段的值加 1。
(2) 對修改后的 RIP 報文中的每一個項目,重復以下步驟:
若項目中的目的網絡不在路由表中,則把該項目加到路由表中。
否則
若下一跳字段給出的路由器地址是同樣的,則把收到的項目替換原路由表中的項目。
否則
若收到項目中的距離小於路由表中的距離,則進行更新,
否則,什么也不做。
(3) 若 3 分鍾還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達路由器,即將距離置為 16(表示不可達)。
(4) 返回。
文字敘述看着有點累,不過理解了“不同路徑選短的,同樣路徑選新的”的思路就會很容易。
RIP只與相鄰路由交換信息不可避免會帶來路由更新的一類延遲,即之前提到的“好消息傳得快,壞消息傳得慢”。
“好消息傳得快,壞消息傳得慢”實際上是信息傳送延遲造成路由器的“誤判”
例如:
R1原本直接連接NET-A(可直接交付),但NET-A突然出故障,變為不可達。
R1中關於NET-A不可達的更新還沒有傳遞給連接着R1的路由R2,此時R2仍以為可以通過R1達到NET-A,便向R1發送<NET-A,2,R2>的路由表;
R1收到后以為R2可以到達NET-A(其實已經不行了),便更新自己的路由表為<NET-A,3,R2>,並將更新發送出去;
R2收到更新后將自己的路由表更新為<NET-A,4,R1>,並將更新發送出去;
如此來來回回直到兩個路由器的路由表跳數都更新至16才確定了NET-A不可達。
為了克服RIP的缺點,我們便開發出了OSPF協議。
內部網關協議 OSPF
開放最短路徑優先協議,即OSPF(Open Shortest Path First),如上所述,是為克服 RIP 的缺點在 1989 年開發出來的。
OSPF協議的特點
- 向本自治系統中所有路由器發送信息,這里使用的方法是洪泛法
- 發送的信息就是與本路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分信息
- “鏈路狀態”就是說明本路由器都和哪些路由器相鄰,以及該鏈路的“度量”(metric)。
- 只有當鏈路狀態發生變化時,路由器才用洪泛法向所有路由器發送此信息
- OSPF 的更新過程收斂得快,這是它非常重要的一個優點,也是它彌補RIP不足的關鍵。
鏈路狀態數據庫(link-state database)
由於各路由器之間頻繁地交換鏈路狀態信息,因此所有的路由器最終都能建立一個鏈路狀態數據庫。
這個數據庫實際上就是全網的拓撲結構圖,它在全網范圍內是一致的(這稱為鏈路狀態數據庫的同步)。
同時,為了使 OSPF 能夠用於規模很大的網絡,OSPF 將一個自治系統再划分為若干個更小的范圍,叫做區域。
划分區域后,利用洪泛法交換鏈路狀態信息的范圍局限於每一個區域而不是整個的自治系統。
在一個區域內部的路由器只知道本區域的完整網絡拓撲,而不知道其他區域的網絡拓撲的情況。
OSPF 使用層次結構的區域划分。在上層的區域叫做主干區域 (backbone area)。
主干區域的標識符規定為0.0.0.0,用來連通其他在下層的區域。
OSPF還有一點與RIP不同,即OSPF 不用 UDP 而是直接用 IP 數據報傳送。
OSPF 構成的數據報很短,這樣做可減少路由信息的通信量。
OSPF有五種分組類型
下圖簡單說明了OSPF的五種分組類型以及它們所能完成的操作
外部網關協議 BGP
BGP 是不同自治系統的路由器之間交換路由信息的協議。 默認為當前較新的版本BGP-4。
互聯網的規模太大,使得自治系統之間路由選擇非常困難。對於自治系統之間的路由選擇,要尋找最佳路由是很不現實的。
因此,邊界網關協議BGP只能是力求尋找一條能夠到達目的網絡且比較好的路由(不能兜圈子),而並非要尋找一條最佳路由。
BGP發言人
每一個自治系統的管理員要選擇至少一個路由器作為該自治系統的“** BGP 發言人**” (BGP speaker)。通過它與其他自治系統(中的 BGP 發言人)交換路由信息。
BGP交換路由信息
一個 BGP 發言人與其他自治系統中的 BGP 發言人要交換路由信息,就要先建立 TCP 連接,然后在此連接上交換 BGP 報文以建立 BGP 會話(session),利用 BGP 會話交換路由信息。
使用 TCP 連接交換路由信息的兩個 BGP 發言人,彼此成為對方的鄰站(neighbor)或對等站(peer)。
BGP所交換的網絡可達性的信息就是要到達某個網絡所要經過的一系列 AS。
當BGP發言人互相交換了網絡可達性的信息后,各BGP發言人就根據所采用的策略從收到的路由信息中找出到達各 AS 的較好路由。
在眾多路由選擇協議中,BGP是為數不多的使用TCP作為傳輸協議的路由選擇協議。
BGP有四種分組類型
- 打開 (OPEN) 報文,用來與相鄰的另一個BGP發言人建立關系。
- 更新 (UPDATE) 報文,用來發送某一路由的信息,以及列出要撤消的多條路由。
- 保活 (KEEPALIVE) 報文,用來確認打開報文和周期性地證實鄰站關系。
- 通知 (NOTIFICATION) 報文,用來發送檢測到的差錯。
真的很希望能夠和大家交流啊(有任何想法/意見/建議的話都可以在留言區留言~