郝 賢 云
(江西應用工程職業學院 計算機信息工程系,江西 萍鄉 337042)
動態路由協議在當今網絡通信過程中發揮著至關重要的作用,其設計目標是為了使網絡中的路由器能夠交換路由信息,并快速適應網絡結構的變化。如果按作用范圍可進一步劃分為:內部網關協議(通常在自治系統內部部署,用于交換自治系統內的路由信息)與外部網關協議(通常在自治系統邊界路由器中部署,用于交換兩個自治系統內的路由信息)。眾所周知常見的路由信息協議[1-3](Routing Information Protocol,RIP)就屬于內部網關協議的一種,具有配置簡單便捷、占用網絡帶寬小、支持流量負載均衡、支持IPV4與IPV6、支持明文與加密認證、支持可變長子網掩碼(Variable Length Subnetwork Mask,VLSM)、支持自動路由匯總等優點。但是與其他內部網關協議如OSPF、EIGRP相比,RIP路由協議不僅在可擴展性與收斂速度方面呈現出明顯的劣勢,而且其度量值由跳數來決定,且最高跳數只有15跳的特性使其只適合在小型網絡中部署使用。(如果跳數為16跳及以上,則會被認為路由不可達)RIP路由協議一共有RIPv1、RIPv2、RIPng 3個版本:早期版本RIPv1安全性與功能性均較差,目前已被RIPv2版本所代替。首先,它不支持安全認證;其次,它僅對有類網絡提供支持;第三,它采用廣播的方式進行報文發送(這勢必會占用一定的網絡帶寬)。后期版本RIPv2可以看作是對RIPv1功能的擴展,使RIP路由協議更適應當代IPv4網絡。它不僅支持可變長子網掩碼、安全認證等功能,而且還可以對路由條目進行標記。最顯著的特點是其既可以使用組播方式又可以使用廣播方式發送報文信息,默認情況下使用組播方式發送報文信息。RIPng與RIPv2不僅工作方式類似,而且也屬于無類路由協議。只是它的配置過程要比RIPv2繁瑣復雜,且只能在IPv6網絡環境中部署使用。
以運行RIP協議的路由器A與路由器B舉例說明。當 RIP路由器A從與之相鄰的RIP路由器B處獲得RIP報文后,(此RIP報文中包含路由器B的完整路由表),需要對此報文的下一跳字段和跳數字段進行修改:下一跳字段的地址要更改為路由器B與路由器A互連的接口地址;跳數字段的具體數值則需要加1。更改后的報文需要和路由器A中的路由表進行比對:如果在路由器A的路由表與更改后的報文中同時存在去往某個目的網絡的路由,則比較二者的跳數(具體相關規則如下:更改后的報文到達目的網絡的跳數,大于路由器A的路由表中已有到達目的網絡的跳數,則路由器A的路由表不需要進行更新;否則路由器A的路由表需要用更改后報文中到達目的網絡的路由替換原有路由條目)。如果去往某個目的網絡的路由只在更改后的報文中存在,則路由器A會認為發現了新路由,從而將此路由條目加入到自己的路由表中。需要注意的是:RIP協議交換路由信息這種行為,只會在兩臺相鄰RIP路由器之間發生。如果RIP路由器在更新計時器設定的時間范圍內沒有收到相同路由的更新信息,則會認為該路由已不可達,并啟動垃圾收集定時器。一旦在垃圾收集定時器設定的時間范圍內,路由器仍舊沒有收到該條路由的更新信息,那么就會將此條路由從路由表中徹底刪除。
RIP路由協議的部署與配置過程并不復雜,通常RIP路由器只需宣告與之相連的主類網絡即可,受其收斂速度較慢的影響,網絡中的RIP路由器往往不能在相近的時間內完成對路由表的更新,造成路由環路的產生。為盡可能的避免這種情況的出現 ,RIP路由協議采用了水平分割、毒性逆轉等多種防范機制。水平分割對于防止路由環路、降低路由更新信息對網絡帶寬的占用率有著明顯的作用,其核心思想為:RIP路由器從某個接口收到路由更新信息后,此路由更新信息將不允許從這個接口再發送回去。毒性逆轉可使RIP路由器對無效路由的處理,不再受路由無效計時器規定時間的制約,近而可快速處理網絡中存在的路由環路。
在GNS3網絡仿真平臺上,搭建一個由路由器K1、K2、K3組成的小型RIP網絡,并給出路由器K2的相關配置命令。(路由器K1、K3的配置命令讀者參考K1即可)。網絡結構如圖1所示。

