<EIGRP(Enhanced Interior Gateway Routing Protocol )>
·EIGRP是Cisco私有的路由协议,采用DUAL(扩散更新算法)。
·EIGRP属于IGP,是Hybrid协议,基于IP Pro 88。
·组播、单播更新,组播地址224.0.0.10
·支持等价/不等价的负载均衡。
·支持VLSM,手工汇总。
·支持多种网络协议(IP/IPX)。
EIGRP为各种协议都维护的3张表:
1)Neighbor Table:
 确保直接邻居之间能够双向通信。
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)
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
·针对3种可靠包最大重传16次,如果16次还没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  队列数 还在排队的报文数
EIGRP的Metric值计算:
公式:
EIGRP Metric = 256*(107/BW+DLY/10)
   [BW(min) / DL (sum)]
K1=带宽bandwidth(源和目的之间的最小带宽)    1
K2=负载loading(源和目的之间的最大负载)      0
K3=延迟delay(源和目的之间的延迟总和)        1
K4=可靠性reliability(源和目的之间的最低可靠性) 0
K5=MTU(源和目的之间的最小MTU)              0
注意:
1、带宽取路由传递路径上的最小带宽值
2、延迟是取路由来的方向的入接口的延迟总和
几种常用接口的带宽和延迟:
Interface  BW(kbps)  DLY(μsec)
Ethernet   10000    1000
FAST          100000      100
Serial    1544     20000
Loopback   8000000   5000
<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时,跨越不同网络边界时,还是会汇总成主类。
所以:R1(config-router)#no auto-summary  本命令关闭自动汇总
·Eigrp在summary有如下特点:
 1)会在做汇总的路由器上产生一条特殊的指向空接口的路由
    D  2.0.0.0/8 is a summary, 00:02:30, Null0
   (本地汇总成主类指向Null0)
     这条指向NULL0接口的路由是用来防环的
 2)仅将本地的路由汇总成主类,对于收到的路由不做汇总,直接发出。
show ip route 172.16.0.0 255.255.0.0  可以看到指向Null0接口的特殊汇总路由的管理距离
<手工汇总>
R2(config-if)#ip summary-address eigrp 90 20.1.4.0 255.255.252.0
   (在路由流向的出接口作)
本地会产生:D   20.1.4.0/22 is a summary, 00:00:02, Null0
这条特殊EIGRP汇总路由的AD值是5
汇总的特点:
1、本地必须有明细路由,才会从做汇总的接口发出汇总路由。
2、直到明细的最后一条路由消失,汇总才会消失。
3、汇总路由的metric值会取最小的metric值

<等价负载均衡>
·EIGRP可做等价负载均衡,也可做不等价负载均衡。默认只做等价的。
·EIGRP默认支持4条路径的负载均衡,最大支持16条。
R1#show ip protocols    这条命令可以查看EIGRP的负载均衡路径数
R1(config)#router eigrp 90
R1(config-router)#maximum-paths 6(最多16条)   本命令改动负载均衡的路径数
如果多条路由的metric不相等,可以通过修改Metric值来实现等价负载均衡,有以下两种方法:
1、<修改EIGRP接口带宽或延迟>
·通过修改接口的带宽或延迟,可以达到改动路由metric值的目地。
·在路由流向的入口改。
·改延迟时,如果想把延迟改成2000usec,
 则要R3(config-if)#delay 200 (/10)  输入的值默认会*10
show interface s1/0  使用这条命令可以看到接口的带宽和延迟
例:
 
如上图所示:运行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
如果想实现等价负载均衡,可以通过修改E0/0接口的延迟来实现
R2(config-if)#delay 9476      将接口延迟改为94760μS
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:08, Ethernet0/0
                [90/2809856] via 12.1.1.1, 00:00:08, Serial1/0
2、<偏移列表>
用这个玩意也可将不同路由的metric值改为一样,用来实现负载均衡
R3(config)#access-list 1 permit 1.1.1.0 0.0.0.0 
R3(config-router)#offset-list 1 in 3 Serial 1 本命令只能在原有基础上增加metric值
              (原有Metric + 3)
R3(config-router)#offset-list 0 in 3 ethernet 0 从E0接口进来的所有路由的metric值都加3
             (0代表所有网络)
例:
 
