RIP

RIP

路由信息协议
RIP(Routing Information Protocol),路由信息协议(RIP)是内部网关协议IGP中最先得到广泛使用的协议【1058】。[1]RIP是一种分布式的基于距离向量的路由选择协议,是因特网的标准协议,其最大优点就是实现简单,开销较小。但RIP的缺点也较多。首先,其限制了网络的规模,能使用的最大距离为15(16表示不可达)。其次路由器交换的信息是路由器的完整路由表,因而随着网络规模的扩大,开销也就增加。最后,“坏消息传播得慢”,使更新过程的收敛时间过长。因此对于规模较大的网络就应当使用OSPF协议。然而目前在规模较小的网络中,使用RIP协议的仍占多数。
  • 中文名:路由信息协议
  • 英文名:RIP(Routing Information Protocol)
  • 类 型:内部网关协议IGP
  • 应 用:计算机行业

简介

RIP:RoutinginformationProtocol

是应用较早、使用较普遍的内部网关协议(InteriorGatewayProtocol,简称IGP),适用于小型同类网络,是典型的距离向量(distance-vector)协议。文档见RFC1058、RFC1723。

RIP通过广播UDP报文来交换路由信息,每30秒发送一次路由信息更新。RIP提供跳跃计数(hopcount)作为尺度来衡量路由距离,跳跃计数是一个包到达目标所必须经过的路由器的数目。如果到相同目标有二个不等速或不同带宽的路由器,但跳跃计数相同,则RIP认为两个路由是等距离的。RIP最多支持的跳数为15,即在源和目的网间所要经过的最多路由器的数目为15,跳数16表示不可达。

RIP报文格式

RIP使用特殊的报文来收集和共享至有关目的地的距离信息。下图显示了路由信息域中只带一个目的地的RIP报文。

RIP报文中至多可以出现25个AFI、互联网络地址和度量域。这样允许使用一个RIP报文来更新一个路由器中的多个路由表项。包含多个路由表项的RIP报文只是简单地重复从AFI到度量域的结构,其中包括所有的零域。这个重复的结构附加在下图结构的后面。具有两个表项的RIP报文如图所示。

地址域可以既包括发送者的地址也包括发送者路由表中的一系列IP地址。请求报文含有一个表项并包括请求者的地址。应答报文可以包括至多25个RIP路由表项。

整个的RIP报文大小限制是512B。因此,在更大的RIP网络中,对整个路由表的更新请求需要传送多个RIP报文。报文到达目的地时不提供顺序化;一个路由表项不会分开在两个RIP报文中。因此,任何RIP报文的内容都是完整的,即使它们可能仅仅是整个路由表的一个子集。当报文收到时接收节点可以任意处理更新,而不需对其进行顺序化。

比如,一个RIP路由器的路由表中可以包括100项。与其他RIP路由器共享这些信息需要4个RIP报文,每个报文包括25项。如果一个接收节点(结点)首先收到了4号报文(包括从76至100的表项),它会首先简单地更新路由表中的对应部分,这些报文之间没有顺序相关性。这样使得RIP报文的转发可以省去传输协议如TCP所特有的开销。

1.命令域

命令域指出RIP报文是一个请求报文还是对请求的应答报文。两种情形均使用相同的帧结构:

A.请求报文请求路由器发送整个或部分路由表。

B.应答报文包括和网络中其他RIP节点共享的路由表项。应答报文可以是对请求的应答,也可以是主动的更新。

2.版本号域

版本号域包括生成RIP报文时所使用的版本。RIP是一个开放标准的路由协议,它会随时间而进行更新,这些更新反映在版本号中。虽然有许多像RIP一样的路由协议出现,但RIP只有两个版本:版本1和版本2。

3.0域

嵌入在RIP报文中的多个0域证明了在RFC1058出现之前存在许多如RIP一样的协议。大多数0域为的是为了向后兼容旧的如RIP一样的协议,0域说明不支持它们所有的私有特性。

比如,两个旧的机制traceon和traceoff。这些机制被RFC1058抛弃了,然而开放式标准RIP需要和支持这些机制的协议向后兼容。因此,RFC1058在报文中为其保留了空间,但却要求这些空间恒置为0。当收到的报文中这些域不是0时就会被简单地丢弃。

不是所有的0域都是为了向后兼容。至少有一个0域是为将来的使用而保留的。

4.AFI域

地址家族标识(AddressFamilyIdentifier,AFI)域指出了互联网络地址域中所出现的地址家族。虽然RFC1058是由IETF创建的,因此适用于网际协议(IP),但它的设计提供了和以前版本的兼容性。这意味着它必须提供大量互联网络地址构成或家族的路由信息的传输。因此,开放式标准RIP需要一种机制来决定其报文中所携带地址的类型。

5.互联网络地址域

4字节的互联网络地址域包含一个互联网络地址。这个地址可以是主机、网络,甚至是一个缺省网关的地址码。这个域内容如何变化的两个例子如下:

A.在一个单表项请求报文中,这个域包括报文发送者的地址。

B.在一个多表项应答报文中,这些域将包括报文发送者路由表中存储的IP地址。

6.度量标准域

RIP报文中的最后一个域是度量标准域,这个域包含报文的度量计数。这个值在经过路由器时被递增。数量标准有效的范围是在1~15之间。度量标准实际上可以递增至16,但是这个值和无效路由对应。因此,16是度量标准域中的错误值,不在有效范围内。

操作机制

