EIGRPEnhanced Interior Gateway Routing Protocol )>

增强的内部网关路由协议

EIGRP的特点:

·EIGRPCisco私有的路由协议,采用DUAL(扩散更新算法)。

·EIGRP属于IGP,是Hybrid协议,基于IP Pro 88

·组播、单播更新,组播地址224.0.0.10

·支持等价/不等价的负载均衡。 

·支持VLSM,手工汇总。

·支持多种网络协议(IP/IPX)。

EIGRP为各种协议都维护的3张表:

1)Neighbor Table:

 保存直连的邻居的IP地址,确保直接邻居之间能够双向通信。

2)Topology Table:

 拓扑表中存放着前往目标地址的所有路由。

3)Routing Table:

 从拓扑表中选择到达目标地址的最佳路由放入路由表。


DUAL算法:

扩散更新算法,也叫弥散更新算法

AD(通告距离)-------------邻居通告的到达目的的Metric

FD(可行距离)-------------本路由器到达目的的Metric

successor路由 -------------具有最优Metric值的路由

Feasible successor路由-----符合条件的次优路由


次优路由成为Feasible Successor的条件:也叫可行性条件

 FD of Best Route > AD of Second best Route

    (Successor)


    EIGRP中,路由器会从拓朴表中选出去往特定目的地的最优路由,也称为successor路由,放入路由表,一旦最优路由down掉,EIGRP会马上从拓朴表中找出feasibel successor路由,将其升级为最优路由,并放入路由表,而不用经过计算,这样提高了收敛的速度。

    如果当前路由表中的successor路由down掉后,在拓朴表中又没有备份的路由,EIGRP会向所有直连的邻居发出查询包,进行扩散查询。


RTP(Reliable Transport Protocol)可靠传输协议

用来管理EIGRP报文的发送和接收,实现可靠传输。

所谓可靠传输是指发送有保障的而且报文是有序发送的。


EIGRP中的常用报文:

Hello:用于邻居的发现和恢复。(Multicast)

Update:传递路由更新,仅包含需要的路由条目,当为指定的一台路由器发更新时使用Unicast(P-TO-P) ,当为多台路由器发更新时使用Multicast.(MA)

Query:当找不到Feasible Successor时,发送查询报文(Unicast)

Reply:回应查询报文。(Unicast)

ACK:用来确认Update/Query/Reply (Unicast)


Reliable packets :Update/Query/Reply

Unreliable packets :Hello/ACK


·Hello Address = 224.0.0.10

·Hello Timer 

 5S:≥T1  (1.544Mbps)也有一个随机时间差防止更新同步

 60S:<T1

·Hold Timer = 3 * Hello Timer

·形成邻居关系的必要条件

  1、双方K Value一致。

  2、AS Num一致。

  3、authentication必须一致。

·即使双方的Hello Timer & Hold Timer不一致,也可形成邻居关系。

·SRTT(Smooth Round-Trip Time)平均往返时间:

 从发送3种可靠包,到对方回应ACK的时间。(ms)

·RTO(Retransmission TimeOut):

 重传超时的定时器。

·Queue count  队列数 还在排队等待发送的报文数


16次重传机制:

在EGIRP中,如果一台路由器向邻居发送了一个可靠的报文,是需要邻居回应一个ACK报文的,如果邻居没有回ACK,则会向邻居重传16次,如果邻居还没有回应,就会重置邻居关系。


EIGRP的Metric值计算:

EIGRP的metric值的计算,最多可以用到五个参数,实际上通常只用到两个。 

公式:

EIGRP Metric = 256*(107/BW+DLY/10)

注意:

1、带宽取路由传递路径上的最小带宽值

2、延迟是取路由来的方向的入接口的延迟总和

几种常用接口的带宽和延迟:

Interface  BW(kbps)  DLY(μsec)

Ethernet   10000    1000

FAST          100000      100

G0           1000000000   10

Serial    1544     20000

Loopback   8000000   5000


在完整的计算公式中,每一个参数还要乘上自已的权值:

K1=带宽bandwidth(源和目的之间的最小带宽)    1

K2=负载loading(源和目的之间的最大负载)      0

K3=延迟delay(源和目的之间的延迟总和)        1

K4=可靠性reliability(源和目的之间的最低可靠性) 0

K5=MTU(源和目的之间的最小MTU)              0


<EIGRP>基本配置

R2(config)#router eigrp 90

R2(config-router)#network 12.1.1.0 0.0.0.255

R2(config-router)#network 2.2.0.0 255.255.0.0 (正/反掩码皆可)

R2#show ip protocols 

R2#show ip eigrp interfaces 

R1#show ip eigrp neighbors 

R1#show ip eigrp traffic

R1#show ip eigrp topology             //只能显示successor和feasible successor

R1#show ip eigrp topology all-links   //可显示拓扑表中的所有条目

测试不同AS NUM能不能建起邻居。

测试Hello/Hold Timer不一致能不能建起邻居。


·修改Hello/Hold Timer

R1(config-if)#ip hello-interval eigrp 90 60

R1(config-if)#ip hold-time eigrp 90 180     //记住,hold-time时间是给邻居用的

show ip eigrp interface detail s1/0   //查看接口的hello时间


·修改K值

R3(config)#router eigrp 90

R3(config-router)#metric weights 0 1 1 1 0 0


<自动汇总>

EIGRP在默认是开启auto-summary的,这意味着路由在跨越不同网络边界时,会自动汇总成主类。

router eigrp 90

  no auto-summary  //本命令关闭自动汇总


<手工汇总>

int s1/0

  ip summary-address eigrp 90 20.1.4.0 255.255.252.0  //只能在路由流向的出接口作手工汇总

本地路由器会产生一条特殊路由,这条特殊EIGRP汇总路由的AD值是5

D   20.1.4.0/22 is a summary, 00:00:02, Null0


汇总的特点:

1、本地必须有明细路由,才会从做汇总的接口发出汇总路由。

2、直到明细的最后一条路由消失,汇总才会消失。

3、汇总路由的metric值会取最小的metric值

4、会在做汇总的路由器上产生一条特殊的指向空接口的路由,这条指向NULL0接口的路由是用来防环的

    D  2.0.0.0/8 is a summary, 00:02:30, Null0   

5、仅将本地的路由汇总成主类,对于收到的路由不做汇总,直接发出。

show ip route 172.16.0.0 255.255.0.0  可以看到指向Null0接口的特殊汇总路由的管理距离


<等价负载均衡>

·EIGRP可做等价负载均衡,也可做不等价负载均衡。默认只做等价的。

·EIGRP默认支持4条路径的负载均衡,最大支持16条。

show ip protocols    //可查看EIGRP的负载均衡路径数

router eigrp 90

  maximum-paths 6(最多16条)   //本命令改动负载均衡的路径数


如果多条路由的metric不相等,可以通过修改Metric值来实现等价负载均衡,有以下两种方法:

1、<修改EIGRP接口带宽或延迟>

·通过修改接口的带宽或延迟,可以达到改动路由metric值的目地。

·在路由流向的入口改。

·改延迟时,是以10为单位来修改。比如说想把接口延迟改成2000usec

 则要:

  int e0/0

    delay 200   //输入的值默认会*10,是以10为单位来改的

  show interface s1/0  使用这条命令可以看到接口的带宽和延迟

例一:

动态路由协议之EIGRP_第1张图片

如上图所示:运行EIGRP后,R2可以学到两条3.3.3.0的路由,一条从R3学到,另一条从R1学到。

show ip eigrp topology detail-links 

P 3.3.3.0/24, 1 successors, FD is 409600, serno 6

        via 23.1.1.3 (409600/128256), Ethernet0/0

        via 12.1.1.1 (2809856/2297856), Serial1/0


如果想实现等价负载均衡,可以通过修改E0/0接口的延迟来实现

int e0/0

  delay 9476      //将接口延迟改为94760μS

show ip route

     3.0.0.0/24 is subnetted, 1 subnets

