RIP路由信息协议详解(新手必看)
路由器判定到达目的地的最佳路径时,主要依靠路由选择算法来实现。
路由协议实际上是指实现路由选择算法的协议,常见的路由协议有静态路由协议、路由信息协议(Routing Information Protocol,RIP)、开放最短通路优先(Open Shortest Path First,OSPF)协议等。
RIP 是一种内部网关协议(Internal Gateway Protocol,IGP),也是一种动态路由选择协议,用于自治系统(Autonomous System,AS)内的路由信息的传输。
RIP 基于距离矢量路由算法(Distance Vector Routing Algorithm,DVRA),使用跳数来衡量到达目标地址的路由距离。使用这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,并将范围限制在 15 跳之内,即如果跳数大于等于 16 就认为网络不可达。
RIP 应用于 OSI 参考模型的应用层,各厂家定义的管理距离(优先级)有所不同,例如,华为设备定义的优先级是 100,思科设备定义的优先级是 120。
RIP 在带宽、配置和管理方面的要求较低,主要适用于规模较小的网络,运行 RIP 的网络如下图所示:

图 1 运行 RIP 的网络
RIP 中定义的相关参数比较少,它既不支持可变长子网掩码(VLSM)和无类别域间路由(CIDR),也不支持认证功能。
运行 RIP 的邻居路由器收到该 Request 报文后,会根据自己的路由表生成 Response 报文进行回复。路由器在收到 Response 报文后,会将相应的路由添加到自己的路由表中。
RIP 网络稳定以后,每个路由器会周期性地向邻居路由器通告自己的整张路由表中的路由信息(以 RIP 应答的方式广播出去),默认周期为 30s,邻居路由器会根据收到的路由信息刷新自己的路由表。
针对一条路由信息,如果 180s 以后都没有接收到新的关于它的路由信息,那么将其标记为失效,即将其跳数值标记为 16;在接下来的 120s 内,如果仍然没有收到关于它的更新信息,则该条失效信息会被删除。
更新 RIP 路由表如下图所示:

图 2 更新 RIP 路由表
一个 RIPv1 路由更新消息中最多可包含 25 个路由表项,每个路由表项携带了目标网络的地址和度量值。整个 RIP 报文应不超过 504 字节,如果超过该字节,则需要发送多个 RIPv1 报文。
RIPv1 由于提出得较早,有许多不够完善的地方。为了弥补 RIPv1 的不足,在 RFC 1388 文件中提出了改进的 RIPv2,并在 RFC 1723 和 RFC 2453 文件中进行了修订。
RIPv2 定义了一套有效的改进方案,支持子网路由选择,支持 CIDR,支持组播,并提供认证机制。
与 IPv4 版本的 RIP 类似,RIPng 同样遵循距离矢量原则。RIPng 保留了 RIPv2 的多个主要特性,例如,RIPng 规定每一跳的开销度量值也为 1,最大跳数也为 15,RIPng 通过 UDP 的 521 端口发送和接收路由信息。
RIPng 与 RIPv2 最主要的区别在于,RIPng 使用 IPv6 组播地址 FF02::9 作为目的地址来传送路由更新报文,而 RIPv2 使用的是组播地址 224.0.0.9。此外,IPv6 通常采用链路本地地址作为路由条目的下一跳地址,而 IPv4 一般采用公网地址或私网地址作为路由条目的下一跳地址。
随着 OSPF 协议和中间系统到中间系统(Intermediate System to Intermediate System,IS IS)协议的出现,许多人认为 RIP 已经过时了。事实上,RIP 有自己的优势。对于小型网络,RIP 所占带宽开销小,易于配置、管理和实现,且 RIP 还在大量使用中。
但 RIP 也有明显的不足,即当有多个网络时会出现环路问题。为了解决环路问题,IETF提出了水平分割,即路由器通过某个端口学习到的路由,不会再从该端口发出去。水平分割解决了两个路由器之间的路由环路问题,但不能防止 3 个或 3 个以上路由器形成路由环路。
触发更新是解决环路问题的另一种方法,它要求路由器在链路发生变化时立即传输它的路由表,这加速了网络的聚合,但容易产生广播泛滥。总之,环路问题的解决需要消耗一定的时间和带宽。若采用 RIP,则其网络内部所经过的链路数不能超过 15 跳,这使得 RIP 不适用于大型网络。
使用组播方式的好处在于,本地网络中和 RIP 路由选择无关的设备不需要再花费时间对路由器广播的更新报文进行解析。
RIPv2 不是一个新的协议,它只是在 RIPv1 的基础上增加了一些扩展特性,以适应现代网络的路由选择环境。这些扩展特性包括:
其中最重要的一项是路由更新条目增加了子网掩码的字段,因此 RIP 可以使用 VLSM。
因此,RIPv1 和 RIPv2 的主要区别如下:
也就是说,路由更新信息可以向不可到达的网络路由中的路由器发送 15 次,一旦达到最大值 16,就视为网络不可到达,存在故障,将不再接收访问该网络的任何路由更新信息。

