EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算

至此,我们已经了解了诸多概念: RD (报告距离)、 CD (计算距离)、 FD (可行距离)和FC (可行性条件) ,在此基础上继续了解EIGRP对于拓扑变化的应对方法想必是轻松愉快的。能够导致拓扑发生变化的因素有很多,比如去往某个网络的距离发生了变化,或者有个新邻居上线了并通告了某个网络。相对应地, EIGRP能够通过本地接口度量值的变化感知拓扑变化,或者通过从邻居那里接收到一个更新包、查询包、响应包、 SIA查询包或SIA响应包,并发现数据包中携带着关于某个网络的度量信息更新,以此方法来获知拓扑变化。对于邻居失效这种事件, EIGRP会对所有通过那个邻居可达的网络重新设置CD/RD值,将其设置为无穷大。无论导致拓扑发生变化的原因是什么,路由器都能马上确认在它自己的拓扑表中是否有可行后继所提供的新最短路径,也就是说, 是否有通过了FC检查的路由器所提供的新最短路径。如果有,路由器会执行以下步骤
 
1.路由器将提供了最小CD值的可行后继变为新的后继.
2.如果新后继的CD值小于当前的FD值,路由器将FD值更新为新的CD值; 否则保留当前值. 3.路由器更新路由表,将路由指向新后继. 
4.如果更新后继导致去往目的地的当前距离发生了变化,路由器向所有邻居发送更新包,通告去往该目的地的新距离。
 
上述行为在EIGRP中称为本地计算(Local Computation) ,路由器只需使用已经储存在拓扑表中的信息就可以执行这一过程,无需邻居路由器的介人。在这些行为的执行过程中,相关路由一直保持被动状态。
 
 但是,如果在检测到拓扑变化后,路由器发现目前提供了最短路径的邻居并不是可行后继,它就无法马上将这个邻居当作下一跳,因为这样做有可能会产生路由环路。因此,路由器会发起弥散计算(Diffusing Computation), 具体步骤如下所示.
 
1.路由器将路由表中的相关路由条目进行锁定,使其仍指向当前的后继:直到弥散计算完成且路由再次进人被动状态前,都不能移除这条路由,或者更改它的下一跳.
2.路由器按照当前的后继,将FD值设置为当前的(可能变大了的)CD值。如果当网络处于活动状态时,路由器仍须通告相应距离的话,它也仍旧会使用通过当前后继获得的当前CD值.
3.路由器将网络置于活动状态,并向所有邻居发送查询包。查询包中包含活动网络的前缀和路由器去往该网络的当前CD值。
 
每个收到了查询包的邻居都会使用查询包中通告的距离信息,来更新自已的拓扑表,并依此重新选择自已的后继和可行后继。对于邻居的处理结果,存在以下两种可能性:这个邻居仍然找到了自已的可行后继或者后继,能够提供最低开销的无环路径; 或者根据查询包中包含的信息,这个邻居不能再将它当前的后继作为最短路径了,并且它自己的邻居中,也没有能够提供最短路径的可行后继。 
 
在第一种情况中,如果邻居仍有自己的后继,它会发回一个响应包,并在其中指明自已去往该目的地的当前距离(有必要的话,它会执行自已的本地计算)。这时邻居不必介人到弥散计算中,因为它本身不需要把这个网络置为活动状态。也正因为这一点,弥散计算在这个邻居这里就截止了,不会扩散到更远的范围中。 
 
在第二种情况中,这里邻居需要让自已也参与到弥散计算中,它会发出自已的查询包,并在其中通告通过当前后继的当前距离。这样一来,一波又一波的查询包会在受到拓扑变更影响的网络范围中扩散。网络中没有受到拓扑变更影响的部分将不会参与到弥散计算中来。与其说这种行为揭示了EIGRP的技术原理,不如说在某种程度上,它更印证了EIGRP的营销宣传“部分、边界更新”:每个EIGRP数据包中只包含变化了的信息(部分),并且它只在受到影响的网络部分中传播(边界)。 
 
当路由器将某个目的地置为活动状态,并向邻居发送查询包后,它必须等待接收所有邻居返回的响应包。在那之前,相关路由会持续维持活动状态,并且路由表中的条目也无法更改。只有当接收到所有响应包后,路由器才能将相关路由重新置为被动状态,并从通过了FC检查的邻居中,选择提供了最短路径的邻居;然后根据这个邻居提供的CD值,重新生成FD值。这时路由器才能最终更新路由表中的相关条目。如果这台路由器是由于收到了一个查询包才变为活动状态的,这时它会开始发送自己的响应包,可能还会发送更新包,因为直到这时它才确定了自已去往目的地的距离; 否则的话,路由器只发出更新包。
 
