RIP 路由协议

所属等级: H3CNE

一、概述原理:

A、概述:

1、简述和距离解释:

RIP是早期第一代动态路由协议,是一种基于距离矢量算法来计算到达目的网络的最佳路径路由协议,它通过UDP报文进行路由信息的交换,使用的端口号为520,RIP是基于跳数(最多支持15跳)来衡量到达目的地址的距离,称为度量值,RIP协议有多个版本,分为v1/v2/ng版。

RIP 对于距离的定义如下:

  • 从一个路由器到直接连接的网络的距离定义为 1。
  • 从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。
  • 距离” 也称为 “跳数”(hop count),因为每经过一个路由器,跳数就加 1。
  • 这里的“距离”实际上指的是“最短距离”。RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。

RIP 允许一条路径最多只能包含 15 个路由器,大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。这意味着 RIP 只会选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延),但路由器较多的路由。

2、基本工作过程:

  • 路由器刚开始工作时,只知道自己到直连网络的距离为 1,所以初始路由表仅包含本设备的一些直连接口路由。

Untitled

  • 之后每个路由器仅和相邻路由器周期性地交换并更新路由信息

Untitled

  • 若干次交换和更新后,每个路由器都知道到达本 AS 内个网络的最短距离和下一跳地址。称为收敛。

Untitled

3、路由状态图:

由上面的工作过程可以绘制上如上图所示的状态图,同时根据状态划分出以下6个阶段:

  1. 初始状态:路由器开启 RIP 进程,宣告相应接口,则设备就会从相关接口发送和接收 RIP 报文。
  2. 构建路由表:路由器依据收到的 RIP 报文构建自己的路由表项
  3. 维护路由表:路由器每隔30秒发送更新报文,同时接收相邻路由器发送的更新报文以维护路由表项。
  4. 老化路由表项:路由器为将自己构建的路由表项启动180秒的定时器。180秒内,如果路由器收到更新报文,则重置自己的更新定时器和老化定时器。
  5. 垃圾收集表项:如果180秒过后,路由器没有收到相应路由表项的更新,则启动时长为120秒的垃圾收集定时器,同时将该路由表项的度量置为16。
  6. 删除路由表项:如果120秒之后,路由器仍然没有收到相应路由表项的更新,则路由器将该表项删除。

一个路由表项删除共需:180+120=300s

Untitled

4、RIPv1 的发送和发送规则:

发送规则:

注意发送时的路由信息是没有子网掩码,所以只有网段。

将要发送的前缀路由和出接口网段匹配:

  1. 如果不在同一主网,此为主网边界,将前缀自动汇总为有类网段发送前缀到出接口。
  2. 如果在同一主网,检查发送的前缀是否为32位:
    1. 如果是,发送32位前缀到出接口。
    2. 如果不是,检查前缀和出口掩码是否相同:
      1. 如果不同,抑制发送或者汇聚为主网络号。
      2. 如果相同,没有边界,发送正确的前缀到出接口。

接受规则:

收到一个前缀后,如果发现是主网络号,直接放入路由表,掩码是8/16/24.

如果不是主网络号,检查是否在同一主网:

  1. 如果不在,生成有类路由,掩码按有类路由计算。
  2. 如果在同一主网,用接口掩码去掩,然后检查该前缀是网络地址还是主机地址:
    1. 如果是网络地址,生成路由,掩码等于自己的接口掩码,放入路由表。
    2. 如果不是网络地址,就默认是主机地址,生成32位路由,放入路由表。

B、路由更新与维护:

1、定时器:

RIP 协议在更新和维护路由信息时主要使用四个定时器:

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

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

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

注意事项:

  • 如果设备不具有触发更新功能,一个路由表项最多需要300秒才能被删除(老化时间+垃圾收集时间)。
  • 如果存在触发更新,那么一个路由条目最多需要120秒才能被删除(即为垃圾收集时间)。

3、触发更新:

触发更新可以缩短网络收敛时间。在路由表项变化时立即向其他设备广播该信息,而不必等待定时更新。如果没有触发更新,缺省情况下,失效的路由条目会在路由表停留最多300秒(老化定时器+垃圾收集定时器)。无论是定期更新,还是触发更新,RIP路由的更新规则如下:

  • 如果更新的某路由表项在路由表中没有,则直接在路由表中添加该路由表项;
  • 如果路由表中已有相同目的网络的路由表项,且来源端口相同,那么无条件根据最新的路由信息更新其路由表;
  • 如果路由表中已有相同目的网络的路由表项,但来源端口不同,则要比较它们的度量值,将度量值较小的一个作为自己的路由表项;
  • 如果路由表中已有相同目的网络的路由表项,且度量值相等,保留原来的路由表项。

C、报文和特点:

1、RIPv1报文:

RIP-1 报文由头部(Header)和多个路由表项(Route Entries)部分组成。在一个 RIP 报文中,最多可以有25个路由表项。RIP 是一个基于 UD P协议的,并且 RIP-1 的数据包不能超过512字节。

字段名 长度 含义
Command 8比特 标识报文的类型:1:Request报文,向邻居请求全部或部分路由信息;2:Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。
Version 8比特 RIP的版本号:1:RIP-12:RIP-2
Must be zero 16/32比特 必须为零字段。
AFI 16比特 地址族标识,其值为2时表示IP协议。对于Request报文,此字段值为0。
IP Address 32比特 该路由的目的IP地址,可以是自然网段的地址,也可以是子网地址或主机地址。
Metric 32比特 路由的开销值。对于Request报文,此字段值为16。

Untitled

2、特点**:**

  1. 有类别路由协议。
  2. 广播更新。
  3. 基于 UDP,端口号520.

