深入理解EIGRP

debug eigrp packet     顯示所有EIGRP的包,包括髮送和接收
debug eigrp neighbor    顯示EIGRP的鄰居的交互
debug ip eigrp route    顯示EIGRP的路由表的通告和改變
debug ip eigrp summary    顯示EIGRP路由活動的簡報
show ip eigrpevents       顯示EIGRP活動的分類,包括路由計算 

 

轉載http://blog.sina.com.cn/s/blog_995092640101aw5w.html


深入理解EIGRP

摘要(Abstract):

    EIGRP是Cisco發明的一個私有路由協議,由IGRP發展而來,但是算法做了很大的改動.EIGRP和IGRP,RIP一樣是一個採用D-V算法的動態路由協議,在收斂速度,佔用網絡帶寬和系統資源等方面有了很大的改進,且有收斂快,無環路由計算,可以應用於大規模網絡的優點.本文深入描述了EIGRP協議機制細節.

 

縮略語清單(List of abbreviations):

深入理解EIGRP

1 EIGRP協議簡介

  EIGRP(Enhanced Inteior Gateway Routing Protocol),即增強型內部網關路由協議.它是Cisco發明的一種動態路由協議,由IGRP協議發展而來,號稱是增強型的IGRP,但實際上除了Metric計算方式和IGRP類似之外,其他方面已經幾乎看不到IGRP的影子.

  EIGRP的算法做了很大的改動,雖然和IGRP,RIP一樣是一個採用D-V算法的動態路由協議,但是在收斂速度,佔用網絡帶寬和系統資源等方面有了很大的改進,具有收斂快,無環路由計算,可以應用於較大規模網絡的優點.

1.1EIGRP協議特性簡介

  1.多進程機制.一臺路由器上可以運行多個EIGRP協議的進程.各個進程之間用as號來區分.不同進程之間互不干擾,路由信息可以互相引入.和OSPF的多進程不一樣,EIGRP的報文中攜帶有進程號,所以甚至可以在同一鏈路上運行EIGRP的多個進程.

  2.使用Hello報文建立並維護鄰居關係.EIGRP的鄰居機制和大部分路由協議類似,鄰居建立後將互相交換路由信息.當網絡上某臺路由器失效時,其他路由器可以快速察覺並響應變化.

  3.觸發更新和部分更新.僅在路由信息發生變化時,鄰居路由器之間才進行路由信息的交換,並且只交換髮生了變化的路由信息,這樣可以佔用較小的網絡帶寬.

  4.適應較大範圍的網絡.EIGRP的路由度量距離(Metric)是根據網絡延時,帶寬,可靠性,負載等參數計算出來,是一個32bit的數.這樣EIGRP可以較爲準確地反映網絡鏈路的情況,Metric的取值範圍大也可以使EIGRP適應大範圍的網絡.EIGRP比RIP有了廣闊得多的適應範圍,但是一般來說也不應該越過幾十臺的規模,否則將引起效率問題.

  5.快速收斂,無環路的DUAL計算.收到路由信息使用一種稱爲DUAL的算法進行處理,生成到達各個目標網絡的最短路由信息.EIGRP的路由計算僅會波及到必要的路由和必要的路由器,而不會擴散到全網.DUAL算法的機制可以保證生成的路由是沒有環路的,它的收斂時間也比較好,優於傳統的D-V協議.

  6.路由聚合.使用路由聚合以後,對於聚合範圍內的多條路由信息只向外發送一條路由信息,這樣可以減少佔用的網絡帶寬,也減少了對處理器和內存資源的使用.EIGRP既支持自動聚合,又支持任意長度掩碼的手工聚合.

  7.路由引入.可以引入靜態路由和其他路由協議(如RIP,OSPF)發現的路由.還可以引入其他EIGRP進程報告的路由.在引入IGRP和EIGRP的路由時,直接使用IGRP和EIGRP路由的度量距離metric.

  8.路由策略.在接收,引入,發佈路由時,EIGRP支持使用路由策略對路由進行過濾.

  9.多種網絡協議支持.支持IPv4,IPX,AppleTalk這三種網絡層協議.

  10.支持不等價負載分擔.EIGRP是目前唯一支持不等價負載分擔的協議,即支持不同metric路由之間的負載平衡.

1.2EIGRP協議的運行機制簡介

   EIGRP週期性的使用組播在各個接口上發送一種低開銷的hello報文.收到Hello報文的路由器會把這個路由器加入到自己的"鄰居表"中,於是這兩個路由器會開始進行路由信息交換.以後每次收到Hello報文,路由器則認爲路由器是"活着的",而且可以與之交換信息.當連續一段時間沒有收到對端路由器的Hello報文,那麼就會認爲對端路由器已經失效,將之從鄰居表中刪除,其通告所有路由都隨之變成不可達.

  在兩臺已經建立了鄰居關係的路由器第一次交換路由時,它們將交換所有的路由信息:但是在這之後,只有當網絡結構或者路由發生變化時纔會向外更新變化了的那一部分路由.EIGRP並不象RIP一樣,EIGRP沒有定期更新路由的機制.EIGRP將所有的收到的路由信息存放在"拓撲表"中,包括路由的目的地址,掩碼,下一跳,度量距離(metric)等信息.EIGRP按照DUAL算法從拓撲表中挑選出最佳的,沒有環路的路由,加入到路由表中.

  DUAL算法(Diffusing Update Algorithm),散播更新算法,是EIGRP核心內容,也正是DUAL算法保證了EIGRP的路由計算是沒有環路的.DUAL算法使用一個有限狀態自動機(FSM)來描述EIGRP的路由計算過程,這個有限狀態機被稱爲"DUAL狀態機",有限狀態機的機制保證了DUAL算法可以收斂.在後面的描述中提到DUAL這個縮寫時,根據上下文,可能表示DUAL狀態機,也可能表示DUAL算法.

  DUAL算法是一種D-V算法.D-V算法,即距離-矢量算法,它的基本思想是:要找一臺路由器到目標網絡的距離,那麼把它到鄰居的距離和鄰居到目標網絡的距離相加,得到經由某個鄰居到目標網絡的距離,然後對所有的鄰居進行計算並從中取最小值,就得到了路由器到目標網絡的最短距離.所有采用D-V算法的路由協議都必須考慮如何避免環路的生成.

  所謂"距離",各個動態路由協議的定義是不一致的,例如RIP的定義是到目標網絡所經過的路由器的數目--"跳數".EIGRP針對每條網絡路徑,根據傳輸延時,鏈路帶寬,有效帶寬等參數計算出一個的綜合度量距離(metric),用它來衡量各條路由的優劣.在後文中,提到"距離"這個詞,往往指的是綜合度量距離metric.

  就路由器A而言,對一個目標網絡,"可靠後繼"(Feasible Successor,簡稱FS)是指這樣的鄰居路由器B:通過B到達目標網絡有一條路徑,並且B到目標網絡的距離小於A到目標網絡的距離.

而"後繼"指的是某條路由當前正在使用的下一跳

  例如在如下的網絡拓撲結構中:

深入理解EIGRP

  假定:

       B-N的距離是10,C-N的距離是100.

       A到N的最短路徑是A-B-N,最短距離是30.

  那麼對於目標N:
       路由器A的可靠後繼有B,但C卻不是它的可靠後繼,

       路由器B的可靠後繼有N,但A卻不是它的可靠後繼.

  如果B是A的可靠後繼,那麼我們可以確信:路由器A通過路由器B到達目標網絡不會有環路.也就是說,可靠後繼是沒有環路的充分條件.

  當網絡發生變化時,DUAL會首先檢測對目標網絡是否還存在可靠後繼:
  1.如果存在可靠後繼,那麼使用可靠後繼中最優的一個作爲到達目標網絡的下一跳,沒有必要重新計算路由.

  2.沒有可靠後繼,拓撲中也沒有關於此目的地址的路由項,這說明目標網絡已經不可達.

  3.沒有可靠後繼,但是拓撲表中還存在到達此目的地址的路由項,即還有相鄰路由器宣稱它可以通往此目的地.這種情況下,相鄰路由器所報告的這條路由不能滿足可靠後繼條件,我們無法對這條路由作出沒有環路的保證.此時不可以採用這個相鄰路由器作爲通往目的地址的下一跳,(因爲不能確保沒有環路),而必須啓動DUAL進行路由重算,這也是一個重新確定可靠後繼的過程.當計算結束時,或者可以找到新的可靠後繼,找到新的可以確保無環路的路由;或者可以確信目標網絡已經不可達.

  DUAL算法被稱爲一種散播算法,是因爲它採用一種"分佈的","擴散的"計算方式.具體說來,當一臺路由器對某條路由找不到可靠後繼,開始進行路由重算時,它會向所有鄰居路由器提出"查詢"(Query),這時我們稱這條路由進入了active狀態;等到所有的鄰居路由器都對查詢做出"應答"(Reply)後,這臺路由器纔會根據這些應答計算出新的可靠後繼和新的最佳路由,這時我們稱這條路由回到了passive狀態,這個過程稱之爲"收斂".

  當鄰居路由器收到查詢時,它也會檢查自己的可靠後繼條件:若條件滿足,可靠後繼存在,那麼它將馬上對查詢做出應答;若條件不滿足,找不到可靠後繼,那麼它只好先將查詢擱置起來.然後它也會啓動路由重算的過程,會向它所有的鄰居發出查詢,直到它的所有鄰居應答後,它纔會收斂並計算出新的可靠後繼,這時它纔會對先前擱置的查詢做出應答.

  可以看出,DUAL是一個不斷向外擴散的計算過程,看起來似乎會越來越多的路由器捲入到計算過程中.但是實際上,DUAL的機制可以保證計算不會被擴散到太遠,計算一般只會波及到必須的路由器;DUAL也可以保證這些發出查詢的路由器不會相互無休止地等待應答,它們都會在比較快的時間內收斂.計算的傳播過程也伴隨着路由信息的傳播,這使EIGRP可以很快的感受到網絡的變化並做出響應.

  伴隨着DUAL計算,有許多報文在相鄰路由器之間傳送,這些報文攜帶着EIGRP的路由信息.EIGRP使用Raw IP在相鄰路由器之間傳送報文,因爲Raw IP是一種不可靠的傳輸,所以EIGRP必須建立自身的可靠傳輸體系.EIGRP使用的序號確認,超時重傳等機制確保報文的可靠送達.

  注:TCP/UDP類型的套接字只能夠訪問傳輸層以上的數據,因爲當IP層把數據傳遞給傳輸層時,下層的數據包頭已經被丟掉了.而原始套接字卻可以訪問傳輸層以下的數據,所以Raw套接字可以實現上至應用層的數據操作,也可以實現下至鏈路層的數據操作.

  只需要簡單瞭解的讀者看看這些就夠了,如果想深入瞭解EIGRP,請繼續向下看.