使用距离-向量路由协议的路由器必须周期性地把路由表的内容发送给它的直接相邻路由器。路由表中含有路由器与所知目的地之间的距离信息。这些目的地可以是主机、打印机或其他的网络。

每个接收者给表加上一个距离向量,也就是,它自己的距离“值”,然后把改变了的表转发给它的直接相邻路由器。这个过程无方向地在相邻者之间进行。下图使用简单的RIP互联网络显示了直接相邻者概念。

下图中有4个路由器。网关路由器和其他每一台路由器互联。它必须和这些路由器交换路由信息。路由器A、B和C只有一条连接至网关。因此,它们只能和网关直接交换信息。它们可以通过共享网关的信息来学习到其他主机的信息。这些信息与网关路由器共享。

更新路由表

RIP为每个目的地只记录一条路由的事实要求RIP积极地维护路由表的完整性。通过要求所有活跃的RIP路由器在固定时间间隔广播其路由表内容至相邻的RIP路由器来做到这一点,所有收到的更新自动代替已经存储在路由表中的信息。

RIP依赖3个计时器来维护路由表:更新计时器路由超时计时器路由刷新计时器

更新计时器用于在节点一级初始化路由表更新。每个RIP节点只使用一个更新计时器。相反的,路由超时计时器和路由刷新计时器为每一个路由维护一个。

如此看来,不同的超时和路由刷新计时器可以在每个路由表项中结合在一起。这些计时器一起能使RIP节点维护路由的完整性并且通过基于时间的触发行为使网络从故障中得到恢复。

1.初始化表更新

RIP路由器每隔30秒触发一次表更新。更新计时器用于记录时间量。一旦时间到,RIP节点就会产生一系列包含自身全部路由表的报文。

这些报文广播到每一个相邻节点。因此,每一个RIP路由器大约每隔30秒钟应收到从每个相邻RIP节点发来的更新。

注意在更大的基于RIP的自治系统中,这些周期性的更新会产生不能接受的流量。因此,一个节点一个节点地交错进行更新更理想一些。RIP自动完成更新,每一次更新计时器会被复位,一个小的、任意的时间值加到时钟上。

如果更新并没有如所希望的一样出现,说明互联网络中的某个地方发生了故障或错误。故障可能是简单的如把包含更新内容的报文丢掉了。故障也可能是严重的如路由器故障,或者是介于这两个极端之间的情况。显然,采取合适的措施会因不同的故障而有很大区别。由于更新报文丢失而作废一系列路由是不明智的(记住,RIP更新报文使用不可靠的传输协议以最小化开销)。因此,当一个更新丢失时,不采取更正行为是合理的。为了帮助区别故障和错误的重要程度,RIP使用多个计时器来标识无效路由。

2.标识无效路由

有两种方式使路由变为无效:

路由终止

路由器从其他路由器处学习到路由不可用

在任何一种情形下,RIP路由器需要改变路由表以反映给定路由已不可达。

一个路由如果在一个给定时间之内没有收到更新就中止。比如,路由超时计时器通常设为180秒。当路由变为活跃或被更新时,这个时钟被初始化。

180秒是大致估计的时间,这个时间足以令一台路由器从它的相邻路由器处收到6个路由表更新报文(假设它们每隔30秒发送一次路由更新),如果180秒消逝之后,RIP路由器没收到关于那条路由的更新,RIP路由器就认为那个目的IP地址不再是可达的。因此,路由器就会把那条路由表项标记为无效。通过设置它的路由度量值为16来实现,并且要设置路由变化标志。这个信息可以通过周期性的路由表更新来与其相邻路由器交流。

注意:对于RIP节点而言,16等于无穷。因此,简单的设置耗费度量值为16能作废一条路由。

接到路由新的无效状态通知的相邻节点使用此信息来更新它们自己的路由表。这是路由变为无效的第二种方式。

无效项在路由表中存在很短时间,路由器决定是否应该删除它。即使表项保持在路由表中,报文也不能发送到那个表项的目的地址:RIP不能把报文转发至无效的目的地。

3.删除无效路由

一旦路由器认识到路由已无效,它会初始化一个秒计时器:路由刷新计时器。因此,在最后一次超时计时器初始化后180秒,路由刷新计时器被初始化。这个计时器通常设为90秒。

如果路由更新在270秒之后仍未收到(180秒超时加上90秒路由刷新时间),就从路由表中移去此路由(也就是刷新)。而为了路由刷新递减计数的计时器称为路由刷新计时器。这个计时器对于RIP从网络故障中恢复的能力绝对必要。

主动和被动站点

注意到为了使RIP互联网络正常工作,网络中的每一个网关必须参与进去这一点很重要。参与可以是主动参与也可以是被动参与,但所有的网关必须参与。主动节点是那些主动地进行共享路由信息的节点。它们从相邻者处接收更新,并且转发它们的路由表项拷贝至那些相邻节点。

被动站点从相邻者处接收更新,并且使用那些更新来维护它们的路由表。然而被动节点不主动地发布它们自己路由表项的拷贝。

被动维护路由表的能力在硬件路由器出现之前的日子里是特别有用的特性,那时路由是一个运行在UNIX处理器下的后台程序,这样会使UNIX主机上的路由开销达到最小。

拓扑结构变化-收敛

到此为止,RIP的基本机制和特性已经以一种相当静态的方式进行了讨论,然而通过考察这些机制如何相互作用来适应网络的拓扑变化,可以获得对RIP这些机制更深层的理解。

收敛

