电脑技术学习

详细解析选路信息协议(RIP)

dn001

使用最广泛的一种IGP是选路信息协议RIP(Routing Information Protocol),RIP的另一个名字是routed(路由守护神),来自一个实现它的程序。这个程序最初由加利福尼亚大学伯克利分校设计,用于给他们在局域网上的机器提供一致的选路和可达信息。

它依靠物理网络的广播功能来迅速交换选路信息。它并不是被设计来用于大型广域网的(尽管现在的确这么用)。

在旋乐(Xerox)公司的Palo Alto研究中心PARC早期所作的关于网络互连的研究的基础上,routed实现了起源于Xerox NS RIP的一个新协议,它更为通用化,能够适应多种网络。

尽管在其前辈上做了一些小改动,RIP作为IGP流行起来并非技术上有过人之处,而是由于伯克利分校把路由守护神软件附加在流行的4BSD UNIX系统上一起分发,从而使得许多TCP/IP网点根本没考虑其技术上的优劣就采用routed并开始使用RIP.一旦安装并使用了这个软件,它就成为本地选路的基础,研究人员也开始在大型网络上使用它。

关于RIP的最令人吃惊的事可能就是它在还没有正式标准之前就已经广泛流行了。大多数的实现都脱胎于伯克利分校的程序,但是由于编程人员对未形成文档的微妙细节理解不同而造成了它们之间互操作性限制。协议出现新版本后,出现了更多的问题。在1988年6月形成了一个RFC标准,这才使软件商解决了互操作性问题。

RIP协议的基础就是基于本地网的矢量距离选路算法的直接而简单的实现。它把参加通信的机器分为主机的(active)和被动的(passive或silent)。主动路由器向其他路由器通告其路由,而被动路由器接收通告并在此基础上更新其路由,它们自己并不通告路由。只有路由器能以主动方式使用RIP,而主机只能使用被动方式。

以主动方式运行RIP的路由器每隔30秒广播一次报文,该报文包含了路由器当前的选路数据库中的信息。每个报文由序偶构成,每个序偶由一个IP网络地址和一个代表到达该网络的距离的整数构成。RIP使用跳数度量(hop count metric)来衡量到达目的站的距离。在RIP度量标准中,路由器到它直接相连的网络的跳数被定义为1,到通过另一个路由器可达的网络的距离为2跳,其余依此类推。因此从给定源站到目的站的一条路径的跳数(number of hops或hop count)对应于数据报沿该路传输时所经过的路由器数。显然,使用跳数作为衡量最短路径并不一定会得到最佳结果。例如,一条经过三个以太网的跳数为3的路径,可能比经过两条低速串行线的跳数为2的路径要快得多。为了补偿传输技术上的差距,许多RIP软件在通告低速网络路由时人为地增加了跳数。

运行RIP的主动机器和被动机器都要监听所有的广播报文,并根据前面所说的矢量距离算法来更新其选路表。例如图1.2中的互连网络中,路由器R1在网络2上广播的选路信息报文中包含了序偶(1,1),即它能够以费用值1到达网络1.路由器R2和R5收到这个广播报文之后,建立一个通过R1到达网络1的路由(费用为2)。然后,路由器R2和R5在网络3上广播它们的RIP报文时就会包含序偶(1,2)。最终,所有的路由器和主机都会建立到网络1的路由。

RIP规定了少量的规则来改进其性能和可靠性。例如,当路由器收到另一个路由器传来的路由时,它将保留该路由直到收到更好的路由。在我们所举的例子中,假如路由器R2和R5都以费用2来广播到网络1的路由,那么R3的R4就会将路由设置为经过先广播的那个路由器到达网络1.即:为了防止路由在两个或多个费用相等的路径之间振荡不定,RIP规定在得到费用更小的路由之前保留原有路由不变。

假如第一个广播路由的路由器出故障(如崩溃)会有什么后果?RIP规定所有收听者必须对通过RIP获得的路由设置定时器。当路由器在选路表中安置新路由时,它也为之设定了定时器。当该路由器又收到关于该路由的另一个广播报文后,定时器也要重新设置。假如经过180秒后还没有下一次通告该路由,它就变为无效路由。

