先上拓扑图:

 

我们关注R1R2之间的路由更新过程;配置好IPEIGRP

 

等到收敛完毕之后(速度非常快,1秒左右)查看路由表:

 

复习,由此可见EIGRP是自动开启了自动汇总的,如R2中将R1的【10.1.1.0/24,10.1.2.0/24,10.1.3.0/24,10.1.4.0/24】四条路由汇总成为【10.0.0.0/8】;但是在有明细路由条目172.16.1.4/30的情况下(使用了VLSM技术),会自动生成一条指向null0接口的主类路由条目,

D       172.16.0.0/16 is a summary, 00:04:06, Null0”,这样做的目的是防止环路。

 

R2S1/0接口SHUTDOWN

接着我们打开wireshark抓包工具,抓取R1S1/1接口的数据包:

 

通过观察发送时间数据包类型,我们可以发现,收敛完毕之后,各自间隔5秒钟时间(速率大于T1,间隔不是精确的5秒,大致差不多)路由器会向224.0.0.10这个组播地址发送hello包;

然后我们将R2S1/0(和R1相连的)接口shutdown掉,抓包:

 

shutdown之后R1就收不到R2发送的Hello包了,直到15秒(3倍的hello报文发送间隔)之后,R1向组播地址发送了一个Goodbye Message报文,报文内容如下:

 

 

R2S1/0接口SHUTDOWN

首先我们猜测,S1/0shutdown之后,路由器R2肯定会向它的邻居R1发送路由更新报文,告诉邻居“【172.16.1.4/30】这条路由失效了,把它从你的路由表(及拓扑表)里面删除吧!”;然后R1收到消息之后要告诉R2收到了,并且将相关条目从拓扑表和路由表中删除!下面我们来抓包分析:

 

首先第一个数据包是R2发送给R1的“Query 报文”,具体内容如下:

 

R2以单播的方式发送给自己的邻居R1OpcodeQuery3)标识这是一个查询报文;'Prefix Length'标识了掩码长度为30位;"Destination172.16.1.4】标识这条路由已经不可达"但是这边奇怪的是,为什么是查询报文,而不是更新报文??

第二个数据包是R1收到R2发送的查询报文之后,回发的一个ACK报文:

 

还记得我们之前说过的吧?opcode5的并且ACK不为0的报文是ACK报文,而不是Hello报文;Acknowledge22表示是对R2发送给R1的序列号为22Sequence22】的数据包确认;确认的同时R1由向R2发送了序列号为21Reply报文”;紧接着R2又给R1发送了一个ACK报文,值得注意的是,每个报文的序列号和ACK号,尤其是R2将回复的ACK报文的序列号置为0了,表示收敛完毕了,重置了序列号!!

 

 

R2S1/1接口开启:

当开启了R2S1/1接口之后,我们可以看出来R2立即以单播的方式向它的邻居发送了update报文,宣告了【172.16.1.4/30,报文中还包括该条路由的延迟、带宽等信息,用于计算度量值;随后R1又向R2发送了ACK消息;各报文具体内容如下:

写到这里还没有提到的主动被动状态以及DUAL扩散更新算法,这些将在后面慢慢道来!