一、简单的介绍
路由信息协议RIP(Routing Inoformation protocol)的简称,它是一种基于距离矢量(Distance-vector)算法的协议,使用跳数作为度量来衡量到达的网络的距离。RIP主要应用于规模较小的网络中
RIP是一种比较简单的内部网关协议,其使用了基于路由矢量的贝尔曼-福特算法(Bellman-Ford)来计算到达目的网络的最佳路径。
最初RIP协议开发时间较早,所以在带宽、配置和管理方面要求也较低。因此说RIP适合在较小的网络中。RIP协议中定义的相关参数也比较少。例如它不支持VLSM和CIDR,也不支持认证功能。
二、RIP原理
工作原理
路由器启动时,路由表只会包含直连路由。运行RIP之后,路由器会发送Request报文,用来请求邻居路由器的RIP路由。运行RIP的邻居路由器收到该Request报文后,会根据自己的路由表,生成Response报文进行回复。路由器在收到Response报文后,会将相应的路由添加到自己的路由表中。
RIP网络稳定后,每个路由器都会周期性的向邻居路由器通告自己的整张路由表中的路由信息,默认周期为30秒。邻居路由器根据收到的路由信息刷新自己的路由表。
RIP的三个定时器
更新定时器:路由器每隔30S就会发送更新信息。为了防止同一时间所有的路由器都发送更新报文,股添加了5s的便宜,一般此定时器取值在25-35之间
过期定时器:在180s没有收到该路由项的任何信息,就将其设为不可达。
刷新定时器:一条记录失效后不会立即删除,而是等待指定时间后消除。
RIP的度量
RIP使用跳数作为度量值来衡量达到目的网络的距离。在RIP中,路由器到它直接相连网络的跳数为0,每经过一个路由器后跳数加1。为限制收敛时间,RIP规定跳数的取值范围为0~15之间的整数,大于15的跳数被定义为无穷大,即目的的网络或主机不可达。路由器从某一另据路由器收到路由更新条文时,将根据以下原则更新本路由器的RIP路由表:
对于本路由表中已有的路由项,当该路由项的下一跳是该路由器的邻居路由器时,不论度量值将增大还是改小,都更新该路由项(度量值相同时只将老化定时器清零。)
路由表中的每一路由都对应了一个老化计时器,当路由项在180秒内没有任何更新时,定时器超时,该路由项的度量值变为不可达
当该路由项的下一跳不是该邻居路由器时,如果度量值比路由表中的路由项有所减少,则更新该路由项。
对于本路由表中不存在的路由项,如果度量值小于16,则在路由表中增加该路由项。某路由项的度量值变为不可达后,该路由会在Response报文中发布四次(120秒),然后从路由表中清除。
RIP协议不同版本的区别
RIP包括RIPv1和RIPv2,以及最新的RIP NG。我们主要了解RIPv1和RIPv2
RIPv1为有类别路由协议,不支持VLSM(可边长子网掩码)和CIDP(无类域间路由)。RIPv2为无类别路由协议,支持VLSM,支持路由聚合与CIDR。
RIPv1使用广播发送报文,RIPv2有两种发送方式:广播方式和组播方式,缺省是组播方式。RIPv2的组播地址为223.0.0.9 。组播发送报文的好处是在同一网络中那些没有运行RIP的网段可以避免接受到RIP的广播报文;另外,组播发送报文还可以使运行RIPv1的网段避免错误的接受和处理RIPv2中带有子网掩码的路由
RIPv1不支持认证功能,RIPv2支持明文认证和MD5密文认证
RIPv1的报文格式
RIP协议通过UDP交换路由信息,端口号为520。RIPv1以广播形式发送路由信息,目的IP地址为广播地址即255.255.255.255.报文格式中每个字段的值和作用如下:
1. Command:表示该报文是一个请求报文还是响应报文,只能取1或者2。1表示该报文是请求报文,2表示该报文是响应报文。 2. Version:表示RIP的版本信息。对于RIPv1,该字段的值为1 3. Address Family Identifier(AFI):表示地址标识信息,对于IP协议,其值为2. 4. IP address:表示该路由条目的目的IP地址,这一项可以是网络地址或主机地址。 5. Metric:标识该路由条目的度量值,取值范围1-16.
一个RIP路由更新消息最多可包含25条路由表项,每个路由表项都携带了目的网络的地址和度量值,整个RIP报文大小限制为不超过504字节。如果整个路由表的更新消息超过该大小,需要发送多个RIPv1报文。
RIPv2报文格式
RIPv2在RIPv1的基础上进行了扩展,但RIPv2的报文格式仍然同RIPv1类似,其中不同的字段如下:
AFI:地址族标识除了表示支持的协议类型外,还可以用来描述认证信息。
Route tag:用于标记外部路由
Subnet Mask:指定IP地址的子网掩码,定义IP地址的网络或子网部分。
Next Hop:指定通往目的地址的下一跳IP地址。
RIPv2的认证
RIPv2的认证功能是一种过滤恶意路由信息的方法,该方法根据key值来检查从有效对端设备接收到的报文.这个key值是每个接口上都可以配置的一个明文密码串,相应的认证类型(Authentication Type)的值为2。
早期的RIPv2只支持简单明文认证,安全性低,因为明文认证密码串可以很轻易的截获。随着对RIP安全性的需求越来越高,RIPv2引入了加密认证功能,开始是通过支持MD5认证(RFC 2082)来实现,后来通过支持HMAC-SHA-1认证(RFC 2082)进一步增强了安全性。
三、 RIP针对环路的处理手段
RIP环路
如图所示,RIP网络正常运行时,RTA会通过RTB学习到10.0.0.0/8网络的路由,度量值为2,一旦路由器RTB的直连网络10.0.0.0/8产生故障,RTB会立即检测到该故障,并认为该路由不可达,此时RTA还没有收到该路由不可达的信息,于是会继续向RTB发送度量值为2的通往10.0.0.0/8的路由信息。RTB会学习此路由信息,认为可以通过RTA到达10.0.0.0/8网络。此后RTB发送更新的路由表,又会导致RTA路由表的更新,RTA会新增一条度量值为3的10.0.0.0/8网络路由表项,从而形成路由环路。这个过程会持续下去,直到度量值 为16。
水平分割
RIP路由协议引入了很多机制来解决环路问题,除了之前说的最大跳数,还有水平分割机制。
水平分割的原理是,路由器从某个接口学习到的路由,不会再从该接口发出去。也就是说RTA从RTB学习到的10.0.0.0/8网络的路由不会再从RTA接收接口重新通告给RTB,由此避免了路由环路的产生。
毒性反转
RIP的防环机制中还包括毒性反转,毒性反转机制的实现可以使错误路由立即超时。配置了毒性反转之后,RIP从某个接口学习到路由之后,发回给邻居路由器时会将该路由的跳数设置为16利用这种方式,可以清除对方路由表中的无用路由。本示例中,RTB向RTA通告了度量值为1的10.0.0.0/8路由,RTA在通告给RTB时将该路由度量值设为16.如果10.0.0.0/8网络发生故障,RTB便不会认为可以通过RTA到达10.0.0.0/8网络,因此就可以避免路由环路的产生。
触发更新
缺省情况下,一台RIP路由器每30秒回发送一次路由表更新给邻居路由器。当文本地路由信息发生变化时,触发更新功能允许路由器立即发送触发更新报文给邻居路由器,用来通知路由信息更新,而不需要等待更新定时器超时,从而加速了网络收敛。
四、RIP基本配置
基础配置
rip [process-id]命令用来使能RIP进程。该命令中,process-id指定了RIP进程ID。如果未指定process-id,命令将使用1作为进程缺省ID。
version 2可用于使能RIPv2以支持扩展能力,比如支持VLSM、认证等。
network<network-address>命令可用于在rip中通告网络,network-address必须是一个自然网段的地址。只有处于此网络中的接口,才能进行RIP报文的接收和发送。
度量值配置
rip metricin<metric value> 在RIP网络中,命令rip metricin <metric value>用于修改接口上应用的度量值(注意:该命令所指定的度量值会与当前路由的度量值相加)。当路由器的一个接口收到路由时,路由器会首先将接口的附加度量值增加到该路由上,然后将路由加入路由表中。
本示例中,RTA发送的10.0.0.0/8路由条目的度量值为1,由于在RTC的GigabitEthernet0/0/0接口上配置了rip metricin 2,所以当路由到达RTC的接口时,RTC会将该路由条目的度量值增加2,最后该路由的度量值为3.
rip metricout 命令rip metricout用于路由器在通告RIP路由时,修改路由的度量值。一般情况下,在将路由表项转发到下一跳之前,RIP会将度量值加1。如果配置了rip metricout命令,则只应用命令中配置的度量值。即,当路由器发布一条路由时,此命令配置的度量值会在发布该路由之前附加在这条路由上,但本地路由表中的度量值不会发生改变。
在本示例中,缺省情况下,RTA发送的10.0.0.0/8路由条目度量值为1。但是,由于在RTA的GigabitEthernet0/0/0接口上配置了rip metricout 2,所以RTA会将该路由条目的度量值设置为2,然后发送给RTC。
水平分割&毒性反转
水平分割和毒性反转都是基于每个借口来配置的。缺省情况下,每个接口都启用了 rip split-horizon命令(NBMA网络除外)以防止路由环路。华为ARG3系列路由器不支持同时配置水平分割和毒性反转,因此当一个接口同时配置上了水平分割和毒性反转时,只有毒性反转生效。
配置验证
命令display rip<process_id> interface <interface> verbose用来确认路由器接口的RIP配置。命令回显中会显示相关RIP参数,包括RIP版本以及接口上是否应用了水平分割和毒性反转。此例中显示的RTC的GigabitEthernet0/0/0接口配置了RIPv2,metricin为2,还启用了水平分割和毒性反转功能。
虽然两者都显示enable,但是只有Poison-reverse生效。
Output & input
rip output 命令rip output用于配置允许一个接口发送rip更新消息。如果想要禁止指定接口发送RIP更新消息,可以在接口上运行命令undo rip output。缺省情况下,ARG3系列路由器允许发送rip报文。企鹅也网络中可以通过运行undo rip output来防止连接外网的接口发布内部路由。
Input rip input 命令用来配置允许指定接口接受RIP报文
undo rip input 命令用来禁止指定接口接受RIP报文。运行命令undo rip input 之后,该接口所收到的RIP报文会被立即丢弃
缺省情况下,接口可以接受RIP报文
抑制接口
silent-interface:silent -interface命令用来抑制接口,使其只接受RIP报文,更新自己的路由表,但不发送RIP报文。
命令silent-interface比命令rip input和rip output的优先级更高。命令silent-interface all表示抑制所有接口,此命令优先级对稿,在配置该命令之后,所有接口都被抑制。
命令silent-interface通常会被之在NBMA网络上。在NBMA网络上,一些路由器需要接受RIP更新消息,但是不需要广播或者组播路由器的路由更新,而是通过命令peer<ip address>与对端路由器建立联系。
配置验证
命令display rip可以比较全面的显示路由器上的RIP信息,包括全局参数以及部分接口参数。列如,该命令可以显示那些接口上执行了silnet-interface命令