增强型内部网关路由协议 (EIGRP) 是思科系统公司开发的高级距离矢量路由协议。
EIGRP 是高级距离矢量路由协议,它包括诸如 RIP 和 IGRP 等其他距离矢量路由协议所没有的的功能。
EIGRP 的功能包括:
扩散更新算法 - 作为驱动 EIGRP 的计算引擎,扩散更新算法 (DUAL) 是路由协议的核心。DUAL 能够确保整个路由域内的无环路径和备用路径。通过使用 DUAL,EIGRP 会保存所有能够到达目的地的可用备用路由,以便在必要时迅速切换到替代路由。
建立邻居邻接关系 - 此外,EIGRP 与直连且启用了 EIGRP 的路由器建立邻接关系。邻居邻接关系用于跟踪这些邻居的状态。
可靠传输协议 - 可靠传输协议 (RTP) 对 EIGRP 是唯一的,并将 EIGRP 数据包传送到邻居。RTP 和邻居邻接关系跟踪为 DUAL 奠定了基础。
部分和限定更新 - EIGRP 使用部分和限定一词来描述其更新。与 RIP 不同,EIGRP 不会发送定期更新,路由条目也不会过期。“部分”一词是指更新仅包含与路由变化相关的信息,例如增加新链路或链路不可用。“限定”一词是指部分更新仅发送到更改所影响的路由器。这将最大程度减少发送 EIGRP 更新所需的带宽。
等价和非等价负载均衡 - EIGRP 既支持等价负载均衡,也支持非等价负载均衡,从而让管理员更好地分配网络中的流量。
----------------------------
协议相关模块
EIGRP 具有路由不同协议的功能,包括 IPv4 和 IPv6。EIGRP 使用协议相关模块 (PDM) 执行此操作。PDM 还用于支持现在已经过时的 Novell IPX 和 Apple Computer 的 AppleTalk 网络层协议。
PDM 负责网络层协议的特定任务。其中一个例子是 EIGRP 模块,它负责发送和接收封装在 IPv4 中的 EIGRP 数据包。此模块还负责解析 EIGRP 数据包并将收到的新信息告知 DUAL。EIGRP 请求 DUAL 做出路由决策,但是结果存储在 IPv4 路由表中。
PDM 负责处理与每个网络层协议对应的特定路由任务,包括:
维护属于该协议簇的 EIGRP 路由器的邻居表和拓扑表
为 DUAL 构建和转换特定于协议的数据包
将 DUAL 连接到特定于协议的路由表
计算度量并将此信息传递到 DUAL
实施过滤和访问列表
对其他路由协议执行重分布功能
重新分布由其他路由协议获取的路由
当路由器发现新邻居时,它会将邻居的地址和接口记录为邻居表中的一个条目。每个协议相关模块都有一个邻居表,例如 IPv4。EIGRP 还维护拓扑表。拓扑表包含由相邻路由器通告的所有目的地。每个 PDM 都有一个单独的拓扑表。
可靠传输协议
EIGRP 被设计为网络层独立路由协议。正是由于采用此设计,EIGRP 无法使用 UDP 或 TCP 的服务。EIGRP 使用可靠传输协议 (RTP) 发送和接收 EIGRP 数据包。因此,EIGRP 是灵活的,可用于除 TCP/IP 协议套件之外的协议,例如现在已经过时的 IPX 和 AppleTalk 协议。
RTP 能够以单播或组播形式发送 EIGRP 数据包。
IPv4 的组播 EIGRP 数据包使用保留的 IPv4 组播地址 224.0.0.10。
IPv6 的组播 EIGRP 数据包发送到保留的 IPv6 组播地址 FF02::A。
-------------------------------------------------
EIGRP 数据包类型
EIGRP 使用五种不同的数据包类型,某些类型会成对使用。EIGRP 数据包使用 RTP 可靠或不可靠传输方式发送,并且可以作为单播、组播甚至两者。EIGRP 数据包类型也称为 EIGRP 数据包格式或 EIGRP 消息。
如图 1 所示,五种 EIGRP 数据包类型包括:
Hello 数据包 - 用于发现邻居和维护邻居邻接关系。
已通过不可靠的传输方式发送
组播(大多数网络类型)
更新数据包 - 向 EIGRP 邻居传播路由信息。
已通过可靠的传输方式发送
单播或组播
确认数据包 - 用于确认收到以可靠传输方式发送的 EIGRP 消息。
已通过不可靠的传输方式发送
单播
查询数据包 - 用于向邻居查询路由。
已通过可靠的传输方式发送
单播或组播
应答数据包 - 用于响应 EIGRP 查询。
已通过可靠的传输方式发送
单播
EIGRP Hello 数据包
EIGRP 使用小的 Hello 数据包来发现直连链路上启用 EIGRP 的其他路由器。路由器使用 Hello 数据包形成 EIGRP 邻居邻接关系,也称为邻居关系。
EIGRP Hello 数据包作为 IPv4 或 IPv6 组播并使用 RTP 不可靠传输方式发送。这意味着接收方不回复确认数据包。
EIGRP 更新和确认数据包
EIGRP 更新仅包含需要的路由信息,且仅发送给需要该信息的路由器。
EIGRP 不会发送定期更新,路由条目也不会过期。相反,只有当目的地状态发生变化时,EIGRP 才会发送增量更新。
EIGRP 更新数据包使用可靠传输,这意味着发送方路由器需要确认。
当多台路由器需要更新数据包时,通过组播发送;当只有一台路由器需要更新数据包时,则通过单播发送。
EIGRP 确认数据包
EIGRP 确认数据包始终以不可靠单播方式发送。不可靠传输具有一定作用;否则,确认便会无限循环。
EIGRP 查询和应答数据包
EIGRP 查询数据包
DUAL 在搜索网络以及进行其他任务时使用查询和应答数据包。查询和应答使用可靠传输。查询可以使用组播或单播,但应答则始终以单播发送。
------------------------_____---------------------
封装 EIGRP 消息
EIGRP 消息的数据部分封装在数据包内。此数据字段称为类型/长度/值 (TLV)。
每个 EIGRP 数据包无论类型如何,都具有 EIGRP 数据包报头。
每个 EIGRP 数据包无论类型如何,都具有 EIGRP 数据包报头。然后,EIGRP 数据包报头和 TLV 被封装到一个 IPv4 数据包中。在该 IPv4 数据包报头中,协议字段被设为 88 以表示 EIGRP,IPv4 目的地址则被设为组播 224.0.0.10。如果 EIGRP 数据包封装在以太网帧内,则目的 MAC 地址也是一个组播地址,即 01-00-5E-00-00-0A。
-----------------------------------------------------------
EIGRP 数据包报头和 TLV
如图 1 所示,每个 EIGRP 消息都有报头。重要字段包括操作码字段和自治系统编号字段。操作码用于指定以下 EIGRP 数据包类型:
更新
查询
应答
Hello
自治系统编号用于指定 EIGRP 路由进程。不同于 RIP,EIGRP 的多个实例可以在网络上运行。自治系统编号用于跟踪每个运行中的 EIGRP 进程。
-----------------------------------------------
以下全局配置模式命令用于进入 EIGRP 的路由器配置模式并开始配置 EIGRP 进程:
Router(config)# router eigrp autonomous-system
移动设备上的 autonomous-system 参数可以分配 1 到 65,535 之间的任意 16 位值。EIGRP 路由域内的所有路由器都必须使用这个相同的自治系统编号。
router eigrp autonomous-system 命令本身不启动 EIGRP 进程。路由器不会开始发送更新。相反,此命令仅提供配置 EIGRP 设置的访问。
-----------------------------------------------
EIGRP 路由器 ID
在 EIGRP 和 OSPF 路由协议中使用路由器 ID。但是路由器 ID 的角色在 OSPF 中更加重要。在 EIGRP IPv4 实施中,路由器 ID 的使用并不那么明显。IPv4 的 EIGRP 使用 32 位路由器 ID 来识别外部路由重分布的始发路由器。在讨论 IPv6 的 EIGRP 时,路由器 ID 的必要性更为明显。
要确定其路由器 ID,思科 IOS 路由器按顺序使用以下三个条件:
1.使用 eigrp router-id配置的地址 ipv4-address 路由器配置模式命令。
2.如果未配置路由器 ID,则选择任意环回接口的最高 IPv4 地址。
3.如果未配置环回接口,则选择其所有物理接口的最高活动 IPv4 地址。
如果网络管理员未使用 eigrp router-id 命令明确配置路由器 ID,则 EIGRP 会使用环回接口或物理 IPv4 地址生成自己的路由器 ID。环回地址是一种虚拟接口,配置后即自动处于工作状态。该接口并不需要启用 EIGRP,就是说不需要将其包括在 EIGRP network 命令中。然而,该接口必须处于 up/up 状态。
--------------------------
验证 EIGRP 进程
图 2 显示 R1 的 show ip protocols 输出,
有时,在 EIGRP 路由更新中包含直连网络可能很有必要或很有优势,但是不允许该接口之外形成任何邻居邻接关系。passive-interface 命令可用于防止形成邻居邻接关系。
------------------------------------------------------------
--------------------------------------------
EIGRP 使用 Hello 数据包建立和维护邻居邻接关系。为使两台 EIGRP 路由器成为邻居,这两台路由器之间的多个参数必须匹配。例如,两台 EIGRP 路由器必须使用相同的 EIGRP 度量参数,并且必须使用同一自治系统编号。
----------------------------------------------------
EIGRP 复合度量
默认情况下,EIGRP 在其复合度量中使用下列值来计算通向网络的首选路径:
带宽 - 从源到目的地的路径上所有送出接口的最低带宽。
延迟 - 路径上所有接口延迟的累计总和(以十微秒为单位)。
可以使用以下值,但建议不要使用,因为它们通常会导致频繁地重新计算拓扑表:
可靠性 - 该值表示根据 keepalive 数据包而定的源网络和目的地间的最低可靠性。
负载 - 该值表示根据数据包速率和接口上配置的带宽而计算出的源和目的地间的最差负载。
注:尽管 MTU 被包括在路由表更新中,但它不是 EIGRP 所用的路由度量。
----------------------------------------------
检查接口度量值
show interfaces 命令可显示接口信息,包括用于计算 EIGRP 度量的参数。图中显示了用于 R1 的 Serial 0/0/0 接口的 show interfaces 命令。
BW - 接口带宽(单位为千位每秒)。
DLY - 接口延迟(单位为毫秒)。
可靠性 - 接口可靠性以分母为 255 的分数来表示(255/255 表示 100% 可靠),以 5 分钟内的指数平均值来计算。默认情况下,EIGRP 在计算其度量时不包含该值。
Txload、Rxload - 接口上的传输和接收负载,以分母为 255 的分数来表示(255/255 表示完全饱和),以 5 分钟内的指数平均值来计算。默认情况下,EIGRP 在计算其度量时不包含该值。
-----------------------------------------------------
带宽度量
带宽度量是一种静态值。EIGRP 和 OSPF 等路由协议使用带宽来计算路由度量。带宽的单位为千位每秒 (kb/s)。
在较早版本的路由器上,串行链路带宽度量的默认值为 1544 kb/s。
------------------------------------------------------------
延迟度量
延迟是衡量数据包通过路由所需时间的指标。延迟 (DLY) 度量是一种静态值,它以接口所连接的链路类型为基础,单位为微秒。延迟不是动态测得的。换句话说,路由器并不会实际跟踪数据包达到目的地所需的时间。延迟值与带宽值相似,都是一种默认值,可由网络管理员更改。
当用于确定 EIGRP 度量时,延迟是路径上所有接口延迟的累积总和(以十微秒为单位)。
图 1 中的表格显示了各种接口的默认延迟值。请注意,串行接口的默认值为 20,000 微秒,千兆以太网接口的默认值为 10 微秒。
-------------------------------------------------------
如何计算 EIGRP 度量
示例:
计算R2到192.168.1.0网段的度量
---------------------------
可行后继路由器、可行性条件和报告距离
因为 DUAL 可以使用到其他网络的备用路径,而无需重新计算 DUAL,所以它可以在拓扑发生变化时快速收敛。这些备用路径称为可行后继路由器 (FS)。
----------------------------------------------------------
DUAL 有限状态机 (FSM)
EIGRP 的核心就是 DUAL 以及 DUAL 的 EIGRP 路由计算引擎。此技术的确切名称为 DUAL 有限状态机 (FSM)。FSM 包含用于在 EIGRP 网络中计算和比较路由的所有逻辑。图示为 DUAL FSM 的简化版。
------------------------------------------------
IPv6 的 EIGRP
类似于 IPv4 的 EIGRP,IPv6 的 EIGRP 通过交换路由信息来填充 IPv6 路由表的远程前缀。
源地址和目的地地址 - IPv4 的 EIGRP 向组播地址 224.0.0.10 发送消息。这些消息使用出站接口的源 IPv4 地址。IPv6 的 EIGRP 向组播地址 FF02::A 发送消息。IPv6 的 EIGRP 消息使用送出接口的 IPv6 本地链路地址发出。
路由器 ID - IPv4 的 EIGRP 和 IPv6 的 EIGRP 都使用 32 位数字的 EIGRP 路由器 ID。32 位路由器 ID 以点分十进制记法表示,通常指 IPv4 地址。如果 IPv6 的 EIGRP 路由器未配置 IPv4 地址,则必须使用 eigrp router-id 命令配置 32 位路由器 ID。确定路由器 ID 的过程同样适用于 IPv4 和 IPv6 的 EIGRP。
------------------------------------------------
配置 IPv6 的 EIGRP 路由进程
ipv6 unicast-routing 全局配置模式命令在路由器上启用 IPv6 路由。配置任何 IPv6 路由协议之前都需要此命令。在接口上配置 IPv6 地址不需要此命令,但是将路由器启用为 IPv6 路由器则需要此命令。
IPv6 的 EIGRP
以下全局配置模式命令用于进入 IPv6 的 EIGRP 的路由器配置模式:
Router(config)# ipv6 router eigrpautonomous-system
类似于 IPv4 的 EIGRP, autonomous-system 值必须与该路由域中所有路由器上的值相同。在图 1 中,IPv6 的 EIGRP 路由进程无法配置,直到通过 ipv6 unicast-routing 全局配置模式命令启用 IPv6 路由。
配置路由器 ID
如图 2 所示,eigrp router-id 命令用于配置路由器 ID。IPv6 的 EIGRP 使用 32 位路由器 ID。要获取此值,IPv6 的 EIGRP 所采用的流程与 IPv4 的 EIGRP 相同。eigrp router-id 命令优先于所有环回接口或物理接口 IPv4 地址。如果 IPv6 的 EIGRP 路由器没有带 IPv4 地址的任何活动接口,则需要使用 eigrp router-id 命令。
路由器 ID 应是 IP 的 EIGRP 路由域内的唯一 32 位数字;否则,可能发生路由不一致。
注: eigrp router-id 命令用于配置 EIGRP 的路由器 ID。部分 IOS 版本接受命令 router-id,而不先指定 eigrp。但无论使用哪个命令,running-config 都将显示 eigrp router-id 。
默认情况下,IPv6 的 EIGRP 进程处于关闭状态。如图 3 所示,激活 IPv6 的 EIGRP 流程需要使用 no shutdown 命令。IPv4 的 EIGRP 则不需要此命令。尽管已经启用 IPv6 的 EIGRP,但是如果相应接口上没有激活 EIGRP,则无法发送和接收邻居邻接关系和路由更新。
路由器需要使用 no shutdown 命令和路由器 ID 才能建立邻居邻接关系。
图 4 显示了路由器 R2 上 IPv6 的 EIGRP 的完整配置。
使用图 5 中的语法检查器配置路由器 R3 上 IPv6 的 EIGRP 进程。
ipv6 eigrp 接口命令
IPv6 的 EIGRP 使用不同的方法来启用接口的 EIGRP。IPv6 的 EIGRP 不是使用 network 路由器配置模式命令指定匹配的接口地址,而是直接在接口上配置。
被动接口使用 IPv6 的 EIGRP
IPv6 邻居表
SRTT 和 RTO - RTP 用其管理可靠 EIGRP 数据包。
队列数 - 应始终为零。如果大于零,则说明有 EIGRP 数据包等待发送。
序列号 - 用于跟踪更新、查询和应答数据包。
IPv6 的 EIGRP 路由表
对于所有路由协议,其目标都是使用通向远程网络的路由和到达这些网络的最佳路径填充 IP 路由表。对于 IPv4,必须检查 IPv6 路由表并确定是否填充了正确的路由。
图 1 显示了 R1 当前在其 IPv6 路由表中添加了通向远程 IPv6 网络的三条 EIGRP 路由:
2001:DB8:CAFE:2::/64 via R3 (FE80::3) using its Serial 0/0/1 interface
2001:DB8:CAFE:3::/64 via R3 (FE80::3) using its Serial 0/0/1 interface
2001:DB8:CAFE:A002::/64 via R3 (FE80::3) using its Serial 0/0/1 interface
三条路由都使用路由器 R3 作为下一跳路由器(后继路由器)。请注意路由表使用本地链路地址作为下一跳地址。由于每台路由器的所有接口都配置了唯一且可区分的本地链路地址,因此非常容易确定通过 FE80::3 的下一跳路由器是路由器 R3。
----------------------------------------------
EIGRP 自动汇总
边界路由器是位于网络边缘的路由器。此路由器必须能够将其路由表中的所有已知网络通告到直连的网络路由器或 ISP 路由器中。
在有类边界上执行自动汇总。这意味着 EIGRP 会自动将子网识别为单个 A 类、B 类或 C 类网络,并只在路由表中创建一条针对汇总路由的条目。因此,所有通往子网的流量都将经过这条路径。
在企业网络中,到达汇总路由的路径可能并不是流量通往每个子网的最佳选择。要使所有路由器找到通往每个子网的最佳路由,唯一的方法就是让邻居发送子网信息。在这种情况下,应该禁用自动汇总。当自动汇总被禁用时,更新中会包括子网信息。
汇总的更新仅通过不同的主类网络中的接口发送。在本例中,R1 将 172.16.0.0/16 网络通告到 R3,这是因为 R1 到 R3 链路位于不同的有类网络中(即 192.168.10.0/24)。
只要以下条件出现,IPv4 的 EIGRP 就会自动添加 Null0 汇总路由:
启用了自动汇总。
通过 EIGRP 至少发现了一个子网。
有两个或更多的 network EIGRP 路由器配置模式命令。
--------------------------------------------------
汇总路由(续)
EIGRP 使用 Null0 接口来防止这些类型的路由环路。此图显示了 Null0 路由防止上述示例所描述的路由环路产生的场景:
1.R1 具有默认路由,即通过 ISP 路由器的 0.0.0.0/0。
2.R1 将包含默认路由的路由更新发送至 R2。
3.R2 在其 IPv4 路由表中安装 R1 的默认路由。
4.R2 的路由表包含 172.16.1.0/24、172.16.2.0/24 和 172.16.3.0/24 子网。
5.R2 在其路由表中安装了通向 Null0 的 172.16.0.0/16 汇总路由。
6.R2 将 172.16.0.0/16 网络的汇总更新发送至 R1。
7.R1 通过 R2 安装 172.16.0.0/16 的汇总路由。
8.R1 收到 172.16.4.10 的数据包。由于 R1 具有通过 R2 的 172.16.0.0/16 的路由,因此它会将数据包转发至 R2。
9.R2 收到 R1 发来的目的地址为 172.16.4.10 的数据包。数据包与 172.16.0.0 的任何特定子网都不匹配,但是与指向 Null0 的 172.16.0.0/16 汇总路由匹配。使用 Null0 路由时,数据包会被丢弃。
R2 上通向 Null0 接口的 172.16.0.0/16 的汇总路由丢弃了所有以 172.16.x.x 开始的数据包,并且没有与以下任何子网形成更长的匹配:172.16.1.0/24、172.16.2.0/24 或 172.16.3.0/24。
尽管 R2 的路由表中包含默认路由 0.0.0.0/0,Null0 路由仍然是更长的匹配。
注:当使用 no auto-summary 路由器配置模式命令禁用自动汇总时,Null0 汇总路由会被删除。
传播默认静态路由
在 EIGRP 路由域内传播默认静态路由的一种方法是使用 redistribute static 命令。redistribute static 命令可告诉 EIGRP 将静态路由包含在发往其他路由器的 EIGRP 更新中。
-----------------------------------------------
EIGRP 带宽占用
IPv4 的 EIGRP 带宽
默认情况下,EIGRP 仅使用不超过 50% 的接口带宽来传输 EIGRP 信息。这可避免因 EIGRP 过程过度占用链路而使正常流量所需的路由带宽不足。
ip bandwidth-percent eigrp 命令可用于在接口上配置可供 EIGRP 使用的带宽百分比。
Router(config-if)# ip bandwidth-percent eigrp as-number percent
Hello 计时器和保持计时器
IPv4 的 EIGRP 中 Hello 间隔和保持时间
EIGRP 使用轻型 Hello 协议来建立并监控其邻居的连接状态
-------------------------------------------------------------
基本 EIGRP 故障排除命令
show ip eigrp neighbors
show ip route
show ip protocols