EIGRP概述
EIGRP: (Enhanced Interior Gateway Routing Protocol) 增强内部网关路由协议。也翻译为 加强型内部网关路由协议。 EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议,采用弥散修正算法(DUAL)来实现快速收敛,可以不发送定期的路由更新信息以减少带宽的占用,支持Appletalk、IP、Novell和NetWare等多种网络层协议。 EIGRP是Cisco公司的私有协议(2013年已经公有化)。
EIGRP 同时具备链路状态和距离矢量路由协议的优点.只发送变化后的信息(这类似于链路状态协议),同时只将这些信息发送给邻接路由器(这类似于距离矢量协议).
距离矢量路由协议的路由学习是“道听途说”,路由器不知道整个网络的拓扑,所以可能产生环路;
链路状态是每个路由器都学习到整个网络的拓扑结构,再计算从自身到其它路由器的路径,所以不可能产生环路。
EIGRP协议相关模块
EIGRP 可以为多种网络层协议提供路由支持,例如 IPv4、IPX、AppleTalk 和 IPv6。EIGRP 通过使用 PDM(Protocol-Dependent Module,协议相关模块)来实现对不同网络层协议的支持,每个 EIGRP PDM 将会为指定的协议维护多个相互独立的表,保存着特定协议的路由选择信息。
EIGRP 是增强的IGRP ,因为它会聚速度快,且可确保在任何时候拓扑中都没有环路。
EIGRP的特性
(1). 通过发送和接收Hello包来建立和维持邻居关系,并交换路由信息;
(2). 采用组播(224.0.0.10)或单播进行路由更新;
(3). 管理距离值AD 为 90 (内部EIGRP) 或170 (外部EIGRP);
(4). 采用触发更新,减少带宽占用;
(5). 支持可变长子网掩码(VLSM),默认开启自动汇总功能;
(6). 支持 IP ,IPX和 AppleTalk 等多种网络层协议;
(7). 对每一种网络协议 ,EIGRP 都维持独立的3张表:
⦁ 邻居表(show ip eigrp neighbor) ⦁ 拓扑表(show ip eigrp topology) ⦁ 路由表(show ip route eigrp)
(8). EIGRP 使用Diffusing Update 算法(DUAL),来实现快速收敛并确保没有路由环路;
(9). 存储整个网络拓扑结构信息,以便快速适应网络变化;
(10). 支持等价和非等价的负载均衡;
(11). 基于IP 进程号 88。
DUAL算法
EIGRP 使用弥散更新算法(DUAL)确定最佳路由,算法可以实现随时的路由备份准备、支持 VLSM 和动态的路由恢复,如果没有发现可行的继任者路由则查询替换路由。
EIGRP 路由器维持拓扑表,通过拓扑表计算出自己到达远程网络的开销,如果最佳的路径不可用了,只需测试拓扑表中的内容选择出新的最佳的可替代路由。当本地的拓扑表中也没有可替代的路由时,EIGRP 路由器会很快向邻居求助,就是 DUAL的“弥散”特性。EIGRP 向邻居发送查询数据包查询路由信息,邻居使用应答数据包机械能响应。
EIGRP术语
EIGRP 术语:
可行距离(FD):到达一个目的网络的最小度量值; FD: 我到邻居的距离+AD
通告距离(AD):邻居路由器所通告的它自己到达目的网络的最小的度量值; AD:我的邻居到达目标网络有多远
可行性条件(FC):是EIGRP 路由器更新路由表和拓扑表的依据。可行性条件可以有效地阻止路由环路,实现路由的快速收敛。可行性条件的公式为:AD<FD。
后继站(successor):到达目的网络路径成本最低的路由器–FD 最低
可行后继站( FS ):除了成本最低的路径外,还存储备用路径,要成为可行后继站,下一跳路由器的AD 必须小于当前路由器的FD
EIGRP的三张表
对每一种网络协议 ,EIGRP 都维持独立的3张表:
⦁ 邻居表(show ip eigrp neighbor)
⦁ 拓扑表(show ip eigrp topology)
⦁ 路由表(show ip route eigrp)
表名 | 功能 |
邻居表 | 记录已建立好邻居关系的路由器的相关信息 |
拓扑表 | 保存来自每个邻居的有关互联网络中各个路由描述的路由通告 |
路由表 | 保存当前正在使用的用于路由判断的路由 |
EIGRP五种分组
EIGRP 发送 5 种类型的分组:
分组 | 分组的功能 |
Hello | 用来发现和恢复邻居,通过组播的方式发送,使用不可靠的发送 |
Update | 传播路由更新信息,不定期的,通过可靠的方式发送(比如网络链路发生变化).当只有一台路由器需要路由更新时,update通过unicast的方式发送;当有多个路由器需要路由更新的时候,通过组播的方式发送 |
ACK(acknowledgement) | 不包含数据(data)的Hello包,使用unicast的方式,不可靠的发送 |
Reply(应答) | 回应查询报文。 |
Query(查询) | 当找不到Feasible Successor 时,发送查询报文(Unicast)是DUAL finite state machine用来管理扩散计算用的,查询包可以是组播或unicast;应答包是通过unicast的方式发送,并且方式都是可靠的 |
EIGRP建立关系图解
(1)链路上路由器 A 启动后,通过其所在EIGRP 接口发送Hello 分组
(2)通过其个接口收到Hello分组后,路由器B用更新分组进行应答 ,更新分组中包含路由选择表中的全部路由
(3)两台路由彼此交换Hello分组后,邻接关系建立.路由器 A 用ACK 分组应答路由器 B
(4)路由器 A 将更新分组中的信息加入拓扑表中
(5)路由器 A 向路由器 B 发送一个更新分组
(6)收到更新分组后,路由器 B 向路由器A 发送一个ACK 分组
EIGRP建立邻居失败的原因
EIGRP 邻居起不来的原因有三种:
1)AS号不匹配
AS号不同的两个EIGRP之间是建不起邻居的,因为它们的进程号不相同。
2)K值不相同
EIGRP计算开销有5个因素:带宽,延迟,负载,可靠性,MTU。用K1,K2,K3,K4,K5 分别代替这几个值。当K值不同时,计算开销的方式就不同了,就不能传递路由了,即不能建邻居(默认情况下K1 =K3=1,K2,K4,K5=0)
3)HELLO时间不同
EIGRP的hello包更新时间为5秒,死亡时间为15秒,如果有一个进程的hello时间改成大于了5秒,在5秒内对方没有收到hello包就会认为没有邻居,此时也起不来邻居,但是过了改了的时间后又会给对方一个hello包,对方过5秒就回了hello包,此时邻居又会起来,所以hello时间不同时会出现邻居时而有时而又断了的情况。
EIGPR的路由选择
选择路由
EIGRP 与其它路由选择协议的最大不同可能是其路由选择过程.EIGRP 选择主路由(后继路由)和备用路由(可行后继路由),并将它们加入拓扑表中.然后,将主路由(后继路由)加入到路由选择表中.EIGRP 支持多种类型的路由,包括内部.外部和汇总路由.
⦁内部路由:源于EIGRP 自治系统内部的路由
⦁外部路由:是从另一种路由选择协议或另一个EIGRP 自治系统获悉的路由
⦁汇总路由:是针对多个子网的路由
EIGRP 度量值的计算
EIGRP使用度量值来确定到目的地的最佳路径。对于每一个子网,EIGRP拓扑表包含一条或者多条可能的路由。每条可能的路由都包含各种度量值:带宽,延迟等。EIGRP路由器根据度量值计算一个整数度量值,来选择前往目的地的最佳路由。
当路由器选路的时候,计算出度量值最低的路径,也就是FD,来确定最佳路由。当路由失效的时候,使用RD来选择替代路由。
计算EIGRP 度量值时使用 5 个变量,但默认情况下,只使用其中的两个(带宽.延迟)
1)带宽:源和目的地之间的最小带宽
2)延迟:路径上接口的累计延迟
3)可靠性:源和目的地之间的最低可靠性,基于存活消息
4)负载:源和目的地之间链路上的最重负载,基于分组速率和接口的配置带宽
5)MTU:最大传输单元,路径上最小的MTU
EIGRP 度量值的计算公式={ K1 * Bandwidth + ( K2 * Bandwidth ) / ( 256-Load) + K3 * Delay }*{K5/(Reliability + K4) } * 256
默认情况下,K1 = K3 = 1 ,K2 = K4 = K5 = 0
Bandwidth =10 ^ 7/所经由链路中入口带宽(单位为Kbps)的最小值
Delay=所经由链路中入口的延迟之和(单位为μs)/10
也就是说默认情况下,EIGRP的度量计算公式为:
计算公式=[ 10 ^ 7 / Bandwidth + Delay ] * 256
EIGRP 根据 AD 和FD 来确定前往目的地的后继路由(最佳路由)和可行后继路由(备用路由).
路由器对其拓扑表中前往特定网络的所有路由的 FD 进行比较,并将 FD 最小的路由加入到路由选择表中,该路由为最佳路由
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