圖1 RIP協議基本配置
(1)路由器K2的相關配置
k2(config)#int e1/0
k2(config-if)#ip add 211.68.202.2 255.255.255.0
k2(config)#int loopback 1
k2(config-if)#ip add 211.68.194.1 255.255.255.0
k2(config)#router rip
k2(config-router)#ver 2
k2(config-router)# network 211.68.202 0
k2(config-router)# network 211.68.194.0
為驗證RIP協議配置是否正確,以路由器K2為例,使用sh ip proto命令查看路由器K2上RIP協議的工作狀態。如圖2所示。從中可以得出以下幾點結論:路由器K2只運行了RIP這一種內部網關路由協議(使用的版本為Version 2),且該協議所通告路由的管理距離為120,路由更新計時器所設定的路由更新頻率為30 s一次,確定路由為無效的等待時間為180 s,最多可支持4條鏈路負載均衡,且沒有其他路由協議重分布到RIP自治域中;路由器K2所有接口的入方向與出方向均沒有配置訪問控制列表;路由器K2從鄰居路由器K1的e1/0 接口(接口地址為211.68.202.1)學習RIP路由信息。
路由器K1、K2、K3在按順序啟動過程中,以路由器K1的e1/0接口為源,通過網絡分析軟件捕獲了K1--K2鏈路上的RIP報文如圖3所示。由圖3可見:路由器K1通過e1/0接口,使用組播地址224.0.0.9,發送編號為10的RIP請求報文。路由器K2在接收到路由器K1發送的RIP請求報文后,以單播的方式發送編號為11的報文作為對其的回應,該報文中包含211.68.194.0網段的路由信息。緊接著路由器K2以組播的方式發送編號為12的RIP更新報文,該報文中同樣包含211.68.194.0網段的路由信息。此時,路由器K1已學習到全網路由,并以組播的方式發送編號為19的RIP更新報文,該報文中包含211.68.195.0網段的路由信息。至此路由器K2也學習到了全網路由。

圖2 路由器K2上RIP協議的工作狀態

圖3 K1-K2鏈路上的RIP報文
運行RIP協議的路由器通常會在網絡中以30s一次的頻率,以廣播或組播的方式發送大量的路由更新信息。這其中有一部分路由更新信息是RIP路由器不必要發送的,這樣不僅會造成網絡帶寬被大量占用,也給網絡安全帶來極大的隱患。黑客有可能截獲網絡中的路由更新信息并對其進行修改,再將偽造的路由更新信息發往RIP路由器,導致路由表的度量值發生錯誤。為有效避免這種情況的發生,可以將RIP路由器的接口均設置為被動接口(被動接口不允許發送路由更新報文,主要用來防止其它路由器學習到本地路由器中的路由信息),路由器之間互聯的串口設置為單播更新,提高網絡的安全性,減少不必要的帶寬損耗。
為讓讀者能夠輕松掌握RIP協議被動接口與單播更新的具體配置方法,在GNS3網絡仿真平臺上,搭建一個由路由器R1、R2組成的RIP網絡,路由器之間使用單播的方式發送路由更新信息,且所有接口均設置為被動接口。網絡結構如圖4所示。下面給出路由器R1、R2的相關配置命令。

圖4 RIP協議被動接口與單播更新
(1)路由器R1的被動接口配置
R1(config)#router rip
R1(config-router)#passive-interface def //路由器R1中的所有接口均配置為被動接口
R1(config-router)#network 192.168.30.0
R1(config-router)#network 211.68.195.0
(2)路由器R2的被動接口配置
R2(config)#router rip
R2(config-router)#passive-interface def
R2(config-router)#network 192.168.40.0
R2(config-router)#network 211.68.195.0
路由器R1、R2的被動接口配置完成后,其各自的S2/0接口將無法使用廣播或組播的方式發送路由更新信息,但該接口仍可以接收路由更新信息。此時,由于路由器R1、R2沒有進行單播更新配置,路由器R1、R2的路由表中只有自己的直連路由。以路由器R1為例,查看其路由表如圖5所示。
(3)路由器R1的單播更新配置
R1(config-router)#neigh 211.68.195.2
(4)路由器R2的單播更新配置
R2(config-router)#neigh 211.68.195.1
路由器R1、R2的單播更新配置完成后,其各自的S2/0接口將使用單播的方式發送路由更新信息,兩臺路由器的路由表中存在全網路由。就路由器R1而言,其路由表中新增加了到達192.168.40.0網段的路由;對于路由器R2來說,其路由表中新增加了到達192.168.30.0網段的路由。以路由器R1為例,再次查看其路由表如圖6所示。