RIP互联网络中拓扑变化带来的最重要可能是它会改变相邻节点集,这种变化也会导致下一次计算距离向量时得到不同的结果。因此,新的相邻节点集必须得到汇聚,从不同的起始点汇聚到新拓扑结构的一致看法,得到一致性拓扑视图的过程称为收敛(convergence)。简单地讲,

收敛就是路由器独立地获得对网络结构的共同看法。

下图显示了收敛过程;图中画出了两条可能的从路由器A和网络192.168.125到路由器D的路由。路由器D是一个网关路由器。到路由器D网络的基本路由要通过路由器C。如果这条路由器出现故障,就需要一些时间使所有的路由器收敛至新的拓扑结构,这个拓扑中不再包括路由器C和D之间的链路。

路由器C和D之间的链路出现故障,它就不再可用,但是整个网络却需要相当一段时间才能知道这一事实。收敛的第一步是D认识到至C的链路发生故障。这里假设路由器D的更新计时器先于C的计时器到期。因为这条链路本应传输从路由器D到路由器C的更新报文,所以C就不能收到D发送来的更新报文。C(A和B)仍没有意识到C-D链路已经发生故障。互联网络中的所有路由器会继续通过那条链路对寻址到路由器D网络的报文进行转发。收敛的第一阶段显示在下图中。

一旦更新计时器超时,路由器D会试图把对网络拓扑变化的推测通知给它的相邻路由器。直接相邻者中只有路由器B能直接联系。收到更新报文,B会更新它的路由表,设置从B到D(通过C)的路由为无穷。这样允许其通过B-D的链路与D进行通信。一旦B更新了自己的路由器,它会把关于拓扑结构的新变化广播给它的其他相邻者,A和C。

注意记住,RIP节点通过设置路由的度量为16来作废一条路由—16对RIP而言相当于无穷。

A和C一收到更新报文并重新计算了网络耗费之后,它们就能用B-D的链路来替换路由表中使用C-D链路的表项。以前所有的节点,包括B本身都不使用B-D的路由,因为它比C-D的链路耗费大。它的耗费度量为10,而C-D的耗费为1。现在,C-D链路发生了故障,B-D链路的耗费变为最低。因此,这条新的路由会代替相邻节点路由表中超时的路由。

当所有的路由器认识到通过B是到D的最有效路由时,它们就收敛了,如下图所示。

确定收敛完成之前所需的时间不容易。它因网络不同而区别很大,这要依赖于许多因素,包括路由器和传输线路的健壮性、交通流量等等。

计值到无穷

在上面所举的例子中,惟一的故障发生在连接C和D的链路上。路由器能够收敛到新的拓扑结构,通过另一条路径恢复对网关路由器D上网络的访问。如果D自身发生故障会造成更严重的结果。前面例子中的收敛过程开始于D能够通知B发生了链路故障。如果是D,而不是到C的链路出现故障;B和C就都不能收到更新,通知它们拓扑发生了变化。

这种情况下收敛到新拓扑能导致一种称为计值到无穷的现象。当网络变得完全不能访问时,基于如下错误的想法:存在另一个路由器能访问那个不可达的目的地,这种情形中的路由器会计值RIP度量到无穷。

为了从路由角度显示这种灾难性故障所带来的内在危险性,重新考虑收敛图中的拓扑结构。在下图中,路由器D发生故障。

由于路由器D发生故障,位于网络之中的所有主机从外部不能再被访问。路由器C,在没有收到路由器D的6个连续更新之后,会作废掉C-D路由,并且广播其为不可到达。这一点显示在下图中。路由器A和B对路由失效一无所知直到接到C的通知。

此时,A和C相信通过B能到达D。它们会重新计算自己的路由,包括这条更高耗费的迂回线路。下图显示了这一点。

这两个路由器向它们的直接相邻路由器B发送它们的下一个更新报文,路由器B,已经超时了自己至D的路由,相信通过A或C仍能访问D。显然,这样是不可能的,因为A和C依赖于B刚作废的链路。实质上,在A、B、C之间形成了一个环,这个环的形成是由下面的错误想法形成的,即A和C通过对方仍能到达路由器D。这是因为二者都有到B的连接,而B有一条到D的连接。

更新的每次叠代过程,耗费度量会因额外的下一跳而递增到已经计算过的环上。这种形式的循环是由于时间延迟而引起的,而这种时间延迟是通过相邻者发送更新报文的独立收敛过程的特点。

理论上讲,节点最终会认识到D是不可达的。然而,要想说出什么时候才能收敛几乎不可能。这个例子准确地反映了为什么RIP对无穷的解释设成如此小的值。一旦一个网络不可访问,通过更新来递增量度到实用值时必须中止此过程。这意味着这个上界要设为多大,当计值到此上界时才能宣布一个目的地不可达。任何上界和一个路由网络的直径限制相对应。在RIP例子中,它的最初设计者觉得15跳对一个自治系统来说早已足够大。比这更大的系统可以使用更复杂的路由协议。

RIP使用三种方法来避免计值到无穷循环问题:

 分割水平线

带抑制逆转位的分割水平线

触发更新

1.分割水平线

可以很明显地看出,上一节所描述的循环问题可以通过逻辑应用而得到防止,描述这个逻辑的术语为分割水平线。虽然RIP不支持分割水平线,但是理解了它有助于理解它所使用的稍复杂一些的变体—带抑制逆转位的分割水平线。

分割水平线的实质是,假设如果一条路由是从一个特定路由器处学习来的,RIP节点不广播关于这个特定路由的更新到这个相邻路由器。

