本節書摘來自異步社群《ccnp route 300-101學習指南》一書中的第2章,第2.2節建構eigrp拓撲表,作者 【美】戴安娜 蒂爾(diane teare) , 鮑勃 瓦尚(bob vachon) , 瑞克 格拉齊亞尼(rick graziani),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
2.2 建構eigrp拓撲表
eigrp鄰居關系一旦建立,就會開始交換路由資訊。eigrp使用更新資料包來交換這類資訊。所有從鄰居收到的路由資訊都會存儲在一個eigrp拓撲表中。
eigrp使用dual計算到達遠端網絡的最優路由。一條路由要想被插入到路由表中,它就必須滿足可行性條件,這個條件的作用是在eigrp網路中避免環路。有到達目的網絡最低度量的路由稱為将被插入路由表的候選路由。如果存在其餘的路由,它們必須滿足可行性條件才能成為備份路由,以便在主路由不可用的情況下,路由器仍可将資料包轉發到目的網絡。
為了計算每個目的網絡的開銷,eigrp使用一個複雜的路徑成本,這個值預設由帶寬和延遲組成。
在完成本節内容的學習後,讀者将能夠:
描述eigrp鄰居如何交換路由資訊;
描述eigrp如何選擇經過網絡的最優路徑;
描述eigrp度量是如何計算出來的;
計算eigrp度量;
描述可行性條件如何避免了eigrp網絡中出現環路;
了解eigrp的選路過程。
2.2.1 建構及考察eigrp拓撲表
本節會介紹不同類型的eigrp資料包,并深入解讀eigrp拓撲表,同時還會介紹eigrp如何選擇到達目的網絡的最優路徑。
本節首先将會根據圖 2-6 所示拓撲中eigrp的配置方法,來讨論eigrp的資料包類型。
管理者在br路由器上配置eigrp之前,使用指令debug eigrp packets啟用了eigrp調試功能,如例2-16所示。
例2-16 觀察br上的eigrp
在wan鍊路172.16.1.0/30上啟用eigrp程序後,eigrp會立即開始發送和接收hello資料包。發送和接收hello資料包的過程是單向的,也就是說路由器會使用多點傳播不可靠地發送hello資料包,也并不會等待另一端發送确認消息。在br路由器從hq鄰居收到一個hello資料包後,它就會動态建立一個新的eigrp鄰接關系。hello資料包會周期性地進行發送,以檢查鄰居的有效性。
路由更新與發送和接收hello資料包的過程不同,它的發送和接收是雙向的。更新消息中包含有路由資訊,這種消息會通過可靠的方式進行發送,也就是說路由器會等待每個發送出去的更新包都能收到一個對應的确認包。反之亦然,每個接收到的更新包也都必須進行确認。這個傳輸可靠資料包的過程由兩個步驟組成:在接口加入隊列和捆綁路由更新,以及向鄰居發送可靠的資料包。debug指令的輸出資訊中顯示了發送和接收更新以及确認資料包這兩個獨立的過程。
debug輸出資訊中,“seq...”部分之後的數字分别表示序号和确認号。認真檢視debug輸出可以發現,每個用可靠方式發出的資料包都有一個序列号。确認成功接收的确認包必須攜帶與接收到的資料包相同的編号。
接下來,我們使用指令show ip eigrp traffic驗證了eigrp資料包的流量統計資訊,如例2-18所示。
例2-18 驗證br上的eigrp包流量
show ip route eigrp指令的輸出資訊中顯示了路由表中的eigrp路由。在輸出資訊中,可以看到兩條eigrp路由,一條标記為d,另一條标記為d ex。代碼d表示eigrp内部路由。
内部路由源自一個eigrp自治系統内,表示将eigrp中配置的一個直連網絡視為内部網絡,且在eigrp自治系統中傳播。而外部路由則是通過其他路由協定學來并重分布到eigrp中的路由。這類路由由代碼d ex表示。
方括号中的數字分别代表ad值和eigrp路徑成本。“via”之後的ipv4位址表示下一跳ipv4位址(本例中為172.16.1.1),在最後可以看到各路由的出接口。
在br配置的最後,剩下的兩個接口ethernet 0/1和serial 0/2都被配置到了eigrp程序中,如例2-20所示。
例2-20 在br上配置network指令
選擇最優路徑
eigrp使用dual計算到達目的網絡的最優路徑。這種算法使用距離資訊(也稱為組合度量)來選擇高效、無環的路徑。
dual通過累加兩個值來計算此組合度量。第一個值是從鄰居路由器到目的網絡的路徑成本。由于這個值是報告給路由器的,是以稱為通告距離(reported distance,rd)。在許多書中,讀者也會看到通告距離(advertised distance)這個術語。第二個值是從本地路由器到達報告第一個值的那台路由器的路徑成本。在從本地路由器到目的網絡的所有度量中,路由器會選擇最小的組合路徑成本,并将其視為到達某個特定目的的最優路徑。而這個所選的值稱為可行距離(feasible distance,fd)。
路徑成本最小的路由稱為後繼路由,下一跳路由器為後繼路由器。如果有多個路由器到目的網絡的fd相同,則可能存在多個後繼路由器。此時,eigrp就會把所有的後繼路由插入到路由表中。預設情況下最多可以将4條後繼路由添加到路由表中。
可行後繼路由器是一個有無環路徑的下一跳路由器,它到達目的網絡的開銷比後繼路由器大。當拓撲表中的特定字首有多個路由存在時,路由器會驗證這條路由是否是無環拓撲的一部分。為此,路由器會采用一個簡單的規則,要求其他備份路由的rd總是小于最優路徑的fd,這稱為可行性條件。滿足這個條件的路由就會被視為是一條備份路由,且被稱為可行後繼路由。下一跳路由器則稱為可行後繼路由器。
繼續我們在上一節中的配置,在例2-21中,管理者使用show ip eigrp topology指令檢視了br eigrp拓撲表的内容。請讀者觀察有關hq lan 192.168.0.0/24的資訊。
例2-21 在br上驗證eigrp拓撲表
eigrp拓撲表是一個包含從所有eigrp鄰居學到的所有字首的資料表。字首之前的代碼p表示該字首是被動狀态。當dual沒有執行任何計算來發現可能的備份路徑時,路由就會被認為是被動的。對于所有路由,被動狀态都既是正常狀态,也是理想狀态。當所有路由都處于被動狀态下時,網絡就是完全收斂的。
隻要有至少一個合法到達目的且滿足fc的路徑,路由就會保持在被動狀态。可行性條件是eigrp内部解決路由環路問題的根本途徑。為了完全了解fc,讀者必須首先了解其他的兩個重要概念:通告距離和可行距離。
eigrp中的距離或組合度量是一個整數,用來比較去往相同目的網絡的不同路徑。每個接收到的路由都會包含通告距離,而且這個值會被存儲到eigrp拓撲表中,可以在輸出資訊括号中第二個數的位置看到。對于去往網絡192.168.0.0/24的路徑,兩條路徑的值均為128256。
到達目的的總開銷是括号中的第一個數,這個數值反映了通告距離加上達到鄰居的開銷之和。網絡192.168.0.0/24通過接口ethernet 0/0的總開銷是409600,通過接口ethernet 0/1的總開銷則是1664000。
到達目的網絡的最優路徑是根據去往目的的最低總開銷比較出來的。最優路徑會成為後繼路由,而後繼路由路徑的總開銷值就會成為fd。
其餘路徑成為候選可行後繼路由。一個路徑如果要成為可行後繼,必須滿足可行性條件。路徑的通告距離必須小于可行距離。
注釋
如果希望比較全面地了解dual,請參閱routing protocols companion guide(cisco press,2014)。
下面我們繼續讨論之前的情形,在例2-22中,管理者通過show ip route eigrp指令檢視了br路由表中的eigrp路由。
例2-22 驗證br上的eigrp路由
在分析了拓撲表中的所有路由後,eigrp就會嘗試隻将後繼路由添加到路由表中。如果路由器從其他更可信的路由源那裡學習到了相同的目的網絡,那麼eigrp後繼路由就不會插入到路由表中。可行後繼路由會保留在拓撲表中,以備後繼路由失效。
br拓撲表中所有接到的路由都可以通過指令show ip eigrp topology all-links進行檢視,如例2-23所示。
例2-23 在br上驗證eigrp拓撲表中的所有網絡
指令show ip eigrp topology all-links可以顯示出到達目的網絡的所有可能的路徑。除了後繼路由和可行後繼路由之外,拓撲表中也有可能包含非後繼路由。非後繼路由是不滿足可行性條件的路由。輸出資訊顯示,到達網絡192.168.0.0/24有三條可能的路徑。通過下一跳172.16.3.1的路徑通告距離為256000000,大于路由的可行距離409600。因為不滿足可行條件,是以通過172.16.3.1的路徑就不是候選的後繼。在沒有滿足fc的路由時,路由器會對字首重新執行路徑計算;路由就會進入活躍狀态,路由器則會開始向鄰居請求替代路由。
接下來,例2-24顯示了從br路由器到hq ip位址192.168.0.1的連續ping指令。
例2-24 從br到192.168.0.1的連續ping指令
因為路由表中隻有一條後繼路由,而路由表中擁有兩條滿足可行性條件的路由,internet控制消息協定(internet control message protocol,icmp)流量會使用通過172.16.1.0/24的路徑。
在例2-25中,hq的ethernet 0/0接口被管理者禁用,後面的輸出資訊為br上的ping過程。
例2-25 hq ethernet 0/0接口關閉和在br上觀察到的結果
在關閉hq上的ethernet 0/0接口後,接口上的線路協定狀态立即變為down,且hq上的eigrp取消了通過此接口建立的鄰居關系。然而,hq端接口的狀态沒有被傳送到對應的br接口上。是以,br上的eigrp程序将不會立即聲明通過ethernet 0/0的eigrp鄰居關系斷開。在沒有接收到hello資料包且保持計時器已過期之後,br才會意識到鍊路另一端已經沒有了活躍的對端。
在預設情況下,eigrp在以太網接口上收斂需要花費15秒的時間。在這段時間視窗内的icmp包會被丢棄。br意識到鄰居出現了故障,于是開始使用通過172.16.2.0/30鍊路的可行後繼路由來轉發icmp資料包。
鍊路的2層狀态并不反映鄰居裝置的操作狀态,這種情況在現實世界中相當常見。如果需要加速收斂,可以調整eigrp計時器,也可以部署其他的狀态監測機制。
如果連續的ping還沒完成,可以使用組合鍵ctrl+shift+6來終止ping操作。
例2-26顯示了br上的路由表。
例2-26 br上的eigrp路由
此前指向172.16.2.0/30鍊路的可行後繼路由現在成為了後繼路由,而且被插入到了路由表中。
在例2-27中,管理者使用show ip eigrp topology指令檢視了br上的拓撲表。
例2-27 br上有新後繼的eigrp拓撲表
當後繼路由失效之後,隻有通過ethernet 0/1接口的路由才能滿足可行性條件。之前的可行後繼路由現在成為了後繼路由,并且也會出現在拓撲表和路由表中。第三條通過172.16.3.0/24的路由不滿足可行性條件,也沒有出現在show ip eigrp topology指令的輸出資訊中。
在例2-28中,管理者在br上對hq進行了連續的ping。在ping期間,管理者禁用了hq的ethernet 0/1接口。
例2-28 在br上進行連續的ping且禁用hq接口
在hq路由器上關閉ethernet 0/1接口後,使用目前後繼路由的eigrp鄰居關系就會終止。最後一個滿足可行性條件的路由從拓撲和路由表中消失。dual計算開始,目的192.168.0.0/24進入活躍狀态。br路由器發送一個叫作查詢的特殊包,用來詢問鄰居是否有路由可以到達丢失的那個字首。資料包會通過唯一剩下的活躍路徑172.16.3.0/30到達路由器hq。hq通過應答包響應查詢消息,确認自己沒有到達那個網絡的替換路徑。當br收到應答包時,新路徑的計算過程結束。
在dual計算期間,192.168.0.0/24會處于活躍狀态。收斂過程會造成丢包,因為br上通過172.16.2.0/30鍊路的eigrp鄰居的保持計時器必須過期,且路由器必須執行dual計算。
在br通過後繼路徑檢測到鄰居不可達,而eigrp計算出到達目的網絡的新合法路徑的這段期間,icmp資料包會被丢棄。雖然拓撲表中所選的路由在之前的示例中不滿足可行性條件,但由于拓撲表中沒有了另外兩條路由,是以這條路由現在成了唯一可用的路由。是以,這條路由會被選為後繼路由并添加在路由表中。
在例2-29中,管理者使用了指令show ip route eigrp來檢視br上路由表中的内容。
例2-29 使用新後繼的br路由表
hq和br之間唯一剩下的可用路徑現在啟用,并且出現在了拓撲表和路由表中。
2.2.2 eigrp中的路由資訊交換
路由器在交換路由資訊之前,必須首先建立eigrp鄰居關系。會話建立後,路由器之間就會立即交換更新包,通告eigrp拓撲表中的路由資訊。切記,隻有最優路徑才會被通告給鄰居。是以eigrp使用的唯一路由,也就是後繼路由,會被通告出去。
除了接收到的路由資訊之外,拓撲表中還有兩個其他的本地源:
使用network指令通告的eigrp直連接配接口的子網;
通過從其他路由協定或路由資訊源重分布到eigrp中的子網。
重分布是一種把路由資訊從一個源通告到另一個路由協定中的方法。在相同自治系統中使用多個路由協定時,常常需要使用重分布。另一個常見的使用情況是,管理者希望将已經定義的靜态路由包含到某個特定的路由協定中。
2.2.3 eigrp度量
eigrp使用組合度量來判斷到達目的網路的最優路徑。擷取路徑成本的公式中會使用下列參數。
帶寬:本地路由器和目的之間所有鍊路的最小帶寬。
延遲:源和目的之間的所有鍊路延遲的累加和。
可靠性:這個值代表的是源和目的之間的最差可靠性(基于keepalive值)。
負載:這個值代表的是源和目的之間鍊路的最差負載值(基于資料包速率和接口的配置帶寬)。
讀者可能會發現在許多圖書和網上的文章中,最大傳輸單元(mtu)也會用于eigrp的度量計算。雖然mtu值确實會在路由更新中與其他度量元素一起交換,但它從不會用于度量計算之中。隻有在存在太多等價路徑,路由器需要忽略一些到達相同目的的等價路徑時,mtu才會被路由器用來充當決勝因素。此時,首選使用有最高的最小mtu值的路由。
在預設情況下,eigrp隻會使用帶寬和延遲來計算路徑成本。計算過程中也會将接口負載和可靠性包含在内,雖然cisco不建議使用這些參數。路由域中的所有路由器必須使用相同的元素計算度量,隻在一台路由器上更改度量的計算參數可能會因環境不一緻導緻連通性問題。
用于度量計算的元素是由度量權重确定的,這個值也稱為k值。預設的k值是:k1=1,k2=0,k3=1,k4=0,k5=0。如果k值被設定為預設值,那麼路由器就隻會基于帶寬和延遲的值計算路徑成本。
可以使用show ip protocols指令來檢視k值的設定。
2.2.4 eigrp度量的計算
為了計算指定目的網絡的組合路徑成本,eigrp會使用以下公式:
度量 = [(k1 帶寬+ [(k2 帶寬) / (256 – 負載)] + k3 延遲) k5/(k4 + 可靠性)] * 256
如果k4和k5被設定為預設值,即0,那麼公式中的k5/(k4 + 可靠性)這一部分就不會使用;也是就是該值會被設定為1。這個公式也相當于被簡化為了:
度量 = (k1 帶寬+ [(k2 帶寬) / (256 – 負載)] + k3 延遲) 256
如果考慮預設的k1-k3值,即k1=k3=1,k2=0,eigrp的路徑成本公式則會被簡化為:
度量 = (帶寬+延遲) * 256
應注意不建議更改k值。
eigrp度量計算使用的延遲和帶寬值的格式與show interface指令顯示出來的不同。eigrp延遲值是路徑上延遲的總和,機關是十毫秒,而show interface指令的輸出資訊則是以毫秒來顯示延遲值的。eigrp帶寬是使用鍊路上最小帶寬鍊路進行計算的,機關是千比特每秒(kilobits per second),并用這個數值除以107。帶寬與延遲的和需要乘以256,這是為了確定eigrp路徑成本對eigrp前身,也就是igrp的相容。
show interface輸出資訊中顯示出來的延遲值不是測量出來的,而是計算出來的。cisco ios會通過協商,或者根據管理者配置的接口帶寬來計算這個數值。
如需全面了解eigrp路徑成本的計算方法,可以參閱routing protocolscompanion guide(cisco press,2014)。
eigrp寬度量
eigrp的組合開銷路徑成本對于高帶寬的接口或者是以太網通道(ethernet channels)不能很好地擴充,會導緻路由行為不正确或者不一緻。管理者可以給接口配置的最低延遲值是10毫秒。是以,高速接口,如10吉比特以太網接口或聚合在一起的高速接口(geether channe),在eigrp看來就是一個ge接口。這可能造成預料之外的等價負載分擔。
為了解決這類問題,管理者可以采用eigrp寬度量(eigrp wide metric)特性,來支援64位路徑成本計算和路由資訊庫(routing information base,rib)擴充,這個特性最多可以支援4.2兆兆比特接口(直連接配接口、或者通過像port channel或etherchannel這類通道技術組成的接口)。
64比特的度量計算隻能工作在eigrp命名模式配置中。eigrp經典模式則會使用32位度量進行計算。eigrp命名模式的配置會在本章稍後的内容中進行讨論。
2.2.5 eigrp度量計算示例
在圖2-7中,r1有兩條到達r4後方網絡的路徑。圖中顯示了多條鍊路的帶寬(mbit/s)和延遲值(毫秒)。下面我們來判斷兩條路徑的eigrp路徑成本。
2-7
圖2-7 r1有兩條到達r4後方網絡的路徑
上面那條路徑的計算過程如下。
1.頂端路徑(r1-r2-r3-r4)的最低帶寬是10 mbit/s(10000 kbit/s)。這條路徑的eigrp帶寬計算過程為:
帶寬 =(107 /千比特每秒的最小帶寬)
帶寬 =(10000000 / 10000)=1000
2.頂端路徑的延遲為:
延遲 =[(延遲 r1 → r2) + (延遲 r2 → r3) + (延遲 r3 → r4)]
延遲 = [4000 + 1000 + 5000] = 10000 [十毫秒]
3.是以,頂端路徑的eigrp度量計算過程為:
度量 =(帶寬 +延遲)*256
度量 =(1000 + 10000)*256 = 2816000
下面那條路徑的計算過程如下。
1.底端路徑(r1-r5-r6-r7-r4)的最低帶寬是50000kbit/s。這條路徑的eigrp帶寬計算過程為:
帶寬 =(10000000 / 50000)= 200
2.底端路徑的延遲為:
延遲 =[(延遲 r1 → r5) + (延遲 r5→ r6) + (延遲 r6→ r7)+ (延遲 r7→ r4)]
延遲 = [1000 + 3000 + 1000 + 2000 ] = 7000 [十毫秒]
3.是以,底端路徑的eigrp度量計算過程為:
度量 =(200 + 7000)*256 = 1843200
是以,r1選擇了下面的路徑,因為這條路徑的路徑成本更低—1843200,而上面那條路徑的路徑成本則為2816000。r1會采用下面的路徑,将r5作為下一跳路由器,是以ip路由表中的度量為1843200。上面路徑的瓶頸是10mbit/s那條鍊路,這也是為什麼路由器會選用下方的路徑。因為這意味着将資料傳輸到r4的速率最多隻能是10mbit/s。而在下面那條路徑中,最低速率是50mbit/s,這表示吞吐率可以達到這樣的速率。是以,下面這條路徑是更好的選擇—比如說,我們可以以更快的速度傳輸大型檔案。
2.2.6 可行性條件
可行性條件可以讓eigrp域内部保持無環的狀态。字首必須滿足可行性條件才能成為一個可行後繼路由,其通告距離必須低于後繼路由的可行距離。這是eigrp確定網絡拓撲無環的主要方式。
為了說明可行性條件的重要性,請參考圖2-8。路由器d以路徑成本5将自己的lan網絡通告給路由器b和c。路由器b和c分别将自己的路徑成本5和10增加到去往路由器d lan網絡的距離中,然後将這些距離通告給路由器a。路由器a将b發來的通告加上一個鍊路路徑成本3,将從c發來的通告加上一個鍊路路徑成本2。由此得出,從a到d的最優路徑是穿越b的路徑,因為a-b-d路徑的路徑成本是13,而a-c-d路徑的路徑成本則是17。
假設在路由器c上,路由器a和c之間鍊路的水準分割被禁用了片刻。當路由器a通告從a到c的最優路徑度量13時,路由器c可能會使用增加後的路徑成本15将相同的路由通告回路由器a。此時,路由器a不知道路由器c到底是擁有去往路由器d lan網絡的其他路徑還是它将最優路徑的路由通告回了自己。但因為通過路由器c的rd比最優路徑的fd大,路由器a還是不會使用來自路由器c的rd。這就是路由器a保證eigrp域無環的方式。
2.2.7 eigrp路徑計算示例
圖2-9是一個rd的計算示例。r1到達網絡10.0.0.0/8有幾種選擇。r2、r4和r8都向r1發送了一條更新消息,每條更新中都包含了一個rd,這是由鄰居路由器計算出來的、通向通告的網絡10.0.0.0/8的開銷。
圖2-10是一個計算fd的示例。r1到達網絡10.0.0.0/8有幾個可用選項。三個鄰居的每個更新各有不同的rd。r1會通過累加到r2、r4和r8的本地鍊路開銷和每條路徑上的rd,來計算每條到達網絡10.0.0.0/8路徑的距離。到達目的的最低度量路徑是穿越r2的路徑。是以10.0.0.0/8網絡的fd等于31。
如需全面了解eigrp路徑成本的計算方法及示例,可以參閱routing protocols companion guide(cisco press,2014)。