EIGRP:Enhanced Interior Gateway Routing Protocol,增强内部网关路由协议,由IGRP协议发展而
来,属于Cisco的私有路由协议,不过目前思科已经将其开放。使用EIGRP协议组建网络,路由器配置非常
简单,它没有复杂的区域设置,也无需针对不同网络接口类型实施不同的配置方法。使用EIGRP协议只需使
用router eigrp命令在路由器上启动EIGRP路由进程,然后再使用network命令使能网络范围内的接口即
可。EIGRP属于混合型路由协议,包含了Distance-Vector与Link-State的特性。EIGRP与相邻的Router
成为Neighbor,并会定时检查它们的状态,同时EIGRP采用Distance-Vector去计算网络的Distance。
基本配置
我们以下图为例,来做一个EIGRP路由的基本设置,如下图R1与R2之间的网络为100.101.1.0/24,R2与R3
之间的网络为70.202.1.0/24。现在我们在这三台Router上都启用EIGRP。
1、首先配置各接口的IP地址,例如下图:
interface e0/0
ip address 100.101.1.2 255.255.255.0
interface e0/1
ip address 70.202.1.2 255.255.255.0
2、在各Router上配置EIGRP,如下图所示在R2上配置EIGRP,注意在同一个AS内的EIGRP Router,其AS编
号要相同。
router eigrp 1
network 100.101.1.0
network 70.202.1.0
auto-summary
3、配置完成后,确认两个网络是否已经互通。
4、查看Neighbor是否成功建立
show ip eigrp neighbors
关于Neighbors的状态
● H:neighbor的编号,没有特别意义,只是一个编号,H应该是Hop的缩写。
● Address: neighbor的IP地址。
● Interface:neighbor的Hello Message是从哪个Interface收到的。
● Hold:包括两个timer,Hello Timer及Hold Timer,默认Hello是5秒,Hold是15秒,也就是说EIGRP
Router会每隔5秒发送一次Hello Message,如果收到的话就继续维持neighbor关系,如果超过15秒都没有
收到Hello Message,就会中止neighbor关系,所以HoldTime从15秒开始倒计时,每次收到新的Hello Me
ssage后再重新开始计时。可以使用以下命令对这两个Timer进行修改,注意如果要修改这两个值,要在成为
neighbor的两个Router上都进行修改。如下图,将Hello Timer改为10,Hold Timer改为30.
ip hello-interval eigrp 1 10
ip hold-time eigrp 1 30
● Uptime:Neighbor关系已经维持了多久。
● SRTT:Smoothed round-trip time,Router在收到EIGRP报文后会回传一个ACK。
● RTO:Retransmission Timeout,如果没有收到ACK,RTO使用SRTT来计算重新传送的时间。
● Q Cnt:Query Count,是指有多少EIGRP报文在排队等待传送,此值通常为0才正常。如果数值很大,说
明EIGRP报文无法发送,需要检测网络。
● Seq Num:最后收到EIGRP报文的顺序编号,这个值会越来越大。
Authentication认证
1、EIGRP支持在Neighbor的Interface之间设置密码,以达到安全的要求,这样可以避免未授权的Router加
入到网络从而产生网络安全事件,比如非法入侵或非法监听。设置EIGRP的密码分两步,设定Router的Key
Chain和接口的Key Chain及MD5加密。分别在neighbor的两个Router上做如下设置例如:
R1(config)# key chain Auth
R1(config-keychain)# key 1
R1(config-keychain-key)#key-string test
2、在接口上配置key Chain和MD5加密
R1(config)# int e0/0
R1(config-if)# ip authentication key-chain eigrp 1 Auth
R1(config-if)# ip authentication mode eigrp 1 md5
3、查看EIGRP的认证状态
show ip eigrp interfaces detail
Metric
1、EIGRP采用混合的度量值计算方式,综合考虑带宽、延迟、可靠性、负载、MTU这几个因素。EIGRP使用
一个长度为32bit的metric值,具体算法如下:
Metric=[K1*BW*256+(K2*BW)/(256-Load)+K3*delay*256]*[K5/(reliability+K4)]
这个计算公式看起来非常复杂,不过公式中的K1、K2、K3、K4、K5通常都是预设值,也很少会对这些K值进
行更改,默认K1=1、K2=0、K3=1、K4=0、K5=0。套用这些默认值后,公式就简化了许多:
Metric=(BW*256+delay*256),最终简化为(BW+delay)*256
公式中的BW=10^7/接口实际BW,公式中的delay=接口实际delay/10
2、注意,这里所说的BW是整条path里面BW最小的一段,而delay则是path里每一段的总和。我们还是以上面
的拓扑为例,在R3中添加L0接口,设置IP为3.3.3.3/24。
3、首先我们查看R3的EIGRP Topology,FD值就是Metric,可以看到到达3.3.3.0/24这个网络的Metric是
128256。
4、这个值是怎么算出来的呢,我们套用前面提到的公式:(BW+delay)*256,所以先查看一下L0接口的BW
和delay各是多少。使用命令:show int l0 include BW进行查看,可以看到接口的DLY=5000 usec,
BW=8000000Kbit/s。
换算一下:
● BW=10^7/8000000=1.25,四舍五入后等于1
● Delay=5000/10=500
● Metric=(1+500)*256=128256,这样就算出了Metric。
5、我们再从R2上看一下到3.3.3.0/24的Metric是409600,从R2到R3要经过e0/1接口,所以我们要看一下
e0/1的接口BW和delay各是多少,然后再进行计算。从R2的e0/1到R3,再从R3到L0到达3.3.3.0/24网络,
BW最小的一段是R2的e0/1,所以BW是10000K,Delay的总和是5000+1000=6000。于是就可以计算出:
● BW=10^7/10000=1000
● Delay=6000/10=600
● Metric=(1000+600)*256=409600
EIGRP的路径选择
在明白了Metric之后,还要知道Router如何通过Metric来进行路径选择,首先要了解几个概念:
AD(Advertised Distance)
AD是指neighbor要去的目的地的Metric,如下图,这里假设L0是目的地,R3到达L0的Metric是100,所以
R3告诉R2它要到达的目的地是100,所以R2到达目的地的AD就是100。R2到达R3的Metric是200,所以R2再
告诉R1它要到达的目的地是200+100=300,所以R1去目的地的AC就是300。
Distance
Distance是neighbor的AD加上要到达这个neighbor的Metric,如下图,R2要到达目的地的Distance就是
100+200=300。R1到达目的地的Distance就是300+300=600。
Feasible Distance(FD)
上图中R1至达目的地只有一条路径可走,那么如果有多条路径可以到达目的地时,EIGRP是如何选择路径的
呢,我们以下图为例,假设目的地为L0:7.7.7.7/24,R1有3条路径可以到达L0,EIGRP会选择Distance最
小的路径到达目的地,这条Distance最小的路径就是FD(Feasible Distance)。
当存在多条可达路径时,EIGRP利用AD和FD来决定Successor和Feasible Successor。
● Successor: 可以理解为最佳路径,也就是Distance最小的路径。
● Feasible Successor: 所有AD少于FD的路径都会成为Feasible Successor,Feasible Successor会
成为Successor的备份路径,当Successor的路径出现问题不可用时,会由Feasible Successor进行顶替,
从而保证路由畅通。
1、如上图的拓扑,首先在R1上查看Topoloty Table和Route Table。要到达7.7.7.7一共有3条路径(下
图红框),括号内的数值分别为这条路径的Distance和AD。从下图中可以看到这三条路径的Route Dista
nce都是相同的,所以EIGRP把这三条路径都选为了Successors并放到了Route Table之中。这时到达目的
地的流量就会通过Load Balance分配到这三条路径上。
2、现在我们将R3和R4的e0/1的Delay调高。调整后这两条路径的Distance和AD都会改变。R3中设置为
delay=110,R4中设置Delay=250。
3、我们再R1上查看Topoloty Table和Route Table,可以看到到达7.7.7.7只有一个Successor了,也就
是1.1.1.2这条路径,但是2.2.2.2也仍然保留在route table中是因为它的AD比FD小,所以它成为了Feas
ible Successor。3.3.3.2这条路径由于AD比FD大,所以被移除掉了。
4、EIGRP只会把成为Successor的的路径放到Route Table中,如果要查看所有路径的Distance和AD,可以
使用如下命令:
show ip eigrp topoloty all-links
5、现在从R1到7.7.7.7只有一条路径,也就是1.1.1.2这条路径,2.2.2.2处于备份状态,如果活动路径断
掉,备份路径就会立即进行接替。我们将R2的端口Shutdown后,可以看到路由路径立即从1.1.1.2切换到了
2.2.2.2。
6、如果这两个路径都断掉,也就是Successor和Feasible Successor都断掉,路由器会发出Query给连接
的neighbor查找还有没有可以到达7.7.7.7的路径,这时之前被block掉的那条路径,也就是3.3.3.2就会
成为新的路由路径。
Variance非等价负载均衡
1、EIGRP允许使用Metric不同的路径来做负载均衡,EIGRP只能将拓朴数据库中的备用链路放入路由表执行
负载均衡,拓朴数据库中可能有多条备用链路,而且多条链路的Metric值也可能各不相同,当启用非等价负
载均衡时,需要定义什么样的Metric范围可以用来负载均衡,这需要通过控制Variance值来控制。Varian
ce值默认为1,也就是不执行非等价负载均衡,但会执行等价负载均衡。Variance是一个倍数,意思是允许
FD的多少倍以下Distance的Route进行Load Balance。
2、如下图有2条路径可以到达7.7.7.7,由于Variance默认值为1,因此虽然有两条路径,但是只有Distan
ce 435200这条路径可用。
3、现在我们把Variance设置为2,由于FD=435200,FD*Variance=435200*2=870400,因此只要是Dista
nce小于870400的路径都可以加入到Route Table。设置完成后可以看到Feasible Successor已经加入到
了路由表中。另外,需要注意非的是等价负载均衡并不是平均分配流量比例的,而是按Metric的大小进行分
配,Metric最小的路径会分配最多的流量,Metric值最大的路径分配的流量最小。
Summarization汇总
EIGRP的汇总分为:自动汇总(auto-summary)和手动汇总(ip summary-address)。
● 自动汇总(auto-summary)
通过自动汇总,可以达到减小路由表,减少路由更新所产生的流量的效果,自动汇总在网络的边界,将子网
汇总成一个有类的网络,默认情况下自动汇总是默认开启的。自动汇总,只对内部路由生效 内部路由就是
EIGRP协议宣告的子网,外部网络就是通过重分布等其他方式进入EIGRP协议的路由条目。
● 手动汇总(ip summary-address)
EIGRP手动汇总是将路由汇总后发出去,是对出去的路由生效,而不是对进来的路由生效。手动汇总可以基于
接口的配置汇总,当在接口做了人工汇总以后,路由器将创建一条指向null0口的路由,这样做是为了防止路
由循环。当汇总之前的路由down掉以后,汇总路由将自动从路由表里被删除。
1、我们以下图中的拓扑为例,来看一下EIGRP的汇总是如何工作的,现在4个Router中都没有开启自动汇总
auto-summary。
2、首先看一下R3和R4的路由表,可以看到在R4的路由表中,172.16.13.0与172.16.23.0这两个网络是分开
两条路由显示的。
3、现在我们在R3中以手动汇总的方式将这两条路由汇总成一条
ip summary-address eigrp 1 172.16.0.0 255.255.224.0
4、再次查看R3的路由表,可以看到R3增加了一条汇总路由并指向Null0,其作用是防止发生路由循环
(Routing Loop),有了这条路由,所有目的地是172.16.0.0/19的数据包如果找不到路径的话就会被指
向Null0丢弃掉。
5、R4从R3收到汇总路由172.16.0.0/19,原来两条路由就变成了一条。
6、下面我们再来看一下自动汇总(Auto Summary)。首先在R3上将手动汇总关掉。然后设置为自动汇总。
7、可以看到EIGRP自动使用了prefix “/16”来做汇总,而没有使用我们设置的”/24”,这是因为自动汇总
是按照IP地Class来使用prefix的,172.16.0.0属于B类地址,所以就会使用prefix “/16”来做汇总。
8、在R4上查看路由表,可以看到R4也更新了这条自动汇总的路由。
Query and Reply(查询与回复)
前面我们介绍过EIGRP使用Feasible Successor的机制来保证路由的可用性,一旦Successor现问题,会使
用Feasible Successor进行顶替,但是如果Feasible Successor也现问题不可用,或者根本就没有Feasi
ble Successor的情况下,EIGRP是如何运作的呢?当发生前面说的这种情况时,EIGRP是不会直接罢工休息
的,而是会先去寻找有没有其它的可用路径,具体办法就是EIGRP会向相邻的neighbor发送Query Message
查询是否有到达目的地的方法,当一个Router收到此查询后,如果它有到达目的地的路径,就会使用Reply
Message进行回复,如果它也没有,它会向和它相邻的neighbor转发此查询,就这样一路查询下去,最后将
查询结果回复给发出查询的Router。
1、如上图:假设R1现在有一条去172.16.20.0/24的路由,经过R2与R3,但是现在这条路由突然中断了,于
是会马上用Feasible Successor进行顶替,也就是经过R4与R5的这条路径,首先查看R1的路由表,可以看
到R1有两条去172.16.20.0/24的路由,Sucessor是经过R2这条,经过R3这条为Feasible Successor。
2、现在我们将R6的e0/1端口shutdown,来模拟R3这条路径断掉。在R1上再次查看路由表,可以看到去172.
16.20.0/24的路由立即切换到了R4这条路径。
3,现在我们将R6的e0/0端口也showdown,这时R1已经没有去往172.16.20.0/24的可用路由了,此时R1
会会向R7发出Query Message查询是否有到达目的地的路径,由于R7没有到达目的地的路径,R7会询问R8
是否有到达目的地的路径,R8同样没有,于是最终回复R1没有可达路径,于是这条路由最终在R1中被删除。
如下图R1中已经没有到达172.16.20.0/24的路由,Feasible Successor也被从路由表中移除掉了。
Stub
Query and Reply机制产了一个问题,就是如果EIGRP网络很庞大,路由等待查询回复结果的时间就会变
的很长。因此,如何控制查询的边界范围就十分重要,在一些不必要的地方免除查询,从而减少Query Mes
sage。这里就需要用到EIGRP的Stub功能,如下图,R7与R8处于一个独立的网络中,并且没有到达172.16.
20.0/24网络的路径,所以即便向其发送Query Message也是没有用的,还增加了等待时间。因此,我们可
以将R7设置为EIGRP Stub,避免向其发送Query Message。
1、设置EIGRP Stub命令如下:
router eigrp 1
eigrp stub
2、EIGRP Stub有几个附加参数:
● connected: 只发布Connected Route
● leak-map:允许基于leak-map的动态prefix
● receive-only:只接收不发布
● redistributed:只发布Redistributed Route
● static:只发布Static Route
● summary:只发布Summary Route
3、例如,将Stub设置为receive only
router eigrp 1
eigrp stub receive-only
Leak-map
Leak-map的作用就是用来在发送汇总路由时泄漏一条或多条详细路由,同时也可以用在EIGRP的stub路由器
向外通告的路由上,进行适当的控制。所以在做汇总时,如果想某个路由条目精确选路,就可以使用Leak-
map泄露几条路由出来。我们以下图为例,来看看使用Leak-map的效果。
1、正常自动汇总的情况下,R2和R3的路由条目中为10.0.0.0/8
2、使用手动汇总后,R2和R3上的路由条目变为10.0.0.0/22
3、现在我们在R1上增加一条Leak-map,让10.0.1.0/24这条路由从e0/0发布出去。
access-list 1 permit 10.0.1.0 0.0.0.255
route-map EIGRP-Leak
match ip address 1
int e0/0
ip summary-address eigrp 1 10.0.0.0 255.255.252.0 leak-map EIGRP-Leak
4、可以看到R2和R3都增加了一条路由:10.0.1.0/24。
5、查看R3的Route Table,可以看到设置了Leak-map后的效果就是R3只有到10.0.1.0/24才会使用R3-R2-
R1这条路径,其它的10.0.0.0/22都会走R3-R1这条路径。