EIGRP

**加強型閘道間選徑協定**（英語：Enhanced Interior Gateway Routing Protocol，縮寫為 EIGRP），又譯**增強型內部網路關路由協定**，一種內部網路關協定（IGP）。在內部網路關路由協定（IGRP）的基礎上，由思科公司發展而成，於 2013 年 Cisco 將此標準公開，不再是私有的路由協定，在同樣。EIGRP 是一種進階距離向量路由協定（也稱混合型路由協定）。

## EIGRP 的基本操作

EIGRP 所收集的資訊存放在以下三個表中:

* 鄰居表（Neighbor Table）：用來存放和鄰居路由器相關的資料。如鄰居路由器 IP 位址、與鄰居路由器相連的本地介面、保持時間等。
* 拓撲表（Topology Table）：該表用來存放所有從鄰居路由器學習到的路徑資訊。拓撲表中的每一條路徑都至少有一個後繼（Successor）。該表中的每一條路徑資訊可以被標記為被動（Passive）狀態或者活動（Active）狀態。被動狀態說明此路徑處於穩定狀態，並且路由器知道如何到達該目的地。活動狀態則說明網路拓撲發生變化，並且路由器正在處理相關資訊，以得到一條新的到達該目的地的最佳路徑。
* 路由表（Routing Table）：拓撲表中的後繼（Successor）會被放入路由表，路由器根據路由表來轉發封包。

EIGRP 有以下四個基本組件：

* 鄰居發現和恢復（Neighbor discovery/recovery）：鄰居發現和恢復機制使得執行 EIGRP 的路由器可以自動的發現與之直接相連的其他執行 EIGRP 的路由器，並與它們建立鄰居關係。鄰居發現和恢復機制還維護路由器與其他路由器之間的鄰居關係。EIGRP 路由器通過傳送 Hello 包來建立和維護鄰居關係，如果在一定的時間間隔內沒有收到鄰居路由器發來的 Hello 包，則認為該鄰居已經死亡，並中斷鄰居關係，將鄰居從鄰居表中清除。
* 可靠傳輸協定（Reliable Transport Protocol RTP）：可靠傳輸協定的作用是保障 EIGRP 協定封包的可靠的、有序的傳送。RTP 同時使用單播和組播來傳送 EIGRP 協定封包。有些類型的 EIGRP 封包必須被可靠的傳送，有些則無需可靠的傳送。所謂可靠的傳送，即傳送的封包需要被接收方顯示或隱式的確認。
* DUAL 有限狀態機（DUAL finite-state machine DUAL FSM）：DUAL 有限狀態機是 EIGRP 用來計算最佳路徑的機制。
* 協定相關模組（Protocol-dependent modules PDMs ）：協定相關模組的引進，使得 EIGRP 可以支援不同的網路層協定，如 IPX、AppleTalk、IPv6，而不僅僅是 IPv4 協定。

## 混合度量值

EIGRP 同時考慮了鏈路的頻寬、延遲、可靠性、負載 4 個因素來計算路由的度量值：

```
Router>show ip eigrp topology 10.0.0.1 255.255.255.255
IP-EIGRP topology entry for 10.0.0.1/32
  State is Passive, Query origin flag is 1, 1 Successor(s) , FD is 40640000
  Routing Descriptor Blocks:
  10.0.0.1 (Serial0/0/0) , from 10.0.0.1, Send flag is 0x0
      Composite metric is (40640000/128256) , Route is Internal
      Vector metric:
        Minimum bandwidth is 64 Kbit
        Total delay is 25000 microseconds
        Reliability is 255/255
        Load is 197/255
        Minimum MTU is 576
        Hop count is 1
```

* 頻寬（Bandwidth）：源和目的地之間的鏈路的最小頻寬，單位為 kbp。
* 負載（Load）：源和目的地之間的鏈路的最重負載，該負載基於分組速率和介面的組態頻寬。
* 延時（Delay）：源和目的地之間介面的累計延時，單位為 ms。
* 可靠性（Reliability）：源和目的地之間的最低可靠性，該可靠性基於存活訊息。

EIGRP 在計算混合度量值的時候還引入了 5 個 K 值：K1 到 K5。注意 K 值在計算的時候僅僅作為一個乘數，而不等於所對應的真實值，如 K1 的數值不等於頻寬的數值。

預設情況下，EIGRP 在計算混合度量值的時候只考慮了頻寬和延遲（即 K1 和 K3）兩個因素，但是可以人工的修改 K 值來控制所考慮的因素。

EIGRP 的混合度量值根據以下公式來計算：

　
: ${\bigg [}{\bigg (}K_{1}\cdot {\text{Bandwidth}}+{\frac {K_{2}\cdot {\text{Bandwidth}}}{256-{\text{Load}}}}+K_{3}\cdot {\text{Delay}}{\bigg )}\cdot {\frac {K_{5}}{K_{4}+{\text{Reliability}}}}{\bigg ]}\cdot 256$

公式中 K1 到 K5 的值可以手工的設為 0～255 之間任意整數。

預設情況下 K1 和 K3 設為 1，其他 K 值設為 0，公式可以簡化為 (Bandwidth + Delay) \* 256。

EIGRP 域內所有路由器的 K 值都必須設為相同的值，否則可能會產生路由環路。Cisco 規定如果兩台 EIGRP 路由器的 K 值不同，那麼它們不會建立鄰居關係。

EIGRP 使用以下公式來計算頻寬：

　
: Bandwidth for EIGRP = 107 / Interface Bandwidth