RIP 是一个基于 UDP 的路由协议,并且 RIPv1 的数据包不能超过512字节(RIP 报文头部占用4个字节,而每个路由条目占用20个八位组字节。因此 ,RIP 消息最大为4+(25*20)=504个字节,再加上8个字节的 UDP 头部,所以 RIP 数据报的大小(不含IP包的头部)最大可达512个字节。

RIPv1 的协议报文中没有携带掩码信息,所以 RIPv1 在发送和接收路由更新时会根据主类网段掩码和接口地址掩码来处理路由条目。因此 RIPv1 无法支持路由聚合,也不支持不连续子网。

RIPv1 的协议报文中没有验证字段,所以 RIPv1 也不支持验证。

二、RIPv2 概述原理:

A、新增特点和报文结构:

1、新增特点:

  • 无类别路由协议
  • 组播更新,组播地址224.0.0.9
  • 基于 UDP,端口号520
  • 支持外部 Tag
  • 支持路由聚合和 CIDR
  • 支持指定下一跳
  • 支持认证
  • UDP 端口号:使用 UD P的521端口发送和接收路由信息
  • 源地址:使用链路本地地址 FE80::/10 作为源地址发送 RIPng 路由信息更新报文

2、报文结构:

字段名 长度 含义
Command 8比特 标识报文的类型:1:Request报文,向邻居请求全部或部分路由信息;2:Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。
Version 8比特 RIP的版本号:1:RIP-12:RIP-2
Must be zero 16比特 必须为零字段。
AFI 16比特 地址族标识,其值为2时表示IP协议。对于Request报文,此字段值为0。
Route Tag 16比特 外部路由标记。
IP Address 32比特 该路由的目的IP地址,可以是自然网段的地址,也可以是子网地址或主机地址。
Subnet Mask 32比特 目的地址的掩码。
Next Hop 32比特 提供一个更好的下一跳地址。如果为0.0.0.0,则表示发布此路由的路由器地址就是最优下一跳地址。
Metric 32比特 路由的开销值。对于Request报文,此字段为16。

Untitled

B、版本比较:

RIPv1 是有类路由协议,RIPv2 是无类路由协议
RIPv 1不能支持 VLSM,RIPv2 可以支持 VLSM
RIPv1没有认证的功能,RIPv2可以支持认证,并且有明文(明文验证只有密钥,没有用户名)和MD5两种认证,认证不是两次握手
RIPv1没有手工汇总的功能,RIPv2可以在关闭自动汇总的前提下,进行手工汇总
RIPv1是广播更新,RIPv2是组播更新,
RIPv1对路由没有标记的功能,RIPv2可以对路由打标记(tag),用于过滤和做策略
RIPv1发送的 updata 最多可以携带25条路由条目,RIPv2在有认证的情况下最多只能携带24条路由
RIPv1发送的 updata 包里面没有 next-hop 属性,RIPv2 有 next-hop 属性,可以用与路由更新的重定

C、RIPv2 路由聚合

路由聚合的原理是,同一个自然网段内的不同子网的路由在向外(其它网段)发送时聚合成一个网段的路由发送。

  • RIPv2 支持路由聚合,因为 RIPv2 报文携带掩码位,所以支持子网划分。在 RIPv2 中进行路由聚合可提高大型网络的可扩展性和效率,缩减路由表。
  • 基于 RIPv2 进程的有类聚合即实现自动聚合。
  • 基于接口的聚合即实现手动聚合。
  • 如果被聚合路由携带了Tag,那么路由聚合发生之后,Tag信息将被清除。

路由聚合有两种方式:

  • 基于 RIP 进程的有类聚合:聚合后的路由使用自然掩码的路由形式发布。比如,对于10.1.1.0/24(metric=2)和10.1.2.0/24(metric=3)这两条路由,会聚合成自然网段路由10.0.0.0/8(metric=2)。RIP–2 聚合是按类聚合的,聚合得到最优的 metric 值。
  • 基于接口的聚合:用户可以指定聚合地址。比如,对于10.1.1.0/24(metric=2)和10.1.2.0/24(metric=3)这两条路由,可以在指定接口上配置聚合路由10.1.0.0/16(metric=2)来代替原始路由。

三、防环处理:

A、环路原因:

假设 R1 到达直连网络 N1 的链路出现了故障。当 R1 检测出该故障后,会将到达 N1 的路由条目中的距离修改为 16,表示 N1 不可达。并等待 RIP 更新周期到时后发送该路由信息给 R2

Untitled

而此时 R2 的路由表中关于 N1 的路由条目仍然是先前通过 RIP 协议获取到的,也就是到达 N1 的距离为 2 ,下一跳通过 R1 转发。

假设 R2 的这条路由信息先到达 R1,也就是 R2 的这条路由信息先到达 R1,而 R1 的路由信息后到达 R2。

Untitled

当 R1 收到 R2 的这条路由信息后,就会被该谣言误导。认为可以通过 R2 到达 N1,距离为 3。并在自己的 RIP 更新周期到时后将这条路由信息发送给 R2
当 R2 收到 R1 的这条路由信息后,就会被该谣言误导。认为可以通过 R2 到达 N1,距离为 4 。
并在自己的 RIP 更新周期到时后将这条路由信息发送给 R1

Untitled

Untitled

B、防环措施:

1、水平分割:

水平分割(Split Horizon)的原理是,RIP从某个接口学到的路由,不会从该接口再发回给邻居路由器。这样不但减少了带宽消耗,还可以防止路由环路。

水平分割在不同网络中实现有所区别,分为按照接口和按照邻居进行水平分割。广播网、P2P和P2MP网络中是按照接口进行水平分割的,如下图所示:

Untitled

routerA会向RouterB发送到网络10.0.0.0/8的路由信息,如果没有配置水平分割,RouterB会将从RouterA学习到的这条路由再发送回给RouterA。这样,RouterA可以学习到两条到达10.0.0.0/8网络的路由:跳数为0的直连路由;下一跳指向RouterB,且跳数为2的路由。

但是在RouterA的RIP路由表中只有直连路由才是活跃的。当RouterA到网络10.0.0.0的路由变成不可达,并且RouterB还没有收到路由不可达的信息时,RouterB会继续向RouterA发送10.0.0.0/8可达的路由信息。即,RouterA会接受到错误的路由信息,认为可以通过RouterB到达10.0.0.0/8网络;而RouterB仍旧认为可以通过RouterA到达10.0.0.0/8网络,从而形成路由环路。配置水平分割后,RouterB将不会再把到网络10.0.0.0/8的路由发回给RouterA,由此避免了路由环路的产生。

对于NBMA(Non-Broadcast Multiple Access)网络,由于一个接口上连接多个邻居,所以是按照邻居进行水平分割的。路由就会按照单播方式发送,同一接口上收到的路由可以按邻居进行区分。从某一接口的对端邻居处学习到路由,不会再通过该接口发送回去。

Untitled

在NBMA网络配置了水平分割之后,RouterA会将从RouterB学习到的172.16.0.0/16路由发送给RouterC,但是不会再发送回给RouterB。

2、毒性反转

毒性反转(Poison Reverse)的原理是,RIP从某个接口学到路由后,从原接口发回邻居路由器,并将该路由的开销设置为16(即指明该路由不可达)。利用这种方式,可以清除对方路由表中的无用路由。

配置毒性反转后,RouterB在接收到从RouterA发来的路由后,向RouterA发送一个这条路由不可达的消息(将该路由的开销设置为16),这样RouterA就不会再从RouterB学到这条可达路由,因此就可以避免路由环路的产生。

3、路由毒化:

当路由失效,标记为16跳,并通告邻居,使邻居及时删除路由

4、抑制计时器:

计时时间内,不接收和原路由跳数一致或更高的路由更新。

  1. 当网络11.4.0.0发生故障时,路由器RTC抑制自己路由表中相应的路由工页,也就是在路由表中使到达网络11.4.0.0的路径开销是无穷大(也就是不可达),同时启动抑制时间。在抑制时间结束之前的任何时刻,如果从同一相邻路由器(或同一方向)又接收到此路由可达的更新信息,路由器就将网络标识为可达,并删除抑制时间。
  2. 如果接收到其他的相邻路由器的更新信息, 且新的权值比以前的权值好, 则路由器就将更新路由表,接收这一更优的路由,并删除抑制时间。
  3. 在抑制时间结束之前的任何时刻, 如果从其他的相邻路由器接收到路径可用的更新信息,但新的权值没有以前的权值好,则不接收此更新路由。如果在抑制时间过后,路由器仍能收到该更新路由信息,则路由器将更新路由表。

Untitled

5、触发更新:

触发更新机制是在路由信息产生某些改变时立即发送给相邻路由器称为触发更新的信息。路由器检测到网络拓扑变化后,立即依次发送触发更新信息给相邻路由器,不等待更新周期。如果每个路由器都这样做,这个更新会很快传播到整个网络。

6、最大跳数:

不接收跳数大于15跳的路由更新

四、协议补充:

1. 无效路由(Invalid Route)

  • 定义:无效路由是指在 RIP 协议中,一条路由被认为已经不再可用或不可达。通常,当一个路由器在一定时间内没有收到一个特定路由的更新信息时(这个时间通常是 180 秒),它会将该路由标记为无效。
  • 处理方式:当一条路由被标记为无效时,路由器会把它的跳数设置为 16(不可达),但不会立即从路由表中删除。相反,这条路由会进入抑制状态,以便通知其他路由器该路由不可达。
  • 影响:无效路由的目的在于避免使用已不可用的路径,从而防止数据包被转发到不可达的网络。

2. 抑制路由(Holddown Route)

  • 定义:抑制路由是指当一个路由器标记某条路由为无效后,它会进入一个抑制状态,在此期间(通常是 180 秒),路由器将拒绝接受任何新的同一路由信息。抑制状态可以防止路由表的快速波动和可能的路由环路。
  • 处理方式:在抑制期间,即使路由器从其他路由器收到该无效路由的更新信息,也不会立即把这条路由标记为可用状态。相反,路由器会继续维持该路由的不可达状态,直到抑制计时器到期。
  • 影响:抑制路由的机制有助于稳定网络,避免由于网络故障引起的短暂波动而导致路由器频繁修改路由表,从而可能引发路由环路或不一致。

RIP基础知识

4.6.2、路由信息协议 RIP 的基本工作原理_rip的工作原理-CSDN博客