图 3 水平分割
如上图所示,AR1 从 AR2 学习到的 192.168.100.0/24 网络的路由不会再从 AR1 的接收端口重新通告给 AR2,由此避免了路由环路的产生。

图 4 路由中毒
原理如下:
抑制计时器告诉路由器把可能影响路由的任何改变暂时保持一段时间,抑制时间通常比更新信息发送到整个网络的时间要长。
当路由器从邻居路由器接收到以前能够访问的网络现在不能访问的更新信息后,就将该路由标记为不可访问,并启动一个抑制计时器,如果再次收到邻居路由器发送来的更新信息中包含一个比原路由具有更好度量值的路由,则将该路由标记为可以访问,并取消抑制计时器。
如果在抑制计时器超时之前从不同邻居路由器收到的更新信息包含的度量值比原来的更差,则更新信息将被忽略,这样可以有更多的时间让更新信息传遍整个网络。
检测到网络故障的路由器会立即发送一条更新信息给邻居路由器,并依次产生触发更新来通知它们的邻居路由器,使整个网络中的路由器可以在最短的时间内收到更新信息,从而快速了解整个网络的变化。
例如,当路由器 AR2 接收到的目标网络的度量值为 16 时,产生触发更新,通告路由器 AR1 网络 192.168.100.0/24 不可到达,如下图所示。

图 5 触发更新
但这样也是有问题的,例如,包含更新信息的数据报有可能被某些网络中的链路丢失或损坏,其他路由器未能及时收到触发更新,因此就产生了结合抑制的触发更新。
抑制规则要求一旦路由失效,在抑制时间内,到达同一目的地的有同样或更差度量值的路由将会被忽略,这样触发更新将有时间传遍整个网络,从而避免已经损坏的路由重新插入已经收到触发更新的邻居路由器中,也就解决了路由环路的问题。
路由协议实际上是指实现路由选择算法的协议,常见的路由协议有静态路由协议、路由信息协议(Routing Information Protocol,RIP)、开放最短通路优先(Open Shortest Path First,OSPF)协议等。
RIP 是一种内部网关协议(Internal Gateway Protocol,IGP),也是一种动态路由选择协议,用于自治系统(Autonomous System,AS)内的路由信息的传输。
RIP 基于距离矢量路由算法(Distance Vector Routing Algorithm,DVRA),使用跳数来衡量到达目标地址的路由距离。使用这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,并将范围限制在 15 跳之内,即如果跳数大于等于 16 就认为网络不可达。
RIP 应用于 OSI 参考模型的应用层,各厂家定义的管理距离(优先级)有所不同,例如,华为设备定义的优先级是 100,思科设备定义的优先级是 120。
RIP 在带宽、配置和管理方面的要求较低,主要适用于规模较小的网络,运行 RIP 的网络如下图所示:

图 1 运行 RIP 的网络
RIP 中定义的相关参数比较少,它既不支持可变长子网掩码(VLSM)和无类别域间路由(CIDR),也不支持认证功能。
RIP工作原理
路由器启动时,路由表中只会包含直连路由。运行 RIP 之后,路由器会发送 Request 报文,以请求邻居路由器的 RIP 路由。运行 RIP 的邻居路由器收到该 Request 报文后,会根据自己的路由表生成 Response 报文进行回复。路由器在收到 Response 报文后,会将相应的路由添加到自己的路由表中。
RIP 网络稳定以后,每个路由器会周期性地向邻居路由器通告自己的整张路由表中的路由信息(以 RIP 应答的方式广播出去),默认周期为 30s,邻居路由器会根据收到的路由信息刷新自己的路由表。
针对一条路由信息,如果 180s 以后都没有接收到新的关于它的路由信息,那么将其标记为失效,即将其跳数值标记为 16;在接下来的 120s 内,如果仍然没有收到关于它的更新信息,则该条失效信息会被删除。
更新 RIP 路由表如下图所示:

图 2 更新 RIP 路由表
RIP的版本
RIP 分为 3 个版本:RIPv1、RIPv2 和 RIPng。RIPv1 和 RIPv2 用于 IPv4,RIPng 用于 IPv6。1) RIPv1
RIPv1 为有类别路由协议,不支持 VLSM 和 CIDR;RIPv1 以广播形式发送路由信息,目标 IP 地址为广播地址 255.255.255.255;不支持认证;RIPv1 通过 UDP 交换路由信息,端口号为 520。一个 RIPv1 路由更新消息中最多可包含 25 个路由表项,每个路由表项携带了目标网络的地址和度量值。整个 RIP 报文应不超过 504 字节,如果超过该字节,则需要发送多个 RIPv1 报文。
2) RIPv2
RIPv2 为无类别路由协议,支持 VLSM,支持路由聚合与 CIDR;支持以广播或组播(224.0.0.9)方式发送报文;支持明文认证和 MD5 密文认证。RIPv2 在 RIPv1 的基础上进行了扩展,但 RIPv2 的报文格式仍然与 RIPv1 类似。RIPv1 由于提出得较早,有许多不够完善的地方。为了弥补 RIPv1 的不足,在 RFC 1388 文件中提出了改进的 RIPv2,并在 RFC 1723 和 RFC 2453 文件中进行了修订。
RIPv2 定义了一套有效的改进方案,支持子网路由选择,支持 CIDR,支持组播,并提供认证机制。
3) RIPng
RIPng 是为 IPv6 网络设计的下一代距离矢量路由协议。与 IPv4 版本的 RIP 类似,RIPng 同样遵循距离矢量原则。RIPng 保留了 RIPv2 的多个主要特性,例如,RIPng 规定每一跳的开销度量值也为 1,最大跳数也为 15,RIPng 通过 UDP 的 521 端口发送和接收路由信息。
RIPng 与 RIPv2 最主要的区别在于,RIPng 使用 IPv6 组播地址 FF02::9 作为目的地址来传送路由更新报文,而 RIPv2 使用的是组播地址 224.0.0.9。此外,IPv6 通常采用链路本地地址作为路由条目的下一跳地址,而 IPv4 一般采用公网地址或私网地址作为路由条目的下一跳地址。
随着 OSPF 协议和中间系统到中间系统(Intermediate System to Intermediate System,IS IS)协议的出现,许多人认为 RIP 已经过时了。事实上,RIP 有自己的优势。对于小型网络,RIP 所占带宽开销小,易于配置、管理和实现,且 RIP 还在大量使用中。
但 RIP 也有明显的不足,即当有多个网络时会出现环路问题。为了解决环路问题,IETF提出了水平分割,即路由器通过某个端口学习到的路由,不会再从该端口发出去。水平分割解决了两个路由器之间的路由环路问题,但不能防止 3 个或 3 个以上路由器形成路由环路。
触发更新是解决环路问题的另一种方法,它要求路由器在链路发生变化时立即传输它的路由表,这加速了网络的聚合,但容易产生广播泛滥。总之,环路问题的解决需要消耗一定的时间和带宽。若采用 RIP,则其网络内部所经过的链路数不能超过 15 跳,这使得 RIP 不适用于大型网络。
RIP的局限性
1) 只能应用于小型网络
RIP 中规定,一条有效的路由信息的度量值(即最大跳数)不能超过 15,这就使得该协议不能应用于大型的网络,应该说正是因为设计者考虑到该协议只适用于小型网络,所以才进行了这一限制。对于跳数值为 16 的目标网络,RIP 会认为其不可到达。2) 收敛速度慢
在实际应用时,RIP 很容易出现“计数到无穷大”的现象,这使得路由收敛速度很慢,在网络拓扑结构变化很久以后路由信息才能稳定下来。3) 根据跳数选择的路由不一定是最优路由
RIP以跳数(即报文经过的路由器个数)为衡量标准,并以此来选择路由,这一操作缺乏合理性,因为没有考虑网络时延、可靠性、线路负载等因素对传输质量和速度的影响,因此,选择的路由不一定是最优路由。4) RIPv1与RIPv2的区别
RIPv1 路由更新使用的是广播方式,而 RIPv2 使用的是组播方式。RIPv2 通过对保留的 D 类地址 224.0.0.9 发送组播,向其他设备通告其路由器更新信息。使用组播方式的好处在于,本地网络中和 RIP 路由选择无关的设备不需要再花费时间对路由器广播的更新报文进行解析。
RIPv2 不是一个新的协议,它只是在 RIPv1 的基础上增加了一些扩展特性,以适应现代网络的路由选择环境。这些扩展特性包括:
- 每个路由条目携带自己的子网掩码;
- 路由选择更新具有认证功能;
- 每个路由条目携带下一跳地址和外部路由标志;
- 以组播方式进行路由更新。
其中最重要的一项是路由更新条目增加了子网掩码的字段,因此 RIP 可以使用 VLSM。
因此,RIPv1 和 RIPv2 的主要区别如下:
- RIPv1 是有类别的路由协议,RIPv2 是无类别的路由协议;
- RIPv1 不支持 VLSM,RIPv2 支持 VLSM;
- RIPv1 没有认证的功能,RIPv2 支持认证功能,并且有明文和 MD5 两种认证方式;
- RIPv1 没有手动汇总的功能,RIPv2 可以在关闭自动汇总的前提下进行手动汇总;
- RIPv1 是广播更新,RIPv2 是组播更新;
- RIPv1 路由没有标记的功能,RIPv2 可以对路由进行标记,用于过滤和制定策略;
- RIPv1 发送的 Update 包中最多可以携带 25 条路由,而 RIPv2 在有认证的情况下最多可以携带 24 条路由;
- RIPv1 发送的 Update 包中没有 next-hop 属性,而 RIPv2 有 next-hop 属性,可以用于路由更新的重定,即通过修改路由更新消息中的信息来调整网络中路由器的路径选择和数据包的流向等。
RIP防止路由环路机制
当网络发生故障时,RIP 网络有可能会产生路由环路。可以通过定义最大值、水平分割、路由中毒、毒化逆转、使用抑制计时器、触发更新等技术来避免路由环路的产生。1) 定义最大值
距离矢量路由算法可以通过IP报头中的生存时间实现自纠错,但路由环路问题可能会首先要求无穷计数。为了避免时延问题,距离矢量路由协议定义了一个最大值,这个数值是指最大的度量值,如跳数,其最大值为 16。也就是说,路由更新信息可以向不可到达的网络路由中的路由器发送 15 次,一旦达到最大值 16,就视为网络不可到达,存在故障,将不再接收访问该网络的任何路由更新信息。
2) 水平分割
水平分割技术可消除路由环路并加快网络收敛速度。其规则就是不向原始路由更新来的方向再次发送路由更新信息(单向更新、单向反馈)。
图 3 水平分割
如上图所示,AR1 从 AR2 学习到的 192.168.100.0/24 网络的路由不会再从 AR1 的接收端口重新通告给 AR2,由此避免了路由环路的产生。
3) 路由中毒(也称为路由毒化)
定义最大值可以在一定程度上解决路由环路问题,但并不彻底,在达到最大值之前,路由环路还是存在的。路由中毒可以彻底解决这个问题,如下图所示:
图 4 路由中毒
原理如下:
- 网络中有路由器 AR1、AR2 和 AR3,当网络 192.168.100.0/24 出现故障无法访问的时候,路由器 AR3 便向邻居路由器发送相关路由更新信息,并将其度量值标为无穷大,告诉它们网络 192.168.100.0/24 不可到达;
- 路由器 AR2 收到“毒化消息”后将该链路路由表项标记为无穷大,表示该路径已经失效,并向邻居 AR1 路由器通告;
- 依次毒化各个路由器,告诉邻居路由器 192.168.100.0/24 网络已经失效,不再接收更新信息,从而避免了路由环路的产生。
4) 毒化逆转(也称为反向中毒)
结合上面的例子,当路由器 AR2 看到到达网络 192.168.100.0/24 的度量值为无穷大的时候,就发送一条毒化逆转的更新信息给路由器 AR3,说明 192.168.100.0/24 这个网络不可到达。这是超越水平分割的一个特例,可以保证所有的路由器都接收到毒化的路由信息,从而避免路由环路的产生。5) 使用抑制计时器(即控制更新时间)
抑制计时器用于阻止定期更新的信息在不恰当的时间重置一个已经坏掉的路由。抑制计时器告诉路由器把可能影响路由的任何改变暂时保持一段时间,抑制时间通常比更新信息发送到整个网络的时间要长。
当路由器从邻居路由器接收到以前能够访问的网络现在不能访问的更新信息后,就将该路由标记为不可访问,并启动一个抑制计时器,如果再次收到邻居路由器发送来的更新信息中包含一个比原路由具有更好度量值的路由,则将该路由标记为可以访问,并取消抑制计时器。
如果在抑制计时器超时之前从不同邻居路由器收到的更新信息包含的度量值比原来的更差,则更新信息将被忽略,这样可以有更多的时间让更新信息传遍整个网络。
6) 触发更新
默认情况下,一台 RIP 路由器每 30s 会发送一次路由表更新信息给邻居路由器。而触发更新就是立刻发送路由更新信息,以响应某些变化。检测到网络故障的路由器会立即发送一条更新信息给邻居路由器,并依次产生触发更新来通知它们的邻居路由器,使整个网络中的路由器可以在最短的时间内收到更新信息,从而快速了解整个网络的变化。
例如,当路由器 AR2 接收到的目标网络的度量值为 16 时,产生触发更新,通告路由器 AR1 网络 192.168.100.0/24 不可到达,如下图所示。

图 5 触发更新
但这样也是有问题的,例如,包含更新信息的数据报有可能被某些网络中的链路丢失或损坏,其他路由器未能及时收到触发更新,因此就产生了结合抑制的触发更新。
抑制规则要求一旦路由失效,在抑制时间内,到达同一目的地的有同样或更差度量值的路由将会被忽略,这样触发更新将有时间传遍整个网络,从而避免已经损坏的路由重新插入已经收到触发更新的邻居路由器中,也就解决了路由环路的问题。