其中：Interface Bandwidth 為使用鏈路（由目的到源）所有區間上的最小頻寬，使用千位元每秒（kilobits per second/kbps）為計量單位； Interface Delay 為各鏈路總延遲，單位為 10μs（tens of microseconds)。

在 Cisco 路由器上，頻寬和延時都是可以手工設定的。

IGRP 也使用相同的基本公式來計算混合度量值，唯一不同的是該公式沒有乘數 256。

EIGRP 同樣也使用了跳數（Hop），不過在計算混合度量值的時候跳數並沒有包括在其中。在 Cisco 路由器上，預設的跳數最大值為 100，任何跳數超過 100 的路由都將被視為不可達。當然亦可調整每台 Cisco 路由器上頭的 EIGR 跳數來增加網路路由的範圍，最大跳數為 244。

## 後繼

後繼（Successor），是指從當前路由器到目的路由器路徑最佳的路由。後繼必須同時滿足以下兩個條件：

* 它到某目的地的路徑具有最低的度量值。
* 它不是路由環路的一部分。

第一個條件可以通過比較所有從鄰居路由器接收到的到相同目的地的路由的度量值，來選出具有最低度量值的路由器。
第二個條件可以通過可行條件（Feasibility Condition，FC）來保證。對於去往同一個目的地的路由，若有多個相同的目的地路由度量質，則會有多個後繼，以達到負載平衡 (Load Balance)。

後繼會被載入到路由表以供路由器轉發資料，並且 EIGRP 路由器會將載入到路由表中的路由通告給其他 EIGRP 鄰居。

## 可行後繼

除了度量值最低的路徑外，拓撲表還會儲存前往每個目的地的後備路徑。要成為可行後繼，下一跳路由器的通告距離 (Advertisement Distance) 必須小於當前路由的可行距離 (Feasible Distance)，即 AD<FD。可行後繼比當前路由器離目的地更近，但不是度量值最小的路徑，所以不會載入到路由表中，只會儲存在拓撲表中。和後繼一樣，對於同一個目的地，可以有多個可行後繼。

## 通告距離和可行距離

通告距離（Advertised Distance，AD）是到目的地的下一跳路由器到該目的地的度量值。通告距離的英文也可寫作 Reported Distance（RD）。

可行距離（Feasible Distance，FD）是路由器到某目的地的最低度量值。FD 等於 AD 加上從當前路由器到下一跳路由器的度量值。

## 可行條件

eigrp 的可行條件為：路由的 AD< successor 的 FD

## 路由的狀態

被動 (Passive) 狀態：EIGRP 網路收斂完成後，並能提供無路由環路 (Loop-Free Route) 路由狀態。當前網路為可用。

活動 (Active) 狀態：當前的網路正處於發送查詢狀態，當前網路不可用。若拓樸表一直出現此狀態，則 EIGRP 這條路由已經進入到 Stuck-in-Active (SIA) 的狀態，提示 EIGRP 網路的收斂發生了問題。

更新 (Update) 等待狀態：當前網路正處於等待更新包的回應狀態。(較少看見)

查詢 (Query) 等待狀態：當前網路正處於等待查詢包的回應的狀態。(較少看見)

## EIGRP 的路由協定類型

## EIGRP 其他特性

⒈支援 Classful 與 Classless 路由特性:
EIGRP 一改以往 IGRP 不支援 Classless 的缺點。在於發送路由更新的時候，亦攜帶該路徑的子網遮罩 (submask)。而支援自動路由彙總 (auto-summary) 的功能，而這項功能是預設啟用。不過通常在於專業的網管人員使用 EIGRP 的時候，會強烈建議關閉該項自動路由彙總的功能。

⒉支援不對等路徑度量負載平衡 (Unequal Cost Path Load Balancing):
雖然 EIGRP 支援不對等路徑度量負載平衡；但於 Cisco 路由器上仍需手動啟用此項功能。而要使用此項功能的要求在於拓樸表 (topology table) 當中必須擁有可行後繼 (Feasible Sucessor) 才可啟用此功能。而可行後繼路由路徑度量必須小於或等於所設定的變數 (variance) 的倍數值 (1－128) 才能啟用負載平衡的功能，符合該倍數值的可行後繼路由則會出現在路由表當中。目前此特性是所有路由協定 (除 IGRP 外) 望塵莫及。

⒊路由更新占用較少的介面頻寬 (interface bandwidth):
EIGRP 預設情況下，最多占用介面或子介面組態頻寬的 50%。由於在早期的網路頻寬較少的狀況下，EIGRP 協定能夠減少路由協定之間的溝通所占用的頻寬。至今頻寬較大的今日，這個功能也就顯得沒有那麼重要。目前此特性是獨一無二。當然亦可在 Cisco 路由器上的介面上組態頻寬或者調整占用的百分比等等。

⒋Stuck-in-Active:
EIGRP 的路由環境在於中小型的路由環境中 (小於 20 台) 的路由收斂速度是首屈一指 (由於使用 DUAL 演算法，並且擁有自身的拓樸表。)；但是在於大型的的路由環境中 (大於 50 台) 的路由收斂速度反而會因為 DUAL 演算法而導致路由收斂產生 SIA (Stuck-in-Active) 的問題發生。而這個問題的解決方案就是限制 EIGRP 查詢範圍，並且在路由器的介面 (interface) 上設定路由匯總 (route summary)，如此才能夠阻止 EIGRP 的 SIA 狀況。

## 參考文獻

TCP/IP 路由技術（第一卷）（第二版）（美）多伊爾，（美）卡羅爾 著，葛建立，吳劍章 譯
/ 人民郵電出版社

## 外部連結