路由器支持分割水平线逻辑。因此,路由器C(支持到路由器D的惟一路径)不能收到从路由器A发来的关于网络D的更新。这是因为A(甚至B)的这条路由信息依赖于C。这种分割循环的简单方法是非常有效的,但却有严重的功能限制:忽略掉广播来的反向路由,每个节点必须等到至不可达目的地的路由超时。

在RIP中,只有在6个更新消息没有更新一个路由之后才发生超时。因此,一个被错误通知的节点把关于不可达目的地的信息错误地通知给其他节点的可能性有5种。就是这个延时可能造成无效路由信息形成环。由于这个不足,RIP支持一个稍加改动的版本称为带抑制逆转的分割水平线。

2.带抑制逆转的分割水平线

简单的分割水平线策略试图通过中止把信息反传给其发送者来控制环。虽然这种方法有效,但是有更有效的方法来中止循环。带抑制逆转的分割水平线采用了一种更主动的方法来中止环。

这种技术实际上是通过设置路由的度量为无穷来抑制环的形成。

路由器A能给路由器B提供关于如何到达路由器D的信息,但此路由的度量为16。因此,路由器B不能更新它的路由表,因为表中信息能更好地到达目的地。实际上,A广播它不能到达D,这是真实的信息。这种广播能立即有效地打破环。

一般来讲,在距离-向量网络中带抑制逆转的分割水平线比单纯的分割水平线更安全。然而,二者都不是完美的。带抑制逆转的分割水平线在只有两个网关的拓扑中能有效地防止路由环。然而,在更大的互联网络中,RIP仍然会发生计值到无穷的问题。为了确保这样的无限循环尽可能早地被发现,RIP支持触发更新。

3.触发更新

在三个网关连到一个公共网络的情况下,仍然会形成路由环,这个环是由于网关之间彼此欺骗造成的。如下图所示。在这个图中有三个网关连到路由器D,它们是A、B和C。

在路由器D发生故障的情况下,路由器A可能相信路由器B仍可以访问路由器D,路由器B可能相信路由器C仍可以访问路由器D,而路由器C可能相信路由器A仍可以访问路由器D,结果形成了一个无限路由环。

分割水平线逻辑在这种情况下因路由作废前的延时而丧失作用。RIP使用一种不同的技术来加速收敛过程,这种技术称为触发更新。触发更新是协议中的一个规则,它要求网关在改变一条路由度量时立即广播一条更新消息,而不管30秒更新记时器还剩多少时间。

触发更新通过把延迟减到最小从而克服了路由协议的脆弱性。

4.保持计时器

触发更新不是万能的!更新不会瞬时地传遍整个网络。因此,有可能(但不太可能)一个网关在从另一个网关处收到触发更新之前恰好发送了一个周期性的更新报文。在这种情况下,无效路由会在整个网络中被再次传播。虽然,发生这种情况的可能性非常低,但是在一个RIP网络之中还是有可能出现计值到无穷的循环(即使使用了触发更新)。

对这种潜在问题的解决方法是使用保持计时器。保持计时器和触发更新逻辑一同使用。实质上,一旦产生触发更新报文,一个时钟就会开始向下计数直到0。一旦计时器递减到0,路由器就不再接收从任何相邻路由器处发来的关于此路由或目的地的更新。

这种方式防止RIP路由器接收已经在一个配置时间内被作废了的路由更新。也能防止路由器错误地认为另一个路由器有到达无效目的地的可靠路由。

固定度量

对跳数的讨论为考察RIP的下一个基本限制作了很好的铺垫,这个限制就是:固定耗费度量。虽然耗费度量能由管理员配置,但它们本质上是静态的。RIP不能实时地更新它们以适应网络中遇到的变化。由管理员定义的耗费度量保持不变,直到手动更新。

这意味着RIP尤其不适合于高度动态的网络,在这种环境中,路由必须实时计算以反映网络条件的变化。举个例子,假如网络支持对时间敏感的应用,那么使用能基于可测的传输线路延迟或者给定线路上存在的负载情况来计算路由的协议就是合理的想法。RIP使用固定度量,因此,它不能支持实时路由计算。

收敛慢

从人的角度来看,等待30秒进行一次更新不会感到不方便。然而,路由器和计算机以比人快得多的速度运行。不得不等上30秒进行一次更新会有很明显的不利结果。

比仅仅等上30秒进行一次更新更具破坏性的却是不得不等上180秒来作废一条路由。而这只是一台路由器开始进行收敛所需的时间量。依赖于互联的路由器个数及它们的拓扑结构,可能需要重复更新才能完全收敛于新拓扑。RIP路由器收敛速度慢会创造许多机会使得无效路由仍被错误地作为有效路由进行广播。显然,这样会降低网络性能。

这本应充分地显示RIP内在的收敛慢所带来的危险性。

RIP-2协议简介

路由器的关键作用是用于网络的互连,每个路由器与两个以上的实际网络相连,负责在这些网络之间转发数据报。在讨论IP进行选路和对报文进行转发时,我们总是假设路由器包含了正确的路由,而且路由器可以利用ICMP重定向机制来要求与之相连的主机更改路由(具体请看IP部分的相应章节)。但在实际情况下,IP进行选路之前必须先通过某种方法获取正确的路由表。在小型的、变化缓慢的互连网络中,管理者可以用手工方式来建立和更改路由表。而在大型的、迅速变化的环境下,人工更新的办法慢得不能接受。这就需要自动更新路由表的方法,即所谓的动态路由协议,RIP是其中最简单的一种。