D       3.3.3.0 [90/2809856] via 23.1.1.3, 00:00:08, Ethernet0/0

                [90/2809856] via 12.1.1.1, 00:00:08, Serial1/0



2、<偏移列表>

用这个玩意也可将不同路由的metric值改为一样,用来实现负载均衡


access-list 1 permit 1.1.1.0 0.0.0.0  

router eigrp 90

  offset-list 1 in 3 Serial 1     //本命令只能在原有基础上增加metric值

       (原有Metric + 3)


router eigrp 90

  offset-list 0 in 3 ethernet 0   //从E0接口进来的所有路由的metric值都加3

      (0代表所有网络)


例二:

动态路由协议之EIGRP_第2张图片

如上图所示:运行EIGRP后,R2可以学到两条3.3.3.0的路由,一条从R3学到,另一条从R1学到。

R2#sh ip eigrp topology detail-links 

P 3.3.3.0/24, 1 successors, FD is 409600, serno 6

        via 23.1.1.3 (409600/128256), Ethernet0/0

        via 12.1.1.1 (2809856/2297856), Serial1/0


如果想实现等价负载均衡,可以在R2上使用偏移列表对E0/0接口进来的3.3.3.0的路由增加metric值。

R2(config)#access-list 1 permit 3.3.3.0

R2(config-router)#offset-list 1 in 2400256 e0/0

R2#show ip route

     3.0.0.0/24 is subnetted, 1 subnets

D       3.3.3.0 [90/2809856] via 23.1.1.3, 00:00:24, Ethernet0/0

                [90/2809856] via 12.1.1.1, 00:00:24, Serial1/0



<不等价的负载均衡>

默认情况下EIGRP只支持等价的负载均衡,使用以下命令可实现不等价负载均衡。

通过下面这条命令可设置一个变量,再用这个变量乘以当前successor路由的FD值就能得到一个参考值 

router eigrp 90

  variance 2  

只要当前拓扑表中的feasible successor路由能满足以下条件,就能被放入路由表中,实现不等价负载均衡。

FS's FD < U*Successor's FD(参考值)    U值就是变量值,由variance命令设定(1-128)

注意:做不等价负载均衡的前提是路由必须要先成为Feasible successor ,否则不会被用来做负载均衡

例:

动态路由协议之EIGRP_第3张图片

如上图所示:运行EIGRP后,在R2上可以学到两条13.1.1.0的路由,一条成为successor,一条成为FS。

show ip eigrp topology   

P 13.1.1.0/24, 1 successors, FD is 2195456

        via 23.1.1.3 (2195456/2169856), Ethernet0/0

        via 12.1.1.1 (2681856/2169856), Serial1/0


可以通过设置variance变量实现不等价负载均衡

router eigrp 90

  variance 2

show ip route

     13.0.0.0/24 is subnetted, 1 subnets

D       13.1.1.0 [90/2195456] via 23.1.1.3, 00:00:13, Ethernet0/0

                 [90/2681856] via 12.1.1.1, 00:00:13, Serial1/0



<EIGRP占用带宽>

·默认,EIGRP协议本身的流量最多只占用接口的参考带宽的50%。

 如果没有使用Bandwidth设置带宽,则使用接口默认带宽。

·通过以下命令,可以改动EIGRP占用的带宽值

int s1/0

  ip bandwidth-percent eigrp 90 200   后面的参数为百分比

                            (BW * 200%)

本命令只能show run interface看                 

注意:show interface 时所看到的带宽叫做参考带宽,这个带宽并不是接口的实际带宽,接口的实际带宽是由时钟速率决定的,参考带宽只是用来计算metric值或其它一些应用的。


<EIGRP Authentication>仅支持MD5,不支持明文认证

第一步:

key chain R2                 (本地有效)定义KEY库名为R2

  key 1                       (两端一致)定义KEY号为1

    key-string cisco           定义KEY值为cisco


第二步:

int s1/0

  ip authentication key-chain eigrp 90 R2  //在接口下指定使用哪个密码库


第三步:

int s1/0

  ip authentication mode eigrp 90 md5  //开启认证 