2 EIGRP的多進程

  EIGRP是支持多進程的,在同一臺路由器上,可以運行多個EIGRP的進程,各個進程之間使用進程號(as-number)相區分.

  EIGRP每個進程之間是完全獨立的,就像有幾個協議一樣:它們具有獨立的使能網段,獨立的協議配置,獨立的接口配置,獨立的鄰居表,獨立的拓撲表,獨立的報文傳送.進程的運行不會互相干擾,一個進程的運行狀態和其他進程無關.EIGRP甚至可以在同一接口,同一鏈路上運行多個進程.EIGRP的各個進程之間可以相互引入路由.

深入理解EIGRP

  EIGRP報文頭中包含有as number,EIGRP進程將會丟棄接收到的其他進程(as number)的報文.EIGRP只在具有同一as number的路由器之間建立鄰居關係.

深入理解EIGRP

3 報文格式

3.1報文格式描述

  EIGRP使用Raw IP來封裝報文,IP頭中協議字段爲88.

  EIGRP的報文共分爲Hello,Query,Reply,Update,Request五種,但是其中Request報文目前並沒有使用.EIGRP沒有單獨的確認(ACK)報文,確認消息包含在其他報文中.每種報文又是由一個報文頭加上一個或多個TLV組成.

  TLV指Type-Length-Value,指的是由類型,長度,值三部分組成的信息單位.EIGRP目前有8種TLV:Parameter TLV,Authentication TLV,Sequence TLV,Software Version TLV,Next Multicast seq TLV,IP Request TLV,IP Metric TLV,IP Exterior TLV.其中IP Request TLV只用於Request報文,目前並沒有使用.(其實還有一些IPX和AppleTalk網絡使用的TLV,這兩種網絡不常用,所以也不再敘述.)

3.2EIGRP報文頭

  所有EIGRP的報文都有如下一個頭部:

深入理解EIGRP

  字段說明:

  Version:協議版本(目前爲2)

  Opcod:報文類型

深入理解EIGRP

  其中Update(1)報文用來更新路由,Request(2)報文目前不再使用,Query(3)報文和Reqly(4)報文用於查詢和應答,Hell0(5)報文用來維護鄰居關係.

  報文的具體內容在後續的TLV的描述中會講到.Update(1),Query(3),Reply(4)三種報文的具體用法會在"DUAL算法和DUAL狀態機"詳細描述.

  Checksum:校驗和

  Flags:標誌(0x01表示INIT,0x02表示CR).INIT標誌表示發送給新鄰居的第一個初始化Update報文,這個報文將攜帶所有的路由信息,而以後的普通的Update報文將只攜帶變化了的路由信息,關於CR(Conditional Receive)標誌,將在"Sequence TLV"部分中講述.

 Sequence Number:報文的序列號,用於確認機制,不需要確認的報文,如Hello報文,這個域爲0.

 Ack Number:報文攜帶的確認信息.表示已經收到了此序列號的報文.

 Autonomous-System Number:自治系統號,一般來說就是進程號.

3.3 EIGRP的TLV基本結構

  根據報文的不同類型,在報文頭後面有一個或者多個TLV(Type-Length_value組).每個TLV的基本結構如下圖所示.

深入理解EIGRP

  字段說明:

  TLV Type:表示TLV的類型.其中的高字節爲0表示與網絡層協議無關的TLV類型;爲1表示IP網絡的TLV類型;2表示AppleTalk網絡;3表示IPX網絡.

深入理解EIGRP

深入理解EIGRP

  TLV length:這個TLV的長度,由此來界定各個TLV.這個長度是指整個TLV的長度,包括TLV Length和TLV Length部分.

  TLV Value:TLV的內容,具體依據不同的TLV不同.

3.4 Parameter TLV 
  Parameter TLV被攜帶在Hello報文中,用來指定建立鄰居所需要的一些參數.它的TLV Type爲0x0001,長度爲12字節.格式如下:

深入理解EIGRP

  字段說明:

  K1-K5:計算度量距離的係數K值.

  Hold-Time:這個Hello報文的有效時間,若超出這段時間還沒有收到新的Hello報文,則認爲此路由器已經失效,鄰居關係終止.

3.5 Authentication TLV
  Authentication TLV用來攜帶認證信息,它的TLV Type爲0x0002,它可能出現在任何報文中.按照Cisco的想法,對一份報文采用多種認證方式,但是目前只採用了MD5認證.

深入理解EIGRP

深入理解EIGRP

  字段說明:
  Auth Type:認證類型,目前只有MD5一種類型---0x02.

  Auth Length:認證的長度,對MD5來說,認證長度爲0x10.

  Auth Data:認證信息.對於MD5來說,又包括Auth KeyID(4字節),Auth Pad(12字節),Auth Digest(16字節)三部分.Auth KeyID默認爲0x00000001,可以在接口上配置;而Auth Pad沒有意義,永遠爲0;Auth Digest包含MD5認證的信息.

3.6 Sequense TLV

  Sequense TLV可能出現在Hello報文中,它的TLV Type爲0x0003,它的作用讓某些鄰居路由器進入到CR(Conditional Receive)狀態.

深入理解EIGRP

  字段說明:
  Address Length:地址的長度,對於IPv4地址族,取4

  Protocol Independent Address:網絡層地址,對於IPv4地址,它長4字節.

  每一組Address Length和Protocols Independent Address,表示了一個鄰居路由器的IP地址,Sequense TLV可以攜帶多個IP地址的列表.凡是接收到這個TLV的鄰居路由器將檢查自己是否在這個列表中,如果不在這個列表中,則把自己置爲CR狀態.只有處於CR狀態的路由器,才能接收帶有CR標誌的報文.(EIGRP報文頭部分中關於Flags字段的說明).

  讓我們通過一個例子來了解CR狀態的作用,某路由器R在一個接口上有A,B,C三個鄰居.它向這個接口發送了一個Update報文,然後收到了A,C的確認,但是因爲某種原因沒有收到B的確認,這樣無法知道B是否收到了這份Update報文.此時,路由器R既不想繼續等B的確認;也不希望B在沒有收到第一份Update報文的情況下接收第二份Update報文,因爲這種失序有可能引起混亂.於是,路由器R發了一個帶有Sequense TLV的Hello報文,裏面列出了B的IP地址,這樣A,C就會將自己置於CR狀態,B則會保持正常態.R發出的後續Update報文將在報文頭中打上CR標誌,這樣只有A,C纔會接收到這些報文,而B因爲不是CR狀態,將會忽略帶有CR標誌的報文,這樣就保證了B不會接收到失序的報文.路由器R將在稍後向B依次發送B所錯過的報文.

3.7 Software Version TLV

  出現在Hello報文中,它的TLV Type爲0x0004,用來指定EIGRP協議軟件的版本.

深入理解EIGRP

  字段說明

  Sys Major和Sys Minor:系統的主版本號和從版本號.目前分別取1和0.

  EIGRP Major和EIGRP Minor:EIGRP的主版本號和從版本號.目前分別取1和0.

3.8 Next Multicast seq TLV

  Next Multicast Seq TLV可以出現在Hello報文中,它的TLV Type爲0x0005.它需要和與Sequense TLV配合使用,單獨的Next Multicast Seq TLV沒有意義.

  在有Sequense TLV,但沒有Next Multicast Seq TLV時,表示處於CR狀態的鄰居路由器可以接收以後所有帶CR標誌的報文.
  在有Sequense TLV和Next Multicast Seq TLV都有時,則Next Multicast Seq TLV指定了一個序列號,處於CR狀態的鄰居路由器只可以接收帶CR標誌,並且序列號爲這個指定序列號的報文.

深入理解EIGRP

  字段說明:

  Seq Number:下一個可以接收的多播報文的序列號.

3.9 IP Request TLV

  Request TLV是專用於Request報文,它的TLV Type爲0x0101,表示向對端路由器請求關於某幾個IP網絡地址路由信息.但是現在的EIGRP協議版本沒有使用Request報文.

深入理解EIGRP

  字段說明:
  使用Mask Bit Count和IP Address表示一個網絡地址,這是一種"緊縮"的表示方式.如果表示10.0.0.0/255.0.0.0,那麼Mask Bit Count取8,IP Address長一個字節,置10;如果表示192.2.0.0/255.255.0.0,那麼Mask Bit Count取16,IP Address 長兩個字節,分別置192和2.

3.10 Metric TLV

  IP Metric TLV可以出現在Query,Reply,Update報文中,它的TLV Type爲0x0102,用來表示到某個目的地址的EIGRP內部路由及其度量距離.(EIGRP內部路由是指由EIGRP發現,非引入的路由)

深入理解EIGRP

  字段說明:
  Next Hop Forwarding Address:路由的下一跳的IP地址.

  灰色標記的部分表示計算一個綜合度量距離Metric的各個要素.

  Delay,Bandwidth,MTU,Hop Count,Reliability,Load:依次是總延時,最小帶寬,MTU值,跳數,可信度,負載.

  Mask Bit Count和IP Address:目標網絡的IP地址.用"緊縮"的方式(見IP Request TLV中的說明).一個IP Metric TLV中可以有多個目標網絡,表示多條路由信息,它們的下一跳和Metric相同.

3.11  IP Exterior TLV

  IP Exterior TLV可出現在Query,Reply,Update報文中,它的TLV Type爲0x0103,用來表示到某個目的地址的EIGRP外部路由及其度量距離.(EIGRP外部路由是指由EIGRP引入的路由)

