深入淺出圖解【計算機網路】 之 【路由選擇協議】
這個系列主要會介紹一些計算機網路體系中“看上去稍有些複雜”但“一旦理解了又會很容易”的內容,我會嘗試通過示意圖/動圖的方式對概念進行儘量直觀的詮釋,如果能夠對大家學習計算機網路有所啟發的話就最好了。
分層次的路由選擇協議
網際網路採用分層次的路由選擇協議。原因是:
- 網際網路的規模非常大。如果讓所有的路由器知道所有的網路應怎樣到達,則這種路由表將非常大,處理起來也太花時間。
- 許多單位不願意外界瞭解自己單位網路的佈局細節和本部門所採用的路由選擇協議(這屬於本部門內部的事情),但同時還希望連線到網際網路上。
自治系統 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有五種分組型別
下圖簡單說明了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) 報文,用來發送檢測到的差錯。
真的很希望能夠和大家交流啊(有任何想法/意見/建議的話都可以在留言區留言~