路由信息协议(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