加強型閘道間選徑協定

加強型閘道間選徑協定（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} <pre> \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