通过上一章动态路由协议-RIP的内容,我们可以通过部署动态路由协议来使得设备之间自主的传递和学习路由,完成对路由表的构建。但RIP是一款产出时期较早的产物,放在现网环境中有诸多的不适配,如:最大16跳限制、选路原则的片面性,都极大程度上限制了现网环境的扩展性。因此,我们需要引入其它动态路由协议,本章则开始介绍EIGRP。
第一节 EIGRP的基本理论
EIGRP,全称Enhanced Interior Gateway Routing Protocol,中文译为“增强型内部网关路由协议”。此协议的前身为IGRP,IGRP和RIP一样,是处于同一个时期的产物,Cisco将IGRP拿过来做了一个改进(增强),故而得到了EIGRP。
EIGRP在早期为Cisco私有协议,即只有Cisco厂商的设备才可以运行EIGRP。后来Cisco在2013年将这款协议进行了公有化处理(详情见RFC文档RFC7868)。EIGRP基于IP协议,协议号为88。
1.EIGRP的特点:
1.快 EIGRP启用的邻居建立的时间和路由传递的时间都很快
2.可供无类网络使用,支持VLSM或CIDR
3.号称100%无环路(基于DUAL算法)
2.EIGRP的报文类型:
1.Hello报文:用于建立和维护邻居关系
2.Update报文:用于发送和更新路由信息(必须具备邻居关系才会发送)
3.Query报文:查询报文,用于向邻居获取路由信息(当路由丢失,并且没有可行后继才会发送此报文)
4.Reply报文:回复报文,对查询报文的回复
5.ACK报文:对Update、Query、Reply报文进行确认
第二节 EIGRP的基本配置
1.EIGRP基础环境的配置:
(config)#router eigrp AS-number # EIGRP是支持多进程的,需要交互路由信息的路由器运行的EIGRP所处的AS号必须一致 (config-router)#no auto-summary # 关闭自动汇总,防止汇总过大。 (config-router)#network 网络号 通配符/反掩码
Tips:通配符中的0表示匹配,1表示不匹配。因此EIGRP的宣告就出现了两种形式:
1.不精确宣告 network 12.1.1.0 0.0.0.2552.精确宣告(推荐的配置方式) network 12.1.1.1 0.0.0.0 # 宣告IP地址所在的网络,本地需要有12.1.1.1这个接口的IP地址才算宣告有效
2.EIGRP的三张表:
(1)邻居表:
通过EIGRP建立的邻居都可以在这张表象里查看一些具体的信息,命令
Router#show ip eigrp neighbors
H:表明邻居的序号,依次为0,1,2……
Address:邻居的IP地址,代表和谁建立了邻居关系
Interface:本地的哪个接口和Address的邻居建立邻居关系(本地接口编号)
Hold:邻居失效计时器,如果该计时器倒计时结束后,仍然没有收到邻居发送的Hello报文,则认为不再发展邻居关系,进而邻居关系终止。同时,由该邻居路由器传递来的路由全部从当前路由表中移除。
Uptime:邻居从建立完成到目前所持续的时间
(2)拓扑表
拓扑表是EIGRP的一个优势点所在,拓扑表中存放的都是通过EIGRP学习到的路由,最终这些路由条目通过DUAL算法算出最优路径后加入到路由表中
Router#show ip eigrp topology [all-links]
(3)路由表
查看本地路由器通过EIGRP的拓扑表和DUAL算法算出的最优路径加入到路由表的路由
Router#show ip route eigrp
3.EIGRP的四大核心组件:
(1)邻居的发现与恢复机制
Hello报文目的IP地址:224.0.0.10 # 只有加入了这个组播组,才会收到EIGRP的消息。
Hello包的默认发送时间和默认的Hold时间
当链路带宽大于1.544M时,Hello包5s发送一次,Hold时间为15s
当链路带宽小于等于1.544M时,Hello包每60s发送一次,Hold时间为180s。
以上值均为默认值,可做修改。
Router(config)#interface e0/0 # 在接口下进行操作 Router(config-if)#ip hello-interval eigrp 1 x # 这里以EIGRP 1为例,修改的Hello时间为x{1-65535} Router(config-if)#ip hold-time eigrp 1 y # 这里以EIGRP 1为例,修改的Hold时间为y{1-65535}
建议修改Hello时间和Hold时间的时候,也尽量维持原有的3倍关系,即如果Hello时间为2s,则Hold时间可设置为6s
需要注意一下:如果需要更新EIGRP的邻居表的Hold时间,单单修改邻居建立的某一端的Hello间隔时间和Hold时间并不能奏效,需要同时修改邻居建立两端的接口下的Hello间隔时间和Hold时间。
(2)DUAL算法
弥散更新算法/扩散更新算法 目的:选路 术语:
FD(Feasible Distance),可行距离。描述从本地到达目标网络的Metric值
AD(Administrative Distance),通告距离。描述从本地的下一跳路由器到达目标网络的Metric值
FC(Feasible Condition),可行性条件。AD<FDmin,主要作用:防环
S(Successor):后继路由器,拥有到达目标网络的最小Metric值的下一跳路由器
FS(Feasible Successor):可行后继路由器,满足FC条件的下一跳路由器
Metric值的计算方法:
EIGRP一经启用,会伴随K值的存在,K值分别为K1=1,K2=0,K3=1,K4=0,K5=0。
将默认K值代入上述度量值公式中,度量值的计算公式就得到了简化,变成:
参数的具体解释:
带宽:
常见的带宽数值:
Ethernet:以太网接口,10M链路 FastEthernet:快速以太网接口,100M链路 GigabitEthernet:吉比特以太网接口,1000M(1G)链路 Serial:串行接口,1.544M链路
延迟:
常见的延迟数值:
Ethernet:以太网接口,延迟1000usec FastEthernet:快速以太网接口,延迟100usec GigabitEthernet:吉比特以太网接口,延迟10 usec Serial:串行接口,延迟20000usec
负载:
发送/接收负载:1/255表示0负载,255/255表明几乎满负载,该值越低越好
可靠性:
255/255表明100%可靠
MTU(Maximum Transmission Unit):最大传输单元,默认1500字节。
如果是默认K值,计算度量值时只需要使用到带宽和延迟这两个参数即可,但也并不是拿过来可以直接用,需要做适当调整
将上述两个值代入度量值公式进行计算即可,需要注意的是在上述的度量值计算公式中表示的是
,当然也可以是
。
拓展:EIGRP的K值的修改
修改K值可使得路由进行选路时计算度量值时发生变化,但我们一般是不建议修改K值的。
语法:
Router(config)#router eigrp AS-Number Router(config-router)#metric weights 0(默认) K1-Value K2-Value K3-Value K4-Value K4-Value
(3)RTP(Reliable Transport Protocol)
可靠传输协议
Ack报文的格式几乎与Hello报文完全一致。
(4)PDMs(Protocol-Dependent Module)
多协议支持/协议相关模块
我们接触的网络大多数是基于IP的以太网络,但是在网络层除了IP,不乏有其他协议,如IPX、AppleTalk等,EIGRP均支持在这些协议上运行。
4.EIGRP的特性实验
(1)EIGRP的负载均衡
在EIGRP网络中,当出现去往同一个目标网络存在多个下一跳时,称为负载均衡,EIGRP支持等价均衡和不等价负载均衡。
等价负载均衡实验环境:
如上图所示,配置完EIGRP后,在R1上查看EIGRP的路由表得到如下的表象:
如上图路由表所示,去往4.4.4.0条目出现13.1.1.3和12.1.1.2这两个下一跳,并且Metric值相等,这个情况就称之为等价负载均衡。
不等价负载均衡实验环境:
我们将负载均衡实验环境进行一些修改以实现不等价负载均衡的效果,将R1连接R3接口的带宽值调小。如图所示
接口下修改带宽的命令:
R1(config)#interface e0/1 R1(config-if)#bandwidth 1000 # 单位为kbps
修改完后,再去查看R1的EIGRP路由表
此时可以发现,R1去往4.4.4.0路由条目的下一跳由2个变为1个,意味着负载均衡消失了,另一条路径经过DUAL算法选举发现不优,即不加入路由表中,继续存放在拓扑表中做缓存,我们可以通过show ip eigrp topology查看到这条路由
可以发现,有存在下一条路由条目,但由于FD值比435200大没有加入到路由表中来。想要加入路由表实现不等价负载均衡的方式也比较简单,就是借助负载均衡因子
第一步:通过路由表查看FDmin 在此处是435200 第二步:通过拓扑表查看不是最优路径的Metric 在此处是2739200 第三步:计算负载均衡因子的值 不是最优路径的Metric/FDmin=负载均衡因子 得到的结果需要向上取整
在此处就是2739200/435200 = 6.294117647058823,向上取整为7。
因此,只需要将负载均衡的因子的值调整到7即可。
语法:
R1(config)#router eigrp AS-Number R1(config-router)#variance 7
调整完成后,再次查看R1的EIGRP路由表
可以发现在路由表中去往4.4.4.0有两个下一跳且Metic值不等,我们就称这种现象为不等价负载均衡。
(2)EIGRP的汇总
汇总的目的是为了减小路由条目,减少路由器维护路由条目的设备资源,EIGRP的汇总分为自动汇总和手动汇总,自动汇总为“auto-summary”,但常常因为其汇总过大而被诟病、摒弃,故如果想要实现较为精确的汇总,则建议使用手动汇总。
手动汇总的步骤:
(1)查看待汇总后的网络号,计算汇总后的网络号
192.168.000000 00.0/24 192.168.000000 01.0/24 192.168.000000 10.0/24 192.168.000000 11.0/24
从红色部分开始不一致,则将空红色部分及往后的位置为主机位,即得到网络号192.168.0.0/22
(1)确定部署位置是哪个接口
部署的位置需要有这四条明细路由,如在R1上部署
(2)在接口上部署手动汇总
可以批量在接口上部署汇总,如在R1的E0/0和E0/1口上都部署汇总
语法:
R1(config)#int ran e0/0-1 R1(config-if-range)# ip summary-address eigrp AS-Number 192.168.0.0/22
(3)EIGRP的末节路由器
如果是EIGRP网络末端的EIGRP路由器,则无需再向身后连接交换机或者终端的网络发送EIGRP的查询报文,以此减少网络带宽消耗。
语法:
Router(config)#router eigrp AS-Number Router(config-router)#eigrp stub # 只发送直连和汇总路由 默认行为为只发送直连路由和汇总路由,还可以有其它行为 Router(config-router)# eigrp stub connected # 只发送直连路由 Router(config-router)# eigrp stub summary # 只发送汇总路由 Router(config-router)# eigrp stub receive-only # 只接收但不发送路由 Router(config-router)# eigrp stub redistributed # 只通告被重分发进EIGRP进程的路由 Router(config-router)# eigrp stub static # 只通告静态路由
(4)EIGRP的被动接口
对于RIP协议来说,如果将某个接口置为被动接口,则这个被动接口只收不发RIP消息。而对于EIGRP协议来说,如果将某个接口置为被动接口,则EIGRP路由器不会从被动接口发送路由信息,也不会从被动接口接收路由信息。(既不收也不发)
被动接口的语法:
Router(config)#router eigrp AS-Number Router(config-router)#passive-interface eX/y # 将某一个接口置为被动接口 Router(config-router)#passive-interface default # 将所有运行EIGRP的接口都设置为被动接口
(5)EIGRP的认证
EIGRP对邻居关系进行认证,认证通过继续发展邻居关系传递路由信息等,认证不通过则邻居关系中断。EIGRP的认证只支持密文认证类型。
配置语法:
第一步:配置钥匙链 RouterA(config)#key chain Name # Name两端可以不一致 RouterA(config-)#key 1 # key-id值必须相同 RouterA(config-)#key-string cisco # 配置密钥,必须相同 第二步:接口下调用钥匙链 RouterA(config)#interface eX/y RouterA(config-if)#ip authentication mode eigrp AS-Number md5 # 为EIGRP启用MD5密文认证 RouterA(config-if)#ip authentication key-chain eigrp 1 Key-chain-Name # 关联先前创建好的钥匙链
(6)EIGRP的重分发
由于不同路由协议的度量标准不同,因此在进行重分发时,需要指定metric的初始值,(入乡随俗)
例如:将通过RIP路由协议学习到的路由带入到EIGRP进程中来
Router(config)#router eigrp AS-Number Router(config-router)#redistribute rip metric 1000 100 255 1 1500 # 跟的参数分别为带宽、延迟、可靠性、负载、MTU,这是一组Cisco官方给定的推荐值,可根据实际情况进行修改。
(7)EIGRP的下放默认路由
假设EIGRP网络中有这样一台设备作为整个网络的出口,那是需要做默认路由来匹配公网上的路由条目的,同时需要下发默认给其它EIGRP路由器,则可以使用EIGRP的下放默认路由功能,EIGRP提供两种下发默认路由的方式
(1)重分发
默认路由属于是一种特殊的静态路由,实质上还是静态路由,因此可以把该路由通过重分发的方式带入到EIGRP进程中来
语法:
Router(config)#router eigrp AS-Number Router(config-router)#redsitribute static # 因为静态路由无Metric值概念,所以就不会出现度量标准不同的情况,因此可以不加Metric值
(2) 宣告本地所有的网络
(config-router)#network 0.0.0.0
此方法亦可以实现下放默认路由,但不是很推荐。