4.3_距离矢量路由协议RIP

路由信息协议RIP(Routing Information Protocol)的简称,它是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用与规模较小的网络中。

距离矢量路由协议也称之为传闻路由协议,路由器无条件的相信接收到路由信息,无需自身计算。可靠性不高,路由来源不太可靠,如果收到的路由本身是错的,也无法自行修正。

学习目标:
1. 掌握RIP的基本工作原理
2. 掌握RIP的配置

路由信息协议——RIP


RIP是一种比较简单的内部网关协议。RIP使用了基于距离矢量的贝尔曼 -福特算法(Bellman-Ford)来计算到达目的网络的最佳路径。
最初的RIP协议开发时间较早,所以在带宽、配置和管理方面要求也较低,因此,RIP主要适合于规模较小的网络中。
RIP协议中定义的相关参数也比较少。例如,它不支持VLSM和CIDR, 也不支持认证功能。

RIP工作原理


路由器启动时,路由表中只会包含直连路由。运行RIP之后,路由器会发送Request报文,用来请求邻居路由器的RIP路由。运行RIP的邻居路由器收到该Request报文后,会根据自己的路由表,生成Response报文进行回复。路由器在收到Response报文后,会将相应的路由添加到自己的路由表中。
RIP网络稳定以后,每个路由器会周期性地向邻居路由器通告自己的整张路由表中的路由信息,默认周期为30秒。邻居路由器根据收到的路由信息刷新自己的路由表。

RIP度量


RIP使用跳数作为度量值来衡量到达目的网络的距离。在RIP中,路由器到与它直接相连网络的跳数为0,每经过一个路由器后跳数加1。为限制收敛时间,RIP规定跳数的取值范围为0~15之间的整数,大于15的跳数被定义为无穷大,即目的网络或主机不可达。
路由器从某一邻居路由器收到路由更新报文时,将根据以下原则更新本路由器的RIP 路由表:
1. 对于本路由表中已有的路由项,当该路由项的下一跳是该邻居路由器时,不论度量值将增大或是减少,都更新该路由项(度量值相同时只将其老化定时器清零。路由表中的每一路由项都对应了一个老化定时器,当路由项在180秒内没有任何更新时,定时器超时,该路由项的度量值变为不可达)。
2. 当该路由项的下一跳不是该邻居路由器时,如果度量值将减少,则更新该路由项。
3. 对于本路由表中不存在的路由项,如果度量值小于16,则在路由表中增加该路由项。
某路由项的度量值变为不可达后,该路由会在 Response 报文中发布四次(120 秒),然后从路由表中清除。
在本示例中,路由器RTA通过两个接口学习路由信息,每条路由信息都有相应的度量值,到达目的网络的最佳路由就是通过这些度量值计算出来的。

RIPv1 VS. RIPv2


RIP包括RIPv1和RIPv2两个版本。 RIPv1为有类别路由协议,不支持VLSM和CIDR。 RIPv2为无类别路由协议,支持VLSM,支持路由聚合与CIDR。
RIPv1使用广播发送报文;RIPv2有两种发送方式:广播方式和组播方式,缺省是组播方式。RIPv2的组播地址为224.0.0.9。组播发送报文的好处是在同一网络中那些没有运行RIP的网段可以避免接收RIP的广播报文;另外,组播发送报文还可以使运行RIPv1的网段避免错误地接收和处理RIPv2中带有子网掩码的路由。
RIPv1不支持认证功能,RIPv2支持明文认证和MD5密文认证。

RIPv1是有类路由协议——有类路由协议在路由通告时不包括子网掩码,在一个主类网络内,要求这些主类网络的子网的子网掩码长度一致,在主类网络边界处交换路由时自动汇总。
我们下面看一个有类路由协议的网络汇总的例子:

路由器1拥有连接10.1.0.0/24和10.2.0.0/24两个网段,路由器2拥有10.2.0.0/24和172.16.2.0/24两个网段,路由器3拥有172.16.2.0/24和172.16.1.0/24两个网段。
三个路由器都开启RIPv1协议,那么如图所示,路由器1学校到关于172.16.1.0和172.16.2.0的路由信息被汇总成了172.16.0.0,都是因为路由器2汇总了172.16.2.0和172.16.1.0的路由信息从g0/0/0发送给路由器1。
总的来说,有类路由将会在网络边界自动汇总成A,B和C类。

RIPv2是无类路由协议——无类路由协议在路由通告时包括子网掩码,无类路由协议支持VLSM。按需手工控制网络汇总。

RIPv1在主类边界会自动汇总,RIPv2在主类边界也会自动汇总,但是这是在水平分割机制被关闭的前提之下才会。(undo rip split-horizon)。此外还有一点,如果要在水平分割没有关闭的情况下,强制使用路由汇总的功能的话,在rip接口下,敲入summary always 即可实现路由汇总

手动汇总的特点:
1. 具有方向性,会抑制明细路由
2. 汇总可以减少路由表的规模,节省设备资源
3. 某条明细路由出现波动,并不会影响汇总路由,增强了网络的稳定性。

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类似。
其中不同的字段如下所示:
1. AFI:地址族标识除了表示支持的协议类型外,还可以用来描述认证信息。
2. Route tag:用于标记外部路由。
3. Subnet Mask:指定IP地址的子网掩码,定义IP地址的网络或子网部
分。
4. Next Hop:指定通往目的地址的下一跳IP地址。
RFC1723对RIPv1和RIPv2的兼容性问题进行了分析和讨论,这里不再进行描述

