在前一节所举的例子中,惟一的故障发生在连接C和D的链路上。路由器能够收敛到新的拓扑结构,通过另一条路径恢复对网关路由器D上网络的访问。假如D自身发生故障会造成更严重的结果。前面例子中的收敛过程开始于D能够通知B发生了链路故障。假如是D,而不是到C的链路出现故障;B和C就都不能收到更新,通知它们拓扑发生了变化。
这种情况下收敛到新拓扑能导致一种称为计值到无穷的现象。当网络变得完全不能访问时,基于如下错误的想法:存在另一个路由器能访问那个不可达的目的地,这种情形中的路由器会计值R I P度量到无穷。
为了从路由角度显示这种灾难性故障所带来的内在危险性,重新考虑收敛图中的拓扑结构。在图1 2 - 1 2中,路由器D发生故障。
图12-12 路由器D发生故障
由于路由器D发生故障,位于网络之中的所有主机从外部不能再被访问。路由器C,在没有收到路由器D的6个连续更新之后,会作废掉C - D路由,并且广播其为不可到达。这一点显示在图1 2 - 1 3中。路由器A和B对路由失效一无所知直到接到C的通知。
此时,A和C相信通过B能到达D。它们会重新计算自己的路由,包括这条更高耗费的迂回线路。图1 2 - 1 4显示了这一点。
这两个路由器向它们的直接相邻路由器B发送它们的下一个更新报文,路由器B,已经超时了自己至D的路由,相信通过A或C仍能访问D。显然,这样是不可能的,因为A和C依靠于B刚作废的链路。实质上,在A、B、C之间形成了一个环,这个环的形成是由下面的错误想法形成的,即A和C通过对方仍能到达路由器D。这是因为二者都有到B的连接,而B有一条到D的连接。
图12-13 路由器C作废了C-D路由
图12-14 A和C相信它们能通过B访问D
更新的每次叠代过程,耗费度量会因额外的下一跳而递增到已经计算过的环上。这种形式的循环是由于时间延迟而引起的,而这种时间延迟是通过相邻者发送更新报文的独立收敛过程的特点。
理论上讲,节点最终会熟悉到D是不可达的。然而,要想说出什么时候才能收敛几乎不可能。这个例子准确地反映了为什么R I P对无穷的解释设成如此小的值。一旦一个网络不可访问,通过更新来递增量度到实用值时必须中止此过程。这意味着这个上界要设为多大,当计值到此上界时才能公布一个目的地不可达。任何上界和一个路由网络的直径限制相对应。在R I P例子中,它的最初设计者觉得1 5跳对一个自治系统来说早已足够大。比这更大的系统可以使用更复杂的路由协议。
R I P使用三种方法来避免计值到无穷循环问题:
·分割水平线。
·带抑制逆转位的分割水平线。
·触发更新。
1. 分割水平线
可以很明显地看出,上一节所描述的循环问题可以通过逻辑应用而得到防止,描述这个逻辑的术语为分割水平线。虽然R I P不支持分割水平线,但是理解了它有助于理解它所使用的稍复杂一些的变体—带抑制逆转位的分割水平线。
分割水平线的实质是,假设假如一条路由是从一个特定路由器处学习来的, R I P节点不广播关于这个特定路由的更新到这个相邻路由器。图1 2 - 1 5显示了这一点。
图12-15 分割水平线
在图1 2 - 1 5中,路由器支持分割水平线逻辑。因此,路由器C (支持到路由器D的惟一路径)不能收到从路由器A发来的关于网络D的更新。这是因为A (甚至B )的这条路由信息依靠于C。这种分割循环的简单方法是非常有效的,但却有严重的功能限制:忽略掉广播来的反向路由,每个节点必须等到至不可达目的地的路由超时。
在R I P中,只有在6个更新消息没有更新一个路由之后才发生超时。因此,一个被错误通知的节点把关于不可达目的地的信息错误地通知给其他节点的可能性有5种。就是这个延时可能造成无效路由信息形成环。由于这个不足, R I P支持一个稍加改动的版本称为带抑制逆转的分割水平线。
2. 带抑制逆转的分割水平线
简单的分割水平线策略试图通过中止把信息反传给其发送者来控制环。虽然这种方法有效,但是有更有效的方法来中止循环。带抑制逆转的分割水平线采用了一种更主动的方法来中止环。
这种技术实际上是通过设置路由的度量为无穷来抑制环的形成。图1 2 - 1 6显示了这一点。
图12-16 带毒逆转的分割水平线
如图1 2 - 1 6所显示的,路由器A能给路由器B提供关于如何到达路由器D的信息,但此路由的度量为1 6。因此,路由器B不能更新它的路由表,因为表中信息能更好地到达目的地。实际上,A广播它不能到达D,这是真实的信息。这种广播能立即有效地打破环。
一般来讲,在距离-向量网络中带抑制逆转的分割水平线比单纯的分割水平线更安全。然而,二者都不是完美的。带抑制逆转的分割水平线在只有两个网关的拓扑中能有效地防止路由环。然而,在更大的互联网络中, R I P仍然会发生计值到无穷的问题。为了确保这样的无限循环尽可能早地被发现, R I P支持触发更新。
3. 触发更新
在三个网关连到一个公共网络的情况下,仍然会形成路由环,这个环是由于网关之间彼此欺骗造成的。图1 2 - 1 7显示了这一点。在这个图中有三个网关连到路由器D,它们是A、B和C。
在路由器D发生故障的情况下,路由器A可能相信路由器B仍可以访问路由器D,路由器B可能相信路由器C仍可以访问路由器D,而路由器C可能相信路由器A仍可以访问路由器D,结果形成了一个无限路由环,图1 2 - 1 8显示了这一点。
分割水平线逻辑在这种情况下因路由作废前的延时而丧失作用。R I P使用一种不同的技术来加速收敛过程,这种技术称为触发更新。触发更新是协议中的一个规则,它要求网关在改变一条路由度量时立即广播一条更新消息,而不管3 0秒更新记时器还剩多少时间。
触发更新通过把延迟减到最小从而克服了路由协议的脆弱性。
4. 保持计时器
触发更新不是万能的!更新不会瞬时地传遍整个网络。因此,有可能(但不太可能)一个网关在从另一个网关处收到触发更新之前恰好发送了一个周期性的更新报文。在这种情况下,无效路由会在整个网络中被再次传播。虽然,发生这种情况的可能性非常低,但是在一个R I P网络之中还是有可能出现计值到无穷的循环(即使使用了触发更新)。
对这种潜在问题的解决方法是使用保持计时器。保持计时器和触发更新逻辑一同使用。实质上,一旦产生触发更新报文,一个时钟就会开始向下计数直到0。一旦计时器递减到0,路由器就不再接收从任何相邻路由器处发来的关于此路由或目的地的更新。
图12-17 三个通向D的网关
图12-18 三个网关计值到无穷
这种方式防止R I P路由器接收已经在一个配置时间内被作废了的路由更新。也能防止路由器错误地认为另一个路由器有到达无效目的地的可靠路由。