圖5 被動接口配置完成后路由器R1的路由表

圖6 單播更新配置完成后路由器R1的路由表
為能有效節省網絡帶寬資源以及提高網絡收斂速度,RIP協議改進出了一種新的機制用于發送路由更新數據包,即觸發更新(RIP路由器僅在有路由表發生變化時發送的RIP路由通告,且僅攜帶本地路由表中有變化的路由信息)。需要注意的是:RIP觸發更新只能配置在點到點的鏈路中,只有鏈路兩端的路由器都配置了觸發更新,這種新的路由更新數據包發送機制才會生效。配置了觸發更新的兩臺RIP路由器,收到的路由信息會被標注為permanent。
在GNS3網絡仿真平臺上,搭建了一個由路由器R1、R2組成的RIP網絡。兩臺路由器使用串口S2/0進行互聯,并分別啟用RIP觸發更新機制。網絡結構如圖7所示。
下面給出路由器R1、R2的相關配置命令。
(1)路由器R1的RIP觸發更新配置
R1(config)#int s2/0

圖7 RIP協議觸發更新
R1(config-if)#ip rip trig
(2)路由器R2的RIP觸發更新配置
R2(config)#int s2/0
R2(config-if)#ip rip trig
為了驗證在路由器R1、R2上配置的RIP觸發更新是否成功,以路由器R1為例,使用debug ip rip命令查看RIP協議的更新過程。如圖8所示。從中可以看到:在路由器R1、R2上配置的RIP觸發更新已成功開啟。路由器R1在S2/0接口與LOOPBACK 1接口上發送RIP觸發更新請求,向路由器R2的S2/0接口發送觸發更新。在從路由器R2的S2/0接口收到觸發更新后,路由器R1會向路由器R2的S2/0接口發送一個編號為5的確認。192.168.40.0 in 1 hops 為從路由器R2的S2/0接口收到的路由條目。

圖8 RIP協議更新過程
為提高網絡的可靠性與安全性,避免偽造的路由更新被路由器接收,RIP提供了以下2種身份認證方式:明文認證和密文認證(只有RIP協議版本2支持身份認證功能,而RIP協議版本1是不支持身份認證功能的)。但是RIP協議版本2支持的身份認證均為單向,舉例來說:兩臺RIP路由器A與B,路由器A對路由器B進行了認證,并不等于路由器B對路由器A也進行了認證。因此路由器A可以接收來自路由器B的路由更新信息,但是路由器B不能接收路由器A的路由更新信息。需要注意的是:無論進行明文認證還是密文認證,兩臺RIP路由器都需要先定義鑰匙串名(兩臺路由器的鑰匙串名可以相同也可以不同)和具體的鑰匙即KEY值(可定義多個KEY值)。路由器A對B進行明文認證時:路由器B會向路由器A發送不帶ID信息的最小ID值KEY;路由器A收到路由器B發來的KEY后,會與自己的KEY進行比對,只要能夠匹配上就認證通過;路由器A對B進行密文認證時:路由器B會向路由器A發送帶ID信息的最小ID值KEY;路由器A收到路由器B發來的KEY后,會在定義的鑰匙串中查找是否有相同ID 的KEY,如果存在并且KEY值相同則認證通過,否則不予通過。如果沒有相同ID 的KEY,則向后查找一次與之最相近ID的KEY(如果存在并且KEY值相同則認證通過,否則不予通過)。
在GNS3網絡仿真平臺上,搭建了一個由路由器A、B組成的RIP網絡。兩臺路由器使用串口S2/1進行互聯,并分別啟用明文認證與密文認證。網絡結構如圖9所示。下面給出路由器A、B的相關配置命令。
(1)RIP協議明文認證配置
A(config)#key chain yangyang