深入理解EIGRP

  字段說明:

  Next Hop Forwarding Address:路由的下一跳的IP地址.

  上方淺灰色的部分表示EIGRP外部路由信息.

    Router ID:引入這條路由的路由器的IP地址

    AS Number:引入這條路由的路由器所在的自治系統.

    Administrator Tag:可以用來攜帶一組路由映射的標記.

    External Protocol Metric:所引入路由在原協議中的Metric值

    External Protocol:所引入路由的原協議號.(IGRP爲1;EIGRP爲2;靜態路由爲3;RIP爲4,OSPF爲6;BGP爲9;直連網段爲11)

    Flags Field:標誌位(0x01表示EXTERNAL;0x02爲CD).EXTERNAL標誌表示外部路由;CD標誌表示Candidate Default路由.

  下方深灰色標記的部分表示計算一個綜合度量距離Metric的各個要素.

    Delay,Bandwidth,MTU,Hop Count,Reliability,Load;依次是總延時,最小帶寬,MTU值,跳數,可信度,負載.

  Mask Bit Count和IP Address:緊縮格式的目標網絡IP地址,可以有多個,表示多條路由信息.

4 鄰居的發現和維護

  首選需要指出的是,EIGRP只會在使能的接口上工作.即啓動EIGRP之後,需要使用Network命令打開相應的接口,這個接口所連網段的路由纔會被EIGRP發佈,同時EIGRP也會向這個接口發送報文並接收來自這個接口的報文.當一個接口被指定爲passive-interface.那麼,這個接口上將既不發送也不接收EIGRP報文(包括Hello報文),但是這個接口所連網段的路由仍然會被其他接口發佈.

  鄰居是通過定期發送的Hello報文實現的,相鄰路由器之間通過Hello報文建立鄰居關係,在一段時間內沒有收到報文將清除鄰居關係,路由信息報文的連續發送失敗和一些配置命令也會導致鄰居關係的清除.

4.1 發送Hello報文

  EIGRP定期將向開啓的各個接口發送Hello報文,默認每隔5秒鍾發送一次,發送間隔可以根據需要在接口模式下配置.發送採用一個定時器控制.發送使用組播地址224.0.0.10,所有運行EIGRP的路由器將加入這個多播組.

  Hello報文不攜帶路由信息,只有as number,係數K值,保持有效時間(Hold-Time)等一些參數,這樣報文比較短小,佔用很少帶寬資源.Hello報文是不需要確認的,也就是說Hello報文采用不可靠傳輸.

4.2 鄰居的發現

  當一臺路由器接收到來自其他路由器的Hello報文時,而且這臺路由器還不在它的鄰居表中,那麼EIGRP將檢查Hello報文中攜帶的as number,係數K值是否與自己的一致,如果一致,將和這臺路由器建立鄰居關係,將其添加到自己的鄰居表中.接收到Hello報文也將刷新一個Hold Time定時器,這個定時器控制鄰居是否超時.

  具體來說,鄰居建立的條件有如下:
 1.自治系統號相同

  2.係數常量相同(K1,K2,K3,K4,K5)

  3.在同一個網段上(地址借用除外)

4.3 鄰居建立的握手過程
  在收到對端路由器發送過來的Hello報文後,並滿足鄰居建立條件,EIGRP就會與其建立鄰居關係.但是,必須經過三次握手後,纔可以正常的發送和接收路由信息.

  如下圖所示:

深入理解EIGRP

  三次握手示意圖(1)的說明:

  1.A發送一個帶INIT標記的UPDATE報文給B.

  2.B收到鄰居A發送過來的帶INIT標誌的UPDATE報文後會接着發一個帶INIT標記的UPDATE報文給A,同時這個UPDATE報文中帶有ACK號,應答鄰居A的INIT標記報文.

  3.A收到B的帶有INIT標誌的UPDATE報文(有ACK號)以後,會發送一個ACK報文給B.

  這時,鄰居關係纔算真正建立起來,可以正常交換剩下的路由信息.

  同時,還可以通過如下方式來完成三次握手(如下圖):

深入理解EIGRP

  三次握手示意圖(2)的說明:

  1.A與B同時(或者在沒有收到對方帶INIT標誌的報文前)向對方發送帶INIT標誌的UPDATE報文.

  2.A和B在收到對方發送過來的帶INIT標誌的UPDATE報文後,分別向對方發送一個ACK報文,對收到的報文進行確認.

  在三次握手過程中,可能會出現一端沒有準備好的情況(例如還沒有從這個路由器收到Hello報文),如下圖所示:

深入理解EIGRP

  在一方沒有準備好的情況下的三次握手的具體說明:

  1.A收到B的Hello報文,與B建立鄰居關係,立即發送一個INIT標誌設置爲1的UPDATE報文,想與B交換拓撲表.

  2.但是,B沒有收到A的Hello報文,故無法與A建立鄰居關係,所以收到的帶有INIT標誌的UPDATE報文是來自於未知鄰居,丟棄這個UPDATE報文,不作處理.

  3.A重發這個UPDATE報文(注意是超時重發),但是,B在沒有收到A的Hello報文與A建立鄰居關係之前,就不會處理這個UPDATE報文.

  4.B收到A的Hello報文,與A建立鄰居關係,立即發送一個INIT標誌設置爲1的UPDATE報文,想與A交換拓撲表.

  5.B是A的有效鄰居,所以A收到B的帶INIT標誌的UPDATE報文後,應答和處理這個報文,並且重發自己的初始化UPDATE報文.(超時重發)

  6.B再收到A的帶INIT的UPDATE報文後,由於與A正常建立了鄰居關係,能夠正常應答和處理該UPDATE報文.

  7.A與B正常交換剩餘的路由信息.

  實際上,Cisco的設備在在鄰居建立的三次握手過程中,並不是嚴格按照以上步驟來進行的,如下圖所示:

深入理解EIGRP

  此過程的說明如下:
  1.A發送一個帶INIT標記的UPDATE報文給B.

  2.B收到鄰居A發送來的帶INIT標誌的UPDATE報文後,直接發送一個ACK報文給A,對收到的報文進行確認.

  3.A三次握手成功,可以正常接收B發送過來的路由信息.

  (實際中一般不會出現這種情況,但是可以通過測試程序模擬)

4.4 鄰居的刪除
  有下面這幾種情況會導致鄰居的刪除:

  1.Hold Time定時器超時,說明在這段時間一直沒有接到這個鄰居的報文;

  2.路由信息報文連續重發16次,一直沒有接到對方的確認報文.

  3.鄰居對我方發出的查詢在SIA時限內沒有應答;

  4.一些配置命令會導致鄰居的清除和重新建立,具體說來如下.

    以下命令將清除相應接口上的所有鄰居:

    passive-interface

    ip authentication key-id eigrp (Csico上無次命令.ip authentication key-chain eigrp)

    ip authentication key-string eigrp (Csico上無次命令)

    ip authentication mode eigrp

    offset-list(配置接口參數)  (Csico上無次命令)

    ip split-horizon eigrp

    ip summary eigrp

    以下命令將清除本進程下的所有鄰居:

    metric weights

    network

    distribute-list

    offset-list(全局)

    auto-summary

  5.接口失效時將刪除接口上所有的鄰居.

  6.用戶還可以通過命令clear ip eigrp neighbor來手工刪除一個鄰居.

5 EIGRP報文的MD5認證

  EIGRP可以配置MD5認證來保證報文的合法性和完整性.如果配置了MD5認證,EIGRP在發送報文時將使用MD5算法對報文生成摘要;在收到報文後,EIGRP將校驗MD5摘要,EIGRP將丟棄認證失敗的報文.

  MD5認證是保證報文完整性,合法性的一種重要手段.一般說來,MD5認證按照如下方式進行.

  1.雙方協商好一個密碼.

  2.報文發送端將密碼填入到報文的某一個字段中,然後按照MD5算法對包含密碼的整個報文進行運算,得到MD5摘要,將生成的摘要填回到同一字段,覆蓋密碼.

  3.報文接收端收到報文後,先將摘要字段保存起來,然後也將密碼填入到報文的這個字段中,再按照MD5算法計算,得到摘要.比較這個摘要與先前保存的摘要,如果一樣,就說明報文是合法的.

  EIGRP的MD5認證的密碼摘要是放在Authentication TLV的Auth Digest字段中.和一般報文的MD5認證相比,EIGRP有一點不同:EIGRP進行MD5計算時,只計算一部分的報文內容,報文的最後的20字節(相當於報文頭的長度)不參加計算.如圖

 

深入理解EIGRP

  進行MD5認證時,EIGRP將16字節密碼填入到Auth Digest字段中,然後對灰色部分(不包含最後20字節)進行MD5計算,得出16字節的摘要,再將這16字節的摘要填回到Auth Digest字段中.得到經過認證的報文.(以上MD5驗證過程適用於密碼長度小於等於15的情況,密碼長度大於等於16的驗證過程還不詳.)

  Cisco在接口上配置認證時給出的是Key-chain的名稱,然後在Key-chain模式下配置Key-id和Key-string.一個Key-chain下面可以配置多組Key-id和Key-string,對於每組Key-id和Key-string,還可以設置各自的有效時段.Cisco在發送認證報文時,使用在有效時段內並且Key-id最小的Key-String作爲密碼字符串;Cisco在接收認證報文時,將使用報文中Auth KeyID字段中指定的值作爲Key-id,查找相對應的Key-string作爲密碼字符串.

6 拓撲表的維護

  拓撲表是EIGRP存放路由信息的重要數據結構,DUAL算法,組織報文都是以拓撲表做爲依據的.EIGRP從路由報文,路由聚合,路由引入不同來源中提取路由信息,並根據這些路由信息進行對拓撲表進行維護.拓撲表的變化將觸發DUAL有限狀態機,以得到新的可靠後繼.

6.1 拓撲表的結構

  拓撲表中包含了如下信息:

  1.目標網絡地址

  2.下一跳(鄰居路由器)的地址,所在接口

  3.到目標網絡的最優度量距離(Feasible Distance)

  4.鄰居路由器報告的它到目標網絡的度量距離(Report Distance)

  5.EIGRP外部路由信息(包括外部路由的來源等)

  對於一個目標網絡,拓撲表中可能會有多個下一跳的紀錄,即多條路由紀錄.

  度量距離的計算,Feasible Distance和Report Distance的含義將在"FD,RD以及可靠後繼條件"中介紹.

6.2 EIGRP的Metric計算

  任何動態路由協議都有自己的尺度來衡量路由的優劣,這就是多次提到的度量距離Metric.在EIGRP中的度量距離Metric是按照如下公式計算得到的:

深入理解EIGRP
  注:Metric的計算結果只保留整數部分,小數部分捨去;

  其中:

  K1-K5:係數K值,分別表示帶寬係數,有效帶寬係數,延時係數,可信度係數.默認情況下,K1=K3=1,K2=K4=K5=0.

  bandwidth:帶寬衡量值,由路徑上的最小帶寬(Min BandWidth)計算得到.

     bandwidth:(10000000/最小帶寬)*256......最小帶寬單位爲kbps

  delay:延時衡量值,由路徑上的總延時(Sum of Delay)計算得到.

     delay=總延時*256.......................總延時單位爲10微秒

  load:鏈路負載,0-255.255表示最大負載.

  reliability:可信度,值越大路由越可信.

  可以看出在默認情況下:

深入理解EIGRP
Metric越小說明"距離"越小,路徑越優.

下面是一個簡單的例子,用來說明Metric的計算:

深入理解EIGRP

  假設:

    A-B網絡的帶寬爲56(kbps),延時爲2000(10微秒)

    B-N網絡的帶寬爲10000(kpbs),延時爲100(10微秒)

  那麼:

    A-B的Metric爲(10000000/56+2000)*256=46226285

    B-N的Metric爲(10000000/10000+100)*256=281600

    A-B-N的Metric爲(10000000/56+(2000+100))*256=46251885

  注意,A-B-N的Metric並不等於A-B和B-N兩段路徑的Metric相加.即在這個算法中"整體"並不等於"部分"的算術相加,但是可以保證"整體"大於任一個"部分"."整體"大於任一個"部分"是D-V算法的基本數學前提.

  對接口上的直連網絡,它們的可信度和負載默認是255和1,它們的延時和帶寬根據接口類型的不同分別有一個默認值.

深入理解EIGRP

  接口上的帶寬和延時可以通過接口模式下的配置命令bandwidth和delay進行修改.

6.3 FD(Feasible Distance),RD(Report Distance)以及可靠後繼條件(Feasible Condition)

  拓撲表中每條路由紀錄的都有可靠距離(Feasible Distance)和上報距離(Report Distance)兩項,簡稱FD和RD,分別表示到目標網絡的是優距離和鄰居路由器報告的距離.

  繼續上小節中的例子:
  很顯然,A到目標網絡N,只有A-B-N這樣一條路由.那麼,A到目標網絡的最短距離,即FD,爲A-B-N的Metric---46251885;而B向A報告的距離,即RD,爲B-N的Metric---281600.

  讓我們使用FD和RD再簡單描述一下可靠後繼條件(Feasible Cndition--FC):對給定目標網絡,路由器A的可靠後繼是這樣的鄰居路由器,它向A報告的RD小於A的FD.(對於可靠後繼條件的詳細描述可以參見"可靠後繼條件")

  滿足FC條件的鄰居路由器就是可靠後繼(Feasible Succssor).比如說,如果這時有一個路由器C和A也建立了鄰居關係,並且C向A通告:C到達目標網絡N的距離爲20000000.從A的角度,C報告的RD爲20000000,小於自己的FD 46251885,所以C是到目標網絡的可靠後繼.這也說明:通過C到達目標網絡的路徑也許不是最佳的,但是一定沒有環路.如果A-B之間的網絡發生故障,那麼A可以馬上採用C作爲到達目標網絡的下一跳.

  如果C向A報告到目標網絡的距離爲50000000,大於A的FD 46251885,那麼C無法滿足可靠後繼條件,也就無法保證A經過C到達目標網絡會沒有環路.那麼,如果A-B發生故障,儘管此時拓撲表中關於還有C到N的路由項,A也不能採納,而是向各個鄰居路由器發出查詢,啓動路由重算的過程.當這個過程結束後,也許會使用C作爲下一跳通向目標網絡(A將相應的更新FD);也許會發現目標網絡已經不可達(這時A的FD爲無窮大).

6.4 拓撲表的變化將觸發狀態機

  收到路由信息報文(Update,Query,Reply),接口上的直連網段發生變化,引入其他路由協議的路由,執行路由聚合,這些事件都會產生路由變化信息.路由變化信息將包括:目標網絡地址,下一跳,新的Metric(FD和RD),新的外部路由信息.

  EIGRP會根據這些路由變化信息更新拓撲表,保持拓撲表和實際情況的同步.更新拓撲表完成後觸發DUAL算法,以根據拓撲表的變化計算出新的最佳路由.下面的章節將繼續講述DUAL算法是如何計算得到最佳路由的.

7 DUAL算法和DUA狀態機

7.1 D-V算法和Metric計算

  總體上來說,EIGRP採用的DUAL算法仍然是一種D-V算法.也就是說,對於某個目標網絡,路由器是根據鄰居上報的結果,再"加上"本路由器到各個鄰居的"距離",從中比較出最小值,得到本路由器到目標網絡的最短距離最優路徑.這裏"加上"和"距離"被加上引號是因爲在EIGRP中,它們有特殊的涵義.

  在EIGRP中,"距離"指的是綜合度量距離Metric,"加上"也並不代表算術相加.因爲從"EIGRP的Metric計算"中我們可以知道A-B-N的Metrice並不等於A-B的Metric簡單加上B-N Metric,而是根據Metric的各個分量重新計算的結果.這也是爲什麼報文中使用IP Metric TLV和IP Exterior TLV傳遞路由信息時必須傳遞延時,最小帶寬,負載等各個Metric分量,而不只是傳遞一個計算後的Metric值.

  事實上,DUAL算法對如何計算Metric,如何衡量路由優劣沒有做出規定.DUAL算法也並不關心Metric是如何計算的,它只要求計算方式可以保證整體大於部分就可,即A-B-N的Metric一定會大於B-N的Metric.所以在後文對DUAL算法的描述中,爲了簡潔起見,我們常採用簡單相加的方式來計算度量距離Metric,這對敘述DUAL算法完全沒有影響.但是在具體描述EIGRP協議時,我們必須明確,Metric值不可以算術相加.

7.2 觸發更新,部分更新機制.

  EIGRP的路由更新是通過Update報文實現的.Update報文單播多播兩種方式.

  1.在兩臺路由器首次建立鄰居關係時,它們會向對方發出帶有"INIT"標誌的Update報文進行初始化(參見"EIGRP報文頭").初始化的Update報文中包含所有的路由信息,即整個數據庫.這個Update報文采用單播的方式傳送.

  2.以後,每當路由器的路由發生變化時,路由器將以多播的方式向所有的鄰居路由器發送Update報文,報文中只包含更新的路由信息,即變化了的數據庫.

7.3 可靠後繼條件(FC)
  前面已經描述了EIGRP使用的可靠後繼條件:鄰居報告的RD小於自己的FD.用反證法不難證明,這個條件是沒有路由環路的充分條件.

  可靠後繼條件是DUAL的重要內容之一,但是事實上,DUAL算法提出的可靠後繼條件並不是唯一的.在參考資料"Loop-Free Routing Using Diffusing COmputaion"這篇論文中,作者J.JGarcia-Lunes_Aceves一共描述了三個可靠後繼條件:

  1.DIC(Distance Increase Condition)

    這個條件稱爲距離增加條件.也就是說如果在任何時候,如果路由器A發現鏈路的COST減少,或者鄰居上報到目標的距離減少,這時A可以隨意在當前所有鄰居中選擇具有最優路由的鄰居作爲下一跳,這時可以保證沒有環路發生.否則則不能保證.

    DIC還有一個不那麼嚴格的版本.也就是說,如果A發現到鏈路或鄰居的Metric增加,只要A還能找到一個鄰居路由,經過個鄰居路由器到達目標網絡的距離最小,並且小於等於原來的最優距離(A到目標網絡在這段時間的最小值),那麼A仍然可以將這個鄰居作爲自己的下一跳路由器,這時可以保證沒有環路的發生.如果找不到這樣的鄰居路由器,那麼A就無法保證無環路條件.

    這個條件的充分性是很顯然的,如果發生路由變化後,路由器到目標網絡的最優距離和原來相比沒有增大,而一定不會有環路的發生.

    DIC條件可簡單概括爲:新的最優距離小行等於原來的最優距離.(FD<=old_FD)

  2.CSC(Current Successor Condition)

    這個條件稱爲當前後繼條件.具體來說,假設路由器A原來的後繼是路由器B,如果當路由發生變化時,假設這段時間內B到目標網絡的最小值是S.如果路由器A可以找到這樣一臺路由器X,首先A經過X到目標網絡是最近的,並且X到目標網絡的距離小於等於S(原來的後繼B到目標網絡距離的最小值).那麼A就可以將X作爲自己的新的後繼,這個時候是可以保證沒有環路的.如果找不到這樣的路由器X,那麼就不能保證找到無環路的路由.

    這個條件顯然也是充分的.新的後繼X到目標網絡比原來的後繼B更近,說明X到目標網絡是不可能繞回路由器A形成環路的,A到X是直連,所以綜合起來也不會形成環路.

    CSC條件可以簡單概括爲:新的後繼到目標網絡的距離小於等於原來後繼到目標網絡的距離.(RD<=old_RD)

  3.SNC(Source Node Condition)

    SNC就是我們所敘述的條件,也是目前Cisco EIGRP所採用的.

    這個條件稱爲源節點條件.也就是說,如果路由器A到目標網絡可以找到這樣一臺路由器X,首先A經過X到目標網絡是最近的,並且X到目標網絡的距離小於原來的最優距離(A到目標網絡在這段時間的最小值).

    這個條件也是充分的,因爲新的後繼X到目標網絡的距離小於A到目標網絡的距離,那麼X就不可能是繞回A到目標網絡的,所以A經過X到目標網絡不會形成環路.

    注意到這個條件是三個條件中唯一判斷"小於"的條件,DIC和CSC都是判斷"小於等於".這是因爲SNC在等於的情況下不能確保無環路的發生.

    這個條件比前2個條件相比更加寬鬆一些,因爲它畢竟是RD和FD的比較,並不加上原來A到鄰居的距離.也正是因爲這樣的原因,這個條件更加具有實用性,被Cisco用來作爲EIGRP協議DUAL算法的基本判斷條件.實際上,前2個條件在前人的論文中都進行過闡述,J.J.Garcia-Lunes_Aceves的這篇論文着重闡述並證明了SNC.

    SNC條件可以簡單的概括爲:新的後繼到目標網絡的距離小於原來的最優距離.(RD<old_FD)

