先上拓撲圖:算法
咱們關注R1,R2之間的路由更新過程;配置好IP和EIGRP;ide
等到收斂完畢以後(速度很是快,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接口的主類路由條目,spa
如「D 172.16.0.0/16 is a summary, 00:04:06, Null0」,這樣作的目的是防止環路。code
將R2的S1/0接口SHUTDOWN:blog
接着咱們打開wireshark抓包工具,抓取R1的S1/1接口的數據包:接口
經過觀察發送時間和數據包類型,咱們能夠發現,收斂完畢以後,各自間隔5秒鐘時間(速率大於T1,間隔不是精確的5秒,大體差很少)路由器會向224.0.0.10這個組播地址發送hello包;路由
而後咱們將R2的S1/0(和R1相連的)接口shutdown掉,抓包:get
shutdown以後R1就收不到R2發送的Hello包了,直到15秒(3倍的hello報文發送間隔)以後,R1向組播地址發送了一個「Goodbye Message」報文,報文內容以下:it
將R2的S1/0接口SHUTDOWN:
首先咱們猜想,S1/0被shutdown以後,路由器R2確定會向它的鄰居R1發送路由更新報文,告訴鄰居「【172.16.1.4/30】這條路由失效了,把它從你的路由表(及拓撲表)裏面刪除吧!」;而後R1收到消息以後要告訴R2收到了,而且將相關條目從拓撲表和路由表中刪除!下面咱們來抓包分析:
首先第一個數據包是R2發送給R1的「Query 報文」,具體內容以下:
R2以單播的方式發送給本身的鄰居R1:Opcode:Query(3)標識這是一個查詢報文;'Prefix Length'標識了掩碼長度爲30位;"【Destination:172.16.1.4】標識這條路由已經不可達";可是這邊奇怪的是,爲何是查詢報文,而不是更新報文??
第二個數據包是R1收到R2發送的查詢報文以後,回發的一個ACK報文:
還記得咱們以前說過的吧?opcode爲5的而且ACK不爲0的報文是ACK報文,而不是Hello報文;Acknowledge:22表示是對R2發送給R1的序列號爲22【Sequence:22】的數據包確認;確認的同時R1由向R2發送了序列號爲21的「Reply報文」;緊接着R2又給R1發送了一個ACK報文,值得注意的是,每一個報文的序列號和ACK號,尤爲是R2將回復的ACK報文的序列號置爲0了,表示收斂完畢了,重置了序列號!!
將R2的S1/1接口開啓:
當開啓了R2的S1/1接口以後,咱們能夠看出來R2當即以單播的方式向它的鄰居發送了update報文,宣告了【172.16.1.4/30】,報文中還包括該條路由的延遲、帶寬等信息,用於計算度量值;隨後R1又向R2發送了ACK消息;各報文具體內容以下:
寫到這裏尚未提到的主動被動狀態以及DUAL擴散更新算法,這些將在後面慢慢道來!