C# 設計模式(21)狀態模式
RIP的工作原理
RIP(Routing Information Protocol)是一種內部閘道器協議(IGP),其中文名是路由資訊協議。RIP是一種分散式的基於距離向量的路由選擇協議。
RIP協議要求網路中的每一個路由器都要維護從它自己到其他所有目的網路的距離記錄,即距離向量。這裡的“距離”的含義是:從當前路由器到目的路由器的路徑中所經過的路由器的數量加1。因此,RIP協議的“距離”又稱"跳數"(hop count),因為每經過一個路由器,跳數加一。RIP協議認為最好路由路徑就是它通過的路由器的數目是最少的。
RIP允許一條路徑最多包含15個路由器。因此“距離”大於等於16便相當於不可達。可見RIP協議只適用於小型網路。
RIP協議的特點
-
僅與相鄰的路由器交換資訊(和誰交換資訊?);
-
路由器之間交換的是自己的路由表(交換什麼資訊?);
-
按固定的時間間隔交換資訊(什麼時候交換資訊?)。
RIP路由表中的主要資訊是:到達某個網路的距離與下一跳地址。如下圖所示:
距離向量演算法
對於每一個相鄰路由器傳送過來的RIP報文,進行如下操作:
(1) 對相鄰路由器B發過來的RIP報文,修改該報文(X的路由表)中的所有表項。將“下一跳”欄位中的地址都改為B,並把所有“距離”欄位的值加1。
該步操作如下圖所示:
(2) 對修改後的RIP報文中的每一項,進行如下步驟:
① 若本路由器的路由表中沒有目的網路N,則把該項新增到路由表中;
② 否則,若網路N的下一跳地址為B,則用該表項替代(因為路由資訊更新了);
③ 如網路N的下一跳地址不為B,則將本路由器中網路N表項的距離D與該表項的距離d比較,若\(d<D\),則用改表項替代(發現了更短的路徑);
④ 否則,什麼都不做。
(3) 若超過3分鐘還未收到相鄰路由器的路由表,則將此路由器標記未不可達,即將距離設定為16。
距離向量演算法的基礎是Bellman-Ford演算法,其要點是:設X是節點A到B的最短路徑上的一個節點。若將路徑\(A\rightarrow B\)
RIP協議讓一個自治系統(一個網路)中的所有路由器都與相鄰的路由器定期交換路由資訊,並不斷更新其路由表,使得每一個路由器到每一個目的網路的路由都是最短的。
RIP報文格式
RIP報文示意圖
RIP報文中的欄位
欄位 | 描述 |
---|---|
命令(Command) | 指出了報文的意義 |
版本(Version) | 指出RIP的版本 |
必為0 | 為了4位元組對齊,填充0 |
地址族識別符號(Address Family) | 標誌所使用的地址協議 |
路由標記 | 指出自治系統號 |
網路地址 | 目的地址 |
子網掩碼 | 如名所示 |
下一跳路由器 | 如名所示 |
距離 | 從當前路由器到達目的路由器的距離 |
模擬模擬抓取RIP報文
使用ENSP
模擬:
使用wireshark
抓包得:
好訊息傳得快,壞訊息傳得慢
RIP存在一個問題:當網路出現故障時,要經過比較長的時間才能將此資訊傳送到所有的路由器。
何以見得?舉個例子,現在有三個網路\(N_1,N_2,N_3\),使用兩個路由器\(R_1,R_2\)相連線,如下圖所示:
現在網路\(N1\)出現故障,導致R1無法到達網路\(N_1\),如下圖所示:
於是乎,路由器\(R_1\)將到網路\(N_1\)的距離改為16(即不可達)。存在著這樣一種情況,\(R1\)可能要經過30秒後才把更新資訊傳送給\(R_2\)。而\(R_2\)可能已經先把自己的路由表傳送給了\(R_1\),其中有“\(N_1\),2,\(R_1\)”這一項。\(R_1\)收到報文後,誤以為可經過\(R_2\)到達網路\(N_1\),於是將收到的“\(N_1\),2,\(R_1\)”改為“\(N_1\),3,\(R_2\)”並放入自己的路由表。然後\(R_1\)又把更新的資訊傳送給\(R_2\),結果\(R_1\)與\(R_2\)相互以為對方能夠到達\(N_1\),便一直如此更新彼此的路由表,最後直到該表項的距離欄位到達16才停止。這就是“好訊息傳得快,壞訊息傳得慢”的含義。
總結
RIP的優點
實現簡單,開銷較小。
RIP的缺點
- RIP限制了網路的規模,因為它能使用的最大距離為16;
- 使用RIP的路由器交換的是完整的路由表,因而隨著網路規模的擴大,開銷也隨之增加;
- “壞訊息傳得慢”這個特點,使得更新過程收斂時間過長。
因此對於規模較大的協議,不宜使用RIP協議,而應使用OSPF協議。目前在規模較小的網路中,使用RIP協議的仍然佔多數。