RIP(routeinformationprotocol)协议是基于V-D算法(又称为Bellman-Ford算法)的内部动态路由协议。V-D是Vector-Distance的缩写,因此V-D算法又称为距离向量算法。这种算法在ARPARNET早期就用于计算机网络的路由的计算。RIP协议在目前已成为路由器、主机路由信息传递的标准之一,就因为这个原因,RIP协议被大多数IP路由器商业卖主广泛使用。

先大致解释一下什么是内部路由协议。由于历史的原因,当前的INTERNET网被组成一系列的自治系统,各自治系统通过一个核心路由器连到主干网上。而一个自治系统往往对应一个组织实体(比如一个公司或大学)内部的网络与路由器集合。每个自治系统都有自己的路由技术,对不同的自治系统路由技术是不相同的。用于自治系统间接口上的单独的协议称为外部路由器协议,简称EGP(ExteriorGatewayProtocol)。用于自治系统内部的路由协议称为内部路由器协议,简称IGP(InteriorGatewayProtocol)。内部路由器与外部路由器协议EGP不同,外部路由协议只有一个,而内部路由器协议则是一族。各内部路由器协议的区别在于距离制式(distancemetric,即距离度量标准)不同,和路由刷新算法不同。RIP协议是最广泛使用的IGP之一,著名的路径刷新程序Routed便是根据RIP实现的。RIP协议被设计用于使用同种技术的中型网络,因此适应于大多数的校园网和使用速率变化不是很大的连续线的地区性网络。对于更复杂的环境,一般不使用RIP协议。

在实现时,RIP作为一个系统长驻进程(daemon)而存在于路由器中,它负责从网络系统的其它路由器接收路由信息,从而对本地IP层路由表作动态的维护,保证IP层发送报文时选择正确的路由,同时广播本路由器的路由信息,通知相邻路由器作相应的修改。RIP协议处于UDP协议的上层(如图1.1),RIP所接收的路由信息都封装在UDP的数据报中,RIP在520号端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。

距离向量算法

距离向量算法

距离向量算法的思想很简单:所有参加RIP协议的路由器周期性地向外广播路由刷新报文,主要内容是由很多路由项(entry)组成的路由刷新报文。对路由来说,最主要的内容是目的地址和下一跳地址(nexthop)。对动态路由协议来说,为了找到本协议概念中的最佳路由,还必须注意路由的开销(metric)。所以路由项主要包括了目的地址、下一跳地址和路由开销。其他的如路由标记(tag)等内容在讲报文格式时,将具体讲到。

在设计时,每个路由器的另外RIP管理了一个路由数据库,该路由数据库为系统中所有可能的信宿包含一个路由项,并为每个信宿保留如下信息:

目的地址:在算法的IP实现中,这指的是主机或网络的IP地址。

下一跳地址:到信宿的路由中的第一个路由器。

接口:用于到下一跳物理网络。

metric值:一个数,指明本路由器到信宿的开销。

定时器:路由项最后一次被修改的时间。

路由标记:区分路由为内部路由协议的路由还是外部路由协议的路由的标记。

数据库由与系统直接相连的实体的描述初始化,通过从相邻路由器受到的报文修改维护。

路由器间交换的最重要的信息是修改报文,参加路由维护计划的路由器发送当前存在于实体的描述路由数据库的路由修改报文。仅通过相邻路由器间交换路由信息是可以维护整个系统的最佳路由的,这在接下来的讨论中会逐步得到证明。

距离向量算法总是基于一个这样的事实:路由数据库中的路由已是目前通过报文交换而得到的最佳路由。同时,报文交换仅限于相邻的实体间,也就是说,实体共享同一个网络。当然,要定义路由是最佳的,就必须有衡量的办法,这就用到前面所说的“metric”。RIP简单的网络中,通常用可行路由所经的路由器数简单地计算metric值。在复杂的网络中,metric一般代表该路由传输数据报的延迟或其它发送开销。

令D(i,j)代表从实体i到实体j的最佳路由的metric值,d(i,j)代表从i直接到j的开销,因为开销是可加的,算法中最佳路由如此获取表示:

D(i,i)=0,对所有的i

D(i,j)=MIN[d(i,j)+D(k,j),当i不等于k时

实体i从相邻路由器k收到k到j的开销的估计D(i,j),i将D(i,j)加上i到k的开销估计d(i,j),i比较从所有相邻路由器得到的数值,取得最小数,就得到了它到j的最佳路由。

具体地说,距离向量算法如下所述:

首先,路由器刚启动时,对距离向量路由表(V-D路由表)进行初始化,该初始化路由表包含所有去往与本路由器直接相连的网络的路径。由于去往直接相连的网络不经过中间路由器,所以初始化的V-D路由表中的各路由的距离均为0。

初始V-D路由表的一个示例。

然后,各路由器周期性地向外广播其V-D路由表内容。与某路由器直接相连的(位于同一物理网络)的路由器收到该路由表报文后,根据此报文对本地路由表进行刷新。刷新时,路由器逐项检查来自相邻路由器的V-D报文,遇到下述表目之一,须修改本地路由表(假设路由器Gi收到路由器Gj的V-D报文):

1)Gj列出的某表目Gi路由表中没有。则Gi路由表中须增加相应表目,其“信宿”是Gj表目中的信宿,其“路径”为“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取代原来的距离。

上图对以上描述给出直观的说明,其中Gi、Gj为相邻路由器。

(a)路由器Gi原路由表

(b)路由器Gj广播的V-D报文

(c)路由器Gj刷新后的路由表