有一点值得单独提出来,更新包、查询包、响应包、 SIA查询包和SIA响应包中包含的最重要的信息其实永远都只是发送方去往某个目的地的当前距离;用来告知接收方,数据包发送方去往目的地的距离,有时还要求接收方的响应(比如查询包和SIA查询包) 。 至于这些数据包会不会导致接收方将某个目的地置为活动状态,只取决于消息中的信息对于接收方选择最短路径的影响,以及为接收方提供最短路径的邻居是否能通过FC检查。
 
大家普遍认为如果当前后继失效了,总是有一个可行后继(如果有的话)会被提拔为后继。不过这种说法并不完全正确。再次考虑上一篇文章图一所示拓扑,假设它维持在例中最后的状态。对R1来说,去往LAN的FD值仍为2048,当前的最优路径是由R2提供的, R2作为后继,它的CD值是2560。 R1将R3看作可行后继,因为它的RD值为1280,这个值小于FD值(2048), R3的CD值是5120。注意, R4实际上提供了一条优于R3的路径, CD值为4096,但由于R4的RD值是3072,没有通过FC检查, 因此R1也就不会将R4看作是可行后继。 
 
如果R1和R2之间的链路断开了,通常我们认为R1会首先查看有没有可以使用的可行后继一而它也这样做了;它找到了R3,将R3提拔为后继,并在路由表中将去往LAN的路由指向R3。可是这并不正确。如果R1单纯地满足于R3提供的路径, 那它将会使用一条可用但并不一定是最短的路径,也不会试图寻找一条更短的路径。 因此EIGRP的真正做法如下所示。 
 
■ 当EIGRP检测到拓扑变化时,它首先会在拓扑表中记录这个变化;如果它是通过接收EIGRP消息获知了拓扑变化,它会对通告了这个变化的邻居更新 RD值和CD值;如果它是通过感知链路度量值的变化获知了拓扑变化,它会 对受到这个变化影响的邻居,更新RD值和CD值。
■ 从通告了这个网络的所有邻居中, EIGRP会根据更新的CD值,找到提供了 最小CD值的邻居。这一步并不涉及FC检查。
■ 只有当找到了提供最小CD值的邻居, EIGRP才会确认这个邻居是否满足FC 的要求,是否是可行后继。如果是的话, EIGRP会将其提拔为后继,并马上 开始将它作为下一跳来使用。但如果邻居不满足FC的要求, EIGRP会将路 由置为活动状态,然后发送查询包,请求它的邻居们帮它找到最优路由。
 
换句话说, EIGRP与其他路由协议一样,总是会试图选择去往某个目的地的最短路径;
但在真正使用这条路径之前, EIGRP还会确认它是否满足FC的无环要求。如果满足的话,EIGRP将会使用这条路径;如果不满足的话, EIGRP将会把这个目的地置为活动状态。
 
接下来看下例,其中展示了当R1-R2链路断开后,图1中的网络如何应对这一拓扑变化。
 
ipv6路由表显示到LAN的下一跳为R2
 
 
在eigrp拓扑表中,R2标记为后继,R3为可行后继,R4不显示,因为它不满足FC,
 
 
使用all-links关键字,也可以显示R4,但从(CD/RD)值可以明显看出R4不满足FC。而R2和R3满足
 
 
下边这条命令用来查看eigrp的DUAL FSM动作
 
 
在s1/0接口关闭后,注意R2的丢失在拓扑表中被表示为就像R2通告了无限度量。R1在拓扑表中对这个目的计算所有邻居条目,并确定当最小距离(Dmin)为4096时,下一跳为R4,而R4不匹配FC,这就是debug输出中"not found"注释的原因。“not found”显示出的地方与 FE80::4 这行没有真正的关系。(这只是debug输出混乱)
FS(可行后继)
 
 
因为提供最低开销路径的邻居不满足FC,R1进入活动状态,发出查询包,并期望得到答复
 
 
R3回复:它不受R1/R2链路故障的影响。所以 CD/RD 与已存储的相同
 
 
R4回复:它不受R1/R2链路故障的影响。所以 CD/RD 与已存储的相同
 
 
现在已经收到了所有回复,R1可以自由地重置FD并选择提供提供最小CD的任意邻居,显然,是R4.“RT installed”显示路由和下一跳已经被装进了路由表
 
 
下面的输出显示FD已被重置并更新到新的最小CD-4096。下一跳为R4的路由也装进了路由表中,注意R3被留下了,作为可行后继,从未被提升为后继角色。
 
 
 
 
 
 

你可能感兴趣的:(EIGRP-11-弥散更新算法-EIGRP中的本地计算和弥散计算)