1
计算机网络技术理论与实践
1.6.2.2 5.2.2 RIP协议工作原理及实验

5.2.2 RIP协议工作原理及实验

RIP(Routing Information Protocols,路由信息协议)是使用最广泛的距离向量路由协议之一,它是由施乐公司(Xerox)在20世纪70年代开发的。当时,RIP是XNS(Xerox Network Service,施乐网络服务)协议簇的一部分。TCP/IP版本的RIP是施乐协议的改进版。

RIP协议最大的特点是实现原理和配置方法都非常简单。RIP协议有两个版本:RIP v1和RIP v2。RIP v1的功能比较有限,它不支持CIDR(无分类域间路由选择)地址解析。因此,RIP v1是一个有类域协议,也就是说在这个协议中不能把A、B、C类地址的网络划分成更小的网络。此外,RIP v1使用广播方式来发送路由信息,这样当网络中的RIP v1路由器每次发出RIP广播时,广播域中的每一台主机都将收到这个广播数据包,由于主机必须处理广播包,所以要接收下这个广播包进行分析,以确定是不是本机所关心的数据包。当网络中路由器发送大量RIP消息时,会给整个网络中的主机带来很大的处理负担。RIP v2使用多播技术能够很好地解决这个问题,它所发送的RIP报文目的多播IP地址为224.0.0.9,网络中的主机只要没有加入到这个组播组中,就可以直接忽略掉这个多播包,从而降低了主机的处理负担。

1.RIP协议的工作原理

RIP协议是基于V-D(Vector-Distance,距离矢量)路由算法(又称为Bellman-Ford算法)的内部动态路由协议。RIP协议在目前已成为路由器路由选择的标准之一,被大多数IP路由器厂家广泛支持。

RIP距离矢量算法的基本工作原理是:每一个路由器维护一张路由表,该路由表以每一个目标网络为索引,记录到达该目标网络的时间开销或距离开销,以及对应的输出接口。所有使用RIP协议的路由器周期性地向外发送路由刷新报文,在接收到来自各个邻居路由器的路由表后,根据这些路由表来重新计算自己到达各个网络的最佳路由。RIP协议主要包括以下几部分内容。

(1)计算距离矢量

距离矢量路由协议利用度量来评估它和所有已知目的网络间的距离。利用这种距离信息路由器可以找出到目的网络最有效的路径。在RFC-1058中,距离矢量采用路径中所经过路由器的个数,即跳数进行衡量,数据包经过一台路由器即为一跳。跳数越少表示该路径经过的路由器数目越少,通常会有较好的性能。

(2)更新路由表

RIP协议中路由器只记录到每个目的网络的一条路由,为了适应网络的变化,确保唯一路径的通畅,就需要经常保持其路由表的完整性,因此所有活跃的RIP路由器都会周期性地向相邻RIP路由器广播它们路由表的内容。

RIP协议中路由器采用3个计时器来维护路由表:更新计时器、路由暂休计时器和路由清除计时器。更新计时器用来激发路由器的路由表更新,每个RIP路由器只有一个更新计时器。路由暂休和路由清除计时器是针对每条路由表项单独控制的,所以每条路由表项都有一个独立的暂休和路由清除计时器。RIP路由器利用这些计时器来维护路由的完整性和正确性,根据所需的时间激活不同的操作,从而适应网络状态的变化。这些计时器对于RIP协议恢复网络故障的能力来说是非常重要的。

(3)激活路由更新

RIP路由器利用更新计时器大约每30s激活一次路由更新操作,进行路由更新操作时,RIP路由器会将自己的路由信息广播到所有的邻居路由器。也就是说每个RIP路由器大约每30s就要接收来自所有邻居RIP路由器的路由消息,并利用这些路由信息来更新整个路由表。

(4)识别无效路由

在RIP协议中,路由在两种情况下会变成无效:

(1)路由生命周期到期;

(2)路由器被邻居告知某条路由不可用。

这时RIP路由器需要改变它的路由表,将无效路由设置为不可用。

如果RIP路由器在给定的时间内没有接收到某条路由的更新信息,则该路由可能到期。路由暂休定时器通常设成180s,当路由激活或更新时,这条路由的暂休定时器进行初始化;如果过了180s,路由器还没有接到该路由的更新信息,RIP路由器就认为这条路由标识的目的网络不再可达,将路由表中这条路由项标成无效。

收到路由无效通知的RIP路由器会利用此信息来更新它的路由表,将路由无效通知中所标识的路由表项设为无效。无效路由表项不会自动地从路由表中清除,而是继续在路由表中保留很短一段时间,通过路由清除计时器完成清除。

