CCNP——EIGRP算法详解(进阶篇)

EIGRP一共七种报文,除了之前讲的三种(update,hello,ack),还有四种(query,reply,SIA query,SIA reply)

EIGRP Queries(EIGRP查询报文)/Reply(EIGRP回复报文)

查询报文

  • 如图所示,到达192.168.14.0/24网段出现了故障,R1发现192.168.14.0/24网段不可达,丢失了去往192.168.14.0/24这条路由的后继
  • 这时,若找不到其他的可行后继时,DUAL算法则将这条路由置为活动状态,即把这条路由从passive状态变成active状态,同时启动active-time定时器,数值为180s,一旦到了180s没有收到reply回复,则断掉邻居关系。
  • 然后路由器向所有的邻居(除了我自己的后继路由器)进行组播(或者单播)查询。于是它便给R2一直发query报文,直到R2给他回复ack,告诉R1我收到了你的查询报文。
  • 这个时候,如果R2有到达丢失网段的路由信息,于是会在回复完ack后,继续向R1回复reply报文,告诉R1:哥们儿,别慌!我有这条路由信息,然后R1更新路由信息后,这条路由重新从active状态变为passive状态。
  • 如果R2没有这条路由信息,这时R2发现:原本我到达192.168.14.0/24网段的路由的后继路由器是R1,但是现在R1却来向我查询有没有这条路由信息,所以这就说明我的这条路由的后继出问题了,并且也找不到可行后继,于是DUAL算法开始把这条路由置为活跃状态。然后R2向R3和R4发送查询报文,查询该条路由信息。于是他便给R3和R4一直发query报文,直到R3和R4给出ack
  • R3和R4的操作与R2类似,开始向R5,R6,R7和R8进行查询。
  • R5,R6,R7和R8发现:我只有一个邻居啊, 我的路由信息都是你给的,你怎么还向我查呢,于是直接告诉R3和R4,我没有这条路由信息,这条信息是错误的,你删了吧。于是这四个路由器先向R3和R4回复ack,告诉R3和R4我收到了你的查询报文,接着便向R3和R4回复了reply报文。于是R3和R4收到了R5,R6,R7和R8的reply报文后,将这条 路由信息删掉了。
  • 然后R3和R4告诉R2这条路由信息有问题,没有到达这个网段的路由信息,你可以删掉了。
  • 然后R2以相同的方式告诉R1,最后所有路由器都删掉这这条路由信息。

SIA-Query/SIA-Reply

图2

Stuck in Active(即SIA,卡在active状态)
  • 如图所示,若192.168.14.0/24这个网段出现了故障,R1发现到达192.168.14.0/24这个网段不可达,也没有其他的可行后继路由器,于是开始向R2发送query报文
  • R2收到R1的query报文后,先向R1回复ack报文,从图中拓扑很容易看出,R2到达192.168.14.0/24的后继是R1,现在R1出问题了,R2只能继续向R3发送query报文查询
  • 这个时候,R3很不巧,由于某些原因无法回复ack,所以等到180秒以后,邻居就断开了。
  • 而且,由于R3没有给R2回复,R2也无法给R1回复reply报文,于是等到180秒以后,R1和R2的邻居关系也就断了。
所以,如果由于某个路由器故障,无法回复ack,则它的前一个路由器便卡在了active状态,结果会导致与之相关的所有邻居全部断掉,导致许多路由器的路由条目都要更新,会使网络不稳定。
所以为了应对这种情况,新版本的EIGRP又增加了两种报文,SIA-Query报文和SIA-Reply报文

新版本的工作流程

  • 如图所示,若192.168.14.0/24这个网段出现了故障,R1发现到达192.168.14.0/24这个网段不可达,也没有其他的可行后继路由器,于是开始向R2发送query报文
  • R2收到R1的query报文后,先向R1回复ack报文,从图中拓扑很容易看出,R2到达192.168.14.0/24的后继是R1,现在R1出问题了,R2只能继续向R3发送query报文查询
  • 这个时候,R3很不巧,由于某些原因无法回复ack,所以等到180秒以后,邻居就断开了。
  • 但是当active-time到了90秒的时候,R1会给R2发送SIA-Query报文,询问你是否也卡在了active状态,这个时候R2先回复一个ack报文,然后再回复SIA-Reply告诉R1是的,这个时候R1发现R2这里没问题,于是等180秒到了以后,邻居关系就不会断掉。
  • 同样地,R2也会给R3发送SIA-query报文,但是R3由于某些原因无法回复,所以等180秒到了以后,R2和R3的邻居关系就断掉了,但是R1和R2的邻居关系正常维持。

相关的配置命令

  • r3(config-router)#timers active-time 1(单位:分钟)修改active-time的值

EIGRP的末节路由器配置

EIGRP末节路由器不收query报文!!一个普通路由器若是和末节路由器建立邻居以后,二者之间的hello报文和普通路由器之间建立邻居所发的hello报文不一样,会多一个peer stub information的字段!!所以普通路由器不会向stub路由器发送查询报文!

EIGRP末节路由器(eigrp stub)配置:

r3(config-if)#router eigrp 100
r3(config-router)#eigrp stub

配置末节路由器中的一种特殊情况

图3

这里将R3配置成stub路由器,然后我们发现:R2的拓扑表中有这么一条路由信息:

图4

到达1.1.1.0/24(这个用来模拟与R1连接的出故障的网段)的这条路由没有后继路由器,且FD为无穷大,按理说这样的一条路由应该删掉了,这里为什么不删呢?
主要原因是因为这里R3虽然接口down掉了,但是由于hold time的原因,R2还认为R3是邻居,所以R2现在在不断地给R3发送update报文,想告诉R3这条路由没用了,让R3删掉。但是R3此时根本收不到。所以这条路由信息R2保存的唯一作用就是给R3发送更新报文。等到hold time时间一过,R2把R3的邻居关系一断,R2才会把这条路由信息删掉。
发布了82 篇原创文章 · 获赞 176 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/loveCC_orange/article/details/104003812
今日推荐