RIP

发布时间 2023-04-14 15:03:49作者: 0x1e61

RIP

什么是RIP?

RIP 英文全称:Routing Information Protocol,中文术语:路由信息协议,是一种距离矢量路由协议,用跳数作为路由度量。

RIP 是小型网络中最常用的动态路由协议之一,RIP 通过每 30 秒向相邻路由器发送路由表详细信息来定期交换拓扑信息,它们以 UDP 数据包的形式发送,源端口号和目标端口号都设置为 520。由于最大数据报大小仅为 504 字节,因此单个数据包中最多可以宣告 25 条路由。这些相邻路由器依次将信息转发给其他路由器,直到它们达到网络收敛。RIP 跳数最大限制为 15 跳,超出此范围的任何内容都无法访问,因此,RIP 不适用于大型复杂网络

网络收敛,百度百科有相关解释,不过看起来真的很拗口,一句话解释:网络收敛就是一个网络中所有设备更新其路由表信息,达到路由一致的过程。

RIP 如何工作?

RIP 基于距离矢量路由算法,根据到目标网络的跳数计算路由成本,在计算路由成本时不使用其他路由指标,例如负载、带宽、延迟。

RIP路由器除了拥有一个IP路由表外,还会单独创建并维护一个RIP路由表,该RIP路由表专门用来存放该路由器通过运行RIP协议而发现的路由。

 

工作原理

路由器启动时,路由表中只包含直连路由;

路由器运行RIP后,会首先发送路由更新请求,收到请求的路由器会发送自己的RIP路由信息进行响应

网络稳定后,路由器会周期性(默认30S)向邻居路由器发送自己的整张路由表,每台路由器都包含了去往整个RIP网络中各个目的网络的路由

 

RIP 度量

默认情况下,路由器到其直连网络的跳数为 0,从一台路由器到另外一台路由器跳数加1,跳数的取值范围为 0 到 15的整数,大于等于 16 的跳数为无穷大,表示目的网络或主机不可达。

RIP使用跳数作为度量值来衡量到达目的网络的距离。
缺省情况下,直连网络的路由跳数为0,当路由器发送路由更新时,会把度量值加1。
RIP规定等于或超过16跳为网络不可达(即最大跳数为15)。

 

下面我们用一个例子来直观的感受一下RIP的选路规则:

案例 1

fig:

如上图,R1现在要和R4进行通信,目前有三个链路:

  • 链路1:R1 -> R2 -> R3 -> R4
  • 链路2:R1 -> R5 -> R6 -> R7 -> R4
  • 链路3:R1 -> R8 -> R4

这个时候我们可以很直观的看出每条链路的跳数:

  • 链路1:3跳
  • 链路2:4跳
  • 链路3:2跳

看跳数最好最快的办法就是一条链路就是一跳,如下图:

fig:

那么答案毫无悬念:选择跳数最小的链路3:

fig:

 

案例2

案例1是链路的跳数都不一样,那加入跳数一样的情况,RIP如何选路的呢?

如上图,R1现在要和R4进行通信,目前有两个链路:

  • 链路1:R1 -> R2 -> R3 -> R4
  • 链路2:R1 -> R5 -> R6 -> R4

这个时候我们可以很直观的看出每条链路的跳数:

  • 链路1:3跳
  • 链路2:3跳

上面我们提到过,RIP在计算路由成本时不使用其他路由指标,例如负载、带宽、延迟。所以这里起到了负载均衡的作用,网络将同时向两条路由发送数据。

fig:

 

RIP版本

fig:

RIP 有三个版本:

  • RIPv1:在 RFC 1058 中定义,有类路由协议,由 IP 目标网络和跳数指定
  • RIPv2:在 RFC 1723 中定义,无类别路由协议,路由表被发送到多播地址,从而减少网络流量。
  • RIPng:下一代 RIP,在 RFC 2080 中定义,是 RIPv2 的扩展,用于支持下一代互联网协议 IPv6

RIP v1被称为有类路由协议,因为它在路由更新中不发送子网掩码信息。

RIP v2被称为无类路由协议,因为它在其路由更新中发送子网掩码信息。

 

RIP协议会占用(浪费)并不运行RIP协议的计算机的处理资源

RIPv2要比RIPv1少占用计算机的处理资源,因为计算机在网络层就可以把携带RIPv2消息的报文丢弃,而必须再传输层才能把携带RIPv1消息的报文丢弃。

在配置RIP时,如果不指定版本,接口默认情况下能接收V1和V2报文,但只能发送v1报文;在指定版本情况下,RIPv1 只能接受v1的报文,RIPv2 只能接收v2的报文。

RIP 三个版本比较

协议

RIPv1

RIPv2

RIPng

更新方式

广播

多播

多播