(5)清除无效路由

当RIP路由器将某条路由标识为无效时,会初始化该路由表项的路由清除计时器。当路由清除计时器计时结束时,如果仍未收到该路由表项的更新消息,就将该路由表项从路由表中清除。

从RIP协议内容可以看出,RIP协议的特点是相邻路由器间定时地交换网络的整体知识,RIP路由器一旦从相邻RIP路由器外获取了新的网络知识和网络的变化信息,就将其加入或更新到自己的路由表中,并将这些信息传递给所有的相邻RIP路由器。相邻RIP路由器执行同样的操作,这样经过依次地传递,使自治系统内的所有RIP路由器都能获得当前整个网络的完整路由信息。

有些网络采用NBMA(Non-Broadcast Multi Access,非广播多路访问)方式,即网络中不能直接采用广播或多播的方式来传送数据。对于这种网络,RIP协议就不能使用广播或多播的方式来交换路由信息,可以通过指定邻居(neighbor)路由器的方式,将路由表发送给某些特定的路由器,从而完成路由信息的交换。

RIP协议工作在UDP 520端口,虽然可以采用不同的UDP端口来发送请求报文,但是只能在UDP 520端口接收RIP协议报文。

2.最佳路由的计算

在RIP协议的工作过程中,根据从相邻RIP路由器获取到的网络信息计算最佳路由的过程是整个协议的核心。这个过程包括下面的步骤。

(1)路由表的建立

一般的路由器在启动时,首先要获取一个初始路由表。可以有三种方式来获取初始路由表。

·路由器启动时,从外部存储设备上读取一个完整的路由表到内存中;在路由器关闭时将当前的路由表写回外部存储设备以供下次开机时使用。

·路由器启动时,只有一个空的路由表,通过执行一些命令进行路由表项的填充。

·路由器启动时,从与本路由器直接相连的各网络地址中,计算出一组初始路由信息,通过这些初始路由只能访问直接相连网络中的设备。

通常构造出来的初始路由表是不完善的,需要在路由协议的不断运行过程中进行补充和修改,这就是路由表的刷新操作。

RIP协议采用上述第三种方法完成路由表的初始化,并采用距离向量算法对路由表进行维护和刷新。RIP路由器启动时,对距离向量路由表进行初始化,加入到所有与本路由器直接相连网络的路由。由于是直接相连的网络,不经过中间路由器,所以路由表中各路由表项内的距离均为0。

图5-14是RIP协议初始路由表的一个示例,其中路由器R1的初始路由表只包含了与它直连的网络10.0.0.0和20.0.0.0的路由,而不包括通过R2能够到达的网络30.0.0.0和40.0.0.0,而且路由器中这两条路由表项内的距离值都为0,下一跳标识为直连。

img147

图5-14 初始路由表建立

(2)路由表的更新与维护

所有RIP路由器周期性地向外广播路由刷新报文,该报文包括了多条路由表项。每条表项的内容主要包括目的地址和路由开销(Metric)。

每个RIP路由器都管理了一个路由数据库,该路由数据库中包含了整个网络内所有可能的目的网络,每一个目的网络对应一条路由表项,其中包括下面内容。

·目的地址:指的是目的主机的IP地址或目的网络地址;

·下一跳地址:到目的网络路由中的下一个路由器的IP地址;

·接口:用于到达下一跳路由器的本路由器上的接口;

·Metric值:选择此路由时,从本路由器到达目的地的开销;

·定时器:此路由表项最后一次被修改到当前所经过的时间,这个时间值越小说明这条路由越新,越接近于当前真实的网络状态;

·路由标记:区分路由的类型可以是内部路由协议的路由,也可以是外部路由协议的路由。

RIP路由器上的数据库通过与系统直接相连的网络完成初始化,并从相邻路由器获取到网络信息进行修改和维护。

距离向量算法总是认为路由数据库中的路由已是目前通过和邻居交换所得到的最佳路由。因为目的网络也是与路由器相连的,所以我们在计算到达目的网络的最短路径时可以变为计算到达目的网络所连路由器的最短路径。

令D(i,j)代表从路由器i到路由器j最佳路由的开销值,d(i,j)代表从路由器i不经过其他路由器直接到路由器j的开销,因为开销是可加的,算法中最佳路由可以表示为:

img148

