【技術(shù)】史上最強動態(tài)路由選擇協(xié)議詳解(理論篇)

最強動態(tài)路由選擇協(xié)議——EIGRP
思科私有協(xié)議,EIGRP屬于高級距離矢量協(xié)議,同時又結(jié)合了鏈路狀態(tài)協(xié)議的特征,也被稱為平衡混合型協(xié)議。


一、工作原理
?路由器之間通過周期性發(fā)送和接收Hello報文來建立鄰居關(guān)系,形成鄰居表;鄰居關(guān)系建立以后,鄰居之間發(fā)送更新(交換路由信息),形成拓撲表;最后每個路由器通過DUAL算法計算出一條去往目的地的最優(yōu)路徑加入路由表,同時計算成出一條備份路徑加入拓撲表;當(dāng)最優(yōu)路徑不可用時,就可以迅速切換到備份路徑;后續(xù)通過周期性發(fā)送hello報文維護鄰居關(guān)系.


二、協(xié)議特點:
1、收斂速度極快且基本無環(huán)路產(chǎn)生,基于Diffusing Update算法(DUAL)。
2、采用的算法高度優(yōu)化,對路由器CPU和內(nèi)存消耗極低。
3、采用組播(224.0.0.10)或單播進行路由更新;
4、采用增量更新,減少帶寬占用(hello建鄰居-更新路由-hello維護鄰居關(guān)系);
5、支持VLSM、CIDR、手工匯總和不連續(xù)子網(wǎng);32位EIGRP默認(rèn)開啟自動匯總;
6、PDMs支持IPv4、IPv6(64位EIGRP)等多種網(wǎng)絡(luò)層協(xié)議(夜航模式);
7、EIGRP需要維系鄰居表、拓撲表和路由表;
8、支持等價負載均衡ECMP和非等價負載均衡UECMP;
9、組網(wǎng)靈活、配置簡單;
10、EIGRP的管理距離為90(內(nèi)部)、170(外部)、5(匯總防環(huán)路由);
11、協(xié)議版本:IGRP(有類)、EIGRP v2(IPv4-32位)、EIGRP v3(IPv6-32位)、64位EIGRP(同時支持IPv4和IPv6);


三、工作過程
第一步:路由器周期性的發(fā)送hello報文,收到hello的路由器會把這個路由器加入到自己的鄰居表中(鄰居路由器IP/出接口);鄰居建立要滿足以下條件:
1、鄰居路由器能夠收到hello消息(hello默認(rèn)只能發(fā)送1跳)
2、兩臺路由器之間匹配相同的AS號
3、相同的度量值計算公式(K值)
4、使用MD5認(rèn)證時,鏈路兩端的認(rèn)證密碼保持一致
注:Hello發(fā)送周期5秒/次,3倍的dead時間;Hello報文攜帶AS號、K值等
第二步:鄰居關(guān)系建立完成后,兩臺路由器之間會開始發(fā)送更新,路由器將鄰居發(fā)送過來的更新加入到自己的"拓撲表"中(更新實際上是路由條目非拓撲信息)
第三步:路由器通過DUAL算法計算出一條最優(yōu)路徑加入路由表(本地計算)同時計算成出一條備份路徑加入拓撲表(本地計算);當(dāng)最優(yōu)路徑不可用時,迅速切換到備份路徑;計算完成后路由器會將更新后的最優(yōu)路由發(fā)送給鄰居路由器。
第四步:路由器之間周期性發(fā)送hello消息維護鄰居關(guān)系,每次收到Hello報文,路由器則認(rèn)為鄰居路由器是"活著的",可以與之交換路由信息.當(dāng)連續(xù)一段時間沒有收到鄰居路由器的hello報文,那么就會認(rèn)為鄰居路由器已經(jīng)失效,會將該鄰居從鄰居表中刪除并通告區(qū)域內(nèi)所有路由器該鄰居路由器已失效。
擴散更新計算:EIGRP采用DUAL算法來實現(xiàn)快速收斂。運行EIGRP的路由器存儲了鄰居的路由表,因此能夠快速適應(yīng)網(wǎng)絡(luò)中的變化。如果本地路由表中沒用合適的路由且拓撲表中也沒有合適的備用路由,EIGRP將查詢鄰居以發(fā)現(xiàn)替代路由。查詢將不斷傳播,直到找到替代路由或確定不存在替代路由。
報文封裝:Layer 2/IPv4/EIGRP/FCS (IP協(xié)議號88)