RIPv2——认证


RIPv2的认证功能是一种过滤恶意路由信息的方法,该方法根据key值来检查从有效对端设备接收到的报文。这个key值是每个接口上都可以配置的一个显示密码串,相应的认证类型(Authentication Type)的值为2 。
早期的RIPv2只支持简单明文认证,安全性低,因为明文认证密码串可以很轻易地截获。随着对RIP安全性的需求越来越高,RIPv2引入了加密认证功能,开始是通过支持MD5认证(RFC 2082)来实现,后来通过支持HMAC-SHA-1认证(RFC 2082)进一步增强了安全性。华为 AR2200系列路由器能够支持以上提到的所有认证方式,本示例只介绍了简单明文认证原理。

RIP——环路


本示例介绍了RIP网络上路由环路的形成。
如图所示,RIP网络正常运行时,RTA会通过RTB学习到10.0.0.0/8网络的路由,度量值为1。一旦路由器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 命令可用于在RIP中通告网络,network- address必须是一个自然网段的地址。只有处于此网络中的接口,才能进行RIP报文的接收和发送。

RIP配置-Metricin


在RIP网络中,命令rip metricin 用于修改接口上应用的 度量值(注意:该命令所指定的度量值会与当前路由的度量值相加)。 当路由器的一个接口收到路由时,路由器会首先将接口的附加度量值增加到该路由上,然后将路由加入路由表中。
本示例中,RTA发送的10.0.0.0/8路由条目的度量值为1,由于在RTC的 GigabitEthernet0/0/0接口上配置了rip metricin 2,所以当路由到达RTC 的接口时,RTC会将该路由条目的度量值加2,最后该路由的度量值为3 。

metricin用于设置一个增量

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。

metricout用于设置一个绝对值

配置水平分割&毒性反转


水平分割和毒性反转都是基于每个接口来配置的。缺省情况下,每个接口都启用了rip split-horizon命令(NBMA网络除外)以防止路由环路。 华为ARG3系列路由器不支持同时配置水平分割和毒性反转,因此当一 个接口上同时配置了水平分割和毒性反转时,只有毒性反转生效。

配置验证


命令display rip interface verbose用来确认 路由器接口的RIP配置。命令回显中会显示相关RIP参数,包括RIP版本以及接口上是否应用了水平分割和毒性反转。此例中显示RTC的 GigabitEthernet0/0/0接口配置了RIPv2,metricin为2,还启用了水平分割和毒性反转的功能。

RIP配置-Output


命令rip output用于配置允许一个接口发送RIP更新消息。如果想要禁止 指定接口发送RIP更新消息,可以在接口上运行命令undo rip output。 缺省情况下,ARG3系列路由器允许接口发送RIP报文。
企业网络中,可以通过运行命令undo rip output来防止连接外网的接口 发布内部路由。

RIP配置-Input


rip input命令用来配置允许指定接口接收RIP报文。
undo rip input命令用来禁止指定接口接收RIP报文。运行命令undo rip input之后,该接口所收到的RIP报文会被立即丢弃。 缺省情况下,接口可以接收RIP报文。

抑制接口


silent-interface命令用来抑制接口,使其只接收RIP报文,更新自己的路由表,但不发送RIP报文。
命令silent-interface比命令rip inputrip output的优先级更高。命令silent-interface all表示抑制所有接口,此命令优先级最高,在配置该命令之后,所有接口都被抑制。
命令silent-interface通常会配置在NBMA网络上。在NBMA网络上,一 些路由器需要接收RIP更新消息但是不需要广播或者组播路由器自身的路由更新,而是通过命令peer 与对端路由器建立关系。

配置验证


命令display rip可以比较全面地显示路由器上的RIP信息,包括全局参 数以及部分接口参数。例如,该命令可以显示哪些接口上执行了silent- interface命令。

RIP计时器

  1. 更新定时器:当此定时器超时时,立即发送更新报文。默认为:30s
  2. 老化定时器:RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。默认:180s
  3. 垃圾收集定时器:如果在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则该路由将被从RIP路由表中彻底删除。默认:120s
  4. 抑制定时器:当RIP设备收到对端的路由更新,其cost为16,对用路由将进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由cost小于16的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。默认:120s
    使用

1
timers rip xx xx xx
  • 1

进行更改。

RIP路由与定时器之间的关系:

  1. RIP的更新信息发布是由更新定时器控制的,默认为每30秒发送一次。
  2. 每一条路由表项对应两个定时器:老化定时器和垃圾收集定时器。当学到一条路由并添加到RIP路由表中时,老化定时器启动。如果老化定时器超时,设置仍没有收到邻居发来的更新报文,则把该路由的度量值置为16(表示路由不可达),但会通告该路由,并启动垃圾收集定时器。如果垃圾收集定时器超时,设备仍然没有收到更新报文,则在RIP路由表中删除该路由。
    使用

总结

RIP的路由跳数是在什么时候增加的?
答:
RIP的路由跳数是在路由器发出路由通告之前增加的。再回顾下,若接口配置了Metricout,则并不加一,而是加上Metricout的值,若接口配置了Metrin,则在收到路由信息后会加上一定值,而不是什么也不做。