EIGRP是Cisco的私有路由协议,它综合了距离矢量和链路状态2者的优点,它的特点包括:
1.快速收敛:EIGRP使用DiffusingUpdate算法(DUAL)来实现快速收敛.路由器使用EIGRP来存储所有到达目的地的备份路由,以便进行快速切换.如果没有合适的或备份路由在本地路由表中的话.路由器向它的邻居进行查询来选择一条备份路由
2.减少带宽占用:EIGRP不作周期性的更新,它只在路由的路径和度发生变化以后做部分更新.当路径信息改变以后,DUAL只发送那条路由信息改变了的更新,而不是发送整个路由表.和更新传输到一个区域内的所有路由器上的链路状态路由协议相比,DUAL只发送更新给需要该更新信息的路由器
3.支持多种网络层协议:EIGRP通过使用protocol-dependentmodules(PDMs),可以支持ApplleTalk,IP和NovellNetware等协议
4.无缝连接数据链路层协议和拓扑结构:EIGRP不要求对OSI参考模型的层2协议做特别是配置.不像OSPF,OSPF对不同的层2协议要做不同配置,比如以太网和帧中继总之,EIGRP能够有效的工作在LAN和WAN中,而且EIGRP保证网络不会产生环路(loop-free);而且配置起来很简单;支持VLSM;它使用多播和单播,不使用广播,这样做节约了带宽;它使用和IGRP一样的度的算法,但是是32位长的;它可以做非等价的路径的负载平衡
EIGRPDatabases
运行了EIGRP的路由器维持3张表:neighbortable,topologytable和routingtable.其中neighbortable保存了和路由器建立了邻居关系的,直接相连的路由器;topologytable包含路由器学习到的到达目的地的所有路由条目,其过程如下:
1.neighbortable中的每个邻居都转发1份IP路由表的拷贝给它们的邻居
2.然后每个邻居把从它们自己的邻居处得来的路由表存储在自己的EIGRP拓扑数据库中
3.EIGRP检查拓扑数据库,然后选择出一条到达目的地的最佳路由
4.EIGRP从拓扑数据库中选择到达目的地的最佳的successorroutes,然后把它们放到路由表里.路由器为每种协议(比如IP,IPX)各自保持1张单独是路由表
FeasibleDistancevs.AdvertisedDistance
为了决定到达目的地的最佳路由(successor)和备份路由(feasiblesuccessor),EIGRP使用下面2个参数:
1.advertiseddistance:EIGRP邻居到达目标网络的度
2.feasibledistance:到达邻居路由器的度加上advertiseddistance(即邻居到达目标网络的度)
路由器比较所有的FD,然后选择FD值最低的放进IP路由表
显示的是C的EIGRP拓扑数据库,里面包含了邻居A和B的信息.A和B都知道如何到达网络10.1.1.0/24.从图中我们看见A到达目标网络的advertiseddistance是1000;B是1500.FD分别是2000和2500.C经过比较,将FD值低的,这里就是A的条目,作为到达网络10.1.1.0/24的最佳路径
EIGRPMetricCalculation
EIGRP选择一条主路由(最佳路由)和一条备份路由放在topologytable(EIGRP到目的地支持最多6条链路).它支持几种路由类型:内部,外部(非EIGRP)和汇总路由.EIGRP使用混合度
EIGRP度的5个标准如下:
1.带宽:10的7次方除以源和目标之间最低的带宽乘以256
2.延迟(delay):接口的累积延迟乘以256,单位是微秒
以上是默认的2个,下面是可选的3个标准:
3.可靠性(reliability):根据keepalive而定的源和目的之间最不可靠的可靠度的值
4.负载(loading):根据包速率和接口配置带宽而定的源和目的之间最不差的负载的值
5.最大传输单元(MTU):路径中最小的MTU.MTU包含在EIGRP的路由更新里,但是一般不参与EIGRP度的运算
EIGRP使用DUAL来决定到达目的地的最佳路由(successor).当最佳路由出问题的时候,EIGRP不使用holddowntimer而立即使用备份路由(feasiblesuccessor),这样就使得EIGRP可以进行快速收敛
看看EIGRP计算度的公式,K是常量,公式如下:
metric=[K1*bandwidth+(K2*bandwidth)/(256–load)+K3*delay]*[K5/(reliability+K4)]
默认:K1=1,K2=0,K3=1,K4=0,K5=0
这样就得到默认的度的简化计算公式,如下:
metric=bandwidth+delay
注意,不推荐修改K值.K值通过EIGRP的hello包运载.如果两个路由器的K值不匹配的话它们是不会形成邻居关系的
EIGRPMetricsBackwardCompatibletoIGRP
EIGRP的度和IGRP的度能够很好的进行兼容.IGRP的度是以24位的格式,而EIGRP是32位的格式.它们之间的关系是EIGRP的度是256倍于IGRP的度.也就是说假如IGRP的度为1000的话,换算成EIGRP的度为256000
来看一个EIGRP度的计算的例子,
注意图上各个路由器之间的链路带宽,先看看A经过B,C到达D之间的度的计算,AB之间,BC之间为T1线路,CD之间带宽为64kbps,计算如下:
带宽=10,000,000/64*256=40,000,000
累积延迟=(2000+2000+2000)*256=1,536,000
所以度=带宽+累积延迟=41,536,000
EIGRPPackets
EIGRP的5种包的类型,如下:
1.hello包:路由器使用hello包来发现邻居,采用多播的方式
2.update包:采用单播或多播的方式发送.更新发生在路由器启动,拓扑或度发生变化,和路由状态的迁移(主动到被动)
3.query包:当路由器开始进行路由计算和没有FD的时候,它就发送给邻居一个可靠的查询包来询问是否有到达目的地的FD.查询包通常以多播的方式发送
4.reply包:以单播的方式发回给发出查询包的路由起,作为应答
5.acknowledge(ACK)包:ACK包是采用单播的hello包,包含非0的确认数字.update包,query包和reply包均是可靠发送,所以它们都需要确认;而hello包和ACK包就不需要确认
EIGRPHelloPackets
当你在路由器的接口配置了EIGRP以后,路由器会周期性的以组多播的方式向外发送hello包.多播地址是224.0.0.10.当和它在1个AS里的其他运行了EIGRP的路由器接收到hello包以后,就会和它形成邻居关系.不在1个AS里,而且度的计算方式不一样(即K值不同),是不会形成邻居关系的
EIGRPTimers
hello包在不同的介质上发送间隔是不一样的,如下:
1.在以下介质中是以每5秒进行发送:广播型介质,比如以太网,令牌环(TokenRing)和分布式光纤接口(FDDI);在点到点类型的串行链路中比如PPP和HDLC,还有帧中继和ATM;带宽大于T1线路的多点线路,比如交换式多兆位数据服务(SMDS),帧中继,ATM和ISDNPRI
2.在以下类型中间隔时间是60秒:带宽小于T1线路的多点线路,比如ISDNBRI,帧中继,SMDS,ATM和X.25当配置EIGRP的时候,EIGRP进程动态发现和它直接相连的运行了EIGRP的路由器.每个路由器在它自己的neighbortable中都保持的有邻居的信息,包括到达邻居路由器的地址和接口.还保持的有holdtime.holdtime是3倍于hellotime
EIGRP在低速链路上发送hello包的频率较低,因为hello包会占用额外的带宽.不过可以在接口配置模式对默认时间进行修改,使用iphello-intervaleigrp{AS-number}{seconds}命令;修改holdtime的时间的命令也是在接口配置模式,使用iphold-timeeigrp{AS-number}{seconds}命令.当你修改了hello包的时间间隔以后,holdtime是不会自动修改的(之前holdtime=hellotime*3)所以要人工进行修改
EIGRPAdjacencyEstablishmentConditions
即使两个路由器的hellotime和holdtime相互之间不匹配,它们仍然有可能成为邻居.hello包包含了holdtime的信息和保持跟踪每个EIGRP邻居路由器的holdtime如果EIGRP路由器在holdtime超出之前没有收到EIGRP包,路由器就会察觉拓扑的变化.路由器删除邻居路由器的相关信息,包括从邻居那里认可的topologytable条目.假如FD可用的话,EIGRP进程将进行重新收敛
EIGRP不会基于次要地址(secondaryaddress)建立邻居关系,因为EIGRP使用接口的主地址
showipeigrpneighborsCommand
使用showipeigrpneighbors命令查看EIGRP邻居关系
看下各个输出的含义,如下:
1.neighboraddress:邻居路由器的地址,如上图可以看出p2r2有2个邻居
2.queue(QCnt):等待发送的排队排列的包.如果这个值持续高于0的话,说明发生了拥塞问题
3.SmoothRoundTripTimer(SRTT):从邻居处发送和接收包的平均回程时间.单位是毫秒.这个通常用来决定
RTO(RetransmitTimeOut)
4.RTO:单位是毫秒.路由器在重新传输包之前等待ACK的时间
5.holdtime:定义了等待没有从邻居那里接收到任何包的最大时间.当接受到新的包以后,holdtimer复位
6.Interface:本地到邻居的接口
EIGRPReliability
ReliableTransportProtocol(RTP)用来保证EIGRP包发送给邻居的可靠的传输.RTP支持单播和多播的混合方式.出于效率问题的考虑,只有一些特定的EIGRP包需要可靠的传输.比如在拥有多播能力的多路访问网络中,比如以太网,就不需要单独的发送可靠的hello包给所有邻居.EIGRP发送1个单独的hello包的多播,其中包含接收者不需要对这些包进行确认其他类型包,比如update包就需要确认.所有运载路由信息的包(update,reply和query)就需要可靠传输因为它们不是周期性的发送.每个包分配的有序列号然后要求确认.这些序列号和确认就使得这些包可以可靠的传输ACK包和hello包,是不需要可靠性的
EIGRPRetransmissionPolicyandTransportMechanism
RTP的重传机制:路由器发送给邻居可靠的包在RTO超出以后,还没得到确认的话,将进行包的重传.最大重传次数16次,直到holdtime超出
EIGRP的传输使用了窗口技术,并且窗口大小是1,stop-and-wait机制,即要对传输的包进行一一确认.假如一个路由器A有两个邻居B和C,当分别给B和C发送1个包以后,B做出了及时的应该而C还没有做出应答,A就必须等待,直到C做出应答以后才能发送下一个包,这样带来的影响是降低了效率.解决的办法是对没有得到确认的多播包采用单播包来传送
InitialRouteDiscoveryinEIGRP
来看看EIGRP中邻居的发现和建立过程
具体过程如下:
1.路由器A启动,然后在链路上发送hello包
2.路由器B接收到A发来的hello包,然后做出应答,发回update包给A,告诉A它自己的路由表的信息.但是这个时候
邻居关系还没有建立直到B发回hello包给A.在B给A的update包里设置了初始位(initbit)的,说明这是初始过程
3.当双方交换过hello包以后,邻居关系建立.A发回ACK包给B确认它已经收到了从B而来的update包
4.A吸收update包到它自己的topologytable中去.topologytable包括了从邻居那里得来的所有目的地信息
5.A发送update包给B
6.B收到A发来的update包后做出应答;发回ACK包给A
整个过程完成
VerifyingEIGRPConnectivityUsingdebugCommands
debugeigrppackets:显示执行这条命令的路由器的接收和发送的包的类型,如下:
RouterA#debugeigrppackets
(略)
01:38:29:EIGRP:SendingHELLOonSerial0/0
01:38:29:AS100,Flags0x0,Seq0/0idbQ0/0iidbQun/rely0/0
01:38:31:EIGRP:ReceivedHELLOonSerial0/0nbr10.1.2.2
01:38:31:AS100,Flags0x0,Seq0/0idbQ0/0iidbQun/rely0/0peerQun/rely0/0
ReceivedEIGRPUpdate
01:38:33:EIGRP:ReceivedUPDATEonSerial0/0nbr10.1.2.2
01:38:33:AS100,Flags0x0,Seq23/37idbQ0/0iidbQun/rely0/0peerQun/rely0/0
01:38:33:EIGRP:EnqueueingACKonSerial0/0nbr10.1.2.2
01:38:33:Ackseq23iidbQun/rely0/0peerQun/rely1/0
01:38:33:EIGRP:SendingACKonSerial0/0nbr10.1.2.2
(略)
如果K值不匹配的话,当然就建立不了邻居关系,如下:
RouterA#debugeigrppackets
(略)
01:39:13:EIGRP:ReceivedHELLOonSerial0/0nbr10.1.2.2
01:39:13:AS100,Flags0x0,Seq0/0idbQ0/0iidbQun/rely0/0peerQun/rely0/0
01:39:13:K-valuemismatch
(略)
debugipeigrp:显示路由器发送和接收的EIGRP包的相关信息,如下:
RouterA#debugipeigrp
IP-EIGRPRouteEventsdebuggingison
01:57:23:IP-EIGRP:ProcessingincomingUPDATEpacket
01:57:23:IP-EIGRP:Int172.16.1.0/24M10639872-9999872640000
SM384000-256000128000
(略)
如上输出,内部路由标的有Int字样,FD为9999872(带宽值)+640000(延迟)=10639872,其中FD是路由器A到达目标网络172.16.1.0/24;SM代表sourcemetric,advertiseddistance是256000+128000=384000.因为带宽值是由10的7次方除以真正的带宽得来的,而且计算EIGRP度的时候是选择链路带宽值低的那条.所以EIGRP的度为9999872(bandwidth)+640000(delay)=10639872
SelectionofaSuccessorbyDUAL
如果有相同的FD的话,路由表可以存在多个successor,默认可以存在4个.FS(feasiblesuccessor)是备份路由.要限定一个FS,下一跳的路由器的advertiseddistance必须比当前successor路由的FD要小如果successor因故无效,而有效的FS存在的话,FS将代替successor并无需进行重新计算.EIGRP的topologytable一次可以存在多个有效的FS;如果successor因故无效,同时又没有有效的FS的话,EIGRP将进行重新计算.计算过程将计算出新的一个successor
successor是下一跳的路由器到达目标网络中的最佳路由器.FD最低的成为successor.所有的路由器只选择下一跳的路由器,然后每个路由器依靠下一跳路由器做出到达目标网络的最可靠的决定.所有的路由器依赖于successor(最佳的下一跳路由器)到达目标网络
假设路由器B把网络10.1.1.0/24宣告给它的邻居路由器C,B到网络10.1.1.0/24的耗费为1000,C把这个值作为从B那里得到的advertiseddistance.C再加上它自己到达B的耗费(1000)得到通过B到达目标网络的FD(即1000+1000=2000)
D宣告网络10.1.1.0/24给C.如图,D到达网络10.1.1.0/24的耗费是1500,C从D那里得到这个作为advertiseddistance,然后加上它自己到达D的耗费(1000)得到FD为2500.路由器C比较所有的FD,选择值低的那个作为最佳路由,即选择通过B到达目标网络.所以路由器B作为C到达目标网络的successor
EIGRPFeasibleSuccessor
FS,是作为successor的备份,FS路由存储在topologytable中,一张topologytable可以保持多个FS.FS的选举是经过比较非successor的AD,而且AD要比FD小,才能被认可为FS.这个比较的过程,可以写成下面的数学方程式:
ADofsecondbestroute<FDofbestroute(successor)=FS
注意这里的AD不是管理距离而是advertiseddistance
如下是没有FS的一个公式:
ADofsecondbestroute≥FDofbestroute(successor)≠FS
ConfiguringEIGRP
配置EIGRP的具体步骤,如下:
1.在全局配置模式下使用routereigrp[[ASnumber]命令启用EIGRP,在一个AS内,所有要配置EIGRP的路由器必须拥有相同的AS号
2.定义EIGRP网络号使用network[network-number][wildcard-mask]命令,可以使用wildcardmask来定义特殊的IP地址,子网或网络
3.如果你使用了串行连接,还得定义链路带宽.如果你不定义带宽,EIGRP默认认为带宽为T1线路的带宽大小,即1.544Mbps.如果实际的链路带宽比这个低的话,路由器将不能收敛,或者路由update包会丢失.使用bandwidth[Kb]命令定义带宽.这个带宽对于点对点的帧中继网络中,定义的带宽是CIR;而对于其他的普通串行线路,定义的就是实际带宽
所有的路由器都在AS109里,路由器A没有使用wildcardmask.如果A使用了以下的配置:
RouterA(config)#routereigrp109
RouterA(config-router)#netw10.1.0.0
RouterA(config-router)#netw10.4.0.0
RouterA(config-router)#netw172.16.1.0
RouterA(config-router)#netw172.16.2.0
路由器A将对网络进行自动汇总,使得配置看上去像是这样的,如下:
RouterA(config)#routereigrp109
RouterA(config-router)#netw10.0.0.0
RouterA(config-router)#netw172.16.0.0
如果路由器A的配置命令是如下这样的:
RouterA(config)#routereigrp109
RouterA(config-router)#netw10.1.0.00.0.255.255
RouterA(config-router)#netw10.4.0.00.0.255.255
RouterA(config-router)#netw172.16.1.00.0.0.255
RouterA(config-router)#netw172.16.2.00.0.0.255
使用wildcardmask来定义参与AS109的EIGRP进程的直接相连的路由器接口.在上面这个例子里,定义的就是处于10.1.0.0/16,10.4.0.0/16,172.16.1.0/24和172.16.2.0/24里的所有接口都会参与AS109里的EIGRP进程看看在EIGRP中使用wildcardmask的例子,路由器C并没有使用network172.16.0.00.0.0.255,而使用的是network172.16.3.00.0.0.255和network172.16.4.00.0.0.255,因为C的S0口连接的是外部网络,即S0口没有运行EIGRP.如果在S0口运行了EIGRP的话,将会给外部发送不必要的信息造成带宽的浪费和CPU的负担
ConfiguringDefaultRouteUsingthedefault-networkCommand
当配置EIGRP的时候,可以使用ipdefault-network[network-number]命令创建默认路由
路由器A连接外部网络172.31.0.0/16,A使用了ipdefault-network172.31.0.0命令配置了一条默认路由;然后A把它宣告给B,B把也它标记成默认路由.注意[network-number]参数是基于类的网络号
VerifyingEIGRPUsingshowCommands
使用showiproute命令查看路由表的内容,如下:
RouterA#showiproute
Codes:C-connected,S-static,I-IGRP,R-RIP,D-EIGRP,EX-EIGRPexternal,O-OSPF,
(略)
Gatewayoflastresortisnotset
172.16.0.0/24issubnetted,1subnets
D172.16.1.0[90/10639872]via10.1.2.2,06:04:01,Serial0/010.0.0.0/24issubnetted,4subnets
D10.1.3.0[90/10514432]via10.1.2.2,05:54:47,Serial0/0
D10.3.1.0[90/10639872]via10.1.2.2,06:19:41,Serial0/0
C10.1.2.0isdirectlyconnected,Serial0/0
C10.1.1.0isdirectlyconnected,Ethernet0/0
注意D代表是从EIGRP学来的,*代表默认路由
使用showipprotocols命令可以检查默认的EIGRP设置,如下:
RouterA#showipprotocols
RoutingProtocolis"eigrp100"
Outgoingupdatefilterlistforallinterfacesisnotset
Incomingupdatefilterlistforallinterfacesisnotset
Defaultnetworksflaggedinoutgoingupdates
Defaultnetworksacceptedfromincomingupdates
EIGRPmetricweightK1=1,K2=0,K3=1,K4=0,K5=0
EIGRPmaximumhopcount100
EIGRPmaximummetricvariance1
Redistributing:eigrp100
Automaticnetworksummarizationisnotineffect
Maximumpath:4
RoutingforNetworks:
10.1.0.0/16
10.0.0.0
RoutingInformationSources:
GatewayDistanceLastUpdate
10.1.2.29005:50:13
Distance:internal90external170
(略)
使用showupeigrptopology命令来验证EIGRP操作,如下:
RouterA#showipeigrptopology
IP-EIGRPTopologyTableforAS(100)/ID(10.1.2.1)
Codes:P-Passive,A-Active,U-Update,Q-Query,R-Reply,r-replyStatus,s-siaStatus
P10.1.3.0/24,1successors,FDis10514432
via10.1.2.2(10514432/28160),Serial0/0
P10.3.1.0/24,1successors,FDis10639872
via10.1.2.2(10639872/384000),Serial0/0
P10.1.2.0/24,1successors,FDis10511872
viaConnected,Serial0/0
P10.1.1.0/24,1successors,FDis2190
viaConnected,Ethernet0/0
P172.16.1.0/24,1successors,FDis10639872
via10.1.2.2(10639872/384000),Serial0/0
(略)
注意前面的字母P,可能出现的字母代号有如下几种:
1.P:代表passive,这个表示稳定网络中的稳定状态
2.A:代表active,当前网络不可用,正处于发送查询状态
3.U:代表update,网络处于等待update包的确认状态
4.Q:代表query,网络处于等待query包的确认的状态
5.stuck-in-active(SIA):持续处于active状态,说明EIGRP网络的收敛发生了问题
EIGRPRouteSummarization:Manual
路由汇总的目的是为了减少路由表的条目,减少或update包,边界查询
使用人工汇总的特点如下:
1.可以基于接口的配置汇总
2.当在接口做了人工汇总以后,路由器将创建一条指向null0口的路由,这样做是为了防止路由循环
3.当汇总之前的路由down掉以后,汇总路由将自动从路由表里被删除
4.汇总路由的度取决于特定路由中度最小的来做为自己的度
ConfigurationRouteSummarization
noauto-summary:关闭自动汇总的命令,在全局配置莫模式下使用ipsummary-addresseigrp[as-number][address][mask]:关闭了自动汇总以后,人工在接口模式下创建汇总地址
、路由器A和B关闭了自动汇总,因为如果不关闭自动汇总的话,汇总路由172.16.0.0/16将传给网络10.0.0.0,这样网络10.0.0.0就不能知道路由器A和B的具体位置.路由器C创建人工汇总,在S0口将172.16.1.0和172.16.2.0宣告成单独的一条条目172.16.0.0.
创建人工汇总的过程,如下:
1.选择传播汇总路由的接口
2.定义汇总地址,EIGRP路由协议以及AS号
UnderstandingEIGRPLoadBalancing
负载均衡是指在网络的多个出口上分发数据流量到目的地,负载均衡增加了网段的使用,也增加了网络的带宽.对于IP,CiscoIOS默认支持4条等价链路的负载均衡,最大支持6条
EIGRP支持不等价链路的负载均衡,使用variance命令,跟上一个乘数,默认是1(即代表等价的链路的均衡负载),值的范围是1到128.这个乘数代表了可以接受的不等代价链路的度的倍数,在这个范围内的链路都将被接受,作为负载均衡.使用了variance2,即乘数是2,路由器E选择经过C来到达网络Z,因为FD是20.FD从上到下分别是30,20和45.因为乘数是2,E还将选择经过B到达网络Z,因为B的FD是30,小于2倍C的FD即40;而D的FD是45,大于2倍C的FD,所以E将不会经过D到达网络Z(关系是必须小于,不能等于或大于)
EIGRPBandwidthUtilization
EIGRP支持不同的WAN链路,比如point-to-point链路,NBMA网络中的point-to-point链路和point-to-multipoint链路.因为在WAN链路中带宽比较低,所以为了防止EIGRP占用太多的网络带宽,.默认情况下,最多允许EIGRP占用WAN链路带宽的50%.这个默认的百分比可以通过在接口配置模式下使用ipbandwidth-percenteigrp[AS-number][pencentage].百分比可以超过100(注意没有%符号)
一般的,CiscoIOS软件认为点到点的帧中继子接口带宽为T1线路带宽(1.544Mbps),但是假如在一个帧中继环境中CIR只有56K,按默认占用50%的带宽来算,这样就会占用768Kbps.所以要在接口配置模式下使用bandwidth[BW](单位是Kbps)来给接口分配实际带宽
对多点链路比如帧中继网络,ISDNPRI和SMDS的配置比较麻烦.当你配置多点链路的接口的时候,把带宽配置成最小的CIR和VC之积
注意这个星形环境,有10条VC(图中只显示4条),每条VC的带宽都是56Kbps,使用的是点到点环境,所以在C上,划分10个子接口,分别指定接口带宽为56Kbps
配置的办法是把CIR最低的作为点到点链路,定义带宽BW=CIR;把带宽较高的作为多点环境,BW=CIR之和.上述例子就是把3条带宽较高的划分为一条多点链路的接口,指定带宽为768Kbps(256Kbps*3);带宽最低的那条(56Kbps)作为点到点环境,单独划分一个点到点的接口,并且指定带宽为它实际的CIR即56Kbps
HowEIGRPRespondstoaQuery
作为一种高级距离向量协议,EIGRP来依靠邻居提供路由信息,如果路由出了问题,即进入active状态,而且又没有可用的FS的时候,EIGRP就要求快速的收敛.然后EIGRP路由器向邻居发送查询(query),寻找一条可以替代那条出了问题的路由.查询被发送给所有的邻居路由器,除了到达successor的那个接口.如果被查询的路由器知道一条替代路由的话,它就把这条替代路由放进应答(reply)包中发送给发出查询的源路由器;如果接收到查询的路由器没有替代路由的信息,它将继续发送给它自己的其他邻居,直到找到可以替代的路由为止
EIGRPQueryProcessSIA
EIGRP使用可靠的多播来寻找替代路由.路由器必须得到收到查询的所有路由器的应答才能重新进行计算successor的信息,如果有一个路由器的应该还没有收到的话,发出查询的源路由器就必须等待.默认如果在3分钟内某些路由器没有对应答做出响应的话,这条路由就进入stuckinactive(SIA)状态(即始终处于active状态).然后路由器将重新设定和这个没有做出应答的路由器的邻居关系.为了避免SIA情形的发生,解决方案是限制查询的范围
ScalabilityIssuesandSolutions
影响EIGRP网络可扩展性的因素,如下:
1.邻居之间信息交换量
2.路由器的数量
3.拓扑结构的深度
4.替代路径的数量
所以EIGRP在大型网络中不能够即插即用(Plug-and-Play),而且查询的代价可能会比较高
LimitingtheEIGRPQueryRangewithSummarization
为了使得EIGRP能够具有更好的可扩展性,可以使用下面两种选项:
1.通过在路由器的outbound接口使用ipsummary-addresseigrp命令配置路由汇总
2.把远程路由器做为stubEIGRP路由器
路由汇总可以减小查询的范围;把远程路由器作做为stubEIGRP路由器使得这些远程路由器被查询.还有其他的一些限制查询范围的方法诸如路由过滤(routefiltering)或接口包过滤(interfacepacketfiltering)
如图,路由器B发送汇总路由172.30.0.0/16给路由器A.假如网络172.30.1.0/24突然down掉以后,C向B查询网络172.30.1.0/24,B又向A查询.由于A收到的是汇总路由,于是A直接对查询做出网络172.30.1.0/24不可达的应答,然后不再将查询继续传递下去
查询范围不是产生SIA现象的唯一原因,还有诸如以下原因可能会产生SIA的发生:
1.路由器对查询的应答过于繁忙比如路由器CPU资源占用过高;还有内存不足,不足以分配处理查询包或者建立应答包
2.路由器之间的链路状态不稳定,因此可能产生丢包现象.路由器足够多的包来维持邻居关系,但是却没有收到全部的查询包或应答包
3.单向链路(unidirectionallink),即网络流量只朝一个方向传输的故障通过使用路由汇总,可以使得路由表最小化,这样就使得路由器的CPU资源和带宽尽可能的减少,而且减少了SIA情况的发生
使用路由汇总是减少收敛时间的一个比较好的办法,远程路由器以网络不可达的信息做为应答并且如果路由表内没有精确匹配的条目的话将不再把查询延伸传播下去
通过在B的两边划分不同的AS,当网络X消失以后,C发送查询给B,B做出网络不可达的应答.在AS1中查询不会继续
传播下去,查询终止.但是在AS2,B将产生一个新的查询,发送给A.注意这和在同一个AS内做出查询不一样.所以说通过划分不同的AS来限制查询的范围并不是一个有效的解决方案
LimitingtheEIGRPQueryRangeUsingthestubOption
还有种限制EIGRP查询比较有效的方法就是配置stub选项.在做这项配置的时候,只有远程路由器要配置成stub路由器.使用EIGRPstub路由特性增加了网络的稳定性,减少了网络资源的占用,简化了stubrouter的配置EIGRPstub功能最早是出现在CiscoIOSRelease12.0(7)T上.星形拓扑(hub-and-spoke)结构的网络常使用stub路由,在这样的拓扑结构里,远程路由器不会转发所有的数据给中心(hub)路由器,远程路由器也不会保持完整网络的路由表.一般的,中心路由器只需要发送一条默认路由给远程路由器.当到达某个网络的路由丢失以后,路由器不会向stub路由器做出路由查询
EIGRPstub配置命令的具体格式是在路由配置模式下,输入如下命令:
Router(config-router)#eigrpstub[receive-only|connected|static|summary]
一些参数的含义如下:
receive-only:不能和其他3个参数(connected,static和summary)一起使用.只接收从邻居路由器发送来的信息
connected:指定该路由器可以把和它直接相连的网络信息传递给它的邻居.这个选项默认是开启的
static:把静态路由信息传递给它的邻居
summary:把汇总路由信息传递给它的邻居.这个选项默认也是开启的
由于connected和summary选项默认是开启的,配置stub路由器并发送直连网络和汇总路由信息就可以这样写,如下:
Router(config)#routereigrp1
Router(config-router)#netw10.0.0.0
Router(config-router)#eigrpstub
但是假如你使用了receive-only选项的话,其他3个选项的信息就不会被发送,如下:
Router(config)#routereigrp1
Router(config-router)#netw10.0.0.0
Router(config-router)#eigrpstubrecive-only
ScalabilityRulesforImplementingEIGRP
以前曾经提到过,不太合理的IP地址规划限制了路由汇总.这样会增加网络的收敛时间;相反,合理的地址规划能使得路由汇总工作的更好,加快了网络收敛时间