圖9 RIP協議認證
A(config-keychain)#key 1
A(config-keychain-key)#key-string gyy
A(config)#int s2/1
A(config-if)#ip rip authent mode text
A(config-if)#ip rip authent key-chain yangyang
B(config)#key chain shenb
B(config-keychain)#key 1
B(config-keychain-key)#key-string gyy
B(config)#int s2/1
B(config-if)#ip rip authent mode text
B(config-if)#ip rip authent key-chain shenb
(2)RIP協議密文認證配置
A(config)#int s2/1
A(config-if)#ip rip authent mode MD5
B(config)#int s2/1
B(config-if)#ip rip authent mode MD5
負載均衡有助于提高網絡的靈活性與可靠性。RIP協議默認支持4條鏈路的負載均衡,但是通過maximum-paths命令可實現支持16條鏈路的負載均衡。另外,需要說明的是:RIP協議可支持2種方式的負載均衡,即基于目的地址的負載均衡(需要在路由器中開啟CEF)和基于分組的負載均衡(需要路由器關閉CEF與路由交換高速緩存)。其中,基于目的地址的負載均衡可根據數據包目的地址的不同,選擇不同的路徑進行轉發。這種方式的負載均衡工作效率更高,因此在實際工作中普遍采用這種方式的負載均衡。
為讓讀者能夠輕松掌握RIP協議負載均衡的具體配置方法,在GNS3網絡仿真平臺上,搭建了一個由路由器R1、R2、R3組成的RIP網絡,路由器R1與路由器R2通過S2/0接口互聯,路由器R3與路由器R1通過S2/1接口互聯,路由器R3與路由器R2通過S2/2接口互聯。當路由器R1采用基于目的地址的負載均衡時:訪問IP地址192.168.70.1的數據包走S2/0接口,訪問IP地址192.168.70.2的數據包走S2/1接口;當路由器R1采用基于分組的負載均衡時:訪問IP地址192.168.70.1的數據包一半走S2/0接口,另一半走S2/1接口。網絡結構如圖10所示。下面給出路由器R1的相關配置命令。

圖10 RIP協議負載均衡
(1)路由器R1基于目的地址的負載均衡配置
R1(config)#router rip
R1(config)#ip cef
R1(config)#int s2/0
R1(config-if)#ip route-cache
R1(config)#int s2/1
R1(config-if)#ip route-cache
(2)路由器R1基于分組的負載均衡配置
R1(config)#router rip
R1(config)#no ip cef
R1(config)#int s2/0
R1(config-if)#no ip route-cache
R1(config)#int s2/1
R1(config-if)#no ip route-cache
上述配置完成后,在路由器R1中使用擴展PING命令測試基于分組的負載均衡配置效果。
R1#ping
Protocol [ip]:
Target IP address:192.168.70.1
Repeat count [2]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]:y
Source address or interface:192.168.20.1
Sending 2,100-byte ICMP Echos to 192.168.70.1,timeout is 2 seconds:
Packet sent with a source address of 192.168.20.1
Reply to request 0 (36 ms).Received packet has options
Total option bytes= 40,padded length=40
Record route:
(192.168.60.1)
(192.168.70.1)
(192.168.60.2)
(192.168.20.1)<*>
(0.0.0.0)
(0.0.0.0)
End of list
Reply to request 1 (116 ms).Received packet has options
Total option bytes= 40,padded length=40
Record route:
(192.168.50.1)
(192.168.70.2)
(192.168.70.1)
(192.168.60.2)
(192.168.20.1)<*>
(0.0.0.0)
(0.0.0.0)
End of list
從中可以看到:當以路由器R1上的LOOPBACK 1接口IP地址為源地址訪問目標IP地址192.168.70.1時,會有一半的數據包先從S2/0接口發出,到達訪問目標后,再經路由器R1的S2/0接口返回源地址。剩下的另一半數據包會先從S2/1接口發出,然后經路由器R3的S2/2接口到達訪問目標,而后同樣經路由器R1的S2/0接口返回源地址。至此可以說,路由器R1已成功實現了基于分組的負載均衡。
RIP路由協議相對于其它動態路由協議不僅配置過程較為簡單,而且也便于管理和實施,但是其自身的局限性使其只適用于小型網絡。現實中的網絡往往不局限于部署一種路由協議,更多的是在路由器中部署多種路由協議,通過路由重分布的方式讓不同自治域中的路由可以相互學習。總之,無論部署哪種路由協議都應從網絡性能角度考慮,合理規劃網絡結構以及選擇網絡設備。