如上图所示:运行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值就能得到一个参考值
R3(config-router)#variance 2 
只要当前拓扑表中的feasible successor路由能满足以下条件,就能被放入路由表中,实现不等价负载均衡。
FS's FD < U*Successor's FD(参考值)    U值就是变量值,由variance命令设定(1-128)
注意:做不等价负载均衡的前提是路由必须要先成为Feasible successor ,否则不会被用来做负载均衡
例:
 
如上图所示:运行EIGRP后,在R2上可以学到两条13.1.1.0的路由,一条成为successor,一条成为FS。
R2#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变量实现不等价负载均衡
R2(config)#router eigrp 90
R2(config-router)#variance 2
R2#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占用的带宽值
R1(config-if)#ip bandwidth-percent eigrp 90 200 后面的参数为百分比
                                           (BW * 200%)
本命令只能show run interface看
                 
注意:show interface 时所看到的带宽叫做参考带宽,这个带宽并不是接口的实际带宽,接口的实际带宽是由时钟速率决定的,参考带宽只是用来计算metric值或其它一些应用的。
------------------------------------------------------------------------------------
<EIGRP Authentication>仅支持MD5,不支持明文认证
第一步:
R2(config)#key chain R2 (本地有效)定义KEY库名为R2
R2(config-keychain)#key 1(两端一致)定义KEY号为1
R2(config-keychain-key)#key-string cisco  定义KEY值为cisco
第二步:
R2(config-if)#ip authentication key-chain eigrp 90 R2  在接口下指定使用哪个密码库
第三步:
R2(config-if)#ip authentication mode eigrp 90 md5  开启认证
R1#show key chain
R1#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路由器发送查询。
R3(config)#router ei 90
R3(config-router)#eigrp stub (默认通告直连&汇总)
    (在配置文件中会自动变成 eigrp stub connected summary )
R3(config-router)#eigrp stub connected (通告直连路由)
R3(config-router)#eigrp stub summary (通告汇总路由)//本地自己出接口做的汇总
R3(config-router)#eigrp stub redistributed (通告重分布的路由)
R3(config-router)#eigrp stub static (通告静态路由)
R3(config-router)#eigrp stub receive-only (只接收不通告)
SIA(Stuck in Active)卡在活动状态
路由器在三分钟内没有收到邻居的回应,就认为路由已进入SIA状态,这时会重置邻居关系.
·导致SIA的常见原因:
 1)查询范围太大
 2)路由器太忙无法回答查询。
 3)路由器之间的链路质量低劣,导致查询包丢失。
 4)某些单向链路失效。
R1(config-router)#timers active-time [2|disable]
 (SIA计时器,默认是3分钟,超过3分钟就重置邻居关系,避免卡在活动状态)
SIA也会导致一些问题,改进SIA-query 和 SIA-Reply
<被动接口>
·EIGRP中也可以将一个接口设置为被动接口
·接口将不收发Hello包。所以对于物理接口来说则根本无法和对端路由器建立邻居关系
R1(config-router)#pa  ssive-interface loopback 0 

<水平分割>
EIGRP中默认也是开启水平分割的(距离矢量路由协议默认都开启)
Router(config-if)#no ip split-horizon eigrp 90 在接口上使用这条命令可以关闭
<EIGRP最大hop数>
在EIGRP路由器上可以设定可用路由的最大跳数。
如果一台路由器收到的路由传递的跳数已超过了自已设定的最大跳数,这条路由将不用也不传。
默认情况下是100,最大可修改为255
R1(config-router)#metric maximum-hops 255
show ip protocol  本命令可查看

<EIGRP区域生成默认路由>
1)Redistribute Static:
R1(config)#ip route 0.0.0.0 0.0.0.0 serial 0
R1(config)#router eigrp 90
R1(config-router)#redistribute static
               (默认是按静态路由出接口类型计算Metric)
EX*   0.0.0.0/0 [170/2707456]
2)Network 0.0.0.0:
R1(config)#ip route 0.0.0.0 0.0.0.0 serial 0(写下一跳不行,必须写接口)
R1(config)#router eigrp 90
R1(config-router)#network 0.0.0.0
D*   0.0.0.0/0 [90/2707456]
3)ip default-network:(cisco私有特性)
R1(config)#ip default-network 192.12.1.0(写成主类)
这样就可以把这条路由下发给其它的路由器当做默认路由了
使用本命令要满足以下条件:
1、接口IP地址必须是主类
2、接口必须宣告进EIGRP
3、使用命令下发时也必须写主类网络号