EIGRP

 

   EIGRP同IGRP一樣是距離矢量路由協議,他們使用相同的綜合metric計算方法,除此之外,他們有很大不同。

   EIGRP有時候被描述爲像鏈路狀態路由協議的距離矢量路由協議。

   EIGRP是一個nonperiodic,partial 和 bounded的路由協議。所謂nonperiodic意思是不是在一個固定的間隔發送更新;partial,更新只在網絡發生變化時;bounded,更新只發送給受影響的路由。所有這些意味着跟傳統的距離矢量路由協議相比,EIGRP只佔用很少的帶寬。使用命令 ip bandwid-percent eigrp 可以調整EIGRP佔用某個端口帶寬的百分比。

   EIGRP另一個特點是不僅可以路由IP,也支持IPX和Appletalk。

   EIGRP在計算metric時候,在IGRP計算結果上面再乘以256,以實現更小的粒度。

   EIGRP協議棧由4部分組成:

 

  1. Protocol-dependent modules:完成基於各個網絡協議的路由交換。
  2. Reliable transport Protocol:負責發送、接收EIGRP包。Reliable意味着傳輸有保障,並且按順序。
  3. cisco私有的算法Reliable multicast (使用組播地址224.0.0.10)保證可靠傳輸,鄰居收到一個組播包都會發送一個單播的確認。
  4. 在包中加入兩組sequence number保證了包傳輸的先後順序。發送者在包中寫入順序號,每個包依次遞增;發送者同時在包內寫入上一個從對方收到的包的順序號。
  5. EIGRP有時會使用不可靠傳輸unreliable delivery。不需要ACK,沒有順序號。

EIGRP有5種包類型:

  1. Hello。組播、不可靠傳輸。
  2. Acknowledge(ACK)。沒有數據的Hello包。單播、不可靠。
  3. Update。包含路由信息。當某個特定路由器需要需要update時,使用單播;當多個路由器需要時(比如網絡產生變化)使用組播。可靠傳輸。
  4. Queries和Replies。被DUAL有限狀態機使用。Queries可以爲組播或單播,replaies始終爲單播。均爲可靠傳輸。
  5. Request。最早使用在路由服務器上,沒有用。

   如果一個可靠傳輸的組播沒有收到ACK,路由器會以單播重傳數據包到沒有響應的鄰居16次,之後確認鄰居關係破裂。

幾個timer:

  1. multicast flow timer。等待ACK期間,從組播轉換爲單播的時間。
  2. retransmission timeout(RTO)。單播之間的間隔。
  3. smooth round-trip time(SRTT)。傳輸一個包到鄰居到從鄰居收到這個包的ACK的間隔。以毫秒計算。針對每個鄰居的multicast flow timer和RTO都是根據SRTT值計算出來的。
  4. 以上timer的具體計算方法都是廠商私有的。

鄰居的發現、重發現:

  1. Hello time在多數網絡環境中是5秒(減去一個很小的隨機時間防止同步)。在點對多點接口(x.25, Fram Relay, ATM )環境中,速度小於等於T1,hello time爲60秒。在接口模式下命令ip hello-interval eigrp更改默認hello time。
  2. 當路由器從鄰居收到一個hello包時,包內有一個hold time。hold time告訴路由器收到下一個hello包之前最長的等待時間。默認的,hold time爲hello time的3倍,即15秒或者180秒。
  3. 鄰居表:

     

    表中,H代表學習到鄰居的先後順序;interface 爲收到鄰居hello包的接口;hold爲從鄰居收到的hello包的hold time;uptime是自從鄰居增加到鄰居表的時間;如果路由器發出update、query或者reply,它會在其隊列中保留一個副本,以便在RTO到期時再次發送,Q表明在隊列中的包的數量;Seq是最近的從鄰居收到的update、query或者reply包的sequence number。

幾個術語:

  1. Adjacent,鄰接。兩個鄰居間的邏輯連接,路由信息在其上交換。
  2. Feasible Distance, FD可行距離。路由器用其收到的鄰居通告加上其到鄰居的距離,形成了到達某個網絡的距離。到達某個網絡多條路徑中,距離最短的就是可行距離。
  3. Feasible Condition, FC可行條件。一個鄰居宣告到達某一目的地的距離小於路由器本地計算出來的可行距離FD。
  4. Feasible Successor,FS可行後繼。如果一個鄰居宣告的路由滿足可行條件FC,那麼這個鄰居就成爲可行後繼。
  5. Successor,後繼。到達每個網絡的一個或多個FS將記錄在topological table內,其中metric最小的將被選中放入路由表中。宣告這條metric最小的路由的鄰居,就成了Successor。
  6. 如果想更改接口metric來影響EIGRP或者IGRP,儘量使用Delay。否則容易影響其他路由器或者出現其他狀況。

