到此为止,RIP的基本机制和特性已经以一种相当静态的方式进行了讨论,然而通过考察这些机制如何相互作用来适应网络的拓扑变化,可以获得对RIP这些机制更深层的理解。
3.1收敛
RIP互联网络中拓扑变化带来的最重要可能是它会改变相邻节点集,这种变化也会导致下一次计算距离向量时得到不同的结果。因此,新的相邻节点集必须得到汇聚,从不同的起始点汇聚到新拓扑结构的一致看法,得到一致性拓扑视图的过程称为收敛(convergence)。简单地讲,收敛就是路由器独立地获得对网络结构的共同看法。
图9显示了收敛过程;图中画出了两条可能的从路由器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网络的报文进行转发。收敛的第一阶段显示在图10中。
一旦更新计时器超时,路由器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的最有效路由时,它们就收敛了,如图11所示。
确定收敛完成之前所需的时间不容易。它因网络不同而区别很大,这要依赖于许多因素,包括路由器和传输线路的健壮性、交通流量等等。
3.2计值到无穷
在前一节所举的例子中,惟一的故障发生在连接C和D的链路上。路由器能够收敛到新的拓扑结构,通过另一条路径恢复对网关路由器D上网络的访问。如果D自身发生故障会造成更严重的结果。前面例子中的收敛过程开始于D能够通知B发生了链路故障。如果是D,而不是到C的链路出现故障;B和C就都不能收到更新,通知它们拓扑发生了变化。
这种情况下收敛到新拓扑能导致一种称为计值到无穷的现象。当网络变得完全不能访问时,基于如下错误的想法:存在另一个路由器能访问那个不可达的目的地,这种情形中的路由器会计值RIP度量到无穷。
为了从路由角度显示这种灾难性故障所带来的内在危险性,重新考虑收敛图中的拓扑结构。在图12中,路由器D发生故障。
由于路由器D发生故障,位于网络之中的所有主机从外部不能再被访问。路由器C,在没有收到路由器D的6个连续更新之后,会作废掉C-D路由,并且广播其为不可到达。这一点显示在图13中。路由器A和B对路由失效一无所知直到接到C的通知。
此时,A和C相信通过B能到达D。它们会重新计算自己的路由,包括这条更高耗费的迂回线路。图14显示了这一点。
这两个路由器向它们的直接相邻路由器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节点不广播关于这个特定路由的更新到这个相邻路由器。图15显示了这一点。
在图15中,路由器支持分割水平线逻辑。因此,路由器C(支持到路由器D的惟一路径)不能收到从路由器A发来的关于网络D的更新。这是因为A(甚至B)的这条路由信息依赖于C。
这种分割循环的简单方法是非常有效的,但却有严重的功能限制:忽略掉广播来的反向路由,每个节点必须等到至不可达目的地的路由超时。
在RIP中,只有在6个更新消息没有更新一个路由之后才发生超时。因此,一个被错误通知的节点把关于不可达目的地的信息错误地通知给其他节点的可能性有5种。就是这个延时可能造成无效路由信息形成环。由于这个不足,RIP支持一个稍加改动的版本称为带抑制逆转的分割水平线。
2.带抑制逆转的分割水平线
简单的分割水平线策略试图通过中止把信息反传给其发送者来控制环。虽然这种方法有效,但是有更有效的方法来中止循环。带抑制逆转的分割水平线采用了一种更主动的方法来中止环。
这种技术实际上是通过设置路由的度量为无穷来抑制环的形成。图16显示了这一点。
如图16所显示的,路由器A能给路由器B提供关于如何到达路由器D的信息,但此路由的度量为16。因此,路由器B不能更新它的路由表,因为表中信息能更好地到达目的地。实际上,A广播它不能到达D,这是真实的信息。这种广播能立即有效地打破环。
一般来讲,在距离-向量网络中带抑制逆转的分割水平线比单纯的分割水平线更安全。然而,二者都不是完美的。带抑制逆转的分割水平线在只有两个网关的拓扑中能有效地防止路由环。然而,在更大的互联网络中,RIP仍然会发生计值到无穷的问题。为了确保这样的无限循环尽可能早地被发现,RIP支持触发更新。
3.触发更新
在三个网关连到一个公共网络的情况下,仍然会形成路由环,这个环是由于网关之间彼此欺骗造成的。图17显示了这一点。在这个图中有三个网关连到路由器D,它们是A、B和C。
在路由器D发生故障的情况下,路由器A可能相信路由器B仍可以访问路由器D,路由器B可能相信路由器C仍可以访问路由器D,
而路由器C可能相信路由器A仍可以访问路由器D,结果形成了一个无限路由环,图18显示了这一点。
分割水平线逻辑在这种情况下因路由作废前的延时而丧失作用。RIP使用一种不同的技术来加速收敛过程,这种技术称为触发更新。触发更新是协议中的一个规则,它要求网关在改变一条路由度量时立即广播一条更新消息,而不管30秒更新记时器还剩多少时间。
触发更新通过把延迟减到最小从而克服了路由协议的脆弱性。
4.保持计时器
触发更新不是功能较多的!更新不会瞬时地传遍整个网络。因此,有可能(但不太可能)一个网关在从另一个网关处收到触发更新之前恰好发送了一个周期性的更新报文。在这种情况下,无效路由会在整个网络中被再次传播。虽然,发生这种情况的可能性非常低,但是在一个RIP网络之中还是有可能出现计值到无穷的循环(即使使用了触发更新)。
对这种潜在问题的解决方法是使用保持计时器。保持计时器和触发更新逻辑一同使用。实质上,一旦产生触发更新报文,一个
时钟就会开始向下计数直到0。一旦计时器递减到0,路由器就不再接收从任何相邻路由器处发来的关于此路由或目的地的更新。
这种方式防止RIP路由器接收已经在一个配置时间内被作废了的路由更新。也能防止路由器错误地认为另一个路由器有到达无效目的地的可靠路由。