使用最广泛的一种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的极限。
慢收敛问题的解决
RIP报文格式