Version:協(xié)議版本(目前為2)?Opcod:報文類型如下:
(1)hello問候:用來建立和實時維護鄰居關(guān)系狀態(tài)。
(2)update更新:更新路由信息。
(3)query查詢:請求鄰居為我查詢一條去往目的網(wǎng)絡(luò)的路由(擴算更新計算)
(4)repay應(yīng)答:對query報文的應(yīng)答。
(5)ack確認(rèn):對update、query、repay報文的確認(rèn),可重傳,提供可靠傳輸
(6)request請求:目前不再使用
Checksum:校驗和 Flags:(0x01表示INIT,0x02表示CR)
INIT標(biāo)志表示發(fā)送給新鄰居的第一個初始化Update報文,這個報文將攜帶所有的路由信息,而以后的普通的Update報文將只攜帶變化了的路由信息
Sequence Number:報文的序列號,用于確認(rèn)機制,不需要確認(rèn)的報文,如Hello報文,這個域為0。
Ack Number:報文攜帶的確認(rèn)信息.表示已經(jīng)收到了此序列號的報文。
Autonomous-System Number:自治系統(tǒng)號,一般來說也是進程號。
一般來說就是進程號一般來說就是進程號

擴散更新算法
DUAL(Diffusing update algorithm)
后繼站(Successor):最優(yōu)路徑的下一跳路由器。
可行后繼站 (Feasible successor):備份路徑的下一跳路由器。
可行距離 (Feasible Distance):鄰居路由器去往目的地的度量值+自身去往鄰居路由器的度量值之和。
通告距離 (Advertise Distance):鄰居路由器去往目的地的度量值。
可行備份 (FC):次有路徑的AD小于本地最優(yōu)路徑的FD時,可作為備份路徑。
1、本地計算:匯總鄰居發(fā)送過來的跟新加入拓撲表,使用DUAL算法計算出一條最優(yōu)路徑加入路由表,同時計算出一條無環(huán)次優(yōu)路徑加入拓撲表,備份路由選擇條件需滿足FC條件:AD(FS)<FD(S)<FD(FS);當(dāng)最優(yōu)路徑不可用時將最優(yōu)路徑從路由表中刪除,自動將次優(yōu)路徑加入路由表并通告鄰居該路由度量值已改變。
2。擴散更新計算:當(dāng)一臺路由器丟失了一條路由且該路由沒有備份路由時,則啟動擴散更新計算:該路由器會向所有鄰居路由器發(fā)送Query報文,查詢關(guān)于丟失路由條目,同時將本地路由表中該路由FD設(shè)為無窮大(Passive改為Active),表示該路由條目已經(jīng)不可達;
2.1 查找本地是否存在被查詢路由;
--不存在;直接丟棄Query報文并以Reply應(yīng)答給查詢路由器該路由不可達;
--存在;判斷查詢者是不是本路由器的后繼站:
2.2 查詢者不是被查詢路由的后繼站,就將該路由以Reply應(yīng)答給查詢路由器
2.3 查詢者是被查詢路由的后繼站,首先刪除本地路由表中的該路由;則判斷本地拓撲表內(nèi)是否擁有該路由的備份路由:
--有;將最優(yōu)路由切換為備份路由,并將備份路由以Reply應(yīng)答給查詢路由器;
--沒有;會先欠著查詢者的應(yīng)答,判斷自己是否擁有除查詢者之外的其他鄰居:
----有;發(fā)送Query查詢給鄰居路由器;
----沒有;發(fā)送Reply告知查詢者該路由不可達。
注:查詢路由器標(biāo)記未回復(fù)query應(yīng)答的鄰居為“r”狀態(tài);一個鄰居只能發(fā)送一次query查詢,一次查詢收到reply應(yīng)答后才能進行第二次查詢;鄰居收到查詢者的query查詢時,不能反向進行查詢;查詢者等待所有鄰居都回復(fù)了reply
應(yīng)答后才可以進行更新計算,將180S內(nèi)未回復(fù)reply應(yīng)答的鄰居置為SIA狀態(tài)。