这里要特别强调的是,V-D算法的路由刷新发生在相邻路由器之间,所以V-D报文不一定以广播方式发送出去,一种比较优化的思想是路由器直接向相邻路由器发送V-D报文,不必采用广播方式。

对过时路由的处理

根据V-D算法,一条路由只在出现一条更优路由时才被刷新,否则,将继续保留在路由数据库中。这就忽略了这样一种情况,即当某条路由突然崩溃,需要选择一条新的路由来代替现存路由。但这靠V-D中的刷新算法来是不能得到解决的。

针对这种情况,在实际应用中,RIP规定,所有机器对其路由数据库中的每一表目都设置一个时钟,每增加一个新表目,就相应设置一个新时钟。在收到V-D报文中假如有关于此路由的表目,则将时钟清零,重新记时。假如在规定时间内,一直未收到该路由的刷新信息,时钟期满,则将该路由从路由数据库中删除。

如果到指定的信宿有其它路由,则新的路由将从进一步收到的定时刷新报文中获得,否则去往原信宿的路由不存在。

RIP协议的实现

RIP根据V-D算法的特点,将协议的参加者分为主动机和被动机两种。主动机主动向外广播路由刷新报文,被动机被动地接收路由刷新报文。一般情况下,主机作为被动机,路由器则既是主动机又是被动机,即在向外广播路由刷新报文的同时,接受来自其它主动机的V-D报文,并进行路由刷新。

RIP规定,路由器每30秒向外广播一个V-D报文,报文信息来自本地路由表。RIP的V-D报文中,其距离以驿站计:与信宿网络直接相连的路由器规定为一个驿站,相隔一个路由器则为两个驿站……以此类推。一条路由的距离为该路由(从信源机到信宿机)上的路由器数。为防止寻径环长期存在,RIP规定,长度为16的路由为无限长路由,即不存在的路由。所以一条有效的路由长度不得超过15。正是这一规定限制了RIP的使用范围,使RIP局限于中小型的网络网点中。

为了保证路由的及时有效性,RIP采用触发刷新技术和水平分割法。当本地路由表发生修改时,触发广播路由刷新报文,以迅速达到最新路由的广播和全局路由的有效。水平分割法是指当路由器从某个网络接口发送RIP路由刷新报文时,其中不包含从该接口获取的路由信息。这是由于从某网络接口获取的路由信息对于该接口来说是无用信息,同时也解决了两路由器间的慢收敛问题。

对于局域网的路由,RIP规定了路由的超时处理。主要是考虑到这样一个情况,如果完全根据V-D算法,一条路由被刷新是因为出现一条路由开销更小的路由,否则路由会在路由表中一直保存下去,即使该路由崩溃。这势必造成一定的错误路由信息。为此,RIP规定,所有机器对其寻径表中的每一条路由都设置一个时钟,每增加一条新路由,相应设置一个新时钟。在收到的V-D报文中假如有关于此路由的表目,则将时钟清零,重新计时。假如在120秒内一直未收到该路由的刷新信息,则认为该路由崩溃,将其距离设为16,广播该路由信息。如果再过60后仍未收到该路由的刷新信息,则将它从路由表中删除。如果某路由在距离被设为16后,在被删除前路由被刷新,亦将时钟清零,重新计时,同时广播被刷新的路由信息。至于路由被删除后是否有新的路由来代替被删除路由,取决于去往原路由所指信宿有无其它路由。假如有,相应路由器会广播之。机器一旦收到其它路由的信息,自然会利用V-D算法建立一条新路由。否则,去往原信宿的路由不再存在。

RIP启动和运行的整个过程如下所描述:

某路由器刚启动RIP时,以广播的形式向相邻路由器发送请求报文,相邻路由器的RIP收到请求报文后,响应请求,回发包含本地路由表信息的响应报文。RIP收到响应报文后,修改本地路由表的信息,同时以触发修改的形式向相邻路由器广播本地路由修改信息。相邻路由器收到触发修改报文后,又向其各自的相邻路由器发送触发修改报文。在一连串的触发修改广播后,各路由器的路由都得到修改并保持最新信息。同时,RIP每30秒向相邻路由器广播本地路由表,各相邻路由器的RIP在收到路由报文后,对本地路由进行的维护,在众多路由中选择一条最佳路由,并向各自的相邻网广播路由修改信息,使路由达到全局的有效。同时RIP采取一种超时机制对过时的路由进行超时处理,以保证路由的实时性和有效性。RIP作为内部路由器协议,正是通过这种报文交换的方式,提供路由器了解本自治系统内部个网络路由信息的机制。

RIP-2支持版本1和版本2两种版本的报文格式。在版本2中,RIP还提供了对子网的支持和提供认证报文形式。版本2的报文提供子网掩码域,来提供对子网的支持;另外,当报文中的路由项地址域值为0xFFFF时,默认该路由项的剩余部分为认证。RIP2对拨号网的支持则是参考需求RIP和触发RIP的形式经修改而加入的新功能。这时,我们只是要求在拨号网拨通之后对路由进行30秒一次的广播,而在没拨通时并不作如是要求,这是根据具体情况变通的结果。

报文格式的扩展

为了更好地处理拨号网上的路由刷新,参照RFC/1581/15822091/2092标准,对报文格式进行了的改进和扩充修改。对报文的修改主要是支持三种新的报文分组类型,在报文命令域数值标识:

9---------UpdateRequest修改请求

10-------UpdateResponse修改响应

11--------UpdateAcknowledge修改确认

其中Version域指的是各报文的版本号,而不是RIP的版本号,主要是基于向后兼容性考虑,这里必须为1。

