1 前言
- 路由信息協議 RIP (Routing Information Protocol) 是內部網關協議 IGP 中最先得到廣泛使用的協議
- 在一個自治系統內,RIP 是一種分佈式的、基於距離向量的路由選擇協議
自治系統:
- 計算機網絡中的自治系統是指能夠自主決定在本系統中應採取某種路由協議的單位
- RIP 協議要求網絡中的每一個路由器都要維護從它自己到其他每一個目的網絡的距離記錄
距離:
- 從一個路由器到直接連接的網絡的距離定義爲 1
- 從一個路由器到非直接連接的網絡的距離定義爲所經過的路由器數加 1
- RIP 協議中的“距離”也稱爲“跳數”(hop count),因爲每經過一個路由器,跳數就加 1
- 這裏的“距離”實際上指的是“最短距離”,RIP 認爲一個好的路由就是它通過的路由器的數目少,即“距離短”
- RIP 允許一條路徑最多隻能包含 15 個路由器,“距離”的最大值爲 16 時即相當於不可達。可見 RIP 只適用於小型互聯網
- RIP 不能在兩個網絡之間同時使用多條路由。RIP 選擇一個具有最少路由器的路由(即最短路由),哪怕還存在另一條高速(低時延)但路由器較多的路由
如上圖:R1距離網1和網2的距離都是1,而R1距離網3的距離是2,距離網4的距離是3
2 RIP協議的三個要點
RIP協議歸根結底就是要更新路由器中的路由表,它採用的更新方式就是通過與其他路由器交換信息來獲取最新的路由信息
- 與誰交換:僅和相鄰的路由器交換信息
- 交換什麼:交換的信息是本路由器當前所知道的全部信息,即自己的路由表
- 何時交換:定時交換路由信息,例如,每隔30秒
3 路由表的建立
- 路由器在剛剛開始工作時,只知道到直接連接的網絡的距離(此距離定義爲 1)。它的路由表是空的
- 以後,每一個路由器也只和數目非常有限的相鄰路由器交換並更新路由信息
- 經過若干次更新後,所有的路由器最終都會知道到達本自治系統中任何一個網絡的最短距離和下一跳路由器的地址
- RIP 協議的收斂 (convergence) 過程較快。“收斂”就是在自治系統中所有的結點都得到正確的路由選擇信息的過程,也就是很快就能達到“最優狀態”
3.1 距離向量算法
距離向量算法就是路由器收到相鄰路由器發來的RIP報文時,他所處理的一個過程,如收到相鄰路由器(其地址爲 X)的一個 RIP 報文:
- 先修改此 RIP 報文中的所有項目:把“下一跳”字段中的地址都改爲 X,並把所有的“距離”字段的值加 1,(因爲只要 X 發過來的路由項我們可以使用,那麼它的下一跳必然要經過 X )
- 對修改後的 RIP 報文中的每一個項目,重複以下步驟:若項目中的目的網絡不在路由表中,則把該項目加到路由表中(因爲通過 X 發過來的RIP報文中表示目的網絡是可以到達的,而原來的路由表中是沒有這一項的,所以現在該目的網絡就變得可以到達了),否則若下一跳字段給出的路由器地址是同樣的,則把收到的項目替換原路由表中的項目(因爲路由表是要更新的,即使路由地址相同,那麼由於給的最新地址是表示當前網絡的一個最新狀態的,所以要替換),否則若收到項目中的距離小於路由表中的距離,則進行更新(因爲原本經過本路由器可以到達目的網絡,現在經過 X 後到達目的網絡距離變短了,所以就更新成下一跳經過 X 到達目的網絡的更短的路徑),否則什麼也不做
- 若 3 分鐘還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記爲不可達路由器,即將距離置爲16(距離爲16表示不可達)
- 返回
距離向量算法的基礎就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法),這個算法的關鍵點如下:
- 設X是結點 A 到 B 的最短路徑上的一個結點
- 若把路徑 A→B 拆成兩段路徑 A→X 和 X→B,則每一段路徑 A→X 和 X→B 也都分別是結點 A 到 X 和結點 X 到 B 的最短路徑
- 簡單來說就是最短路徑上的某兩個節點的路徑,必然是這兩個節點的最短路徑
路由器之間交換信息與路由表更新:
- RIP 協議讓互聯網中的所有路由器都和自己的相鄰路由器不斷交換路由信息,並不斷更新其路由表,使得從每一個路由器到每一個目的網絡的路由都是最短的(即跳數最少)
- 雖然所有的路由器最終都擁有了整個自治系統的全局路由信息,但由於每一個路由器的位置不同,它們的路由表當然也應當是不同的
3.2 路由表更新過程舉例
- 首先把R4發來的路由表修改一下,把每一個目的網絡的距離都+1,這是因爲我們在路由器R6想經過路由器R4到達目的網絡的話,距離必然+1,接下來把下一跳路由器都改成R4,因爲要利用R4轉發的話,下一跳必然要經過R4,修改後的表爲
表4-9(c)
- 把R6的路由表,和修改後的R4路由表綜合起來更新R6的路由表
- 在R4的路由表中有
Net1 4 R4
這一項,它的意思是要向到達Net1
,下一跳到R4,經過距離4就可以到達,而R6的路由表中沒有到達Net1
的路由表項,則直接將該項添加到R6的路由表中 - 在R6的路由表中,到達
Net2
的距離是3且經過的正好是R4,而R4路由表中到達Net2
的距離是5,而每次更新路由表,都反映着整個網絡的最新狀態,則R6要修改Net2
的距離,修改爲5 - 對於
Net3
,在修改後的路由表R4中是Net3 2 R4
,而R6的路由表中是Net3 4 R5
,說明在原R6路由表中到達Net3
的距離是4,不如新更新的路徑短,所以把路由項更新爲最短的項