路由器i从相邻路由器k收到k到j的最小开销D(k,j),i将D(k,j)加上i到k的开销d(i,k),就是路由器i经过路由器k到达路由器j的最短路径,由于路由器i只能通过相邻的路由器到达路由器j,所以计算出路由器i经过每个相邻的路由器到达路由器j的最短路径,并从中选取开销值最小的那条路径,就得到了它到路由器j的最佳路径。通过这种方式就可以计算出每个路由器到达其他所有路由器的最短路径,也就是到达其他网络的最短路径。

各路由器周期性地向外广播其路由表的内容。与某路由器直接相连的邻居路由器会收到该路由器的路由更新报文,并根据此报文对本地路由表进行刷新。刷新时,路由器检查来自相邻路由器的所有路由表项,当遇到下述表项之一时,需要修改本地路由表(假设路由器Ri收到路由器Rj的路由表项)。

(1)从Rj收到的某路由表项Ri路由表中没有。在Ri路由表中增加相应表项,其目的网络地址是Rj上该表项的目的网络地址,其下一跳路由器为Rj

(2)从Rj收到的路由表项中去往某目的网络的度量值比Ri去往该目的网络的度量值减1还小。这说明,Ri经过Rj去往该目的网络的距离会更短。修改Ri的相应表项,其中目的网络地址不变,度量值为Rj表项中度量值加1,下一跳路由器为Rj

(3)若Ri去往某目的网络的路由经过Rj,而Rj去往该目的网络的路由发生了变化,则需要进行如下处理:

·如果Rj的路由表中不再包含去往该目的网络的路由,则将Ri中相应路由表项删除;

·如果Rj的路由表中去往该目的网络路由的度量值发生了变化,则Ri中相应表项的度量值修改为Rj中的度量值加1。

3.RIP协议的特点

RIP协议具有简单、易于配置的优点,但是由于协议本身的不足,RIP在使用中也有不少缺点。RIP v1是RIP协议最早的版本,其中存在着一些很重要的缺陷,主要有以下几点:

·RIP协议非常简单,以跳数为依据来计算路由的度量值,经常会得出非最优路由,在实际网络中,网络时延以及网络的可靠性都是影响网络传输质量的重要因素,而RIP协议仅采用跳数值无法正确反映出网络的状态,使得路由器无法选择出最优路径;

·RIP协议采用距离矢量算法,路由器只关心到达目的网络的距离以及对应的输出接口,不了解整个网络的拓扑结构,容易产生路由循环,导致消息在循环的路由上不断被转发,无法到达目标。路由循环还会导致无穷计算问题;

·为了解决无穷计算问题和限制过期消息的存活时间,RIP协议设定跳数上限为16。对于大型网络来说,有些路径的跳数值会超过这个上限值,导致路径被认定为无效,使得网络无法正常工作,所以RIP协议不适用于大型网络;

·RIP协议的安全性较差,由于任意一个网络设备都可以发送路由更新信息,使得RIP协议的可靠性和安全性无法得到保证;

·RIP协议不支持无类IP地址和VLSM;

·RIP协议收敛缓慢,收敛时间经常会大于5分钟;

·RIP协议中路由信息的更新时间较长,并且在更新路由信息时,路由器会发送路由表中全部的路由信息,导致占用大量的网络资源,增加了网络开销。

在RIP v2中对RIP v1的某些缺陷进行了改进,增加了一些扩展特性,以适用于当前的网络环境。这些扩展特性主要包括:

·在每个路由更新条目中都增加了子网掩码字段,使其可以使用可变长的子网掩码,因而,RIP v2协议是一个无类别的路由选择协议;

·路由选择更新具有认证功能,使RIP v2更加安全可靠;

·RIP v2采用组播方式进行路由更新,大大降低了网络中非RIP设备的处理开销。

RIP v2并没有解决RIP v1中的所有问题,为了在一定程度上弥补RIP的缺陷,RIP算法采用了很多优化措施,当然这些措施也不能从根本上解决这些问题。主要的优化措施包括:

(1)水平分割

水平分割(Split Horizon)方法让路由器记住每一条路由信息的来源,也就是标记收到该路由信息的端口号,当本路由器向外广播路由信息时,不会将该路由信息向收到这条信息的端口上发送,可以避免一些路由循环的产生。

(2)毒性逆转

毒性逆转(Poison Reverse)方法是当路由器上一条路由信息变为无效后,不会将它从路由表中删除,而是将其度量值修改为16,即不可达的度量值,然后将这条路由信息广播出去。这样虽然增加了路由表的大小,但是可以快速清除相邻路由器之间的任何环路。

(3)触发更新

