Enhanced Interior Gateway Routing Protoco,即 增强内部网关路由线路协议。EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议,采用弥散修正算法(DUAL)来实现快速收敛,可以不发送定期的路由更新信息以减少带宽的占用。EIGRP协议在路由计算中要对网络带宽、网络时延、信道占用率和信道可信度等因素作全面的综合考虑,所以EIGRP的路由计算更为准确,更能反映网络的实际情况。
EIGRP特点:
1.EIGRP更新方式为触发更新,仅在路由路径或者度量值发生变化时才发送。更新中只包含已变化的链路的信息,而不是整个路由表,减少带宽占用;
2.支持可变长子网掩码(VLSM)和CIDR,支持手动汇总,默认开启自动汇总功能。
3.对每一种网络协议,EIGRP都维持独立的邻居表、拓扑表(保存最优路径与次优路径)和路由表(保存最优路由条目信息)。
4.EIGRP使用Diffusing Update算法(DUAL)来实现快速收敛并确保没有路由环路。(无环路的无类路由)
5.支持等价和非等价的负载均衡(非等价的负载均衡需要手动开启)。
EIGRP中几个专业术语;
AD(通告距离):最优路径中,起始设备的下一跳设备到达目标地址的度量值。
FD(可行距离):最优路径中,起始设备到达目标地址的度量值。
FS(可行后继路由器):次优路径中的起始设备的下一跳路由器。
FC(可行条件):次有路径中的起始设备宣告到达目标地址的度量值要小于最优路径中起始设备到达目标地址的度量值。
EIGRP中包的类型
1.HELLO,用于发现邻居和维护邻居关系,使用组播224.0.0.10每5秒发送一次,15s内未收到邻居的HELLO包则宣告邻居死亡。
2.更新(UPDATE),以单播或组播方式可靠地发送其认为已经收敛的路由。发送给邻居后,邻居应当回复ACK报文。若未收到邻居的ACK报文,则继续给邻居发送UPDATE报文,若16次内一直未收到邻居的ACK报文,则宣告邻居死亡。
3.查询(QUERY),以单播或组播方式可靠地向邻居查询到达某目的地路由时使用的数据包,有时也以单播方式重传。
收到UPDATE报文后,将会把其中的路由信息放入自己的拓扑表中,通过DUAL算法计算出后继站和可行后继站,然后将可行后继放入拓扑表中。当链路发生故障后,若备份路径不满足FC条件,该路由器将给邻居发送发送QUERY报文来查询到达目的地址的最优路径。邻居收到QUERY后,无论知不知道最优路径都会回复REPLY报文。若未收到REPLY报文,第一台路由器会继续发送QUERY报文,共计16次。若在此期间一直未收到REPLY报文,则宣告邻居死亡。
4.应答(REPLY),收到邻居的QUERY包后,以单播方式可靠地应答查询数据包。
5.确认(ACK),以单播方式发送。用来确认UPDATE、QUERY以及REPLY数据包,表示自己已收到。ACK分组是上面3种数据包可靠传输的保障。
运行EIGRP设备建立邻居关系的基本条件
1.运行EIGRP路由器的AS号需一致
2.度量值的参考标准一致
抓包显示的EIGRP各报文发送情况
不难发现,HELLO报文在实际应用中先以组播方式发送到邻居后,又会以单播的形式再发送一遍,以确保邻居可以收到HELLO报文。
EIGRP优缺点
优点:
1.EIGRP协议支持多路由,使路由器可以按照不同的路径进行负载分担。
2.较少带宽占用,可靠性高。路由的发送使用增量发送方法,即每次只发送发生变化的路由。发送的路由更新报文采用可靠传输,如果没有收到确认信息则重新发送,直至确认。
3.快速收敛。DUAL算法使得EIGRP在路由计算时,只会对发生变化的路由进行重新计算;对一条路由,也只有此路由影响的路由器才会介入路由的重新计算。
4.路由聚合。EIGRP协议可以通过配置,对所有的EIGRP路由进行任意掩码长度的路由聚合,从而减少路由信息传输,节省带宽。
5.MD5认证。为确保路由获得的正确性,运行EIGRP协议进程的路由器之间可以配置MD5认证,对不符合认证的报文丢弃不理,从而确保路由获得的安全。
6.实现负载分担。去往同一目的的路由表项,可根据接口的速率、连接质量和可靠性等属性,自动生成路由优先级,报文发送时可根据这些信息自动匹配接口的流量,达到几个接口负载分担的目的。
缺点:
1.没有区域概念。EIGRP没有区域的概念,而OSPF在大规模网络的情况下,可以通过划分区域来规划和限制网络规模。所以EIGRP适用于网络规模相对较小的网络,这也是矢量-距离路由算法(RIP协议就是使用这种算法)的局限所在。
2.定时发送HELLO报文。运行EIGRP的路由器之间必须通过定时发送HELLO报文来维持邻居关系,这种邻居关系即使在拨号网络上,也需要定时发送HELLO报文,这样在按需拨号的网络上,无法定位这是有用的业务报文还是EIGRP发送的定时探询报文,从而可能误触发按需拨号网络发起连接,尤其在备份网络上,引起不必要的麻烦。所以,一般运行EIGRP的路由器,在拨号备份端口还需配置Dialerlist和Dialergroup,以便过滤不必要的报文,或者运行TRIP协议,这样做增加路由器运行的开销。
3.EIGRP的无环路计算和收敛速度是基于分布式的DUAL算法的,这种算法实际上是将不确定的路由信息散播(向邻居发query报文),得到所有邻居的确认后(reply报文)再收敛的过程,邻居在不确定该路由信息可靠性的情况下又会重复这种散播,因此某些情况下可能会出现该路由信息一直处于活动状态(这种路由被称为活动路由栈),并且,如果在活动路由的这次DUAL计算过程中,出现到该路由的后继(successor)的测量发生变化的情况,就会进入多重计算,这些都会影响DUAL算法的收敛速度。而OSPF算法则没有这种问题,所以从收敛速度上看,虽然整体相近,但在某种特殊情况下,EIGRP还有不理想的情况。
EIGRP实验模拟
以上图所示拓扑为例,我们来进行EIGRP各种功能的配置。
基本配置步骤
R1
R1(config)#interface f0/0
R1(config-if)#ip address 12.1.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 0
R1(config-if)#ip address 172.16.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 1
R1(config-if)#ip address 172.16.2.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface loopback 2
R1(config-if)#ip address 172.16.3.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
//配置eigrp
R1(config)#router eigrp 100
R1(config-router)#no auto-summary
R1(config-router)#network 172.16.1.0 0.0.0.255
R1(config-router)#network 172.16.2.0 0.0.0.255
R1(config-router)#network 172.16.3.0 0.0.0.255
R1(config-router)#network 12.1.1.0 0.0.0.255
R1(config-router)#exit
R2
R2(config)#interface f0/0
R2(config-if)#ip address 12.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface f1/0
R2(config-if)#ip address 23.1.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
//配置eigrp
R2(config)#router eigrp 100
R2(config-router)#no auto-summary
R2(config-router)#network 12.1.1.0 0.0.0.255
R2(config-router)#network 23.1.1.0 0.0.0.255
R2(config-router)#exit
R3
R3(config)#interface f0/0
R3(config-if)#ip address 23.1.1.2 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
//配置eigrp
R3(config)#router eigrp 100
R3(config-router)#no auto-summary
R3(config-router)#network 23.1.1.0 0.0.0.255
R3(config-router)#exit
现在我们查看EIGRP的路由表,检查配置是否正确。
R1上:
R2上:
R3上:
检查完毕,基本配置阶段无错误,各设备可相互通信。
手动汇总
手动汇总特性:EIGRP的路由汇总是基于端口来做的。在接口下汇总后,路由器会立即产生一条路由指向Null 0,用来防止产生环路。当最后一条明细条目消失后,汇总路由将自动删除。
以上图拓扑为例,R2的f0/0接口接收到了R1上的三条环回口路由,接收到后并不会直接汇总。当路由信息需要发给邻居R3时,才会在出接口f1/0上进行汇总。
R2(config)#interface f1/0
R2(config-if)#ip summary-address eigrp 100 172.16.0.0 255.255.0.0
R2(config-if)#exit
我们让R3ping172.16.4.1,观察各设备上的路由信息
R2查看路由信息可发现,出现Null0,表示黑洞接口。当要发送数据时,若目的地的IP地址不存在于路由表中,数据报将直接发送到Null0里丢弃。
查看邻居信息:
R3(config)#do show ip eigrp neighbors
IP-EIGRP neighbors for process 100
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 23.1.1.1 Fa0/0 13 02:33:05 827 4962 0 12
负载均衡
EIGRP可以使用通往同一个目的网络的多条路径发送流量,从而变相增加带宽,加快数据的发送,这叫做负载均衡。EIGRP支持在相同开销的路径上进行等价负载均衡和在不同开销的路径上进行非等价负载均衡。
1.等价负载均衡
EIGRP默认支持最多4条等价负载均衡。此外我们还可以使用命令:maximum-paths 修改IP路由协议支持的最大负载均衡条数。当有多条后继路由(开销最少的路径)开销相同时,EIGRP会自动启动等价负载均衡。
基础配置略,配置完成后,R2上的路由信息如下所示。
R2(config)#do sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, FastEthernet1/0
123.0.0.0/24 is subnetted, 1 subnets
D 123.1.1.0 [90/156160] via 23.1.1.2, 00:00:09, FastEthernet1/0
[90/156160] via 12.1.1.2, 00:00:09, FastEthernet0/0
12.0.0.0/24 is subnetted, 1 subnets
C 12.1.1.0 is directly connected, FastEthernet0/0
我们可以看到,去往123.1.1.1 的IP地址的路由条目有两条,因为这两条链路的度量值相同,所以EIGRP自动将这两条链路都写入了路由表并且启用了等价负载均衡。
2.非等价负载均衡
EIGRP默认情况下不开启非等价负载均衡,要想使用需手动开启。
为了确保没有环路,只有可行后继路由器才可以被包含在非等价负载均衡中,EIGRP执行负载均衡的程度是由一个参数variance来决定的,我们通过设置variance值(默认为1)让EIGRP将多条度量不同的无环路由加入到本地的路由表中。
EIGRP会将度量最小的即后继路由直接加到本地路由表中,其他的路由若也想加入到本地路由表中并且参与非等价负载均衡必须满足以下两个条件:
- 路由必须无环,而当此路由是可行后继路由,即宣告距离小于可行距离时,满足无环。
- 最优路径的度量值必须低于可行后继路由器的度量值和本路由器上配置的variance值的乘积
查看接口信息(红色框内为接口带宽)
修改R2上接口的带宽,以此来改变度量值
R2(config)#interface f0/0
R2(config-if)#bandwidth 1000
现在我们再来查看路由信息
可以看到,修改带宽后下一跳从两条变为一条。目前为止,我们算模拟了两条非等价链路。
现在我们来查看链路的具体信息,并据此修改链路,实现非等价负载均衡。
R2(config)#do show ip eigrp topology
IP-EIGRP Topology Table for AS(100)/ID(23.1.1.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply,
r - reply Status, s - sia Status
P 12.1.1.0/24, 1 successors, FD is 2562560
via Connected, FastEthernet0/0
P 23.1.1.0/24, 1 successors, FD is 28160
via Connected, FastEthernet1/0
P 123.1.1.0/24, 1 successors, FD is 156160
via 23.1.1.2 (156160/128256), FastEthernet1/0
via 12.1.1.2 (2690560/128256), FastEthernet0/0
查看路由表可得,23.1.1.2 的metric值为156160,
12.1.1.2的metric值为2690560.
variance值=2690560÷156160=17.22950819672131
因为最优路径的度量值必须低于可行后继路由器的度量值和本路由器上配置的variance值的乘积,所以我们需要将variance的值设置为18 。
R2(config)#router eigrp 100
R2(config-router)#variance 18
查看路由表,可发现,两条链路均出现在路由表中,非等价负载均衡可实现。
R2(config)#do show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, FastEthernet1/0
123.0.0.0/24 is subnetted, 1 subnets
D 123.1.1.0 [90/156160] via 23.1.1.2, 00:00:59, FastEthernet1/0
[90/2690560] via 12.1.1.2, 00:00:59, FastEthernet0/0
12.0.0.0/24 is subnetted, 1 subnets
C 12.1.1.0 is directly connected, FastEthernet0/0
EIGRP的认证
EIGRP只支持密文认证,不支持明文认证。EIGRP的认证同RIP的认证非常相似,其原理和注意事项便不再赘述。
附:RIP认证更新与版本兼容问题
R1(config)#interface f0/0
R1(config-if)#ip authentication key-chain eigrp 100 R1
R1(config-if)#ip authentication mode eigrp 100 md5
这时,在R2上会弹出提示:邻居建立失败
查看邻居信息,可验证R1确实不在邻居列表中。
R2(config)#do show ip eigrp neighbor
IP-EIGRP neighbors for process 100
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 23.1.1.2 Fa1/0 10 02:55:10 30 200 0 8
为R2设置认证,使三台路由器完成连通。
R2
R2(config)#key chain R2
R2(config-keychain)#key 1
R2(config-keychain-key)#key-string cisco
R2(config-keychain-key)#exit
R2(config)#interface f0/0
R2(config-if)#ip authentication key-chain eigrp 100 R2
R2(config-if)#ip authentication mode eigrp 100 md5
R2(config-if)#do show ip eigrp neighbor
IP-EIGRP neighbors for process 100
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
0 12.1.1.2 Fa0/0 12 00:03:03 41 246 0 20
1 23.1.1.2 Fa1/0 13 03:03:56 30 200 0 8
R2(config)#interface f1/0
R2(config-if)#ip authentication key-chain eigrp 100 R2
R2(config-if)#ip authentication mode eigrp 100 md5
R3(config)#key chain R3
R3(config-keychain-key)#key-string cisco
R3(config-keychain-key)#exit
R3(config)#interface f0/0
R3(config-if)#ip authentication key-chain eigrp 100 R3
R3(config-if)#ip authentication mode eigrp 100 md5
R2的f0/0接口配置完成后,因为认证是基于端口的,实际上三台路由器已经连通。但为了严谨,最好还是要将所有接口都设置认证。
默认路由
1.分发静态路由
在GW上
GW(config)#ip route 0.0.0.0 0.0.0.0 100.1.1.1
GW(config)#router eigrp 100
GW(config-router)#redistribute static
//也可以后面跟5K值
GW(config-router)#redistribute static metric 1(带宽) 1(延时) 1(负载) 1(可靠性) 1(MTU)
此时可以在内网的路由器上看到分发下来的默认路由
R1(config)#do show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 23.1.1.1 to network 0.0.0.0
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, FastEthernet0/0
D*EX 0.0.0.0/0 [170/2560002816] via 23.1.1.1, 00:00:57, FastEthernet0/0
2.接口下宣告默认路由
GW(config)#ip route 0.0.0.0 0.0.0.0 f0/0
GW(config)#router eigrp 100
GW(config-router)#network 0.0.0.0
GW(config-router)#exit
此时可以在内网设备上查看到这条默认路由
R1(config)#do show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 23.1.1.1 to network 0.0.0.0
100.0.0.0/24 is subnetted, 1 subnets
D 100.1.1.0 [90/30720] via 23.1.1.1, 00:00:08, FastEthernet0/0
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, FastEthernet0/0
D* 0.0.0.0/0 [90/30720] via 23.1.1.1, 00:00:08, FastEthernet0/0
3.接口下做汇总(最实用的方法)
注:本地汇总默认路由不会覆盖手动配置的0.0.0.0/0 。
GW(config)#interface f1/0
GW(config-if)#ip summary-address eigrp 100 0.0.0.0 0.0.0.0
R1上查看路由表:
R1(config)#do show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is 23.1.1.1 to network 0.0.0.0
23.0.0.0/24 is subnetted, 1 subnets
C 23.1.1.0 is directly connected, FastEthernet0/0
D* 0.0.0.0/0 [90/30720] via 23.1.1.1, 00:00:17, FastEthernet0/0
末节区域
在中心辐射型网络中,一个或多个末节(stub)网络连接到远程设备,该分支设备(运营商)又连接到一个或多个分发设备(数据中心服务器)。IP流量由外向内到达分支设备的唯一路由是通过GW设备。这种类型的配置通常用于WAN拓扑中。该拓扑中,GW设备直接连接到WAN,并且GW可以连接N个分支设备。在中心辐射网络中,分支设备必须将所有的非本地流量转发到GW设备,因此,分支设备不必具有完整的路由表。
使用 EIGRP末节区域路由功能时,需要将GW设备和分支设备配置为EIGRP,并且将分支设备设置为末节。分支设备仅传播指定的路由,配置在核心上做。
基本配置完成后,R1 ,R2和GW因为运行EIGRP的缘故,他们是邻居关系。但事实上R1与R2是数据中心的两台服务器,没有必要相互访问。因此,需要在GW上设置只收不发。
GW(config)#router eigrp 100
GW(config-router)#eigrp stub receive-only
现在查看各设备的路由表,会发现GW上有去往R1 ,R2的路由,而R1和R2上只有去往GW的路由。
//GW上的路由表
GW(config-router)#do show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
12.0.0.0/24 is subnetted, 1 subnets
C 12.1.1.0 is directly connected, FastEthernet0/0
13.0.0.0/24 is subnetted, 1 subnets
C 13.1.1.0 is directly connected, FastEthernet1/0
//R1、R3的路由表
R1(config-router)#do show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
100.0.0.0/24 is subnetted, 1 subnets
C 100.1.1.0 is directly connected, Loopback0
12.0.0.0/24 is subnetted, 1 subnets
C 12.1.1.0 is directly connected, FastEthernet0/0
R1 、R3要想能够访问外网,只需要在设备上手动配置默认路由即可。
路由重分发
在一些大型网络中,往往存在不同的自治区域需要互联的情况。AS号不同的两个EIGRP要想相互通信,只需在中间路由器上配置重分发命令即可。
//GW上进行配置
GW(config)#router eigrp 100
GW(config-router)#no auto-summary
GW(config-router)#network 12.1.1.0 0.0.0.255
//在AS 100中设置重分发到AS 200里,并设置metric值
GW(config-router)#redistribute eigrp 200 metric 100 100 100 100 100
GW(config-router)#exit
GW(config)#router eigrp 200
GW(config-router)#network 13.1.1.0 0.0.0.255
//在AS 200中设置重分发到AS 100中去,并设置metric值
GW(config-router)#redistribute eigrp 100 metric 100 100 100 100 100
GW(config-router)#exit
配置完成,用分支设备 ping 另一台分支设备验证连通性。
均可以ping 通,连通性良好。路由的重分发配置成功。
几条常用的排错命令
show run | begin router eigrp//查看配置文件中eigrp的配置命令
show ip protocols//查看当前路由器运行的eigrp协议状态
show ip route summary//查看eigrp路由汇总状态
show ip eigrp neighbors//查看eigrp邻居状态
show ip eigrp interface//查看各个运行eigrp的接口状态
show ip eigrp interface detail//查看各个运行eigrp的接口详细状态
show ip route eigrp//查看eigrp协议学习到的路由表
show ip eigrptopology//查看eigrp的拓扑表
show ip eigrptopology all-links//查看eigrp完整的拓扑表
show ip eigrptopology 10.1.1.0 255.255.255.0//查看指定的某个网络参数信息
debug eigrp packets//调试eigrp的查询包
debug eigrp fsm//调试eigrp的dual算法调试信息