EIGRP 协议
EIGRP(Enhanced Interior Gateway Routing Protocol,增强内部网关路由选择协议)是思科的专用协议,只能配置、运行在思科路由器上。增强的 IGRP(EIGRP)是一个无类、增强的距离矢量协议,协议中使用了自治系统的概念,处于自治系统中的路由器使用相同的路由选择协议并共享相同的路由选择信息。EIGRP 是支持无类路由的协议,因此在它的路由更新中包含了子网掩码。
EIGRP 同时拥有距离矢量和链路状态两种协议的特性,因此它有时也被称为混合型路由选择协议。EIGRP 不会像 OSPF 那样发送链路状态数据包,它所发送的是传统的距离矢量更新。同时 EIGPR 也拥有链路状态的特性,它会在启动时同步相邻路由器上的路由表,并在每次拓扑结构发生改变时发送特定的更新数据。EIGRP 拥有的功能如下:
- 通过协议相关模块支持 IPv4 和 IPv6;
- 是无类的路由协议,支持 VLSM/CIDR;
- 支持汇总和不连续网络;
- 高效的邻居发现;
- 基于可靠传输协议(RTP)的通信;
- 基于弥散更新算法(DUAL)的最佳路径选择。
协议相关模块
EIGRP 可以为多种网络层协议提供路由支持,例如 IPv4、IPX、AppleTalk 和 IPv6。EIGRP 通过使用 PDM(Protocol-Dependent Module,协议相关模块)来实现对不同网络层协议的支持,每个 EIGRP PDM 将会为指定的协议维护多个相互独立的表,保存着特定协议的路由选择信息。
邻居发现
在配置 EIGRP 协议的路由器彼此进行路由交换之前,它们需要先成为邻居。要建立邻居关系必须满足 3 个条件:
- 接收到 Hello 包;
- 实现 AS 号的匹配;
- 相同的度量(K值)。
EIGRP 路由器必须持续地从邻居接收 Hello 消息,通过交换 Hello 数据包建立并保持邻居关系。分处于不同 AS 中的 EIGRP 路由器不会自动共享路由选择信息,并且,也不会成为邻居,这样可以减少路由信息量。
三张表
当 EIGRP 建立起邻居关系时,将根据邻居关系建立起拓扑表,拓扑表中保存了
AS 的完整拓扑信息。然后 EIGRP 才需要通报它整个的路由表信息,两个邻居会将自己完整的路由表通告给对方。获取邻居的路由之后,将只对路由表变化的部分进行传播。当 EIGRP 路由器接收到邻居的更新时,会将数据保存在一个本地的拓扑表中。这张表包含了从所有已知的邻居处所了解到的所有路由,通过最短路径算法选出最佳路由后,将最佳路由放入路由选择表中。
表名 | 功能 |
---|---|
邻居表 | 记录已建立好邻居关系的路由器的相关信息 |
拓扑表 | 保存来自每个邻居的有关互联网络中各个路由描述的路由通告 |
路由表 | 保存当前正在使用的用于路由判断的路由 |
可靠传输协议
EIGRP 使用专用的 RTP(Reliable Transport protocol,可靠传输协议)来管理路由器间的消息传输,RTP 实现了数据更新的快速投递以及对接收数据的跟踪。
当 EIGRP 发送组播数据时,会维护一个应答邻居的列表。如果 EIGRP 没有收到某个邻居发出的应答,那么它将尝试切换到单播来重发同样的数据。如果在尝试发送了 16 次单播数据后仍然没有得到应答,则宣告此邻居消失。
EIGRP 使用更新数据包传递路由信息,而接收方使用确认数据包确认收到的更新、查询或应答数据包。通过为每个数据包指定一个序列号,路由器可以从接收到的数据中鉴别出过时的、重复的或者是错序的信息。
EIGRP 只在启动时同步整个路由选择数据库,之后只在有变化时传送变动的部分,从而维持路由选择数据库的连贯性。
弥散更新算法(DUAL)
EIGRP 使用弥散更新算法(DUAL)确定最佳路由,算法可以实现随时的路由备份准备、支持 VLSM 和动态的路由恢复,如果没有发现可行的继任者路由则查询替换路由。
EIGRP 路由器维持拓扑表,通过拓扑表计算出自己到达远程网络的开销,如果最佳的路径不可用了,只需测试拓扑表中的内容选择出新的最佳的可替代路由。当本地的拓扑表中也没有可替代的路由时,EIGRP 路由器会很快向邻居求助,就是 DUAL的“弥散”特性。EIGRP 向邻居发送查询数据包查询路由信息,邻居使用应答数据包机械能响应。
支持 AS 号
在大型网络的设计中,复杂的拓扑和冗长的路由表意味着需要用巨大的开销才能应付。缓解大型网络而产生的压力呢只能是将这个大网络分割为多个独立的 EIGRP AS。
EIGRP 使用自治系统号来区别可共享路由信息的路由器集合,每个 AS 由一系列相邻的路由器所组成,路由信息通过再发布可以在不同的 AS 中进行共享。
通常 EIGRP 路由的管理距离(AD)是 90,另一种被称为外部 EIGRP 路由类型的路由的 AD 是 170,这它们所描述的网络位于 EIGRP 自治系统外部。
EIGRP 的度量
与许多其他的只使用单一要素来比较并选择最佳可用路径的协议不同,EIGRP 使用了一个由带宽、延迟、可靠性和负载 4 个要素组成的合成度量。
默认情况下,EIGRP 只使用带宽和线路的延迟来判定到达远程网络的最佳路径,所使用的计算公式为:
度量 = (10 000 000 / 最慢链路带宽) + (延迟总和 / 10)) × 256
IPv4 网络配置 EIGRP
实验拓扑
设备 | 接口 | IP 地址 | 子网掩码 | 默认网关 |
---|---|---|---|---|
R1 | G0/0 | 172.16.1.1 | 255.255.255.0 | 不适用 |
S0/0/0 | 172.16.3.1 | 255.255.255.252 | 不适用 | |
S0/0/1 | 192.168.10.5 | 255.255.255.252 | 不适用 | |
R2 | G0/0 | 172.16.2.1 | 255.255.255.0 | 不适用 |
S0/0/0 | 172.16.3.2 | 255.255.255.252 | 不适用 | |
S0/0/1 | 192.168.10.9 | 255.255.255.252 | 不适用 | |
R3 | G0/0 | 192.168.1.1 | 255.255.255.0 | 不适用 |
S0/0/0 | 192.168.10.6 | 255.255.255.252 | 不适用 | |
S0/0/1 | 192.168.10.10 | 255.255.255.252 | 不适用 | |
PC1 | NIC | 172.16.1.10 | 255.255.255.0 | 172.16.1.1 |
PC2 | NIC | 172.16.2.10 | 255.255.255.0 | 172.16.2.1 |
PC3 | NIC | 192.168.1.10 | 255.255.255.0 | 192.168.1.1 |
配置 EIGRP
使用 AS 编号 1 在每个路由器上启用 EIGRP 路由进程,EIGRP 可用于 AS 编号的数字范围是 1 – 65,535。
R1(config)# router eigrp 1
R2(config)# router eigrp 1
R3(config)# router eigrp 1
在每台路由器上,配置 EIGRP 以通告特定的直连子网。
R1(config-router)# network 172.16.1.0 0.0.0.255
R1(config-router)# network 172.16.3.0 0.0.0.3
R1(config-router)# network 192.168.10.4 0.0.0.3
R2(config-router)# network 172.16.2.0 0.0.0.255
R2(config-router)# network 172.16.3.0 0.0.0.3
R2(config-router)# network 192.168.10.8 0.0.0.3
R3(config-router)# network 192.168.1.0 0.0.0.255
R3(config-router)# network 192.168.10.4 0.0.0.3
R3(config-router)# network 192.168.10.8 0.0.0.3
配置被动接口,将局域网接口配置为不通告 EIGRP 更新。
R1(config-router)# passive-interface g0/0
R2(config-router)# passive-interface g0/0
R3(config-router)# passive-interface g0/0
禁用每台路由器上的自动汇总。
R1(config-router)# no auto-summary
R2(config-router)# no auto-summary
R3(config-router)# no auto-summary
验证 EIGRP 路由
show ip eigrp neighbors 命令显示 EIGRP 发现的邻居,所有三台路由器应该各列有两个邻居。
R1# show ip eigrp neighbors
R2# show ip eigrp neighbors
R3# show ip eigrp neighbors
show ip protocols 命令显示有关路由器上配置的所有活动 IPv4 路由协议进程的参数,和当前状态等其他信息。
R1# show ip protocols
R2# show ip protocols
R3# show ip protocols
检验端到端的连通性,PC1、PC2 和 PC3 应该能彼此 ping 通。
IPv6 网络配置 EIGRP
实验拓扑
设备 | 接口 | IPv6 地址 | 默认网关 |
---|---|---|---|
R1 | G0/0 | 2001:DB8:CAFE:1::1/64 | 不适用 |
S0/0/0 | 2001:DB8:CAFE:A001::1/64 | 不适用 | |
S0/0/1 | 2001:DB8:CAFE:A003::1/64 | 不适用 | |
R2 | G0/0 | 2001:DB8:CAFE:2::1/64 | 不适用 |
S0/0/0 | 2001:DB8:CAFE:A001::2/64 | 不适用 | |
S0/0/1 | 2001:DB8:CAFE:A002::1/64 | 不适用 | |
R3 | G0/0 | 2001:DB8:CAFE:3::1/64 | 不适用 |
S0/0/0 | 2001:DB8:CAFE:A003::2/64 | 不适用 | |
S0/0/1 | 2001:DB8:CAFE:A002::2/64 | 不适用 | |
PC1 | NIC | 2001:DB8:CAFE:1::3/64 | 2001:DB8:CAFE:1::1 |
PC2 | NIC | 2001:DB8:CAFE:2::3/64 | 2001:DB8:CAFE:2::1 |
PC3 | NIC | 2001:DB8:CAFE:3::3/64 | 2001:DB8:CAFE:3::1 |
由于之前的博客都没有配置过 IPv6 地址,因此这里给出配置的命令。
R1(config)#int g0/0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2001:DB8:CAFE:1::1/64
R1(config-if)#no shutdown
R1(config-if)#int s0/0/0
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2001:DB8:CAFE:A001::1/64
R1(config-if)#no shutdown
R1(config-if)#int s0/0/1
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address 2001:DB8:CAFE:A003::1/64
R1(config-if)#no shutdown
R2(config)#int g0/0
R2(config-if)#ipv6 enable
R2(config-if)#ipv6 address 2001:DB8:CAFE:2::1/64
R2(config-if)#no shutdown
R2(config-if)#int s0/0/0
R2(config-if)#ipv6 enable
R2(config-if)#ipv6 address 2001:DB8:CAFE:A001::2/64
R2(config-if)#no shutdown
R2(config-if)#int s0/0/1
R2(config-if)#ipv6 enable
R2(config-if)#ipv6 address 2001:DB8:CAFE:A002::1/64
R2(config-if)#no shutdown
R3(config)#int g0/0
R3(config-if)#ipv6 enable
R3(config-if)#ipv6 address 2001:DB8:CAFE:3::1/64
R3(config-if)#no shutdown
R3(config-if)#int s0/0/0
R3(config-if)#ipv6 enable
R3(config-if)#ipv6 address 2001:DB8:CAFE:A003::2/64
R3(config-if)#no shutdown
R3(config-if)#int s0/0/1
R3(config-if)#ipv6 enable
R3(config-if)#ipv6 address 2001:DB8:CAFE:A002::2/64
R3(config-if)#no shutdown
配置 IPv6 的 EIGRP 路由
在每台路由器上启用 IPv6 路由。
R1(config)# ipv6 unicast-routing
R2(config)# ipv6 unicast-routing
R3(config)# ipv6 unicast-routing
在所有路由器上启用 EIGRP 进程,并使用 1 作为自治系统编号。
R1(config)# ipv6 router eigrp 1
R1(config-rtr)# no shutdown
R2(config)# ipv6 router eigrp 1
R2(config-rtr)# no shutdown
R3(config)# ipv6 router eigrp 1
R3(config-rtr)# no shutdown
为每台路由器分配路由器 ID,路由器 ID 用于唯一地标识路由器。IPv4 网络中路由器将会用它某个接口上的 IPv4 地址作为路由器 ID,但是 IPv6 地址的格式不是 32 位二进制,因此需要另外指定。
R1(config-rtr)# eigrp router-id 1.1.1.1
R2(config-rtr)# eigrp router-id 2.2.2.2
R3(config-rtr)# eigrp router-id 3.3.3.3
使用 AS 1 在每个接口上配置 IPv6 的 EIGRP,和 IPv4 使用 network 通告不同,IPv6 是直接在接口上启用。
R1(config)# int g0/0
R1(config-if)# ipv6 eigrp 1
R1(config)# int s0/0/0
R1(config-if)# ipv6 eigrp 1
R1(config)# int s0/0/1
R1(config-if)# ipv6 eigrp 1
R2(config)# int g0/0
R2(config-if)# ipv6 eigrp 1
R2(config)# int s0/0/0
R2(config-if)# ipv6 eigrp 1
R2(config)# int s0/0/1
R2(config-if)# ipv6 eigrp 1
R3(config)# int g0/0
R3(config-if)# ipv6 eigrp 1
R3(config)# int s0/0/0
R3(config-if)# ipv6 eigrp 1
R3(config)# int s0/0/1
R3(config-if)# ipv6 eigrp 1
验证 IPv6 的 EIGRP 路由
使用 show ipv6 eigrp neighbors 命令验证该路由器是否已与相邻路由器建立邻接关系。相邻路由器的本地链路地址在邻接关系表中显示。
R1#show ipv6 eigrp neighbors
R2#show ipv6 eigrp neighbors
R3#show ipv6 eigrp neighbors
使用 show ipv6 route 命令在所有路由器上显示 IPv6 路由表。
R1#show ipv6 route
R2#show ipv6 route
R3#show ipv6 route
使用 show ipv6 protocols 命令验证已配置参数。
验证端到端连接,PC1、PC2 和 PC3 应该能彼此 ping 通。
参考资料
《思科网络技术学院教程(第6版):扩展网络》,[加] Bob Vachon,[美] Allan Johnson 著,思科系统公司 译,人民邮电出版社
《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社