增添Flush域是对路由的及时性的一种考虑。如果对外发送响应报文是在收到请求后发送的,说明信宿有一个从不可达到可达的变化。如果该信宿中还保留有到其它路由器的路由信息,则这些路由信息很可能是过时的,从而需要进行更新。为了更快地更新路由器中的路由信息。在报文中增添一个Flush域,当路由器收到设置了Flush值的修改报文后,要将路由数据库中的原有路由设为“临时性路由”,进行超时处理。Flash域在设置时为1,在不设置时为0,取其他值则认为报文非法。

Sequencenumber是对报文的标记,用于识别各报文的确认报文,但只对发送方有用。对发送方来说,Sequencenumber不能有相同值,修改报文的Sequencenumber一般采取以65535为一个轮回的递增方式。而确认报文的Sequencenumber值取对应修改报文中的响应值。当路由器收到确认报文后,可根据Sequencenumber值来确认对应的修改报文已被收到。

RIP-2的对拨号网的支持

根据前面所说到的RIP协议不难看出,RIP进行报文刷新的基础是网络在刷新过程中一直保持连通,否则将有的路由器的报文一直不被收到,最终到达该路由器的路由将被其它路由器因超时而删除,而本路由器到其它路由器的路由亦将由于长期不被刷新而被删除。就这点来说,对于局域网和专线网来说,无疑是可行的;但对于拨号网络(例如X.25网和ISDN网)来说,网络在可以被拨通的情况下并非一直保持连接,自然亦不可能在不需要传送数据时因为要发送RIP报文而每30秒拨通一次网络。同时,路由信息亦可能因提供给拨号网上路由器的带宽不够而传输失败。种种情况表明,前面所描述的RIP协议已远远不够这种需求。

针对这种情况,我对RIP协议的实现作了进一步的改进和扩展,经过扩展和改进后,本文档中描述的RIP协议已不是传统意义上的RIP协议所能概括的了。

IPv6时代RIP路由协议的研究与实现

Internet的迅猛发展,使得网络规模急剧膨胀,信息量直线上升,新应用层出不穷,原有的己发展20多年的网络互连协议版本4——IPv4协议由于其先天的缺陷(地址空间不足、路由选择效率不高、安全性差、服务质量不高以及缺乏对移动的有效支持等),己经不能从根本上适应网络发展的需要。在这样的背景下,下一代网络标准——IPv6协议应运而生。本文探讨了RIPng用于IPv6网络的RIP。在IPv6技术作为下一代互联网IP层技术已成定局的情况下,深入研究未来网络中路由技术的简单,易用协议Ripng是一项走在信息技术学科前沿的课题之一,具有重要的经济和社会意义。

一、RIP基本工作原理

路由信息协议RIP(RoutingInformationProtocol)是互联网工程任务组(IETF)的内部网关协议工作组为IP网络专门设计的路由协议,是一种基于距离矢量算法的内部网关动态路由协议。

每个运行RIP的路由器都维护着一张RIP路由表,该路由表的内容如图所示。

其中,下一跳(nexthop)表示下一站数据包要到达的地址,度量(metric)代表把数据包从本路由器送达目的站所需的花费(cost)。RIP协议支持的最大有效度量为15,当一条路由的度量达到16后,那条路由就被认为无效,并且认为对应的目的地不可达。

标志位标志此路由最近是否发生变化,以备触发更新时用到,年龄实际是个定时器,用于维护每条路由。在RIP中若哪条路由经过180秒后仍未被刷新,则该路由被认为不再有效,而把其度量置成16。

RIP路由器周期性地以多播形式向邻居发送自己的路由表拷贝,即组,每个接收到该消息的路由器修改消息中路由的度量,在每条路由的度量上加上接收该路由消息接口的花费。然后,依据度量的大小来判断路由的好坏,把度量最小的一条路由放入路由表,其判断过程如下:

(1)查看路由表中是否已有到该目的的路由;(2)如果没找到,则添加该路由;(3)如果找到,只有在新度量更小时才更新路由,否则,忽略该路由。

图2是RIP的工作流程。由此图大家就可以很清楚的感受到RIP拥有如此简单的工作流程。

如图2所示,当在RouterA路由器的某接口上启动RIP,接口以多播形式向邻居发送路由表信息请求,请求邻居给自己发送路由表信息;邻居RouterB接收到路由表信息请求,发送整个路由表信息对请求进行响应;RouterA和RouterB在启动后就开始周期发送并周期更新路由器;RouterA检测到路由变化时,以多播形式向邻居发送触发更新,通知邻居路由变化。

二、IPv6时代RIP的演变

众所周知,如今的RIP已经从RIP-1发展到RIP-2,直到今天有变革意义的基于IPv6的Ripng!研究RIP的演变过程,剖析其各个发展阶段的异同点对于优化、发展该协议具有重要的意义。

RIP-1只在有子网划分的网络中支持子网,在该网络外部由于子网掩码很难得知,从而也就无法区分子网项和主机项,这样就需要强制使用严格层次路由:外部路由器把分组传递到该网中距离最近的路由器,而不考虑目的站点属于哪个子网。紧跟在严格层次路由之后是对连通性的要求,即这个网络中的每一个路由器都应该知道如何去往任何一个子网!

基于上述缺点,RIP-2定义了一套有效的RIP改进方案,把RIP-1的格式中含有的一些“必须为零”的域,进行了重新定义。

