一、概述
RIP協議的全稱是路由信息協議(RoutingInformationProtocol),它是一種內部網關協議(IGP),用于一個自治系統(AS)內的路由信息的傳遞。RIP協議是基于距離矢量算法(DistanceVectorAlgorithms)的,它使用“跳數”,即metric來衡量到達目標地址的路由距離。
二、該協議的局限性
1、協議中規定,一條有效的路由信息的度量(metric)不能超過15,這就使得該協議不能應用于很大型的網絡,應該說正是由于設計者考慮到該協議只適合于小型網絡所以才進行了這一限制。對于metric為16的目標網絡來說,即認為其不可到達。
2、該路由協議應用到實際中時,很容易出現“計數到無窮大”的現象,這使得路由收斂很慢,在網絡拓撲結構變化以后需要很長時間路由信息才能穩定下來。
3、該協議以跳數,即報文經過的路由器個數為衡量標準,并以此來選擇路由,這一措施欠合理性,因為沒有考慮網絡延時、可靠性、線路負荷等因素對傳輸質量和速度的影響。
三、RIP(版本1)報文的格式和特性
3.1、RIP(版本1)報文的格式
071531
命令字(1字節)版本(1字節)必須為0(2字節)
地址類型標識符(2字節)必須為0(2字節)
IP地址
必須為0
必須為0
Metric值(1—16)
(最多可以有24個另外的路由,與前20字節具有相同的格式)
“命令字”字段為1時表示RIP請求,為2時表示RIP應答。地址類型標志符在實際應用中總是為2,即地址類型為IP地址。“IP地址”字段表明目的網絡地址,“Metric”字段表明了到達目的網絡所需要的“跳數”。
3.2.RIP的特性
(1)路由信息更新特性:
路由器最初啟動時只包含了其直連網絡的路由信息,并且其直連網絡的metric值為1,然后它向周圍的其他路由器發出完整路由表的RIP請求(該請求報文的“IP地址”字段為0.0.0.0)。路由器根據接收到的RIP應答來更新其路由表,具體方法是添加新的路由表項,并將其metric值加1。如果接收到與已有表項的目的地址相同的路由信息,則分下面三種情況分別對待:第一種情況,已有表項的來源端口與新表項的來源端口相同,那么無條件根據最新的路由信息更新其路由表;第二種情況,已有表項與新表項來源于不同的端口,那么比較它們的metric值,將metric值較小的一個最為自己的路由表項;第三種情況,新舊表項的metric值相等,普遍的處理方法是保留舊的表項。
路由器每30秒發送一次自己的路由表(以RIP應答的方式廣播出去)。針對某一條路由信息,如果180秒以后都沒有接收到新的關于它的路由信息,那么將其標記為失效,即metric值標記為16。在另外的120秒以后,如果仍然沒有更新信息,該條失效信息被刪除。
2)RIP版本1對RIP報文中“版本”字段的處理:
0:忽略該報文。
1:版本1報文,檢查報文中“必須為0”的字段,若不符合規定,忽略該報文。
>1:不檢查報文中“必須為0”的字段,僅處理RFC1058中規定的有意義的字段。因此,運行RIP版本1的機器能夠接收處理RIP版本2的報文,但會丟失其中的RIP版本2新規定的那些信息。
(3)RIP版本1對地址的處理
RIP版本1不能識別子網網絡地址,因為在其傳送的路由更新報文中不包含子網掩碼,因此RIP路由信息要么是主機地址,用于點對點鏈路的路由;要么是A、B、C類網絡地址,用于以太網等的路由;另外,還可以是0.0.0.0,即缺省路由信息。
(4)計數到無窮大(CountingtoInfinity)
前面在RIP的局限性一部分提到了可能出現的計數到無窮大的現象,下面就來分析一下該現象的產生原因與過程。考察下面的簡單網絡:
c(目的網絡)----routerA------routerB
在正常情況下,對于目標網絡,A路由器的metric值為1,B路由器的metric值為2。當目標網絡與A路由器之間的鏈路發生故障而斷掉以后:
c(目的網絡)--||--routerA------routerB
A路由器會將針對目標網絡C的路由表項的metric值置為16,即標記為目標網絡不可達,并準備在每30秒進行一次的路由表更新中發送出去,如果在這條信息還未發出的時候,A路由器收到了來自B的路由更新報文,而B中包含著關于C的metric為2的路由信息,根據前面提到的路由更新方法,路由器A會錯誤的認為有一條通過B路由器的路徑可以到達目標網絡C,從而更新其路由表,將對于目標網絡C的路由表項的metric值由16改為3,而對于的端口變為與B路由器相連接的端口。很明顯,A會將該條信息發給B,B將無條件更新其路由表,將metric改為4;該條信息又從B發向A,A將metric改為5……最后雙發的路由表關于目標網絡C的metric值都變為16,此時,才真正得到了正確的路由信息。這種現象稱為“計數到無窮大”現象,雖然最終完成了收斂,但是收斂速度很慢,而且浪費了網絡資源來發送這些循環的分組。
另外,從這里我們也可以看出,metric值的最大值的選擇實際上存在著矛盾,如果選得太小,那么適用的網絡規模太小;如果選得過大,那么在出現計數到無窮大現象的時候收斂時間會變得很長。
3.3.為了提高RIP性能的兩項措施
3.3.1.水平分割
在上面的“計數到無窮大”現象中,產生的原因是A、B之間互相傳送了“欺騙信息”,那么針對這種情況,我們自然會想到如果能將這些“欺騙信息”去掉,那么不就可以在一定程度上避免“計數到無窮大”了嗎。水平分割正是這樣一種解決手段。
“普通的水平分割”是:如果一條路由信息是從X端口學習到的,那么從該端口發出的路由更新報文中將不再包含該條路由信息。
“帶毒化逆轉的水平分割”是:如果一條路由信息是從X端口學習到的,那么從該端口發出的路由更新報文中將繼續包含該條路由信息,而且將這條信息的metric置為16。
“普通的水平分割”能避免欺騙信息的發送,而且減小了路由更新報文的大小,節約了網絡帶寬;“帶毒化逆轉的水平分割”能夠更快的消除路由信息的環路,但是增加了路由更新的負擔。這兩種措施的選擇可根據實際情況進行選擇。
3.3.2.觸發更新
上面的“水平分割”能夠消除兩臺路由器間的欺騙信息的相互循環,但是當牽涉到三臺或者以上的路由器時,效果就有限了。考察下面的網絡:
+---++----++-----+/-----
|||C+-------|D|-----||E||
|A+------|||+----||
+-+-++----++---+-+-----/
|--|
|--|
|--|
+----+|
|||
|B+-----------------------
||
+----+
E是目標網絡
針對目標網絡,各路由器的路由信息分別如下:
A:3C
B:2D
C:2D
D:1直連
當D與目標網絡之間發生故障中斷以后,B和C都能正確的從D得到網絡不可達的信息,但是,從上面的路由信息中可以看出,A雖然不會給C發送錯誤信息,但是A可能在未收到網絡不可達信息之前就給B發送了路由信息,讓B錯誤的認為可以通過A到達目標網絡,繼而又會出現“計數到無窮大”的現象。
觸發更新就是為了針對上述情況進行的一種改善,它的具體實現措施是:路由器一旦察覺到網絡變化,就盡快甚至是立即發送更新報文,而不等待更新周期結束。只要觸發更新的速度足夠快,就可以大大的防止“計數到無窮大”的發生,但是這一現象還是有可能發生的。
使用了觸發更新以后,當網絡拓撲發生變化的時候,網絡中會出現類似于“多米諾骨牌”的更新報文潮流,并最后中止于從未發生變化的路徑到達目標網絡的路由器。
3.4.RIP中的4個定時器
RIP中一共使用了4個定時器:updatetimer,timeouttimer,garbagetimer,holddowntimer。
Updatetimer用于每30秒發送路由更新報文。
Timeouttimer用于路由信息失效前的180秒的計時,每次收到同一條路由信息的更新信息就將該計數器復位。
Garbagetimer和holddowntimer同時用于將失效的路由信息刪除前的計時:在holddowntimer的時間內,失效的路由信息不能被接收到的新信息所更新;在garbagetimer計時器超時后,失效的路由信息被刪除。
另外,在觸發更新中,更新信息會需要1到5秒的隨機延時以后才被發出,這里也需要一個計時器。
四、RIP版本2簡介
RIP版本2的報文格式如下:
071531
命令字(1字節)版本(1字節)路由域(2字節)
0xFFFF(2字節)驗證類型(2字節)
驗證(16字節)
地址類型標識符(2字節)路由標簽(2字節)
IP地址
子網掩碼
下一跳IP地址
Metric值(1—16)
(最多可以有24個另外的路由,與前20字節具有相同的格式)
版本2的RIP使用了版本1中“必須為0”的字段,增加了一些對于路由的有用信息,其主要新添的特性如下:
(1)報文中包含子網掩碼,可以進行子網路由
(2)支持明文/MD5驗證
(3)報文中包含了下一跳IP,為路由的選優提供了更多的信息。