show key chain 

debug eigrp packet


R2(config-keychain-key)#Accept-lifetime 04:00:00 jan 2006 infinite 定时接收

R2(config-keychain-key)#Send-lifetime 04:00:00 jan 2006 04:01:00 jan 2006 定时发送

R2(config-keychain-key)#Send-lifetime 04:00:00 jan 2006 duration 300  有效期300S


<Query>

在广域网链路上,EIGRP的扩散查询机制可能会导致查询范围过大,甚至一些不必要的查询,从而占用多余的带宽。

·以下两种方法可限制EIGRP的查询范围:

 1)Summary   使用路由汇总来解决   

 ·EIGRP的查询有以下特点:

    仅当路由表中有完全匹配的明细条目时,才会传播该查询。

  否则直接回应“网络不可达”。

 2)Stub

 ·通过命令把远程路由器配置成Stub路由器,Stub路由器会向所有邻居发送信息告之自已的状态,其他路由器将不会向Stub路由器发送查询。


R1:

router ei 90

  eigrp stub (默认通告直连&汇总)


stub命令的参数介绍:  

eigrp stub connected     //通告直连路由

eigrp stub summary       //通告汇总路由

eigrp stub redistributed //通告重分布的路由

eigrp stub static        //通告静态路由

eigrp stub receive-only  //只接收不通告

eigrp stub leak-map      //路由泄露


如果stub路由想要将自已学到的路由再传给下一路由器,需要用到leak-map

例:如下图所示,R1为STUB路由器,现在想要将自已的直连路由、汇总路由,以及172.16.1.0的路由传给R2

动态路由协议之EIGRP_第4张图片

R1:

access-list 1 permit 172.16.1.0

route-map CISCO

  match ip add 1


router eigrp 90

  eigrp stub connected summary leak-map CISCO


SIA(Stuck in Active)卡在活动状态

路由器在三分钟内没有收到邻居的回应,就认为路由已进入SIA状态,这时会重置邻居关系.


·导致SIA的常见原因:

 1)查询范围太大

 2)路由器太忙无法回答查询。

 3)路由器之间的链路质量低劣,导致查询包丢失。

 4)某些单向链路失效。


router eigrp 90

  timers active-time [2|disable]

 (SIA计时器,默认是3分钟,超过3分钟就重置邻居关系,避免卡在活动状态)



<被动接口>

·EIGRP中也可以将一个接口设置为被动接口

·被动接口将不收也不发。所以根本无法和对端路由器建立邻居关系。

router eigrp 90

  passive-interface s1/0


<水平分割>

EIGRP中默认也是开启水平分割的

int s1/0

  no ip split-horizon eigrp 90   //在接口上使用这条命令可以关闭水平分割


<EIGRP最大hop数>

在EIGRP路由器上可以设定可用路由的最大跳数。

如果一台路由器收到的路由传递的跳数已超过了自已设定的最大跳数,这条路由将不用也不传。


默认情况下是100,最大可修改为255

router eigrp 90

  metric maximum-hops 255


show ip protocol  本命令可查看


<EIGRP区域生成默认路由>

1)Redistribute Static:

ip route 0.0.0.0 0.0.0.0 serial 0

router eigrp 90

  redistribute static          (默认是按静态路由出接口类型计算Metric)


2)Network 0.0.0.0:

ip route 0.0.0.0 0.0.0.0 serial 0(写下一跳不行,必须写接口)

router eigrp 90

  network 0.0.0.0


3)ip default-network:

全局模式下:

ip default-network 192.168.1.0   //这样就可以把这条路由下发给其它的路由器当做默认路由了


使用本命令要满足以下条件:

1、接口IP地址必须是主类,不能是子网

2、接口必须宣告进EIGRP

3、使用命令下发时也必须写上这个接口的主类网络号


注意:EIGRP中也有default-information 命令,不过这条命令不是用来下发默认路由的,是用来决定本路由器是否要收默认路由,或者是否要传默认路由。而且只对ip default-network命令下发的默认路由起作用。