度量值因素
1、帶寬(bandwidth):K1(1),取最小值
2、延遲(delay):K3(1),計算總和
3、可靠性(reliability):K4(0),丟包率,取最小值
4、負載(loading):K2(0),帶寬利用率,取最大值
5、最大傳輸單元(MTU):K5(0)一般不參與EIGRP度量值的計算。
32位度量值計算:10的7次方除以(Kbit/s為單位)的最小帶寬加上(10的負5次方秒為單位)的延遲之和除以10,最后乘于256;默認(rèn)情況下,K1和K3是1,K2、K4、K5值是0;
帶寬:控制層面路由流向的所有入接口提取帶寬的最小值。
延時:控制層面路由流向的所有入接口提取延時之和。
1、計算出的度量值不是整數(shù)時自動取整,比如計算結(jié)果為8501.39 ,顯示值將為8501;
2、 通過配置K值,可以修改EIGRP度量值計算方式;K值取值范圍(0-255)。
3、EIGRP的度量值=IGRP度量值*256
EIGRP 要求兩臺路由器的K值必須相同才能成為鄰居。另外,K2,K4,,K5最好不要設(shè)置,因為這些參數(shù)設(shè)置為非零之后,會導(dǎo)致計算度量值時會考慮接口的負載和可靠性,而負載和可靠性會隨時間變化,這將導(dǎo)致EIGRP重新泛洪拓撲數(shù)據(jù),還可能導(dǎo)致路由器不斷地選擇不同的路由,由此導(dǎo)致網(wǎng)絡(luò)不穩(wěn)定。
64位度量值計算:10的7次方乘以65536除以(Kbit/s為單位)的最小吞吐量加上(10的負5次方秒為單位)的時延之和乘以65536;
度量值因素:吞吐量throughout(帶寬)、時延latency(延時)
注:64位EIGRP默認(rèn)度量值最大上限是2的32次方;當(dāng)鏈路帶寬特別低時或者延時特別高時,會出現(xiàn)度量值超過上限值,此時可以通過在AS內(nèi)所有路由器上設(shè)置metric rib-scale(路由信息庫)值(默認(rèn)值128),設(shè)置一個(129-255)的值。