7.4 可靠後繼條件中必須判斷最優後繼

  在Cisco的很多資料中,一般都只強調了RD<FD這個條件,實際上,在論文中的描述三個條件時都強調了鄰居路由器必須先滿足到目標網絡最優這個條件.論文中的條件是更加嚴謹的,因爲路由優選是所有路由協議遵守的基本原則.

  簡單說,在判斷路由器是否可以收斂時,只有同時滿足2個條件才能認爲滿足可靠後繼條件:1)有鄰居路由器RD<FD;2)經過這些鄰居路由器中有最優路徑.也就是說需要保證最優後繼一定在可靠後繼中.

  如下圖:

深入理解EIGRP

  在初始時,A選擇B到達目標網絡N,FD是4.如果僅根據RD<FD條件,B和C分別都是A的可靠後繼,D不是可靠後繼,在穩定的情況下這樣也不會有什麼問題.

  此時:B到目標網絡的鏈路突然中斷,B會向A發出Query.A需要判斷是否可以收斂,假設A僅檢查RD<FD條件,那麼將會存在可靠後繼C,收斂.

  但是:這時如果選擇C作爲下一跳,不符合路由協議的優選原則,畢竟經過C更加遠.如果選擇D作爲下一跳,則不清楚D到目標網絡是否會有路由環.(因爲D並不滿足RD<FD條件)

  所以說:判斷是否可以收斂時,可靠後繼條件中必須保證滿足最優後繼條件,在這種條件下此時應該認爲所有路由器都不滿足可靠後繼條件,此時A不能收斂,將發起查詢.

7.5 使用查詢應答機制進行DUAL計算.

  實際上,無論使用三個可靠後繼條件中的哪一個,都只能保證路由無環路.DUAL算法就是一種利用這種無環路條件,結合了有限狀態機機制,計算得到網絡的最佳路由的算法.

  DUAL算法被稱爲擴散更新算法,是因爲它採用了一種擴散更新機制.也就是說一個結點開始計算時,路由器就向外發出查詢(Query),計算可能會不斷向外擴展,然後通過收到應答(Reply)而結束計算.

  擴散更新機制的實質就是通過這種查詢進行路由計算的擴散,然後通過應答實現計算結果的收斂.

7.5.1 被動態(Passive)和主動態(Active)

  一條路由在穩定時稱爲"被動態(Passive)";發出查詢後這條路由就進入到了"主動態(Active)";收到所有答覆,路由重新找到了可靠後繼,計算收斂,那麼它又回到了"被動態".

7.5.2 DUAL算法的啓動

  當路由器的數據庫因爲某種原因發生了變化,那麼路由器將針對變化了的路由進行可靠後繼條件(FC)的檢查,如果還存在可靠後繼,那麼使用可靠後繼中最好的一個做爲目標網絡的下一跳;如果沒有可靠後繼,那麼則向所有的鄰居發出查詢(Query),並等待所有鄰居的應答(Reply).

7.5.3 查詢(Query)
  查詢是通過組播方式向所有的鄰居發送Query報文,報文中使用IP Metric TLV和IP Exterior TLV來描述各條需要查詢的路由信息,內部路由使用IP Metric TLV,外部路由使用IP Exterior TLV,這些TLV中的Metric是啓動查詢時刻的FD值.

7.5.4 應答(Reply)
  應答指通過單播方式的向發起查詢的路由器發送Reply報文,報文中使用IP Metric TLV和IP Exterior TLV來描述應答的路由信息.

 路由器接到查詢後並不是馬上應答,它會首先根據查詢報文更新自己的數據庫.

  更新數據庫後,如果被查詢的路由處於Passive態,那麼EIGRP將檢查這條路由的FC條件:FC條件滿足,選擇出最優的可靠後繼,並馬上對查詢者發送Reply報文;FC條件不滿足,將查詢擱置起來,同時路由也進入Active狀態,並向所有的鄰居路由器發出查詢.直到路由收斂,纔會對擱置的查詢進行應答,向查詢者發送Reply報文.

  更新數據庫後,如果被查詢的路由正處於Active態,那麼將檢查查詢者是否爲這條路由目前正在使用的後繼:若查詢者不是後繼,那麼直接按照數據庫中的FD向查詢者發送Reply報文;若查詢者是後繼,那麼擱置查詢,等待這條路由收斂,回到Passive態時,再對查詢者發送Reply報文.

7.5.5 收斂

  路由器的某條路由在發起查詢後,必須等待所有鄰居路由器的Reply報文,在此期間此路由的FD值保持不變.當收到了一份Reply報文,EIGRP會按照Reply報文中的路由信息更新數據庫.當收到了所有鄰居的Reply報文後,DUAL將從數據庫中找到最佳的後繼,將它作爲到目標網絡的下一跳,並觸發對路由表的修改.(在某些情況下,收到所有的Reply後,DUAL將重新檢查FC條,若FC條件不滿足,仍然無法保證找到無環路的路由,此時DUAL將對這條路由再次發起查詢,重新開始計算.這種情況將在下面"DUAL狀態機描述"中說明.)

  讓我們看一下簡單的例子.爲了簡潔,例子中的Metric計算採用簡單算術相加的方式.

  如下面的網絡拓撲結構:

深入理解EIGRP

  已知:

    B-C的Metric爲30;B-A的Metric爲10;C-A的Metric爲15;A-N的Metric爲6.

  那麼對於目標網絡N:
    A-N的最短路徑就是A-N,Metric爲6,N是A的直連網段,不存在可靠後繼;

    B-N的最短路徑是B-A-N,Metric爲16,A是B的可靠後繼(6<16),C不是B的可靠後繼(21>16);

    C-N的最短路徑是C-A-N,Metric爲21,Aj是C的可靠後繼(6<21),B也是C的可靠後繼(16<21);

  假定一:在某個時刻:C-A之間的鏈路中斷,即C-A的Metric變成不可達.

深入理解EIGRP

  那麼:

  1.C發現自己還有可靠後繼B,B是C唯一的(當然也是最優的)可靠後繼,C直接使用B作爲到達目標網絡的下一跳,C更新了自己的路由表.

  2.B,A沒有收到任何影響.

  假定二:在某個時刻,B-A之間的鏈路中斷,即B-A的Metric變成不可達.

深入理解EIGRP

  那麼:

  1.B發現失去了唯一的可靠後繼A,B找不到可靠後繼了,B進入Active態,向C發出了Query.

  2.C收到了B的Query,發現自己還有可靠後繼A,C沒有進入到Avtive狀態,C馬上向B發送Reply,告訴B這條路由.

  3.B收到C的Reply,也就是收到全部的Reply,B收斂,回到Passive態.B從當前的數據庫中找到了最優項(即C)作爲下一跳並更新路由表,B也將C確定爲新的可靠後繼.

  假設三:在某個時刻,A-N之間的鏈路中斷,即A-N的Metric變成不可達.

深入理解EIGRP

  那麼

  1.首先,對於目標網絡N,A沒有可靠後繼,A在數據庫中將N標記爲不可達,進入到Active狀態,向C,B發出Query,Query中說明自己對N已經不可達.

  2.C收到A的Query,發現自己還有可靠後繼B,於是將路由改爲C-B-N,Metric爲46(16+30),然後按照46的向A發送Reply.A收到了C的Reply,知道C-N有一條Metric爲46的路由,但是A沒有使用這條路由,也沒有改變自己的FD,A還在等B的Reply.

  3.B收到了A的Query,發現自己沒有可靠後繼了,於是B擱置A的查詢,在數據庫中將目標網絡標爲不可達,然後進入到Active狀態,按照不可達向C,A發出Query.

  4.A收到了B的Query,因爲A處於Active狀態並且B不是A的後繼,所以A馬上向B發送Reply,說明到目標網絡N不可達.但是B還在等待C的Reply.

  5.C收到了自己的後繼發來的Query,發現自己沒有其他可靠後繼了(A,B都用Query報文通告到目標網絡不可達),於是C擱置B的查詢,然後將N標記爲不可達,進入到Active狀態,並向A,B發出了Query報文.

  6.B,A都收到了C發來的Query,因爲B和A都處於Active狀態,並且C不是他們的後繼,所以它們馬上向C發送Reply,表示到N不可達.特別對於A,A曾經收到過C的一份Reply報文,說C到N有一條Metric爲46的路由,這份Query報文使A的數據庫中進行了更新,將"C-N(46)"改成了"C-N(不可達)".

  7.C收到了A,B的Reply,這時所有的鄰居都應答了.C收斂,回到了Passive狀態,根據目前C的數據庫,C知道到N已經不可達(因爲沒有鄰居還可以通向N).於是C更新路由表,將到N的路由刪除.最後,因爲C還擱置了B的查詢,所以C向B發出了"N不可達"的Reply.

  8.B收到了C的Reply,這時B的所有鄰居也都應答了.B收斂,回到了Passive狀態,根據目前B的數據庫,B知道到N已經不可達(因爲沒有鄰居還可以通向N).於是B更新路由表,將到N的路由刪除.最後,因爲B還擱置了A的查詢,所以B向A發送了"N不可達"的Reply.

  9.A終於等到所有的鄰居應答了,A收斂,回到了Passive狀態.同樣的,A知道到N已經不可達,於是A更新路由表,將到N的路由刪除.

  注1:以上是沒有采用"水平分割"時的情況,如果採用"水平分割",情況會少許簡單一些.(具體可以參考"水平分割")

  注2:當DUAL計算收斂(完成後),更新路由表,EIGRP會使用Update報文來向各個鄰居路由器通告路由更新信息.在這個例子中,因爲收到Update報文不會再對數據庫進行修改,所以DUAL算法不會被再次觸發.
7.6 DUAL狀態機描述.

  上面的敘述只是對DUAL算法的一個大體描述,散播計算的具體過程要更加複雜.下面我們通過DUAL狀態機對散播計算的過程進行詳細的,完整的描述.

深入理解EIGRP

