路由信息協議(Routing Information Protocol,縮寫:RIP),是一種使用最廣泛的內部網關協議(IGP),屬於網絡層,一種在網關與主機之間交換路由選擇信息的標準。它可以通過不斷的交換信息讓路由器動態的適應網絡連接的變化,這些信息包括每個路由器可以到達哪些網絡,這些網絡有多遠等。
RIP協議有以下特點:
(1)RIP是內部網關協議,使用的是距離矢量算法。
(2)RIP主要有三個版本:
RIPv1:RIPv1使用分類路由,在它的路由更新(Routing Updates)中並不帶有子網的資訊,因此它無法支持可變長度子網掩碼。這個限製造成在RIPv1的網絡中,同級網絡無法使用不同的子網掩碼。
另外,它也不支持對路由過程的認證,使得RIPv1有一些輕微的弱點,有被***的可能。
RIPv2:因爲RIPv1的缺陷,RIPv2在1994年被提出,將子網絡的資訊包含在內,通過這樣的方式提供無類別域間路由,不過對於最大節點數15的這個限制仍然被保留着。針對安全性的問題,RIPv2通過加密達到認證效果。
RIPng:主要是針對IPv6做一些延伸的規範。 RIPng 沒有更新認證。
(3)RIP協議以跳數作爲網絡度量值。
(4)RIP協議採用廣播或組播進行通信,其中RIPv1只支持廣播,而RIPv2除支持廣播外還支持組播。
(5)RIP協議支持主機被動模式,即RIP協議允許主機只接收和更新路由信息而不發送信息。(只收不發)
(6)RIP協議支持默認路由傳播。
(7)RIP協議的網絡直徑不超過15跳,適合於中小型網絡。16跳時認爲網絡不可達。
(8)RIPv1是有類路由協議,RIPv2是無類路由協議,即RIPv2的報文中含有掩碼信息。
RIPv2的特性(實驗)
上文我們提到,RIPv1無法支持可變長度子網掩碼,也不支持認證。這種特性直接導致了RIPv2的提出,並且目前RIPv1幾乎被完全淘汰而不再使用。RIPv2支持路由的自動彙總,支持可變長子網掩碼與認證。下面我們通過模擬實驗來熟悉一下RIPv2的相關特性。
假定有如上兩臺路由器,R1連接了三臺PC(通過配置環回口來模擬)。
1. RIP自動彙總
R1
//配置環回口模擬PC
R1(config)#interface loopback 0
R1(config-if)#ip address 172.16.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 1
R1(config-if)#ip address 172.16.2.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 2
R1(config-if)#ip address 172.16.3.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
//運行RIP協議
R1(config)#router rip
R1(config-router)#version 2
//宣告網段。RIP宣告網段按照主類進行宣告
R1(config-router)#network 172.16.0.0
R1(config-router)#network 192.168.1.0
R1(config-router)#exit
R1(config)#interface f0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R2
R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#network 192.168.1.0
R2(config-router)#exit
R2(config)#interface f0/0
R2(config-if)#ip address 192.168.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
此時,兩臺設備連通性良好。在R2上查看路由條目,可發現得到的路由條目是彙總後的。
R2(config)#do sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
R 172.16.0.0/16 [120/1] via 192.168.1.1, 00:00:24, FastEthernet0/0
C 192.168.1.0/24 is directly connected, FastEthernet0/0
自動彙總的路由條目可能會存在路由黑洞,這一點我們可以通過實驗驗證。
可以發現,我們用R2去ping 一個未曾聲明但是包含在彙總條目裏的IP地址時,會出現UUUUU的情況(UUUUU表示報文已發出,但下一跳不可達)。這樣的情況會消耗兩臺路由器的資源。要解決這個問題,我們只需關閉關閉自動彙總即可。
R1(config)#router rip
R1(config-router)#no auto-summary
R1(config-router)#exit
現在我們再ping不存在的IP地址,會發現.....(表示報文未發出),這樣便不會浪費資源了。
2. 手動彙總
爲避免因自動彙總而出現的路由黑洞,多數情況下我們需要進行手動彙總。
//在接口下手動彙總
R1(config)#interface f0/0
R1(config-if)#ip summary-address rip 172.16.0.0 255.255.252.0
R1(config-if)#exit
手動彙總後,便不會出現路由黑洞了。
3. RIP認證
由於RIP沒有鄰居的概念,所以自己並不知道發出去的路由更新是不是有路由器收到,同樣也不知道會被什麼樣的路由器收到,因爲RIP的路由更新是明文的,網絡中無論誰收到,都可以讀取裏面的信息,這就難免會有不懷好意者竊聽RIP的路由信息。爲了防止路由信息被非法竊取,RIP v2可以相互認證,只有能夠通過認證的路由器,才能夠獲得路由更新。
除此之外,key chain名字KEYID可以不一樣,鑰匙名字不影響認證,但是鑰匙編號和密碼必須一樣。
一個接口只能設置一個鑰匙。
//定義鑰匙名字
R1(config)#key chain R1
//定義鑰匙編號
R1(config-keychain)#key 1
//定義鑰匙密碼
R1(config-keychain-key)#key-string cisco
R1(config-keychain-key)#exit
R1(config-keychain)#exit
R1(config)#interface f0/0
//定義認證模式爲密文認證(text爲明文認證)
R1(config-if)#ip rip authentication mode md5
//設置認證密碼
R1(config-if)#ip rip authentication key-chain R1
R1(config-if)#exit
R2上同樣也要做認證配置
R2(config)#key chain R2
R2(config-keychain)#key 1
R2(config-keychain-key)#key-string cisco
R2(config-keychain-key)#exit
R2(config-keychain)#exit
R2(config)#interface f0/0
//定義認證模式爲密文認證(text爲明文認證)
R2(config-if)#ip rip authentication mode md5
//設置認證密碼
R2(config-if)#ip rip authentication key-chain R2
R2(config-if)#exit
配置完成後,因兩臺路由器的鑰匙編號與密碼相同,故可以相互更新路由條目。
4. RIP版本不兼容問題
RIPv1與RIPv2版本是不兼容的。假使一個網絡內部的兩臺路由器一臺運行版本1,而另一臺運行版本2,正常情況下這兩臺設備將無法正常更新路由條目。要使他們能夠正常更新路由條目,則需要配置版本兼容性。
以R2爲例,在R2上做如下配置
R2(config)#interface f0/0
//允許R2接收版本1的報文
R2(config-if)#ip rip receive version 1
//允許R2發送版本2的報文
R2(config-if)#ip rip send version 1
現在R2可以更新從R1接收到的路由條目,同時R2發出的路由條目也能夠被R1識別並更新。
5. RIP偏移列表策略
通過對路由條目屬性的調整,從而影響數據的轉發方向——策略。
當在網絡中,去往一個目的IP存在多種路徑的時候,報文發送的路徑受度量值(即跳數)的大小影響。度量值越小,該路徑越優。
RIP只能增大度量值,不能減小。當然增大的度量值可以no 掉。
上圖所示的實驗,R2的報文發送到192.168.1.1有兩條路徑,現在要求該報文優先通過R1發送出去,請配置。
R1
R1(config)#interface loopback 0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface f0/0
R1(config-if)#ip address 12.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#no auto-summary
R1(config-router)#network 12.0.0.0
R1(config-router)#network 192.168.1.0
R1(config-router)#exit
R2
R2(config)#interface f0/0
R2(config-if)#ip address 12.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface f1/0
R2(config-if)#ip address 23.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#no auto-summary
R2(config-router)#network 12.0.0.0
R2(config-router)#network 23.0.0.0
R2(config-router)#exit
R3
R3(config)#interface loopback 0
R3(config-if)#ip address 192.168.1.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface f0/0
R3(config-if)#ip address 23.1.1.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#router rip
R3(config-router)#version 2
R3(config-router)#no auto-summary
R3(config-router)#network 23.0.0.0
R3(config-router)#network 192.168.1.0
R3(config-router)#exit
上圖紅色方框中的就是我們要修改的度量值。
R2上進一步的配置
R2(config)#access-list 1 permit 192.168.1.0
R2(config)#router rip
//將f1/0端口的度量值+1。in表示該端口接收並學習路由信息,out表示向外發送路由信息
R2(config-router)#offset-list 1 in 1 fastEthernet 1/0
R2(config-router)#exit
查看路由表可發現,現在最優的路由是12.1.1.1這條,即從R1發出。
除了在R2上增加23.1.1.0網段的度量值外,還可以在R3上進行配置,增加度量值。
R3(config)#access-list 1 permit 192.168.1.0
R3(config)#router rip
R3(config-router)#offset-list 1 out 1 fastEthernet 0/0
R3(config-router)#exit
//取消掉人爲增加的度量值
R2(config-router)#no offset-list 1 in 1 fastEthernet 1/0