梅利333

从无到有,自有至精

导航

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 包是不存在确认的,它不是组播的更新还需要ACKHELLO包是不需要确认的,只是在那里等,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的条目

 

 

 

 现在将R2F0/0接口down掉,看会出现什么现象,

 

 

 

 在R1上看,会有提示信息,说邻居10.0.0.2 down了,等待时间超时

 

 

 

 而在R2上看,同样显示邻居10.0.0.1down,

 而在备选路径上的设备中,开启debug,会看到Query Reply的请求与回复包

 

 

 

当然做为被访问的目标网段设备上,也同样可以看到这样的包,

 

 

 

 

 

 解读:

 当主线路DOWN掉之后,由于在R1的拓扑表中没有保存去往3.3.3.3的备用链路,只能进行重新计算,R1问他的邻居(也就是R4,R4收到之后再往下问,问自己的依据R5R5R6,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 从我的邻居到达目标的全程距离

 

 

 

 同样,在路由表中也会进行更改

路由表中DEIGRP的表示方式,因为E被早期的协议给占了(EBGP)因为eigrp使用DUAL算法,所以就使用了D

 

 

 

 这里要讲一下,

 [90/486400]

 90eigrp的管理距离 EIGRP固定为90

 486400FD,度量值,也可以理解为metric,从当前设备到达目标网段的全程最优距离

 

以上就是DUAL算法在EIGRP链接发生故障后的运算过程

 

需要注意的是,按照DUAL的算法,如果没有找到去往3.3.3.3的路,在Query请求后,同样会给一个Reply回复,记住,不管有没有,都会给回复,而回复过后只有两种可能

1 找到目标网段,更新新的条目进拓扑表

2 没找到目标网,删除原条目,去往3.3.3.3,目的不可达

 

还有一种特殊的情况,

就是当原有链路故障后,会去选择备用链接,而在回复Reply包时,由于链接拥塞,导致这个包没有顺利的从R4发到R1,那么此时R4认为自己发了,也就不会再发了,R1则一直等

原有的最优条目被卡在A的状态上 在拓扑表中

 

这就是常提到的SIAstuck 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包,或者是更新ACK224.0.0.10hello包是不需要确认的

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--R2EIGRP 1

          R2--R3EIGRP 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能够到达ISP1.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

 

R2R3之间运行EIGRP 协议

 

 

 可以看到,收到了一条D*的路由,下一跳是R2,

然后也可以pingR1NAT地址。

 


Eigrp 非等价负载

 

EIGRP 非等价负载均衡

 

 

 在配置之前,首先要弄明白一件事儿~

为什么要配置负载均衡?

如图中所示,如果没有配置任何的负载,那么在R2f0/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成长之路  ----  梅利

 

posted on 2020-07-14 21:19  梅利333  阅读(806)  评论(0编辑  收藏  举报