7.6.1 DUAL狀態機的狀態

  對於某一條路由,DUAL狀態機一共有5種狀態,其中1種是被動態(Passive),另外4種是不同的主動態(Active).下面是這五種狀態的說明:

  Passive:路由處於穩定狀態下,沒有進入查詢,或者再查詢後收到了所有鄰居的應答而收斂.

  ACT0:本路由器是查詢的最初發起者,並且再發起查詢後,至少經歷的一次"距離增加",但沒有收到過後繼發來的查詢.

  ACT1:本路由器是查詢的最初發起者,並且再發起查詢後,沒有經歷過的"距離增加",也沒有收到過後繼發來的查詢.

  ACT2:情況一,本路由器因爲收到了後繼的查詢而發起查詢(原ACT3),進入了主動態,在發起查詢後,至少經歷過一次"距離增加";情況二,本路由器是查詢的最初發起者,發起查詢後,又收到了後繼發來的查詢(原ACT1).

  ACT3:本路由器因爲收到了後繼的查詢而發起查詢,進入了主動態,在發起查詢後,沒有經歷過"距離增加".

  所謂"距離增加"是指收到後繼發出的Update報文,後繼上報的Metric(即RD)比以前增加了,顯然本路由到目標網絡的Metric也將隨之增加.這種情況下,有可能本路由器將找到其他更優的路徑,從而改換後繼;也有可能後繼上報的路由已經不可靠,發生了環路.

  可以看出ACT0和ACT2兩種狀態,是經歷了"距離增加"的.在這種情況下,等收到了所有鄰居應答時,不可以直接從數據庫中挑出最佳,而必須再進行一次FC條件測試.條件滿足,收斂,找到最佳後繼;條件失敗,重新發起查詢.

7.6.2 DUAL狀態機的狀態轉換

  下面將就DUAL狀態機狀態轉換圖的各個狀態轉換過程做一個詳細的說明:
深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

7.7 Stuck In Active(SIA)功能

  在正常情況下,按照DUAL算法和DUAL狀態機,一條路由進入到Active狀態後,能夠在較快的時間內收斂,回到Passive狀態,但是,因爲某種原因,某條路由可能會長時間滯留在Active狀態,沒有收斂,這種情況我們稱之爲Stuck In Active,簡稱SIA.

  引起SIA的可能原因有:

  1.網絡不暢通,路由器可以收到Hello報文,但是較大的Query,Reply報文傳輸總是失敗.

  2.某些路由器處理速度慢,吞吐量小或者內存不夠,在大量路由發生變化時成爲了瓶頸,來不及處理或來不及發出報文.

  3.報文錯誤.可能是因爲某臺路由器實現EIGRP協議及DUAL算法時存在錯誤,也可能是存在惡意的錯誤報文.

  EIGRP提供了SIA時限的機制.也就是說,一條路由在進入到Active狀態後,如果在規定時間內沒有收斂(默認的時限是3分鐘),那麼EIGRP將強制它收斂.即不再等待剩下的沒有應答的鄰居,而是按照目前已經收到的應答來計算路由,那些沒有應答的鄰居將被從鄰居表中清除.(當然,可以通過Hello報文來再次建立鄰居關係)

7.8 DUAL算法的性能.

  J.J.Garcia-Lunes_Aceves在論文中將DUAL算法和L-S算法(Link State Routing鏈接-狀態路由算法),傳統D-V算法在性能上進行了綜合比較,比較中考慮了節點失效,節點恢復,鏈路失效,鏈路恢復這四種網絡中常見的動盪,考察了這4種情況下三種算法收斂速度,消息數目待方面的性能.

  他的分析結果顯示,L-S算法在計算量上遠遠超過其他2種算法,這是L-S算法的原理決定的.在其他方面,DUAL一般都優於傳統D-V算法.在節點恢復,鏈路恢復時,DUAL算法和L-S算法的差距不大,但是在節點失效,鏈路失效這2種情況時,DUAL要遜於L-S算法.實際上,L-S算法在各種情況下的表現基本一致,在各種失效的情況下具有優勢.

  綜合來看,DUAL算法達到的指標超過傳統D-V算法,稍遜於L-S算法.

  在實際應用中,DUAL算法在大規模的網絡中性能比L-S算法要有明顯差距,這主要是因爲DUAL算法需要在一個較大範圍內進行查詢擴散並依次向回收斂;而L-S算法在完成路由信息擴散之後,各節點分別在本地計算路由,在大規模網絡中更加具有優勢.

8 報文發送和可靠傳輸

  EIGRP使用Raw IP發送報文,IP頭的協議字段爲88.由於IP協議是不能夠保證可靠傳輸的,故EIGRP需要建立自己的可靠傳輸機制.

  並非所有EIGRP報文都要保證可靠傳輸,Hello報文就不需要,而Query,Reply,和Update報文則必需要保證可靠傳輸.EIGRP使用了序號確認和超時和重傳機制保證報文傳輸的可靠性.同時爲了充分利用多播以保證發送效率,EIGRP還採用了流控,鏈路帶寬限制等技術.這些使得EIGRP的報文發送過程變的十分複雜.

8.1 單播報文和多播報文

  EIGRP發送的報文即有單播報文也有多播報文,EIGRP使用多播報文以儘量減少報文數據,在不能使用多播的情況下使用單播報文.

  EIGRP發送的單播報文有:

  1.Reply報文.當收到一個Query報文後,EIGRP要向查詢者發送一個Reply應答報文.這個應答報文采用單播發送.

  2.初始化的Update報文.兩臺路由器剛建立起鄰居關係,便要互相交換路由信息,這些交換的路由信息是通過單播發送Update報文來實現的.

  3.重傳報文.當一臺路由器向鄰居發送多播Update或者Query報文而未收到鄰居的確認信息時,EIGRP會向未確認的鄰居發送重傳報文,和重傳報文總是採用單播發送.

  4.Ack信息:Ack信息可以攜帶在其他單播報文中發送,也可以單獨使用單播發送.

  EIGRP發送的多播報文包括:
  1.Hello報文.EIGRP在使能的各個接口上使用多播地址向外週期性發送Hello報文.

  2.Update報文.除了初始化的Update報文以外,其他路由信息變化時的Update報文都是採用多播的方式發送的.

  3.Query報文.Query報文總是採用多播方式來發送.

  對於多播報文,發送後不會進行重傳,多播報文的序號確認和可靠重傳被分解成各個單播報文進行.也就是說,EIGRP在發送完多播報文後,將分別等待各個鄰居的確認,分別給超時的鄰居進行重傳,重傳總是採用單播的方式進行.爲了保證重傳過程的效率,以及保證每一個鄰居都可以按照正確的順序接收報文,EIGRP採用了"流控"和"選擇接收(CR)"等處理方式,具體可以參見"流控"和"Sequense TLV"等章節的說明.

8.2 報文發送策略過濾

  在生成EIGRP報文的過程中,EIGRP可能會對路由信息進行過濾或改變:

  1.EIGRP可以根據distribute-list的配置對發送報文進行過濾,可以禁止某些路由的發送.

  2.EIGRP可以根據offset-list out的設置改變向外發佈路由的Metric值,可以給某些路由的Metric中的延時分量加上一個偏移量.

  3.EIGRP如果在接口上採用了"水平分割(Horizon Split)",將會按照水平分割的要求過濾一些路由信息.(詳見"水平分割")

  4.EIGRP如果在接口上配置了路由聚合(包括自動聚合和手工聚合),那麼將只發送生成的那條聚合路由,其他在聚合範圍內的路由不會再被髮送.(詳見"路由聚合")
8.3 序號確認

  EIGRP中,有可靠傳輸的報文需要對方在接收報文後確認,不可靠傳輸則不需要.

  採用可靠傳輸的報文,在EIGRP報文頭中的Sequense Number字段中將填入一個順序遞增的序列號,不可靠傳輸的Sequense Number字段爲0(參見"EIGRP報文頭"部分).當對端收到報文後,會對該序號進行確認,以通知發送方接收方已經收到報文,不需要再進行重傳.確認時將被確認的序號填寫在EIGRP報文頭中的ACK Number字段中.

  EIGRP沒有單獨的確認報文類型,確認信息是攜帶在其它報文類型中(所有的報文類型都可以攜帶ACK信息).當報文不攜帶確認信息時,ACK Number字段爲0.

  如果Ack報文采用Hello報文類型單獨發送,這種Hello報文被稱爲Ack報文.Ack報文是一種特殊的Hello報文,它與前面所述的建立並維護鄰居關係的Hello報文是有一些區別的:

深入理解EIGRP

8.4 超時重傳

  可靠傳輸的報文在發送出去一段時間後,如果沒有得到鄰居的應答,那麼就會重傳該報文.重傳16次後如果還沒有應答,就將該鄰居復位.

  報文發送後到重傳該報文之間的這段時間稱爲超時重傳時限(Retransmit Time Out,RTO),RTO的計算參照TCP的方法確定(參見RFC793).按照<<EGIRP網絡設計>>一書中的描述,具體來說是這樣的.

  1.每次發送報文成功,則根據報文的往返時間來計算RTO,計算方法如下(單位毫秒):
    RTT(Round Trip Time往返時間):從發出報文到收到ACK所需要的時間.

    SRTT(Smoothed Round Trip Time平滑往返時間,對往返時間的平均估算),每收到一次ACK報文:

      SRTT(new)=0.8*SRTT(old)+0.2*RTT

    那麼:

      RTO(Initial)=6*max(SRTT,PacingInterval)

    即一般來說,RTO爲SRTT的6倍.

  2.在每一次因爲RTO超時而重發報文後,重傳時間將越來越長,下一次的重傳時間爲:

      RTO(New)=RTO(Old)*1.5

      RTO(Final)=min(5000,Max(200,RTO(Computed)))

    即每次RTO乘以1.5,但是最小200毫秒,最大5秒.

8.5 水平分割(Horizon Split)

  水平分割(Horizon Split)是在很多D-V算法的路由協議中都有的一個概念,指的是:"從某個接口上收到的路由信息不再向這個接口發送".

  在前面"使用查詢應答機制進行DUAL計算"的例子中,如果所有的路由器的所有接口都配置了水平分割,那麼當A-N鏈路中斷時:
 

深入理解EIGRP

  A-N的Metric變爲不可達,並且沒有可靠後繼,A進入Active狀態,向B,C發送Query.

  B沒有可靠後繼,進入Active狀態,向A,C發送Query.這時水平分割發生作用,向A發送的Query報文不會發出,B只向C發送了Query,並且只會等待C的應答.(如果水平分割不發生作用,B向A發出了Query,A也會馬上應答,在結果上沒有區別)

  可以看出,水平分割可以減少報文人,減少對網絡帶寬的,減少等待收斂的時間.

  水平分割可以減小產生路由環的可能性,但是在某些NBMA網絡上可能會造成路由信息的丟失,這種情況下應該在接口上禁用水平分割.

