在目前的Internet网上,运行一种网关协议是不可能的,我们要将它分成很多的自治系统(Autonomous System-AS),在每个自治系统有它自己的路由技术。我们称自治系统内部的路由协议为内部网关协议(Interior gateway protocol-IGP)。RIP(Routing Information Protocol)就是内部网关协议的一种,它采用的是矢量距离(Vector-Distance)算法。 RIP系统的开发是XEROX Palo Alto 研究中心(PARC)所进行的研究和XEROX的PDU和XNC路由选择协议为基础的。但是RIP的广泛应用却得益于它加利福尼亚大学伯克利分校的许多局域网中的实现。
RIP只适用于小系统中,当系统变大后受到无限计算问题的困扰,且往往收敛的很慢。现已被OSPF所取代。
1.矢量距离算法
矢量距离算法(简称V-D算法)的思想是:网关周期性地向外广播路径刷新报文,主要内容是由若干(V,D)序偶组成的序偶表;(V,D)序偶中的V代表“向量”,标识网关可到达的信宿(网关或主机),D代表距离,指出该网关去往信宿V的距离;距离D按驿站的个数计。其他网关收到某网关的(V,D)报文后,据此按照最短路径原则对各自的路由表进行刷新。
具体的说,V-D算法如下所述:
首先,网关刚启动时,对其V-D路由表进行初始化,该初始化路由表包含所有去往与本网关直接相连的网络。由于去往直接相连的网络不经过中间驿站,所以初始V-D路由表中各路径的距离均为0。
然后各网关周期性地向外广播企V-D路由表内容。与某网关直接相连(位于同一物理网络)的网关收到该路由表报文后,据此对本地路由表进行刷新。刷新时,网关逐项检查来自相邻网关的V-D报文,碰到下述表目之一,须修改本地路由表:
(1) Gj列出的某表目Gi路由表总没有。则Gi路由表须增加相应表目,其“信宿”是Gj表目中的信宿,其“距离”为Gj表目中的距离加1,其“路径”为“Gj”(即下一驿站为Gj)。
(2) Gj去往某信宿的距离比Gi去往某信宿的距离减1还小。这种情况说明,Gi去往某信宿若经过Gj,距离会更短。则Gi修改本表目,其中“信宿”域不变,“距离”为Gj表目中的距离加1,“路径”为“Gj”。
(3) Gi去往某信宿的路径经过Gj,而Gj去往该信宿的路径发生变化。这里分两种情况:
A:Gj的V-D表不再包含去往某信宿的路径,则Gi中相应路径序删除。
B:Gj的V-D表中去往某信宿的路径距离发生变化,则Gi中相应表目“距离”须修改,以Gj中的“距离”加1取代原来的距离。
V-D算法的路径刷新发生在相邻网关之间,所以V-D报文不一定以广播的方式发送出去,一种比较优化的方法是网关直接向相邻的网关发送V-D报文,不必采取广播的方式。
V-D算法的优点是易于实现,但是它不适应路径剧烈变化的或大型的网间网环境,因为某网关的路径变化象波动一样从相邻网关传播出去,其过程是非常缓慢的。因此,V-D算法路径刷新过程中,可能出现路径不一致问题。V-D算法的另一个缺陷是它需要大量的信息交换:一方面,V-D报文就每一可能的信宿网络都包含一条表目,报文的大小相当于一个路由表(其表目的数与网间网网络数成正比),而且其中的许多表目都是与当前路径刷新无关的;另一方面,V-D算法要求所有网关都参加信息交换,要交换的信息量极大。
2.RIP的原理
RIP协议是V-D算法在局域网上的直接实现,RIP将协议的参加者分为主动机和被动机两种。主动机主动地向外广播路径刷新报文,被动机被动地接受路径刷新报文。一般情况下,网关作主动机,主机作被动机。
RIP规定,网关每30秒向外广播一个V-D报文,报文信息来自本地路由表。RIP协议的V-D报文中,其距离以驿站计:与信宿网络直接相连的网关规定为一个驿站,相隔一个网关则为两个驿站……依次类推。一条路径的距离为该路径(从信源机到信宿机)上的网关数。为防止寻径回路的长期存在,RIP规定,长度为16的路径为无限长路径,即不存在路径。所以一条有限的路径长度不得超过15。正是这一规定限制了RIP的使用范围,使RIP局限于小型的局域网点中。
对于相同开销路径的处理是采用先入为主的原则。在具体的应用中,可能会出现这种情况,去往相同网络有若干条相同距离的路径。在这种情况下,无论哪个网关的路径广播报文先到,就采用谁的路径。直到该路径失败或被新的更短的路径来代替。
RIP协议对过时路径的处理是采用了两个定时器;超时计时器和垃圾收集计时器。所有机器对路由表中的每个项目对设置两个计时器。每增加一个新表,就相应的增加两个计时器。当新的路由被安装到路由表中时,超时计时器被初始化为0,并开始计数。每当收到包含路由的RIP消息,超时计时器就被重新设置为0。假如在180秒内没有接收到包含该路由的RIP消息,该路由的度量就被设置为16,而启动该路由的垃圾收集计时器。假如120秒过去了,也没有收到该路由的RIP消息,该路由就从路由表中删除。假如在垃圾收集计时器到120秒之前,收到了包含路由的消息,计时器被清0。而路由被安装到路由表中。
慢收敛的问题及其解决的方法。包括RIP在内的V-D算法路径刷新协议,都有一个严重的缺陷,即“慢收敛”(slow convergence)问题。又叫“计数到无穷”(count to infinity)。假如出现环路,直到路径长度达到16,也就是说要经过7番往返(至少30X7秒),路径回路才能被解除,这就是所谓的慢收敛问题。采用的方法有很多种,主要采用有分割范围(split horizon)法和带触发更新的毒性逆转(Posion Reverse with Triggered updates))法。分割范围法的原理是:当网关从某个网络接口发送RIP路径刷新报文时,其中不能包含从该接口获得的路径信息。毒性逆转法的原理是:某路径崩溃后,最早广播此路径的网关将原路径继续保存在若干刷新报文中,但是指明路径为无限长。为了加强毒性逆转的效果,最好同时使用触发更新技术:一旦检测到路径崩溃,立即广播路径刷新报文,而不必等待下一个广播周期。
3.RIP报文的格式
对于RIP报文有两种版本的格式,Version 1和Version 2。两种报文稍有不同,如图1所示:
图1 RIP报文格式
命令字段的值的范围是从1到5,但只有1和2是正式的值。命令码1标识一个请求报文,命令码2标识一个相应报文。RIP是一个基于UDP协议的,所以受UDP报文的限制一个RIP的数据包不能超过512字节。两个版本都包含一个地址族,对于IP地址该字段的值为2,后面是一个IP地址和它的度量值(站点计数)。这些通告字段可重复25次。
路由选择域:与该报文相关的路由选择守护进程的标识符。在UNIX系统中,该字段是一个进程的标识符。一台机器通过使用路由选择域,就可以同时运行多个RIP。
路径标签:若干RIP支持外部网关协议(EGP),该字段包含一个自治系统号。
子网掩码:该字段与报文中的IP地址相关。
下一站的IP地址:假如该字段为0,则表明数据报应当发送到正在发送该RIP报文的机器,否则,该字段包含一个IP地址,指明应将数据报发往何处。
从报文中我们可以看出,RIP-1不能运行于包含有子网的自治系统中,因为它没有包含运行所必须的子网信息-子网掩码。RIP-2有子网掩码,因而它可以运行于包含有子网的自治系统中,这也是RIP-2对RIP-1有意义的改进。
4.RIP协议的运行
网关刚启动时,运行V-D算法,对V-D路由表进行初始化,为每一个和它直接相连的实体建一个表目,并设置目的IP地址,距离为1(这里RIP和V-D略有不同),下一站的IP为0,还要为这个表目设置两个定时器(超时计时器和垃圾收集计时器)。每隔30秒就向它相邻的实体广播路由表的内容。相邻的实体收到广播时,在对广播的内容进行细节上的处理之前,对广播的数据报进行检查。因为广播的内容可能引起路由表的更新,所以这种检查是细致的。首先检查报文是否来自端口520的UDP数据报,假如不是,则丢弃。否则看RIP报文的版本号:假如为0,这个报文就被忽略;假如为1,检查必须为0的字段,假如不为0,忽略该报文;假如大于1,RIP-1对必须为0的字段就不检查。然后对源IP地址进行检查,看它是否来自直接相连的邻居,假如不是来自直接邻居,则报文被忽略。假如上面的检查都是有效的,则对广播的内容进行逐项的处理。看它的度量值是否大于15,假如是则忽略该报文(实际上,假如来自相邻网关的广播,这是不可能的)。然后检查地址族的内容,假如不为2,则忽略该报文。然后更新自己的路由表,并为每个表目设置两个计时器,初始化其为0。就这样所有的网关都每隔30秒向外广播自己的路由表,相邻的网关和主机收到广播后来更新自己的路由表。直到每个实体的路由表都包含到所有实体的寻径信息。假如某条路由忽然断了,或者是其度量大于15,与其直接相邻的网关采用分割范围或触发更新的方法向外广播该信息,其他的实体在两个计时器溢出的情况下将该路由从路由表中删除。假如某个网关发现了一条更好的路径,它也向外广播,与该路由相关的每个实体都要更新自己的路由表的内容。
为了更好地理解RIP协议的运行,下面以图2所示的简单的互连网为例来讨论图中各个路由器中的路由表是怎样建立起来的。
在一开始,所有路由器中的路由表只有路由器所接入的网络(共有两个网络)的情况。现在的路由表增加了一列,这就是从该路由表到目的网络上的路由器的“距离”。在图中“下一站路由器”项目中有符号“-”,表示直接交付。这是因为路由器和同一网络上的主机可直接通信而不需要再经过别的路由器进行转发。同理,到目的网络的距离也都是零,因为需要经过的路由器数为零。图中粗的空心箭头表示路由表的更新,细的箭头表示更新路由表要用到相邻路由表传送过来的信息。
接着,各路由器都向其相邻路由器广播RIP报文,这实际上就是广播路由表中的信息。
假定路由器R2先收到了路由器R1和R3的路由信息,然后就更新自己的路由表。更新后的路由表再发送给路由器R1和R3。路由器R1和R3分别再进行更新。
RIP协议存在的一个问题是:当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。以图2为例,设三个路由器都已经建立了各自的路由表,现在路由器R1和网1的连接线路与染短开。路由器R1发现后,将到网1的距离改为16,并将此信息发给路由器R2。由于路由器R3发给R2的信息是:“到网1经过R2距离为2”,于是R2将此项目更新为“到网1经过R3距离为3”,发给R3。R3再发给R2信息:“到网1经过肉距离为4”。这样一直到距离增大到16时,R2和R3才知道网1是不可达的。RIP协议的这一特点叫做:好消息传播得快,而坏消息传播得慢。像这种网络出故障的传播时间往往需要较长的时间,这是RIP的一个主要缺点。