EIGRP增强型内部网关路由协议(IGP)
EIGRP 增强型内部网络路由协议
RIP对比EIGRP
RIP EIGRP
距离矢量 复合型
最大15跳 最大255跳(可以适用于更大的网络)
只针对跳数 针对带宽、延迟、可靠性、负载、MTU
这里指的带宽是接口的实际带宽
组播更新 组播更新
224.0.0.9 224.0.0.10
周期更新 30S 触发更新,而且是增量更新
管理距离 管理距离
120 90
所以,当RIP 和EIGRP同时出现一个条目的时候,EIGRP有更高的优先级
邻居关系 邻居关系
无 有
EIGRP中引入了邻居的概念
邻居之前使用HELLO包进行沟通,也就是说hello包的主要作用就是建立和维系邻居关系
5S/次,15S还没有收到邻居发过来的hello包,就认为这个邻居死掉了
这里需要注意的是,hello 包是不存在确认的,它不是组播的更新还需要ACK,HELLO包是不需要确认的,只是在那里等,5S一次,收到就认为你活着,如果长时间没收到,那本设备就认为你这个邻居挂了。
组播更新
EIGRP 使用224.0.0.10进行更新,更新过去之后,对端必须给ACK回复确认,如果没有回复ACK,那本端设备会一直发,最多重传16次。
更新部份的区别
RIP EIGRP
全部路由表 增量更新(路由表)
EIGRP中有三张表:
邻居表 neighbors
拓扑表 topology
路由表 ip route eigrp
邻居表:存在着邻居设备,通过show ip eigrp neighbors 查看
拓扑表:存放着邻居发过来的更新条目,以备快速收敛使用,也可以将拓扑表中的条目理解为备胎,在eigrp的主线路DOWN掉之后,如果在拓扑表中有合适的线路,那么不需要重新计算,直接进行切换,这也是eigrp为什么收敛速度快的原因之一
路由表:存放着去往目标网段的最优路径。
1)通过配置相同的自制系统编号,建立邻居关系,hello包负责维系邻居关系
2)邻居关系通过组播进行增量更新,收到的更新放到自己的拓扑表中。
3)在拓扑表中进行计算出最优的路径放到路由表中
进入拓扑表的原则
在一个网络拓扑中,全网运行EIGRP,肯定会存在着备用线路,但这个备用线路能否被EIGRP放到拓扑表中,进行快速切换使用呢?是有一个硬性的要求的。
规则: 备用线路的邻居,到达目标的距离 必须小于主线路的全程,这个条件,叫FC条件,可行性条件
为什么非要放进拓扑表中呢?就是为了能够实现EIGRP的快速收敛,拓扑表中有备用线路,就不用计算了,如果没有,还得重新进行计算,
那EIGRP又使用的是哪种计算方式呢?
DUAL,弥散更新算法
详解如图
此图中所有设备运行EIGRP协议,所有链路带宽为100M,那么肯定会选择上面,R1-R2-R3-3.3.3.3 这样一条路径做为首选
这一点可以通过trace来验证,
但是在R1的拓扑表里,现在是没有去往3.3.3.3的备用链路的
路由表中也只有这样一条去往3.3.3.3的条目
现在将R2的F0/0接口down掉,看会出现什么现象,
在R1上看,会有提示信息,说邻居10.0.0.2 down了,等待时间超时
而在R2上看,同样显示邻居10.0.0.1为down,
而在备选路径上的设备中,开启debug,会看到Query 和Reply的请求与回复包
当然做为被访问的目标网段设备上,也同样可以看到这样的包,
解读:
当主线路DOWN掉之后,由于在R1的拓扑表中没有保存去往3.3.3.3的备用链路,只能进行重新计算,R1问他的邻居(也就是R4),R4收到之后再往下问,问自己的依据R5,R5问R6,R6再问R3。直到找到R3,这个找的过程,称为请求,Query包
找到目标地址后,进行回复,Reply回复包,当回到R1的时候,R1会将这个新的条目添加到自己的拓扑表以及路由表。
有图有真像
原去往3.3.3.3 条目,下一跳10.0.0.2 出口为F0/0
而新的条目则是换了方向的,下一跳为
(486400/460800)=( FD / AD )
486400 : FD 从当前设备到达目标网段的全程最优距离
460800 : AD 从我的邻居到达目标的全程距离
同样,在路由表中也会进行更改
路由表中D为EIGRP的表示方式,因为E被早期的协议给占了(EBGP)因为eigrp使用DUAL算法,所以就使用了D
这里要讲一下,
[90/486400]
90为eigrp的管理距离 EIGRP固定为90
486400为FD,度量值,也可以理解为metric,从当前设备到达目标网段的全程最优距离
以上就是DUAL算法在EIGRP链接发生故障后的运算过程
需要注意的是,按照DUAL的算法,如果没有找到去往3.3.3.3的路,在Query请求后,同样会给一个Reply回复,记住,不管有没有,都会给回复,而回复过后只有两种可能
1 找到目标网段,更新新的条目进拓扑表
2 没找到目标网,删除原条目,去往3.3.3.3,目的不可达
还有一种特殊的情况,
就是当原有链路故障后,会去选择备用链接,而在回复Reply包时,由于链接拥塞,导致这个包没有顺利的从R4发到R1,那么此时R4认为自己发了,也就不会再发了,R1则一直等
原有的最优条目被卡在A的状态上 在拓扑表中
这就是常提到的SIA,stuck in active 卡在活动状态,后续会有SIA的计时器
可以通过show ip eigrp topology 可以查看EIGRP 的拓扑表以及状态
基本配置命令
r1(config)#router eigrp 1
///自制系统号,两端必须一致,邻居关系才能起来
r1(config-router)#no auto-summary
///关闭系统的路由自动汇总功能
r1(config-router)#network 10.0.0.0 0.0.0.255
///宣告自己的网段,
r1(config-router)#network 30.0.0.0 0.0.0.255
///第二个接口的网段
在EIGRP中,一定要加反掩码
r1(config)#
*Mar 1 00:00:50.075: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.0.0.2 (FastEthernet0/0) is up: new adjacency
查看命令
邻居表 show ip eigrp neighbors
拓扑表 show ip eigrp topology
路由表
1、启用EIGRP,定义自制系统号
2、关闭路由自动汇总
3、宣告网段
最后再补充一下
EIGRP路由器,想要交换路由信息,必须是邻居,而建立邻居有以下要求
1)收到hello包,或者是更新ACK,224.0.0.10,hello包是不需要确认的
2)相同的自制系统号
3)相同的度量标准,度量值,两侧要一致
这种引入了邻居概念的路由协议,建立邻居是第一步
回顾EIGRP的相关名词
FD:可行距离,从当前设备到达目标的全程最优距离,[90/FD] 路由表中查看
AD:通告距离,从我的邻居到达目标的全程最优距离 (FD/AD)拓扑表中查看
FC条件(可行性条件):我的邻居到达目标的距离小于当前设备到达目标的全程最优距离 ,也就是AD<FD,
FS:可行后继站,可以放进拓扑表中的条目的设备
后继站:successors,可以理解为eigrp的下一跳设备有几个,拓扑表中查看
EIGRP高级特性
eigrp路由汇总
eigrp认证
eigrp默认路由
Eigrp 非等价负载
Eigrp 末节区域stub
1 eigrp 汇总
eigrp支持CIDR汇总,(也就是超网,之前的RIP是不支持的)
并且eigrp支持VLSM(可变长子网掩码,这一点可以在路由表中看到)
R2进行cidr汇总
R3进行常规汇总
先全都宣告进去,按照正常的方式,
在R1上查看路由表
可以看到有这么多的条目
现开始汇总
R2上
路由条目出接口上配置汇总
R2(config)#inter f0/0 //同样是在接口下
R2(config-if)#ip summary-address eigrp 1 192.168.0.0 255.255.0.0
R3上
R3(config)#inter f0/0
R3(config-if)#ip summary-address eigrp 1 172.16.0.0 255.255.0.0
而这时,再到R1上看下路由表有没有什么变化
只剩下两条了
测试icmp
可以看到当ping 192.168.3.1 的时候直接 提示UUUUU,目标不可达,这是因为在eigrp 汇总的时候,会出现NULL 0
在汇总的路由表里可以看到
在R2-R3上都可以看到,
NULL0 保障机制,防止路由黑洞的产生,
路由转发的规则是
递归查询
最长掩码匹配,
如果没有明细到达指定目的地址,那么直接 进入最后一条,
NULL 0 直接丢弃,并提示地址不可达
2 eigrp认证
eigrp只支持密文认证,明文的方式,你可以配置,但是不生效
Eigrp 邻居身份认证
全网运行EIGRP
宣告网段
R1 10.0.0.0 /24 1.1.1.0 /24
R2 10.0.0.0 /24 2.2.2.0 /24
配置EIGRP 邻居认证,
R1(config)#router eigrp 100
R1(config-router)#no auto-summary
R1(config-router)#network 10.0.0.0 0.0.0.255
R1(config-router)#network 1.1.1.0 0.0.0.255
*Mar 1 00:28:18.667: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 10.0.0.2 (FastEthernet0/0) is up: new adjacency
R2(config)#router eigrp 100
R2(config-router)#no auto-summary
R2(config-router)#network 10.0.0.0 0.0.0.255
R2(config-router)#network 2.2.2.0 0.0.0.255
*Mar 1 00:27:38.623: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 100: Neighbor 10.0.0.1 (FastEthernet0/0) is up: new adjacency
EIGRP 的邻居建立很快
现在开始设置认证(和RIP的基本一样)
1 定义钥匙名称
2 定义钥匙号码
3 定义密码
4 接口调用
5 是否加密
这个EIGRP的认证还比较特殊,你配置好了认证以后,hello包里才包含authencation
如果没有配置是不包含的
R1(config)#key chain ?
WORD Key-chain name
R1(config)#key chain wfy //定义钥匙名字
R1(config-keychain)#key ?
<0-2147483647> Key identifier
R1(config-keychain)#key 1 //定义钥匙号码
R1(config-keychain-key)#key-string wfygadwiqpl3 //配置具体的密码
R1(config-keychain-key)#exit
R1(config-keychain)#exit
R1(config)#inter f0/0 进入接口
R1(config-if)#ip authentication key-chain ?
eigrp Enhanced Interior Gateway Routing Protocol (EIGRP)
R1(config-if)#ip authentication key-chain eigrp ?
<1-65535> Autonomous system number //想要给哪个EIGRP 加密
R1(config-if)#ip authentication key-chain eigrp 100 ?
WORD name of key-chain //钥匙名字
R1(config-if)#ip authentication key-chain eigrp 100 wfy
R1(config-if)#ip authentication mode eigrp 100 md5 //定义加密为密文
R2配置
R2(config)#key chain wfy
R2(config-keychain)#key 1
R2(config-keychain-key)#key-string wfygadwiqpl3
R2(config-keychain-key)#exit
R2(config-keychain)#exit
R2(config)#inter f0/0
R2(config-if)#ip authentication key-chain eigrp 100 wfy
R2(config-if)#ip authentication mode eigrp 100 md5
这时两侧如果配置同样的认证密码,钥匙号,(钥匙名可以不同)就可以进行重新建立邻居了
查看具体的配置
Show run | se key //查询具体的密码
Show run | se mode //查询用的加密方式
之前有朋友问我这样一个问题
如图所示,R1--R2为EIGRP 1
R2--R3为EIGRP 2
两个进程的认证方式都不同,他问我为什么R1的条目可以传递到R3
对于此问题我是这样回答的,
1 EIGRP的认证和邻居关系是密不可分的,都是两两的关系,不会干涉到第三台设备
2 EIGRP的认证通过了,也就等于是可以传递和接收路由条目了,可以视做没有认证一样
3 至于路由为什么会传到R3,我想说,你运行了EIGRP,肯定会给你传啊~
eigrp默认路由
Eigrp 默认路由
R1 :ISP 只配置IP地址即可
R2 :GW 做NAT地址转换 10.0.0.0
R2-R3运行eigrp 100 自制系统号 192.168.1.0
最终使R3能够到达ISP的1.1.1.1
其它的配置不变,最主要的变化是在GW上,
我们都知道在GW上配置NAT地址转换要配置默认路由才可以出去
但是这里的默认路由要将下一跳接口地址,改为本设备的出接口
因为如果不改的话,默认路由是不会被标记到eigrp 内部的 (亲测)
1、路由指出接口配置方式
R2(config)#ip route 0.0.0.0 0.0.0.0 10.0.0.1 //我们先用这个测试一下
R2(config)#inter f0/0
R2(config-if)#ip nat outside
R2(config-if)#inter f0/1
R2(config-if)#ip nat inside
R2(config-if)#exit
R2(config)#access-list 1 permit any
R2(config)#ip nat in so li 1 inter f0/0 overload
R2(config)#router eigrp 100
R2(config-router)#no auto-summary
R2(config-router)#network 192.168.1.0 0.0.0.255
R2(config-router)#network 0.0.0.0
R3(config)#router eigrp 100
R3(config-router)#no au
R3(config-router)#network 192.168.1.0 0.0.0.255
接下来,在R3上来验证刚才的配置,看有没有eigrp 的默认路由
很显然,并没有发生我们想要的去往1.1.1.1的条目,
是不是那条默认路由的问题呢?
我们改一下
R2(config)#no ip route 0.0.0.0 0.0.0.0 10.0.0.1
R2(config)#ip route 0.0.0.0 0.0.0.0 f0/0
将下一跳地址,改为本地出接口
R3
再次验证
D* D* D* D* D* 出现了
找任何地址都去往192.168.1.1
为什么会这样????非要是出接口吗??
2、还有另外一种方法,重分布,将默认路由重分布进EIGRP
就是将出接口的原始默认路由重分布到eigrp 中,让其显示为D*EX
但是要重分布的是static,静态路由,这里要注意一下
配置
R2(config)#ip route 0.0.0.0 0.0.0.0 10.0.0.1 //改成下一跳地址
R2(config)#router eigrp 100
R2(config-router)#no network 0.0.0.0 ///把之前的宣告删除
R2(config-router)#redistribute static metric 100000 10 255 1 1500
带宽 延迟 负载 可靠性 MTU
这样的话,在R3上就可以看到这样一个条目
它的管理距离也是那么的与众不同,
EIGRP 的管理路由是90,而这里的管理距离变成了170
因为这时的eigrp 是一个外部的eigrp ,
内部90
外部 170
还有另外一种方法,手动汇总式的默认路由
R2做正常的NAT部份,默认路由指出去到R1
向内部R3指定汇总的默认路由
R2(config)#inter f0/1
R2(config-if)#ip summary-address eigrp 1 0.0.0.0 0.0.0.0
R2和R3之间运行EIGRP 协议
可以看到,收到了一条D*的路由,下一跳是R2,
然后也可以ping通R1的NAT地址。
Eigrp 非等价负载
EIGRP 非等价负载均衡
在配置之前,首先要弄明白一件事儿~
为什么要配置负载均衡?
如图中所示,如果没有配置任何的负载,那么在R2的f0/0接口不down掉的情况下是不会有任何的数据从s2/0口出去的,因为它是不可能被eigrp 视为优选路径的,这样,也无形的造成了链路的浪费(只是举一个例子,现实中不会有这么大的悬殊的)
Eigrp 的前面配置是一样的,这里简写一下
R1(config)#router eigrp 1
R1(config-router)#no auto-summary
R1(config-router)#network 10.0.0.0 0.0.0.255
R1(config-router)#network 1.1.1.0 0.0.0.255
R2(config)#router eigrp 1
R2(config-router)#no auto-summary
R2(config-router)#network 10.0.0.0 0.0.0.255
R2(config-router)#network 20.0.0.0 0.0.0.255
R3(config-if)#router eigrp 1
R3(config-router)#no auto-summary
R3(config-router)#network 20.0.0.0 0.0.0.255
R3(config-router)#network 1.1.1.0 0.0.0.255
先来查看一下R2的路由表
去往1.1.1.0网段的只有一个条目,下一跳是10.0.0.1,这个没有问题,符合eigrp的选路原则,链路带宽优先,100M,肯定大于1.5M
配置非等价负载均衡,要在中间的路由器,有两个出口的路由器上,图中的R2
配置思路:
Show ip eigrp toplogy ,查看两个条目的FD,可行性距离
(FD/AD)
FD:可行距离:当前设备到目标网络的全程最优距离
AD:通行距离:当前设备的邻居到达目标网络的全程最优距离
这个时候就要计算出两个FD之间的倍数,用2297856除以409600,得到的数是5.6,
那么再设置一个刚才比5.6大的整倍数,所得出的积,也就正好大于2297856了,
那么这个数为6,这样才能实现一种负载均衡,可是即使这样,也是非等价的负载,两条路径 传送的包数量是不一致的,(但是至少S口上也已经跑数据了,比以前闲置要强)
配置如下
R2(config)#no ip cef //一定要关闭CEF才可以
R2(config)#router eigrp 1
R2(config-router)#variance 6 //设置倍数,其实这里写几都一样,也不是按这个走,而是系统会自己进行计算
可以看到这个时候1.1.1.0网段,出现了两条路由,
这也就实现了非等价负载均衡,
具体走数据包的数量 ,也是根据 二者相除的倍数而定。
这个有兴趣的小伙伴可以自己去测试一下,包儿实在是有些多,我就不测试了
那什么是等价呢?
就是两条链路所有的接口数据都是一样的,AD ,FD 都一样,
在路由表中也是显示两个
等价就是这样儿的
Eigrp 末节区域stub
EIGRP STUB区域
R1,为总GW,
R2-R3为分别的IDC-GW,分别都下连着很多的终端,
两个问题引入eigrp stub区域
1 两个IDCGW有必要知道总GW上的所有路由条目吗?要知道有可能此时GW上运行了BGP,有70多万条,什么概念,你一个小小的路由器,直接会被秒杀的
答:没有必要,只要知道外出的条目找它就可以了
2 两个IDCGW之间需要知道彼此的路由条目吗?
答:同样是没有必要的,因为做为IDC,两个GW是相互独立的,不存在相互访问,只允许外部访问它们就可以了
那么这个时候,做为总的GW,它要做的,就是不下发路由条目,只接收路由条目就OK了
配置很简单
在总的GW上面
R1(config-router)#eigrp stub receive-only
//设置区域为只接收不发送
对于两个IDCGW而言,手动写上一条默认路由到总GW即可,(因为现在总的GW不再发送条目,如果在它上面配置eigrp的默认路由是无法传到两台IDCGW上的)
R2(config)#ip route 0.0.0.0 0.0.0.0 12.0.0.1
R3(config)#ip route 0.0.0.0 0.0.0.0 13.0.0.1
在R3(IDCGW)上查看路由表,发现已经没有了EIGRP的条目,
但是eigrp有没有实际的运行呢?
Eigrp的配置还在,因为它要将自己的路由更新发送给总的GW
那在gw上有没有什么变化呢?
可以看到,有这么一条特殊的命令,
所以,当检查eigrp条目没有更新的时候,别忘了检查这一项,(看看有没有只收不发,像那个貔貅一样,只进不出)
---------------------------------------------------
CCIE成长之路 ---- 梅利