8.6 流控(Flow Control)

  EIGRP對多播傳送採用了一種多播的流控技術,主要目的是協調同一接口上不同響應速度的各個鄰居.

  具體地說是這樣,EIGRP在發送了多播報文後,等待一小段時間.如果在這段時間內沒有收到任何鄰居的確認,EIGRP不會在這個接口上發送下一份多播報文,而會繼續等待.只有當至少收到了一個鄰居的確認時,EIGRP纔會發送下一份多播報文.

  在發送下一份多播報文之前,爲了避免那些還沒有收到前一份報文的鄰居產生接收失序,EIGRP會先發送一個Hello報文.在這個Hello報文中攜帶有Sequense TLV和Next Multicast Seq TLV,這2個TLV會將那些收到了前一份報文的鄰居置爲CR狀態.而且,發出的下一份多播報文會在報文頭上作CR標記,只有在CR狀態的鄰居纔會收到後續帶有CR標記的報文.而那些沒有收到前一份多播報文的鄰居因爲不在CR狀態,也會丟棄後一份多播報文(因爲後一份多播報文帶有CR標記).EIGRP將採用單播方式對這些鄰居依次重發他們錯過的報文.

  這樣做的好處是:即可以利用多播傳送來節省網絡帶寬,又可以避免速度快的路由器等待速度慢的路由器而影響效率.

8.7 EIGRP對鏈路帶寬的限制

  爲了有效地防止網絡擁塞,EIGRP只使用固定百分比的鏈路帶寬.缺省情況下,EIGRP最多使用鏈路帶寬的50%來發送各種報文,可以使用ip bandwidth-percent eigrp命令來調整這個百分比.這個百分比數值表示的是EIGRP在發送報文時最多使用的鏈路帶寬比例,而不是EIGRP一直對鏈路帶寬有如此高的使用率.

  爲了達到鏈路帶寬限制的目的,EIGRP在發送一個報文之前,將先等待一段時間,這個時間是根據報文長度,接口帶寬,可以佔用的比例計算出來的.這樣就確保了路由器不會因爲發送EIGRP報文而造成網絡擁塞.

  實際上,相對於EIGRP的路由報文流量來說,現在一般的鏈路帶寬都足可以滿足要求,這個功能的實際意義並不大,一般也不需要修改這個配置.

9 引入路由

  EIGRP可以引入靜態路由,直連網段的路由,其他動態路由協議生成的路由.相對於EIGRP協議直接得到的路由,這些引入的路由稱爲EIGRP的外部路由.

  引入路由的Metric按照如下計算:

  1.引入的直連網段的路由,根據直連網段所在的接口屬性來計算引入路由的Metric.

  2.引入IGRP路由,直接使用IGRP的各個Metric分量.(IGRP的Metric也是根據帶寬,延時,負載,可信度等各個分量計算得來,計算公式和EIGRP類似)

  3.引入其他自治系統EIGRP的路由,直接採用EIGRP的Metric.

  4.引入其他路由(包括靜態路由,OSPF,RIP,BGP等),在引入命令中可以指定Metric的各個分量(延時,帶寬等),如果命令中指定了Metric,按照命令中指定的值進行計算;如果命令沒有指定,則採用Default-metric.

  爲了防止各個路由協議之間循環引入路由從而造成路由環,EIGRP提供了Administrative tag來防止路由被循環引入.

  Cisco的EIGRP在路由引入還提供如下特性:

  1.自動引入自治系統號相同的IGRP路由,而不用使用命令指定,引入後路由的Metric由原IGRP路由的各個metric分量轉換而來(乘以256)
  2.如果在配置靜態路由時指定的是出接口,並且該路由被EIGRP的network命令打開,則EIGRP自動引入這條靜態路由.例如:
      ip route 129.1.1.0 255.255.255.0 Serial0

      router eigrp 100

          network 10.0.0.0

          network 129.1.0.0

          no auto-summary

  雖然沒有使用redistribute命令將這條靜態路由引入,但是EIGRP自動把這條靜態路由做爲EIGRP的內部路由向外發佈.

  3.當存在EIGRP的直連路由時,如果再引入直連路由,則引入無效.例如:
      interfcae Serial0

        ip address 192.168.1.1 255.255.255.0

      router eigrp 100

        network 192.168.1.0

        redistribute connect

  則EIGRP拓撲表中只存在一條192.168.1.0/24的路由,引入的直連路由不成功.當執行no network 192.1.1.0時,直連路由纔會被引入.

10 路由聚合

  EIGRP支持兩種路由聚合:自動聚合任意長度掩碼的手工聚合.EIGRP的自動聚合開關默認是打開的,自動聚合的聚合範圍是由配置的network命令決定,並針對主網(按照A,B,C類地址掩碼劃分的自然網段)進行的.手工聚合可以根據需要在接口上進行配置,聚合的範圍可以是任意的網絡地址和掩碼.

  兩種路由聚合只是在配置手段上有所區別,具體的聚合處理是沒有區別的.在配置了路由聚合之後,對聚合範圍內的所有路由,EIGRP生成了一條聚合路由,這條路由的Metric取聚合範圍內的最小Metric值.在向外發送報文時,EIGRP對外只發布這條聚合路由,聚合範圍內的其他路由不再被髮布.聚合路由的接收方路由器將它們和其他普通路由信息同樣處理.

  使用路由聚合可以減少路由報文對網絡帶寬的佔用,減少其他路由器爲了存儲路由信息所耗用的內存空間,減少路由器CPU的處理負荷.

  Cisco的EIGRP聚合路由會加入到路由表中,出接口爲NULL0,這樣可以避免形成路由環.

10.1 自動聚合

  當EIGRP的路由跨越不同的主網時,會按照有類地址進行自動聚合.自動聚合需要注意以下方面:
  1.必須跨越主網,只有路由發送接口不在同一個主網時,路由纔會被自動聚合.

  2.系統中至少要配置兩個network命令,即至少需要有兩個主網絡被EIGRP打開.

  3.對於EIGRP的外部路由或者收到的遠端路由,一般不會被自動按照有類地址進行聚合.但是如果此路由落在某個network命令指定的網段區間,則會隨network命令一起被自動聚合,即使這個network命令的網段並映射任何實際接口.

  例如,如下圖所示:

深入理解EIGRP

  圖中A有3個接口:S0,E0和E1,接口的地址網段在圖上標出.其他相關配置如下:

      ip route 129.1.1.0 255.255.255.0 NULL0

      ip route 129.1.2.0 255.255.255.0 NULL0

      router eigrp 100

        network 10.0.0.0

        network 11.0.0.0

        network 129.1.0.0

        redistribute static

  則:

  1.路由10.1.1.0/24和10.1.2.1/24通過Serial0口發送給B時被自動聚合成10.0.0.0/8

  2.路由10.1.1.0/24通過Ethernet1口發送給D時,不會被自動聚合成10.0.0.0/8,因爲相同的主網.

  3.引入的靜態路由129.1.1.0/24和129.1.2.0/24通過Serial0口發送給B時被自動聚合成129.1.0.0/16,因爲這個網段被network打開,並且跨越了主網.

10.2 手工聚合

  EIGRP通過手工聚合來支持CIDR(無類域間)路由,與自動聚合不同,手工聚合可以配置任意掩碼的聚合路由.

  EIGRP的手工聚合與BGP協議的手工聚合不同,是針對接口的,即聚合是在接口模式下配置,路由只有從該接口發送出去時,纔可能會被聚合,而從其它接口發送,則不受影響.

  例如:A上有三條路由192.1.1.0/24,192.1.2.0/24,192.1.3.0/24.通過Serial0口發送路由時只想發送一條聚合路由(CIDR),則需要進行如下配置:

  interface serial0

    ip summary eigrip 100 192.1.0.0 255.255.252.0

  則發送時這三條路由被手工聚合成一條CIDR路由192.1.0.0/22

11 EIGRP的負載分擔

  EIGRP即支持等價負載分擔,又支持非等價分擔,而且EIGRP是目前唯一支持非等價負載分擔的路由協議.下面將介紹這兩種負載分擔方式.

11.1 等價負載分擔

  等價負載分擔,即EIGRP的metric相等的路由參與負載分擔

  通常情況下,EIGRP只會選擇一條最佳路由添加到路由表中,用來指導轉發.但是如果幾條路由的metric相同,那麼,這些路由都會被加入到路由表中,來負載分擔數據流的轉發.
  等價負載分擔的路由數量是收到限制的,最多爲6條(Cisco的規格),可以通過命令maximum-paths來調整這個數量.

  等價負載分擔有兩種工作方式:基於目的地址(per-destination)和基於數據包(per-pack):
  1.基於目的地址:所有到達目的地址1的數據包都使用path1發送;所有到達目的地址2的數據包都使用path2來發磅.

  2.基於數據包:到達目的地址1的第一個數據包使用path1來發送;到達目的地址1的第二個數據包使用path2來發送.依此類推.

11.2 非等價負載分擔

  非等價負載分擔,即EIGRP的metric不相同的路由參與負載分擔.參與非等價分擔的EIGRP路由需要滿足下列條件:

  1.路由必須是可靠的,即無環路,滿足FC

  2.路由的metric值小於或者等於最小metric值的N倍(N爲係數,可以通過variable命令來調整).

  例如:Router到目標網絡有三條路由(這三條路由都是可靠的)

  path1:Metric=30

  path2:Metric=20

  path3:Metric=40

  選出最下的Metric=20

  a.N=2,即所有metric小於或者等於40(20*2)的路徑都參與負載分擔.從而是可以啓用path1和path2

  b.N=3,即所有metric小於或者等於60(20*3)的路由都參與負載分擔,從而可以啓用path1,path2和path3.

  參與非等價負載分擔的路徑的流量分配與路徑的metric值成反比,即用所有參與非等價負載分擔的路徑中最大的metric值除以每一條路徑的metric值,便可以得到該路徑轉發數據包的數據.如上面的N=3的例子:

  最大Metric=45,流量分配爲

  path1:45/30=3/2

  path2:45/20=9/4

  path3:45/45=1

  即前9個包使用path2發送,接下來6個包使用path1發送,最後四個包使用path3發送.

12 EIGRP命令列表

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

深入理解EIGRP

13 EIGRP的新進展