地址

255.255.255.255 广播

224.0.0.9 多播

FF02::9 组播

身份验证

不支持

支持

-

是否有类

有类

无类

无类

 

RIP的报文格式

1. RIP-1的报文格式

RIP报文由头部(Header)和多个路由表项(Route Entries)部分组成。在一个RIP报文中,最多可以有25个路由表项。

fig:

各字段的解释如下:

Command:标识报文的类型。值为1时表示Request报文,值为2表示Response报文。

Version: RIP的版本号。对于RIP-1来说其值为0x01。

AFI(Address Family Identifier):地址族标识,其值为2时表示IP协议。

IP Address:该路由的目的IP地址,可以是自然网段地址、子网地址或主机地址。

Metric:路由的度量值。

2. RIP-2的报文格式

fig:

其中,与RIP-1不同的字段有:

Version: RIP的版本号。 对于RIP-2来说其值为0x02。
Route Tag:路由标记。
IP Address:该路由的目的IP地址,可以是自然网段地址、子网地址或主机地址。
Subnet Mask:目的地址的掩码。
Next Hop:如果为0.0.0.0, 则表示发布此条路由信息的路由器地址就是最优下一跳地址, 否则表示提供了一个比发布此条路由信息的路由器更优的下一条地址。

 

3. RIP-2的验证

RIP-2为了支持报文验证,使用第一个路由表项(Route Entry)作为验证项,并将AFI字段的值设为0xFFFF标识报文携带认证信息

fig:

各字段的解释如下:

Authentication Type:验证类型。值为2时表示明文验证,值为3时表示MD5验证。

Authentication:验证字,当使用明文验证时包含了密码信息;当使用MD5验证时包含了Key ID、MD5验证数据长度和序列号的信息。

RIP 定时器

RIP 有四种定时器:

  • 更新计时器
  • 无效定时器
  • 抑制定时器
  • 刷新定时器
  •  

更新计时器(Update)(30s)

默认30秒,当此定时器超时,立即向所有邻居发送更新报文。

该计时器的时间为RIP路由器周期性泛洪路由表(周期性在接口上发送Response报文)的时间间隔。在缺省情况下,路由器以30秒为周期从已经激活 RIP的接口向外发送Response 报文。

如果一个网络中有多台RIP路由器接入,每台路由器所有激活 RIP的接口如果在更新计时器超时后一齐泛Response报文,就有可能引发不必要的冲突或者使得同一时间内网络中充斥着大量的RIP广播或组播报文。

为了避免这个问题,RIP 引入一个随机的偏移量,也就是路由器不以严格的30s为周期发送RIP报文,而是在该时间的基础上关联一个随机的、细小的偏移量(加/减0~5s)。

 

老化计时器(Age Timer)(180s)

每一条RIP路由都关联两个计时器,其中之一就是老化计时器(也被称为超时计时器)。

当一条 RIP路由被学习并加载到路由表时,路由器立即为该路由启动老化计时器(缺省180s),该计时器被启动后即开始计时。

此后每当更新周期来临时,路由器会再次收到该条路由的更新,老化计时器又被重置并重新开始计时

以华为AR2200路由器为例,若一条路由持续未被刷新并最终导致老化计时器超时,路由则变为不可用并从路由表中删除,虽然被立即从路由表中删除,但该条路由依然被保存在 RIP数据库中(以便路由随时能够恢复),在老化计时器超时的同时,该路由的垃圾回收计时器也被立即启动。

值得注意的是,对于老化计时器已超时的失效 RIP路由,依然会被包含在路由器对外发送的Response报文中,只不过路由的度量值被设置为16跳,即不可达。

 

垃圾回收计时器( (Garbage-Collect)120s)

上文已经说到,当一条 RIP路由的老化计时器超时,该条路由会变为不可用并被设备从路由表中删除,但是依然被保存在RIP数据库中,同时设备立即为该路由启动垃圾回计时器。在垃圾回收计时器计数的这段时间,RIP路由器在泛洪路由更新时将该条路由的度量值设置为16跳,以便告知其他路由器关于该网络的不可达情况。若连该计时器t超时,则路由便被彻底删除。

 

RIP 防环机制

路由中难免会出现环路,RIP也不例外,RIP常见的主要有以下防环机制:

  • 水平分割
  • 毒性反转
  • 触发更新
  • 计数到无穷

1、水平分割

水平分割防止向始发路由器通告相同的路由。

这个乍一看是不是很难理解?

我们来举个栗子:

现在有一个小型的网络,三台路由器:R1、R2、R3。R1和R2之间的网段为172.16.1.0/24:

fig:

现在R2要将172.16.1.0/24宣告给R3:

fig:

R3收到该路由信息后更新其路由表,因为RIP的刷新定时器为30秒,所以30秒后,R3开始将自己的路由表信息广播通告给附近所有的路由器,包括R2:

fig:

这样一来,R2和R3就会不停的向对方互发172.16.1.0/24路由协议,形成了一个环路:

fig:

水平分割防止这种类型在网络中循环,R3 知道R2 早先广播了网络172.16.1.0/24,因此R3 不会将此更新发送给R2:

fig:

这样就避免了环路!

路由器从某个接口学到的路由,不会从该接口再发回给邻居路由器

这就是水平分割。

 

2、毒性反转

还是这个拓扑图,假如这个时候172.16.1.0/24网段发生故障,这个时候只有R2知道这个事:

fig:

假如R2上配置了毒性反转,那么此时会把172.16.1.0/24的跳数变为16,广播给其他路由器,也就是R3:

fig:

R3一看172.16.1.0/24的跳数为16,代表路由不可达,就知道172.16.1.0/24这条路行不通了,但是这还是一条路由信息,随机广播给其他路由器,这样就跟毒性一样传播了,所有的路由器都知道了172.16.1.0/24网络不可达,避免了环路。

路由器从某个接口学到路由后,将该路由的跳数设置为16,并从原接收接口发回给邻居路由器。

这就是毒性反转。

 

3、触发更新

fig:

当路由信息发生变化时,立即向邻居路由器发送触发更新报文,而不要等待更新定时器所规定的下
一个响应消息的发送时刻。
为了较少带宽和路由器处理资源的消耗,触发更新响应消息只包含路由信息发生改变了的路由项

 

4、计数到无穷

将度量值等于16的路由定义为不可达(infinity)。在路由环路发生时,某条路由的度量值将被设置为16,该路由被认为不可达。

 

RIP基本配置

fig: 启动rip并宣告

开启rip,默认一号序列,默认v1
[AR1]rip
宣告自己的网段,注意是宣告自然网段,也就是a,b,c。10.0.1.1属于a网段,172.16.1.1属于b网段。以此类推
[AR1-rip-1]network 10.0.0.0
查看路由表
[AR1]display ip routing-table

fig:

开启rip v2版本。

[AR1]rip
[AR1-rip-1]version 2

配置RIP v2 简单验证

进入相应接口
[AR1]int g0/0/0
指定RIP区域所使用的验证模式及验证口令。
[AR1-GigabitEthernet0/0/0]rip authentication-mode simple huawei

[AR2]int g0/0/0
[AR2-GigabitEthernet0/0/0]rip authentication-mode simple huawei

fig:

配置RIP v2 MD5密文验证

删除上一步的简单认证步骤
[AR1-GigabitEthernet0/0/0]und rip authentication-mode
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]rip authentication-mode md5 usual huawei

fig:

RIP路由协议的汇总

[AR3]rip
[AR3-rip-1]network 3.0.0.0

可以看出来是没有子网掩码

查看rip默认配置信息
[AR3]dis default-parameter rip

fig:

可以看出来是默认开启了自动汇总

配置 v2

[AR1]rip
[AR1-rip-1]version 2

[AR2]rip
[AR2-rip-1]version 2

[AR3]rip
[AR3-rip-1]version 2

fig: fig:

有了子网掩码

fig:

自动汇总默认是开启的

可以观察到,接收到的路由条目是具体的明细路由条目,而没有汇总路由,即此时RIPv2默认自动汇总并没有生效。
这是因为在华为设备上,以太网接口和串口都默认启用了水平分割功能。为了防止环路和不连续子网问题的产生,在启用了水平分割或毒性逆转的接口上,RIPv2的默认自动汇总就会失效,所以从R3通告过来的都是具体的明细路由条目。

要使RIPv2的默认自动汇总生效,有两种方法。
第一种方法,使用summary always命令。配置该命令后,不论水平分割是否启用,RIPv2的自动汇总都生效

[AR3]rip
[AR3-rip-1]summary always

fig:

第二种办法,关闭相应接口下的水平分割功能。

[AR3]int g0/0/01
[AR3-GigabitEthernet0/0/1]undo rip split-horizon

fig:

配置RIPv2 手动汇总

[AR3]int g0/0/1
[AR3-GigabitEthernet0/0/1]rip summary-address 3.0.0.0 255.255.252.0

 

RIP优缺点

优点

  • 易于理解和配置,适用于小型网络
  • 使用范围广,基本上所有路由器都支持
  • 负载均衡实现相对比较简单
  • 当网络发生变化时,会自动发送触发更新

缺点

  • 最大跳数是15跳,不适合大规模的网络
  • 每 30 秒广播一次更新,因此会造成流量瓶颈
  • 不支持可变长度子网掩码
  • 路由更新占用了大量带宽,造成资源浪费