加强型闸道间选径协定

加强型闸道间选径协定（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