RIP必须处理下层算法的三类错误。第一,由于算法不能明确地检测出选路的回路,RIP要么假定参与者是可信赖的,要么采取一定的预防措施。第二,RIP必须对可能的距离使用一个较小的最大值来防止出现不稳定的现象(RIP使用的值是16)。因而对于那些实际跳数值在16左右的互连网络,治理者要么把它划分为若干部分,要么采用其他的协议。第三,选路更新报文在网络之间的传输速度很慢,RIP所使用的矢量距离算法会产生慢收敛(slow convergence)或无限计数(count to infinity)问题从而引发不一致性。选择一个小的无限大值(16),可以限制慢收敛问题,但不能彻底解决客观存在。

选路表的不一致问题并非仅在RIP中出现。它是出现在任何矢量距离协议中的一个根本性的问题,在此协议中,更新报文仅仅包含由目的网络及到达该网络的距离构成的序偶。

R1直接与网络1相连,所以在它的选路表中有一条到该网络的距离为1的路由;在周期性的路由广播中包括了这个路由。R2从R1处得知了这个路由,并在自己的选路表中建立了相应的路由产工将之以距离值2广播出去。最后R3从R2处得知该路由并以距离值3广播。


;现在假设R1到网络1的连接失效了。那么R1立即更新它的选路表把该路由的距离置为16(无穷大)。在下一次广播时,R1应该通告这一信息。但是,除非协议包含了额外的机制预防此类情况,可能有其他的路由器在R1广播之前就广播了其路由。可能假设一个非凡的情况,即R2正好在R1与网络1连接失效后通告其路由。因此,R1就会收到R2的报文,并对此使用通常的矢量距离算法:它注重到R2有到达网络1的费用更低的路由,计算出现在到达网络1需要3跳(R2通告的到网络1费用是2跳,再加上到R2的1跳)。然后在选路表中装入新的通过R2到达网络1的路由。图1.4描述了这个结果。这样的话,R1和R2中的任一个收到去网络1的数据报之后,就会把该报文在两者之间往返传输直到寿命计时器超时溢出。

这两个路由器随后广播的RIP不能迅速解决这个问题。在下一轮交换选路信息的过程中,R1通告它的选路表中的各个项目。而R2得知R1到网络1的距离是3之后,计算出该路由新长度4.到第三轮的时候,R1收到从R2传来的路由距离增加的信息,把自己的选路表中该路由的距离增到5.如此循环往复,直至距离值到达RIP的极限。

  慢收敛问题的解决

  可以使用分割范围更新(split horizon update)技术来解决慢收敛问题。在使用分割范围技术时,路由器记录下收到各路由的接口,而当这路由器通告路由时,就不会把该路由再通过那个接口送回去。
在该例中,路由器R2不会把它到网络1的距离为2的路由再通告给R1,因此一旦R1与网络1的连接失效,它就不会再通告该路由。经过几轮选路更新之后,所有的机器都会知道网络1是不可达的。但是分割范围更新技术不能解决所有的拓扑结构中的问题。
  考虑慢收敛问题的另一个方法是使用信息流的概念。假如路由器通告了到某网络的短路由,所有接收路由器迅速地作出安装该路由的反应。当路由器停止通告某路由,协议在判定该路由不可达之前,要依据超时机制来工作。当超时出现时,路由器寻找替代路由并开始传播此信息。不幸的是,路由器并不知道这个替代路由是否要依靠于刚刚消失的路由。因此,通常不应迅速地传播否定的信息。有一条警句或谓一语破的:
好消息传播得快,坏消息传播得慢。
  解决慢收敛问题的另一个技术使用了抑制(hold down)法。抑制法迫使参与协议工作的路由器,在收到关于某网络不可达的信息后的一段固定时间内,忽略任何关于该网络的路由信息。这段抑制时间的典型长度是60秒。该技术的思路是等待足够的时间以便确信所有的机器都收到坏消息,并且不会错误地接受内容过时的报文。需要指出的是,所有参与RIP的机器都要遵循抑制策略,否则仍然会发生选路回路现象。抑制技术的缺点是:假如出现了选路回路,那么在抑制期间内这些选路回路仍然会维持下去。更严重的是,在抑制期间所有不正确的路由也保留下来了,即使是有替代路由的存在。
  解决慢收敛问题的最后一种技术就是毒性逆转(poison reverse)。当一条连接消失后,路由器在若干个更新周期内都有保留该路由,但是在广播路由时则规定该路由的费用为无限长。为提高毒性逆转法的效率,它应该与触发更新(triggered updates)技术结合。触发更新技术使得新信息,路由器减少了因为想信好消息而轻易出错的时间。
  不幸的是,虽然触发更新技术、毒性逆转技术、抑制技术和分割范围技术能够解决一些问题,但它们又带来了一些新的问题。例如,在许多路由器共享一个公共网络的结构中采用触发更新技术的情况下,一个广播就能改变这些路由器的选路表,引发一轮新的广播。假如第二轮广播改变了路由表,它又会引起更多的广播。这就产生了广播雪崩。
  使用广播技术(这有可能产生选路回路)和使用抑制技术防止慢收敛问题,可使得RIP在广域网上的工作效率极低。广播要耗费大量宝贵的带宽。即便不出现广播雪崩现象,所有机器周期性地进行广播也意味着网络流量随着路由器数目的增加而增加。而可能出现的选路回路在线路容量有限的情况下可能就是致命的问题。当兜圈子的分组使得线路的容量饱和后,路由器要交换一些选路报文来打破这种回路,就变得很困难甚至是不可能的。同样,在广域网中,抑制期间可能太长,使得高层协议使用的定时器超时从而中断连接。尽管有这些熟知的问题,但还是有许多的组织在广域网上使用RIP作为IGP。

  RIP报文格式

  RIP报文大致可分为两类:选路信息报文和对信息的请求报文。它们都使用同样的格式,由固定的首部和后面可选的网络和距离序偶列表组成。图1.5给出的报文的格式:在这个图中,命令(COMMAND)字段按照下表的规定对应了各种操作:

0
8;;;;;16
24;;;31
命令(1-5)
版本(1)
必为零
网1的协议族
必为零
网1的IP地址
必为零
必为零
至网1的距离
网2的协议族

必为零
网2的IP地址
必为零
必为零
至网2的距离

图1.5; RIP报文的格式。在32比特的首部之后,报文包含了一系列的序偶,每个序偶由一个网络IP地址和一个到达该网络的整数距离值构成
命令
含; 义
1
请求部分的或全部的选路信息
2
响应,包含发送方选路表内的网络距离序偶
3
启动跟踪模式(已过时)
4
关闭跟踪模式(已过时)
5
保留由Sun Microsystem公司内部使用
  路由器或主机通过发送请求命令向另一个路由器请求(request)选路信息。路由器使用响应(response)命令回答。但是在大多数情况下,路由器不经请求就周期性发送响应报文。版本(VERSION)字段包含了协议的版本号(目前的值是1),接收方检测该字段以便对报文作出正确的解释。

  RIP编址约定

  RIP的普遍适用性也体现在它传送网络地址的方式上。它的地址格式不局限于供TCP/IP用户使用,还能适应其他网络协议族的规定。图1.5中显示出RIP通告中的每个网络地址可以长达14个八位组。当然,IP地址仅需4个八位组,RIP定义余下的八位组必须为零。网络i族(FAMILY OF NET i)字段指出了解释它后面出现的网络地址时应遵循的协议族。RIP对各类地址族的赋值遵循了4BSD UNIX操作系统的规定(IP地址类型的赋值是2)。
  除了正常的IP地址之外,RIP规定地址0.0.0.0作为默认路由。RIP对通告的每个路由,包括默认路由,都附加了距离度量标准。因此可以让两个路由器以不同的度量标准来通告默认路由(如到互连网络的其余部分的路由),选择其中的一条作为基本路径,另一条作为备用。
  在RIP报文每个项目的最后一个字段是到网络i的距离(DISTANCE TO NET i)字段,其内容是到达指定网络的整数型距离值。距离值是以跳数作为度量单位的,但是它的取值范围限制在1到16,16代表无限远(也就是说该路由不存在)。

  RIP报文的发送

   RIP报文中并没包含显式的长度字段。相反,RIP假设底层投递系统能够告诉接收方收到的报文长度。非凡是,在TCP/IP系统中,RIP报文依靠于UDP来告诉接收方报文的长度。RIP工作在UDP上的端口是520,虽然RIP可以以不同的UDP端口来发送请求报文,但是在接收端的UDP端口通常都是520,同时这也是RIP产生广播报文的源端口。
  使用RIP作为内部路由器协议限制选路的度量必须基于跳数。但跳数通常仅仅提供对网络响应能力和容量的粗略估量,而并不能产生最佳路由。此外,基于最小跳数来计算路由会有严重的缺点,即它会使选路相对固定不变,因为路由不能对网络负荷的变化作出反应。(