EIGRP三张表:

1:EIGRP的邻居表:
本路由器的接口,所直接相连的EIGRP邻居的信息

H列:和邻接路由器建立EIGRP邻居关系的先后顺序,从0开始自上而下依次递增。
Address:邻居的哪个接口和本端建立了EIGRP关系。
Interface:连接到我本端的哪个接口。
Hold Time:包含在HELLO包中,理解为邻居的可抢救时间。因为HELLO时间的关系,在T1链路中,正常情况下,HOLD TIME不会小于10.
重传超时(RTO):单播之间的时间,但是在从组播切换到单播的时候是由组播计时器来指定,也就是说,在EIGRP建立之初,组播224.0.0.10发送组播包,这时候按组播的计时器来计算。当组播失败,单播的时候才和RTO有关。
平滑往返时间(SRTT):衡量路由器发送EIGRP数据到邻居和从邻居收到数据包确认的时间花费
Q计数器:缓冲区有多少个包等待重传(可靠报文重传队列)。
此三个参数都是CISCO私有
Seq Num:从邻居收到的最新的序列号。
 
2:EIGRP的拓扑表:(详细的拓扑表)
本路由器,从自己的邻居那里,得到去往特定目标网络的(一切)可能的路径,都承载/存在于拓扑表中.

P代表被动,拓扑表中只有P的路由才能放进路由表,后面会着重介绍。
引入概念:
S:后继路由,理解为当前正在用的轮胎。
FS:可行后继,可以使用的备胎。
AD:通告距离:邻居告诉我他到达目的地的距离,(即COST值)
FD:我到达目的地的距离(放进路由表的实际COST)
FC:可行条件:当邻居给我的AD小于我当前使用的S的FD的时候,这个邻居才可以成为FS。(也就意味着,邻居必须是我的下游路由器才可以,这是EIGRP的核心防环策略)
序列号,注意区分,可能不同路由是不同的可靠报文传递的,而邻居表中的序列号是收到所有的可靠报文中,最新的。
 
3:从EIGRP形成的路由表:
  是EIGRP路由器,从拓扑表中,择优将"去往特定目标网络开销最小的"路由,放入了路由表.

EIGRP日志记录邻居改变
每当EIGRP重置邻居关系的时候,都会在日志中记录原因。早期IOS之中,启用这一特性是很重要的,eigrp log-neigobor-change。12.1.3以后的IOS会自动集成,不止EIGRP,其他的路由协议也如此。
 
EIGRP建立邻居有关第二地址
EIGRP从接口的主地址发送HELLO包,如果路由器上的主网络地址被用于邻居路由器上的第二地址。则不会形成邻居关系。

如图,这样建立的话,有什么问题:
1.EIGRP支持单向邻居的建立,如果R2只宣告第二地址进入EIGRP进程,则R2还是使用20.0.0.1这个接口主地址去发送HELLO包,R1不会接收,因为过来的包源于接收接口不在同一网络。R1上形成不了邻居关系。R1也会向R2发送,R2收到以后,检查,数据包源和自己的第二地址在同一网络,接收。所以,这种情况下,R2上会有R1的邻居关系,R1上没有任何邻居关系。
 
EIGRP建立邻居有关掩码问题

理清如下概念:IGP命令network的是接口还是路由?针对于本地的路由表,只有直连路由,可利用的只有接口。故network的肯定是接口。
                     什么叫同一条路由?目的网络前缀和目的网络前缀掩码都一样,才叫同一条路由。
                     路由器不会从一个接口发出的更新包中,不会包含通告的接口。
注意,R1和R2之间的链路,因为/25是/24的子网,R1,R2建立邻居是没有问题的。
 
因为/24,/25不是同一条路由,R2上会有10.1.1.0/24,10.1.1.0/25这两条路由。当R2发送一个update给R1的时候,R1应该会回送一个目的地址为10.1.1.1的一个ACK。
当这个ACK到达R2的时候,R2查找路由表,根据最长匹配原则,会将这个ACK转到10.1.1.0/25的下一跳R3上,R3再转给R1。这样形成了一个环路,R2会认为R1一直没有推送ACK下来,重传16次。然后会down掉邻居关系。

DUAL:
如果一台FS通告一条路由在本地路由器上所计算的度量值比当前S的小,那这台FS就成为S(也就是说S是抢占的)
以下情况可能会引起这种情况的发生:
1.发现新路由
2.S的度量值超过了FS
3.FS的度量值减小到小于S
 
路由器在某些时候会重新评估一条路由的可行后继,可能是:
1.直连链路的代价发生变化                                       update   因为有拓扑表,可以根据收集到的信息去自主选择。
2.直连链路的状态发生变化(up或down)                    Query   物理链路势必会影响路由,会去查找替代路径。
3.收到一个更新的数据包                                           update或Ack  Update交互是必要的,但有时候不是必须的,在只有和链路对端连接的端口进入EIGRP的时候。
4.收到一个查询的数据包                                           Ack,Replay  有问必有答
5.收到一个答复的数据包                                           Ack      
 
路由器在对路由进行评估的时候,在本地执行运算,针对于所有影响到得路由,重新计算到达目的地的距离。
 
路由器在执行本地运算的时候,路由状态保持被动,若有可行后继,则发送给邻居Update或Replay。但从不改变路由的状态。
如果没有可行后继的话,路由器便开始扩散运算,路由的状态会变为活动状态(active state)。
在此路由恢复被动状态之前,路由器不能:
1.改变此路由的FS
2.改变正在通告的路由的Metric
3.改变正在通告的FD
4.开始另一个扩展运算。
 
邻居收到查询包以后,会执行一个本地运算。如果自己有到达被查询目的地的路由,则Replay给邻居。其中包含自己到达目的地的FD。如果没有,1.如果自己是EIGRP网络边界,则返回给邻居Metric无限大的一个路由不可达的Replay
 
发送Query:
1.路由丢失,
2.接口Metric改变,超过了当前的FD且没有FS。
 
Query:包中包含被查询的路由,指定此路由不可达

Replay:包含被查询的路由,指明路由不可达,如果可达,包含了路由器到达目的地的Metric。路由中的信息和Update一样。

每一个接收查询的路由器,本地都会设置一个答复状态标记,以监督跟踪所有未处理的查询,直到收到所有的回复,查询和回复必须是1对1.扔多少孩子就要套到多少狼
 
EIGRP的DUAL查询可以概括为:
1.本地丢失路由后,执行本地运算,查找是否有FS
2.没有FS,路由状态变为主动,组播发送查询,本地查询标记变为0
3.邻居收到查询,执行本地运算,如果有去往目的地的S或FS,返回Replay。
4.如果没有,邻居的路由状态变为主动,向自己的邻居去发送查询。
5.查询扩散到网络边界,如果还没有路由,返回Replay消息。标记路由不可达。并在自己的路由表中删除此路由。(注,只要扩散到网络边界,还没有找到备胎,马上删除路由,发送回复报文,并不是由发起查询的路由器去干这件事)
6.收到所有的回复以后,针对这条路由,将FD设为无穷大,以便所有的路由都满足FC。选举最小的作为S,将S通告的Metric作为FD,依据FC看剩下的是否有FS。