13.1 IEGRP Stub

  EIGRP提出了STUB路由器的概念,位置處於末端的路由器可以通過命令配置成爲STUB路由器.一臺路由器被配置成爲STUB之後,會通過Hello報文通報給鄰居路由器.STUB路由器默認只會發佈自身的直連路由和聚合路由,不會向外轉發路由.也就是說,STUB路由器對於其他路由器是可達的,但是一般情況下流量不會穿過STUB路由器.

  在DUAL算法中,一臺路由器進入Avtive狀態後,會向所有的鄰居路由器發出查詢(Query),並等待所有鄰居路由器的應答(Reply).如果一臺路由器發起查詢時發現一個接口上的所有鄰居都是STUB路由器,那麼這個查詢就不會發出.如果一個接口上既有STUB鄰居又有普通鄰居,那麼查詢報文仍將以組播方式發出.STUB路由器收到查詢後,將會立即以不可達來應答查詢,同時不會向外擴散查詢.

  將一些路由器配置爲STUB將有效的降低網絡中的路由信息流量,減少路由振盪時的收斂時間.

13.2 在PE-CE之間運行EIGRP

  EIGRP本來就支持多進程運行,Cisco在此基礎上實現了EIGRP PE-CE,就是在PE-CE之間運行EIGRP協議,傳遞VPN內路由信息,但是目前還沒有見到組網應用.

  注:MPLS VPN有三種類型的路由器,CE路由器,PE路由器和P路由器.其中.CE路由器是客戶端路由器,爲用戶提供到PE路由器的連接;PE路由器是商邊緣路由器,也就是MPLS網絡中的標籤邊緣路由器(LER).它根據存放的路由信息將來自CE路由器或標籤交換路徑(LSP)的VPN數據處理後進行轉發,同時負責和其他PE路由器交換路由信息;P路由器是運營端網絡主幹路由器,也就是MPLS網絡中的標籤交換路由器(LSR),它根據分組的外層標籤對VPN數據進行透明轉發,P路由器只維護到PE路由器的路由信息而不維護VPN相關的路由信息.

  具體情況和RIP,OSPF都很相似.Cisco擴展了BGP的擴展團體屬性,通過BGP傳遞了EIGRP路由的一些屬性:如原始自治系統號,是否是外部路由.如果PE收到的一條EIGRP路由是由內部路由,並且原始自治系統號和本地的EIGRP自治系統號相同,則將這條EIGRP路由作爲一條內部路由注入到相連的CE中,否則將作爲一條外部路由注入到CE中.整個過程和OSPF有一些類似.

  EIGRP PE-CE的配置方式和RIP,BGP相似,和OSPF不同.EIGRP在協議模式下在使用address-family命令指定對應的VRF實例.

  需要注意的一點是:上面提到的攜帶在BGP擴展團體屬性中的EIGRP自治系統號並不是在router eigrp後面配置的數值,Cisco增加了另外一條anonymous-system命令來指定需要攜帶在BGP擴展團體屬性的自治系統號.Cisco可能更加傾向將router eigrp命令中的數值看成是EIGRP的進程號,和OSPF統一起來.

  目前EIGRP PE-CE還沒有類似OSPF Shamlink這樣的機制來解決Backdoor問題.

  注:MPLS VPN裏面PE和CE通過OSPF連接,並且幾個CE之間有後門鏈路(Backdorr),數據會優先走後門鏈路,通過OSPFSham link就可以讓你決定數據走什麼路.

13.3通過RouterID來減少鄰居數量

  當2臺運行EIGRP的路由器通過了多個接口連接起來時,現在EIGRP將在每一個接口上都建立鄰居關係,這樣將形成多個獨立的鄰居關係.目前EIGRP對此進行了改進,通過RouterID來確認是否是同一個鄰居,對於RouterID相同的路由器,只選擇一條最佳鏈路來建立唯一的鄰居關係.

  這種處理將避免多個鏈路上路由信息的重複傳送,同時也能夠在發生路由振盪時加快收斂.

13.4 EIGRP NSF

  Cisco號稱在最新的IOS 12.3中實現了EIGRP的NSF(Never Stop Forwarding),具體情況不詳.但是考慮到EIGRP基本上不會應用在骨幹網上,這個特性的意義並不大.

13.5 三次握手過程的改進

  Cisco在最新的IOS版本中改進了EIGRP的三次握手過程.

  以前的握手過程是這樣的:只要收到鄰居發來的Hello報文,就將這個鄰居加入鄰居列表中.並向這個鄰居單播發送的Init Update報文(可以攜帶路由),等到收到對端的Init Update報文並對我們的Update報文進行Ack,握手完成 .也就是說,只要收到Hello報文並且參數正確就認爲鄰居建立,在握手進行的同時就可以交換路由信息.

  改進後的握手過程是這樣的:收到鄰居的Hello報文之後,先將這個鄰居加入一個候選列表中.對於進入候選列表的鄰居可以發送Init Update報文(但不攜帶路由),只有收到對端Init Update報文並對我們Update進行Ack之後,纔會將鄰居放入到正式鄰居列表中.只有對在正式列表中的鄰居,才能確保單播和多播雙向可達性,這時才用Update報文開始交換路由信息.改進後的握手過程和以前的握手過程是兼容的.在改進的握手過程中,只有收到對方的單播和多播報文才認爲鄰居建立,纔開始交換路由.
13.6 EIGRP Fast Hellos

  Fast Hellos是Cisco對所有路由協議進行的一個改進.簡單來說,加快Hello報文的發送速率可以快速檢測到鏈路故障,從而加快網絡的收斂速度.一般來說,在接口上Hello報文間隔時間最小可以配置爲一秒.但是Cisco新增了一條命令,允許在一秒內發送出多個Hello報文,這樣可以保證在1秒內檢測到網絡的故障.當然,頻繁的Hello報文也會以佔用一定的網絡帶寬作爲代價.

14 EIGRP vs OSPF

  OSPF是目前使用最爲廣泛的域內單播路由協議,EIGRP也在金融,證券,中小企業中得到了較大規模的應用.這2種協議各有優缺點,下面作一個簡單的對比.

14.1 OSPF的缺點 vs EIGRP優點 
  1.OSPF的配置相對複雜.由於網絡區域劃分,DR選舉,路由分級,ABR聚合等複雜機制,需要網絡管理員對協議比較熟悉纔可以規劃和管理OSPF網絡.EIGRP的配置相對來說要簡單一些,在最簡單的情況下只需要使能協議和網段就可以了.

  2.OSPF不支持不等價負載分擔.EIGRP是目前唯一支持不等價負載分擔的協議.另外,OSPF對路由的級別劃分較多,不同級別之間的路由不可以負載分擔.

  3.EIGRP可以控制協議報文對鏈路帶寬佔用的最大比例,OSPF沒有類似的功能.

  4.OSPF協議需要存放整個區域的網絡拓撲結構,並使用SPF算法來計算路由,對路由器的CPU和內存需求較高.這實際上也是所有L-S算法協議的共同特點.不過隨着路由器性能不斷提高和硬件成本不斷下降,這個缺點現在並不重要.EIGRP對CPU和內存的需求相對來說要小一些.

14.2 OSPF的優點 vs EIGRP缺點

  1.OSPF通過區域劃分很好的實現了路由的分級管理,在大規模網絡的情況下,OSPF可以通過劃分區域來規劃和限制網絡規模.EIGRP沒有區域(AREA)的概念,一般更適用於網絡規模相對較小的網絡.EIGRP雖然也可以劃分自治系統並互相引用,但是這樣的組網方案在實際中很少使用,效果不及OSPF的劃分區域理想,也不如OSPF+BGP的實現方案.

  2.在共享網絡的NBMA網絡上,OSPF可以選舉DR和BDR,所有路由器將只和DR,BDR交換路由信息,這樣可以有效的降低協議報文的數量.而EIGRP路由器將兩兩交換路由信息,這樣EIGRP將會使用更多的帶寬來傳送協議報文,當一個共享網段上有大量EIGRP路由器時,協議報文對帶寬的佔用將非常嚴重.

  3.OSPF協議使用的是L-S算法,在完成路由信息擴散之後,各節點分別在本地計算路由,在大規模網絡中更加具有優勢.EIGRP的路由計算是基於DUAL算法的,這種分佈式的算法需要在一個較大範圍內進行查詢擴散並依次向回收斂,這樣在較大型網絡中性能表現會不如OSPF.尤其是如果在狹長形的網絡拓撲結構中運行的EIGRP,一端的路由信息變化需要依次傳遞到另外一端,然後再從另一端向回依次收斂,效率更加不理想.

  4.OSPF支持STUB,完全STUB,NSSA等區域類型,通過配置這些類型的區域,可以最大限度的減少路由數目和路由計算次數,確保網絡更加穩定.EIGRP雖然也提出了STUB路由器的想法,但是優化的效果不如OSPF.

  5.OSPF協議是IETF組織公佈的標準RFC.世界上主要的網絡設備廠商都支持該協議,所以它的互操作性和可靠性由於公開而得到保障,並因爲競爭的存在也使得網絡的構建在合理的價格範圍內,而在衆多的廠商支持下,該協議也會不斷走向更加完善.而EIGRP是Cisco公司的私有協議.Cisco公司是該協議的發明者和唯一具備該協議解釋和修改權的廠商,沒有受到外界監督與完善.Cisco公司對該協議的修改沒有義務通知任何其他廠家和使用該協議的用戶,因此會在網絡升級擴展中導致運行的安全隱患;從另外一個角度,如果用戶使用了這種協議組網,由於擔心網絡擴展而出現的隱患,從而選擇了單一設備,則又將陷入封閉網絡的怪圈,步入使用這種私有網絡體系的後塵,最終使得網絡的構建及維護費用都大大增加.

15 相關參考資料

[1] <<White Paper:EIGRP>>, Cisco, www.cisco.com

[2] <<Loop-Free Routing Using Diffusing Computation >>, J.J.Garcia-Lunes-Aceves,IEEE/ACM TRANSACTION ON NETWORKING.VOL 1.NO 1.2/1993

[3] <<Routing TCP/IP vol 1>> ,Jeff Doyle,Cisco Press

[4] <<EIGRP網絡設計>>,Ivan Pepelnjak,電子工業出版社

[5] 美國專利US005519704,Cisco

[6]http://10.110.90.60/php-dev/protocol.php?f_id=introduction&name=EIGRP,北研協議測試部網站

[7]轉自:http://www.docin.com/p-59429884.html

 


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