触发更新(Trigger Update)方法是当路由器的路由表发生变化时,立即将更新报文广播给相邻的所有路由器,不再等待30s的更新周期。此外,当一个路由器刚启动RIP协议时,它会向外广播请求报文,收到此报文的所有相邻路由器会立即应答一个更新报文,不用等待30s的更新周期。这种方式可以让网络拓扑的变化快速地在网络上传播开,从而减少路由循环产生的可能。

(4)抑制计时

抑制计时(Holddown Timer)方法是当路由器上的一条路由信息无效后,在一段时间内将这条路由置于抑制状态,在这段时间内不再接收关于同一目的地址的路由更新。这是因为如果路由器从一个网段上得知某条路由失效后,立即又在另一个网段上获知这条路由是有效的,这时路由有效信息往往是不正确的。抑制计时方法可以解决这个问题。此外,当网络中的某条链路频繁起停时,采用抑制计时方法可以减少路由的抖动,增加网络的稳定性。

4.RIP协议配置和分析实验

本实验主要是学会在路由器上配置RIP协议,并对RIP协议的工作过程进行分析。

(1)实验目的

掌握路由器上RIP协议的配置方法,能够在模拟环境中进行路由器上RIP协议的配置,并能通过debug信息来分析RIP协议的工作过程。在RIP协议分析中观察没有配置水平分割和配置水平分割后协议工作流程的变化。

(2)实验环境

采用Dynamips仿真环境,Dynamips仿真软件的前端可以采用Dynagen进行文本拓扑设计,也可以使用GNS3进行图形拓扑设计。

(3)实验拓扑

在本实验中,采用的拓扑结构如图5-15所示。其中采用两台路由器RT1和RT2将两台主机PC1、PC2互相连接在一起,两台路由器之间采用串口进行连接,两台PC与路由器都采用以太网进行连接。

img149

图5-15 RIP协议实验拓扑图

(4)配置过程

首先PC1、PC2、RT1和RT2的配置与静态路由实验的配置完全一样,唯一不同的就是在RT1和RT2上将静态路由删除掉,配置上RIP协议来自动计算路由。

步骤1

在RT1的配置模式下配置RIP协议。

进入rip配置模式:

RT1(config)#Router rip

配置版本为RIP v2:

RT1(config-rip)#version 2

配置与RT1直连的网络:

RT1(config-rip)#network 1.0.0.0

RT1(config-rip)#network 2.0.0.0

配置RT1的邻居路由器:

RT1(config-rip)#neighbor 1.1.1.1

在RT2上也进行类似的配置。

步骤2

在RT1和RT2的特权执行模式下打开调试信息:

RT1#Debug ip rip

RT2#Debug ip rip

这时会出现RIP协议的交互信息,根据这些交互信息对RIP协议的工作过程进行分析。

步骤3

在RT1上将与RT2相连的s1/1接口配置为禁止水平分割,然后观察RIP协议交互过程的变化情况。

进入RT1的s1/1接口的配置模式,禁止水平分割(默认是打开水平分割的):

RT1(config-if)#no ip split-horizon

这时RIP协议的交互信息会发生变化,分析变化的原因。

步骤4

在RT1中观察RIP协议动态学习到的路由表项。

在特权模式下输入:

RT1#show ip route

会显示出:

R 1.1.1.1[120/2]via 2.1.1.1,00:00:02,s0/0其中第一项R表示此路由表项是通过RIP协议学习到的。00:00:02表示学习到这个路由表项距离现在的时间,时间越小表示路由表项越新,它的可信度也就越高。而时间较大时表示这个路由表项是很久之前学习到的,现在网络状况可能已经发生了变化。

(5)问题和分析

问题1:RIP协议的交互信息中会出现via 0.0.0.0,这个0.0.0.0表示什么含义?

解释:由于RIP协议交互的是距离表,而不是完整的路由表,路由表中的下一跳IP地址对于邻居路由器是没有意义的,因为如果邻居路由器采用这条路由,那么邻居路由器上该路由表项中的下一跳IP地址就是本路由器。因此via后面的下一跳IP地址为0.0.0.0。

问题2:RIP协议的发送目的地址会有224.0.0.9的情况出现,这是什么地址?

解释:224.0.0.9是组播地址,当RIP v2协议发送一些路由信息的时候,不再采用广播方式,而是向224.0.0.9这个组播地址发送路由信息,凡是运行RIP协议的路由器就会加入这个组播组,来接收RIP路由信息,而其他路由器则不再处理RIP路由信息。