四、關(guān)于EIGRP的特性:
EIGRP出現(xiàn)Down鄰居的三種情況:
1.1 3倍hello時間未收到鄰居的hello響應(yīng),立即down鄰居刪除路由。
注:帶寬低于1.544Mbps,hello發(fā)送周期60S,3倍dead時間;帶寬高于1.544Mbps,hello發(fā)送周期5S,3倍dead時間;鄰居兩端的hello發(fā)送周期可以不一樣,但是要低于dead時間。
1.2 在可靠機制RTP中,報文重傳了16次仍未收到ACK確認(rèn),將重置鄰居關(guān)系。
注:初次重傳計時器multicast flow timer(時間值不固定)
第2-16次重傳計時器retransmission timeout(時間值不固定)
1.3 在執(zhí)行擴散更新計算時,發(fā)送Query查詢報文在180S內(nèi)都沒有收到鄰居的回復(fù)應(yīng)答repay,會將該鄰居關(guān)系置為SIA(stack in active)。2.1 BFD雙向轉(zhuǎn)發(fā)檢測機制:可以提供毫秒級的檢測,可以實現(xiàn)鏈路的快速檢測,通過使用BFD與EIGRP協(xié)議聯(lián)動,可以讓EIGRP路由器之間建立BFD的鄰居,快速感知鏈路變化,實現(xiàn)路由的快速收斂
下放默認(rèn)路由的4種方法:
R2(內(nèi)網(wǎng))------ R1(邊界路由器)------ R3(ISP)
3.1 在R1左邊的接口配置一條匯總路由0.0.0.0 0.0.0.0(EIGRP支持CIDR),R1就會把該匯總路由發(fā)給R2(邊界路由器不能發(fā)送明細路由給內(nèi)網(wǎng)路由器了)。
3.2 全局模式下配置ip default-network后面接外網(wǎng)接口主類地址段;EIGRP進程中宣告該外網(wǎng)接口的主類地址段;邊界路由表中必須擁有該外網(wǎng)接口的主類路由(邊界路由器開啟自動匯總或者手工配置一條靜態(tài)路由指向null0接口)
3.3 全局模式下手工創(chuàng)建一條默認(rèn)路由后面跟出接口但不包含下一跳地址,然后在EIGRP進程中宣告network 0.0.0.0;此時路由表會出現(xiàn)一條標(biāo)記為D*的內(nèi)部EIGRP路由。
3.4 EIGRP進程中使用路由重分發(fā)(redistribute static)將默認(rèn)路由下放,凡是重分發(fā)至EIGRP域的都是外部EIGRP,標(biāo)記為D*EX;此方法支持距離矢量協(xié)議中使用,不支持鏈路狀態(tài)協(xié)議中。
路由選路:
4.1 修改帶寬和延時可以在接口下操控bandwidth和delay值 ,bandwidth的單位是kbit/s,delay的單位是10微秒。
注:帶寬設(shè)置會影響接口速率計算、QOS參數(shù)的基礎(chǔ)以及用于SNMP統(tǒng)計報告;而延時設(shè)置除了對EIGRP外其他功能幾乎沒有影響,所以想要調(diào)整EIGRP的度量值,最好選擇修改延時。修改bandwidth和delay參數(shù)只會影響控制層面的管理帶寬/延時,影響路由度量值計算,不會影響接口實際數(shù)據(jù)轉(zhuǎn)發(fā),修改speed(帶寬)和duplex(雙工模式)參數(shù)才會影響接口實際數(shù)據(jù)轉(zhuǎn)發(fā)。
4.2 使用偏移列表offer-list能夠給去往指定目的地的路由度量值計算到加上一個偏移量;從而實現(xiàn)修改度量值的目的,進而操控路由選路;結(jié)合ACL工具抓取路由(access-list),度量值只能改大不能改小。4.3 修改管理距離,由于發(fā)送的更新中不攜帶管理距離(distance),只能在本地修改;使用分發(fā)列表distribute-list過濾路由。
4.4 根據(jù)最長匹配原則,匯總后的路由掩碼往往較短而不會被選為最優(yōu)路徑。
5.1等價負載均衡ECMP:當(dāng)兩條路由前綴、掩碼和度量值相同,就會被同時加入路由表進行負載均衡;等價負載均衡默認(rèn)支持4條,數(shù)據(jù)轉(zhuǎn)發(fā)的負載比例是1:1。
5.2 非等價負載均衡UECMP:最優(yōu)路徑的FD*variance值大于等于次優(yōu)路徑的FD且次優(yōu)路徑的AD小于最優(yōu)路徑的FD,當(dāng)滿足以上兩個條件時,就可以實現(xiàn)非等價負載均衡,路由表中會出現(xiàn)兩條度量值不同的路由;非等價負載均衡數(shù)據(jù)轉(zhuǎn)發(fā)的負載比例是1:X(X代表兩條路由度量值的比例)
注:variance值取值范圍1-128,1代表只支持等價負載均衡;2-128的值代表支持非等價負載均衡。
6.1 自動匯總:32位EIGRP默認(rèn)開啟了自動匯總;64位EIGRP默認(rèn)關(guān)閉了自動匯總;自動匯總只支持本地產(chǎn)生的路由匯總;使用自動匯總時,路由器會自動產(chǎn)生一條指向null0接口的防環(huán)路由,可以有效地防止可能出現(xiàn)的路由環(huán)路和路由黑洞,EIGRP本地產(chǎn)生的防環(huán)路由是不會被傳遞出去,度量值默認(rèn)為5;6.2 手工匯總:部署在控制層面路由流向的出接口上,可以支持超網(wǎng)路由聚合CIDR;手工匯總可以匯總本地始發(fā)路由和穿越路由。
注:只有當(dāng)匯總路由中的全部明細路由down了,匯總路由才會消失;匯總路由使用明細路由中最小度量值(64位EIGRP中取最大值);EIGRP自動匯總的度量值和接口使用的手工匯總的度量值一樣;當(dāng)防環(huán)路由度量值影響其他路由選擇協(xié)議正常收發(fā)路由時,可修改自動匯總路由的管理距離,建議修改為21-89的數(shù)值。
當(dāng)重分發(fā)進來的路由經(jīng)過手工匯總之后,路由傳遞模式會發(fā)生改變,重分發(fā)路由標(biāo)識會由DEX變成內(nèi)部路由D。
EIGRP認(rèn)證:只支持MD5密文認(rèn)證,基于鏈路的鑰匙鏈認(rèn)證。
7.1 EIGRP認(rèn)證的基本配置:首先配置KEY CHAIN,接著定義KEY ID,再接著定義KEY-STRING,然后到接口模式下引用KEY CHAIN,最后,在接口模式下把EIGRP的MD5認(rèn)證功能打開。
7.2 KEY CHAIN不同,只要KEY ID和KEY-STRING相同,也可以認(rèn)證成功。
7.3 默認(rèn)情況下,只會發(fā)送密鑰ID最小的密鑰,密鑰接收后只要在鑰匙鏈中找到一把匹配成功的密鑰即可單向認(rèn)證成功。
7.4 高級屬性:可以用send-lifetime和accpet-lifetime限制鑰匙鏈中鑰匙的發(fā)送和接收時間,使用這個方法,可以實現(xiàn)定期自動更換密鑰;還可以使用NTP(Network Time Protocol 網(wǎng)絡(luò)時間協(xié)議)同步計算機時鐘。
EIGRP Stub:DUAL算法也有缺點,有的時候需要限制Query報文的發(fā)送。
8.1 Stub特性:建議把最邊緣的路由器作為stub路由器;后面可以加很多參數(shù):receive-only、summary、static、connected、redistributed、leak-map
receive-only表示只收不發(fā)更新,默認(rèn)情況下為connected和summary,表示只將直連路由和匯總路由發(fā)出去。
Summary表示能發(fā)送由本地路由器匯總的路由,不能發(fā)送其他路由器匯總路由。
static表示只能發(fā)送重分發(fā)至eigrp的static路由。
Redistributed 表示可以發(fā)送重分發(fā)至eigrp的所有類型的路由。
8.2 匯總可以限制查詢范圍。假設(shè)邊界路由器上匯總33.1.0.0/16,鄰居向其發(fā)起33.1.1.0/24的查詢,路由表查看路由表發(fā)現(xiàn)只有匯總路由,沒有33.1.1.0/24這條路由就馬上回復(fù)鄰居,不會再擴散去查詢鄰居路由器了。
9.1 被動接口passive-interface:被設(shè)置為passive-interface的接口是不能收發(fā)任何EIGRP報文。
9.2 單播更新:在幀中繼環(huán)境中,若未開啟偽廣播特性,則必須使用單播特性;neighbor命令需要在鄰居和本地接口都使用,單播特性才能建立。
9.3 水平分割:在幀中繼環(huán)境中,不僅需要關(guān)閉物理水平分割,也要關(guān)閉邏輯水平分割;(config-if)#no ip split-horizon 關(guān)閉物理水平分割
(config-if)#
no ip split-horizon eigrp 90 關(guān)閉邏輯水平分割
9.4 network 0.0.0.0:宣告所有接口且永久有效;當(dāng)該路由器上有一條只關(guān)聯(lián)出接口的靜態(tài)路由,可以把該路由引入EIGRP。
9.5 EIGRP支持主類宣告,也支持精確宣告后面必須加上反掩碼。
9.6 EIGRP不支持使用接口的輔助地址(secondary address)建立鄰居。
9.7 在串行鏈路中,EIGRP默認(rèn)最多可以使用50%的接口帶寬來承載EIGRP發(fā)送更新(這個帶寬占比可以使用ip bandwidth-percent eigrp來修改),這就保證了EIGRP不會在主要的網(wǎng)絡(luò)收斂過程中“餓死”常規(guī)的數(shù)據(jù)分組。RIP和IGRP沒有這種特性,所以大量的RIP和IGRP更新可能會影響常規(guī)的數(shù)據(jù)發(fā)送。
9.8 Stuck in Active:如果有一個鄰居在180s之內(nèi)沒能發(fā)送Reply,則重置鄰接關(guān)系,并進入SIA狀態(tài)。改進后的方案,添加了SIA-Query和SIA-Reply報文。當(dāng)180s倒計時到一半時,發(fā)送SIA-Query,若鄰居返回SIA-Reply表明還在干活,將重置180s。若連續(xù)發(fā)送7次SIA-Query后,仍未收到Reply,則不再發(fā)SIA-Query,待180s到時后,重置鄰接關(guān)系。9.9 Graceful Shutdown:當(dāng)路由器不再運行EIGRP或者將某網(wǎng)段從network通告中刪除時,將發(fā)送goodbye報文(特殊的hello),告知鄰居此網(wǎng)段已經(jīng)不可達。
這里是網(wǎng)工們學(xué)習(xí)交流的烏托邦
這里可以解答你的一切技術(shù)疑問
這里可以免費獲取100G學(xué)習(xí)資料
這就是“太閣網(wǎng)絡(luò)技術(shù)交流群”