DUAL 有限狀態機:

  1. 如果路由器沒有在運行diffusing計算,那麼就處於被動狀態(passive state)。
  2. 路由器將在以下input狀況出現時,重新評估其FS
  • 直連鏈路cost更改
  • 直連鏈路狀態更改(up/down)
  • 收到update packet
  • 收到request packet
  • 收到reply packet

      3.   評估的第一步是本地計算(local computing),在這一步裏,到達某個目的地所有FC都會重新計算。可能的結果有:

  • 擁有最小distance的FS跟Successor不一致,這種情況下,這個FS將成爲Successor
  • 新的distance比當前的FD小,則這個FD會被更新
  • 如果distance跟現有的distance不同,路由器會向所有鄰居發送更新
  • 當路由器在進行本地計算時,其狀態任然是passive,如果發現FS,會向所有鄰居發送更新,狀態不變

      4.  如果路由器在topology talbe內找不到FS,路由器會進行diffusing計算並且變成活動狀態(active state)。在路由器進行diffusing計算(active state)時,路由器允許:

  • 更改Successor
  • 更改它正在傳播的路由的distance
  • 更改路由的FD
  • 對這條路由開始另外一個diffusing計算

      5. 路由器以對所有鄰居發送query來開始diffusing計算。query內包含本地新計算出來的到達目的地的distance。每一個收到此query的鄰居會進行本地計算。

  • 如果鄰居有一個或多個到某個目的地的FS,它會發送reply回去。這個reply包含這個鄰居本地計算出來的到達那個目的地的最小distance。
  • 如果鄰居沒有到達某個目的地的FS,那麼鄰居自己也會變成active狀態並且開始diffusing計算。

     6. 路由器對每個發送了query的鄰居會設定一個reply status flag來跟蹤相應的鄰居。在路由器收到所有query的reply後,diffusing計算結束。

    7. 有些情況下,路由器收不到reply。在diffusing計算開始時,路由器會設定一個3分鐘的active timer,在active timer過期前都沒有收到reply,這條路由會被定義成stuck-in-active(SIA)狀態。沒有響應的鄰居將會從鄰居表中刪除,diffusing計算將認爲這個鄰居回覆了一個infinite metric。使用命令timers active-time更改或者禁用active timer。

   8. 在diffusing計算結束時,路由器將FD設定爲無限大,以保證所有從鄰居收到的有限大的distance都滿足FC,從而成爲FS,然後參與Successor的選舉。   #### 所有reply收到之後纔會選舉Successor。####

   9. 使用命令debug eigrp packets可以查看EIGRP的包傳遞,使用命令debug eigrp packets query reply update可以查看除Hello和ACK之外的包通訊。

總結一下Diffusing算法:

  1. 任何一個input時間發生時,進行本地計算(local calculation);
  2. 如果找到一個或多個FS,以最低cost的爲Successor;
  3. 如果沒有找到FS,則轉入active狀態,向所有鄰居發送query尋求FS;
  4. 保持active狀態直到收到所有query的reply或者active timer超時;
  5. 如果diffusing計算沒有找到FS,則宣告目的地不可達

EIGRP包格式:

 

  1. IP協議88,最大包長度一般爲IP包的MTU 1500 octets;
  2. Version。自EIGRP發佈以來,尚未更改過;
  3. Opcode。定義了EIGRP包類型;

  4. Checksum。計算整個EIGRP包,不包括IP包頭;
  5. Flag。只用到兩個flag;
  6. Sequence。用於RTP,表明順序號;
  7. ACK。最後從鄰居聽到的順序號。一個Hello包與一個非0的ACK,將被認爲是一個ACK包,而不是Hello包。一個包如果是單播,那麼ACK只能爲非0,因爲acknowledge不可能是組播;
  8. Autonomous System Number。EIGRP域的區分數字;
  9. TLV=Type/Length/Vlaue。此項不僅包含路由條目,還提供字段用於管理DUAL process,組播順序,IOS軟件版本;每一個TLV包含了一個2 octets的Type和2 octets的長度字段;
  10. EIGRP Parameter TLV
  11. IP Internal routes TLV 
  • Next Hop: 下一跳IP地址(允許是或者不是產生這條路由的路由器地址);
  • Delay: 沿途delay的總和,以10微秒爲單位;IGRP使用24 bit delay字段,EIGRP使用32 bit delay字段剛好包含了EIGRP metric裏面乘以的256;Delay 字段0xFFFFFFFF代表不可達路由;
  • Bandwidth:=356*10,000,000/沿途最小帶寬;
  • MTU:沿途最小MTU(從未用過);
  • Hop Count:0x01與0xFF之間的數字;
  • Reliability:0x01與0xFF之間的數字,反映沿途總的出口錯誤率,0xFF代表100%可靠的鏈路;
  • Load:0x01與0xFF之間的數字,反映沿途總的出口負載,0x01代表最小負載;
  • Reserved:保留字段,總是0x0000;
  • Prefix Length:目的地址掩碼;

      12. IP external routes TLV:

 

  • Originating Router:重發布外部路由到EIGRP自制系統的路由器的IP地址或者路由器ID;
  • Arbitrary Tag:用於裝載route map的tag;
  • External Protocol Metric:外部路由協議metric,用於與IGRP重發布;
  • External Protocol ID:表明從哪個外部路由協議學習到此路由;
  • Flag:目前只有兩個flag,設定8bit裏面最右邊的(0x01),代表這個是外部路由;設定第二bit(0x02),代表此路由爲默認路由候選;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章