基于安全考虑添加了新的AFI项(0xFFFF)用来传送“验证数据”;添加了“路由选择域”、“下一跳域”,允许在单个路由器上运行多个RIP实例,指明发往目的IP地址的报文该发向哪里,“下一跳域”属性使得仅仅只有一个运行别种协议的路由器通告所有的路由,并且使得运行RIP的路由器能够找到正确运行别种协议的路由器作为下一跳以达到所有已知的别种协议的目的地址;添加了“子网掩码”,达到可以支持VLSM(可变长子网掩码)和CIDR(无类别域间路由)的目的,增强子网选择路由的性能;添加了“路由标签”,对外部路由进行标志。

RIP-2保留了RFC-1058中定义的“命令字”、“地址族标志符”、“IP地址”、“度量值”等域。

没有最好只有更好!在基于IPv4的RIP-1,RIP-2不断完善的状态下,IPv4虽然将一个成熟的互联网架构支撑了20年之久,但人们早已形成共识,那就是IPv6最终取代IPv4是大势所趋:128位地址格式所支持的IP地址数量可以彻底解决地址枯竭的问题;IPv4地址空间匮乏,路由选择效率差,安全性差,移动性差,服务质量保证差。所有这些IPv4问题将毫不犹豫地要求IPv6协议解决,于是Ripng(v6版本)将要,也必然会成为宠儿。

Ripng虽然隶属RIP家族,但毕竟它经历了一场变革。与RIP-1,RIP-2在各个方面都有差别:使用端口不同;分组格式不同;最大报文长度不同;下一跳不同;编址考虑不同;特殊请求不同;安全考虑不同。

Ripng与RIP-2均有下一跳的说法,但是RIP-2的下一跳是固化在包格式之中的,也就是说下一跳无论添不添都给它留4个字节的空间。而Ripng把下一跳(nexthop)与路由表项分开,使用“度量域”中的值来判断究竟是下一跳还是路由表项,若值是0xff则说明是下一跳!采用这种方法在无须添写下一跳信息时,则可以省略不添,从而节省了宝贵空间。

在Ripng与RIP改头换面的变化中,还有一个重大的变化!那就是在RIP-2包格式中有“子网掩码域”,而在Ripng中用一个字节的前缀长度代替了“子网掩码域”的功能,虽然这与IPv6协议的特点有着不可分割的关系,但是就其布局的合理性、优美性、简化性也足可以使我们优先考虑使用它。

三、Ripng的实现

Ripng的实现分为六个功能模块,即Ripng的启动、Ripng的关闭、输入处理、输出处理、定时器处理及路由操作,如图3所示。

Ripng启动模块:完成Ripng协议的初始化工作,建立通信套接口;Ripng关闭模块:通知内核删除由RIPng进程导入的路由、释放Ripng进程占用的内存空间;输入处理模块:把Ripng当作一个黑盒子来处理,邻居所发送的数据包都是向该黑盒投放的信息,该模块主要是对这些信息进行相应处理;输出处理模块:输出处理主要包括周期更新和触发更新的处理;定时器处理模块:负责维护RIP中为支持寻路操作使用的三个定时器,同时还要负责处理触发更新中为防止广播风暴引入的定时机制;路由操作模块:负责路由条目的处理和路由表的查找和添删。

Ripng作为解决未来IPv6网络路由的首选,其简单内部网关协议有强大的优势和无限的潜力。一个优秀的路由技术,不仅仅是为数据传输找到一条高速的通道就行,还需要考虑所选路径的传输容量和服务质量,即具有QoS能力的路由算法,并且还要分析全网负荷,以平衡网络中各条通道的数据流量。在这些诸多因素考虑的基础上研究基于IPv6的Ripng路由协议正是我们今后研究的热点和重点。

RIP路由表

使用RIP报文中列出的项,RIP主机可以彼此之间交流路由信息。这些信息存储在路由表中,路由表为每一个知道的、可达的目的地保留一项。每个目的地表项是到达那个目的地的最低开销路由。

注意每个目的地的表项数可以随路由生产商的不同而变化。生产商可能选择遵守规范,也可以对标准进行他们认为合适的“强化”。所以,用户很可能会发现某个特殊商标的路由器为每一个网络中的目的地存储至多4条相同费用的路由。

每个路由表项包括以下各域:

目的IP地址域

距离-向量度量域

下一跳IP地址域

路由变化标志域

路由计时器域

注意虽然RFC1058是一个开放式标准,能支持大量互连网络地址结构,然而它是由IETF设计用于Internet中自治系统内的协议。如此,使用这种形式RIP的自然是网络互联协议。

1.目的IP地址域

任何路由表中所包含的最重要信息是到所知目的地的IP地址。一旦一台RIP路由器收到一个数据报文,就会查找路由表中的目的IP地址以决定从哪里转发那个报文。

2.度量标准域

路由表中的度量域指出报文从起始点到特定目的地的总耗费。路由表中的度量是从路由器到特定目的地之间网络链路的耗费总和。

3.下一跳IP地址域

下一跳IP地址域包括至目的地的网络路径上下一个路由器接口的IP地址。如果目的IP地址所在的网络与路由器不直接相连时,路由器表中才出现此项。

4.路由变化标志域

路由变化标志域用于指出至目的IP地址的路由是否在最近发生了变化。这个域是重要的,因为RIP为每一个目的IP地址只记录一条路由。

5.路由计时器域

有两个计时器与每条路由相联系,一个是超时计时器,一个是路由刷新计时器。这些计时器一同工作来维护路由表中存储的每条路由的有效性。路由表维护过程在12.2.2节中详细描述。

相关词条

相关搜索

其它词条