EIGRP是Cisco的私有路由协议,它综合了距离矢量和链路状态2者的优点,它的特点包括:
1.快速收敛:EIGRP使用Diffusing Update算法(DUAL)来实现快速收敛.路由器使用EIGRP来存储所有到达目的地的备份路由,以便进行快速切换.如果没有合适的或备份路由在本地路由表中的话.路由器向它的邻居进行查询来选择一条备份路由
2.减少带宽占用:EIGRP不作周期性的更新,它只在路由的路径和度发生变化以后做部分更新.当路径信息改变以后,DUAL只发送那条路由信息改变了的更新,而不是发送整个路由表.和更新传输到一个区域内的所有路由器上的链路状态路由协议相比,DUAL只发送更新给需要该更新信息的路由器
3.支持多种网络层协议:EIGRP通过使用protocol-dependent modules(PDMs),可以支持ApplleTalk,IP和Novell Netware等协议
4.无缝连接数据链路层协议和拓扑结构:EIGRP不要求对OSI参考模型的层2协议做特别是配置.不像OSPF,OSPF对不同的层2协议要做不同配置,比如以太网和帧中继总之,EIGRP能够有效的工作在LAN和WAN中,而且EIGRP保证网络不会产生环路(loop-free);而且配置起来很简单;支持VLSM;它使用多播和单播,不使用广播,这样做节约了带宽;它使用和IGRP一样的度的算法,但是是32位长的;它可以做非等价的路径的负载平衡
1.neighbor table中的每个邻居都转发1份IP路由表的拷贝给它们的邻居
2.然后每个邻居把从它们自己的邻居处得来的路由表存储在自己的EIGRP拓扑数据库中
3.EIGRP检查拓扑数据库,然后选择出一条到达目的地的最佳路由
4.EIGRP从拓扑数据库中选择到达目的地的最佳的successor routes,然后把它们放到路由表里.路由器为每种协议(比如IP,IPX)各自保持1张单独是路由表
1.advertised distance:EIGRP邻居到达目标网络的度
2.feasible distance:到达邻居路由器的度加上advertised distance(即邻居到达目标网络的度)
路由器比较所有的FD,然后选择FD值最低的放进IP路由表
如图显示的是C的EIGRP拓扑数据库,里面包含了邻居A和B的信息.A和B都知道如何到达网络10.1.1.0/24.从图中我们看见A到达目标网络的advertised distance是1000;B是1500.FD分别是2000和2500.C经过比较,将FD值低的,这里就是A的条目,作为到达网络10.1.1.0/24的最佳路径
EIGRP度的5个标准如下:
1.带宽:10的7次方除以源和目标之间最低的带宽乘以256
2.延迟(delay):接口的累积延迟乘以256,单位是微秒
以上是默认的2个,下面是可选的3个标准:
3.可靠性(reliability):根据keepalive而定的源和目的之间最不可靠的可靠度的值
4.负载(loading):根据包速率和接口配置带宽而定的源和目的之间最不差的负载的值
5.最大传输单元(MTU):路径中最小的MTU.MTU包含在EIGRP的路由更新里,但是一般不参与EIGRP度的运算
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值不匹配的话它们是不会形成邻居关系的
注意图上各个路由器之间的链路带宽,先看看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
1.hello包:路由器使用hello包来发现邻居,采用多播的方式
2.update包:采用单播或多播的方式发送.更新发生在路由器启动,拓扑或度发生变化,和路由状态的迁移(主动到被动)
3.query包:当路由器开始进行路由计算和没有FD的时候,它就发送给邻居一个可靠的查询包来询问是否有到达目的地的FD.查询包通常以多播的方式发送
4.reply包:以单播的方式发回给发出查询包的路由起,作为应答
5.acknowledge(ACK)包:ACK包是采用单播的hello包,包含非0的确认数字.update包,query包和reply包均是可靠发送,所以它们都需要确认;而hello包和ACK包就不需要确认
1.在以下介质中是以每5秒进行发送:广播型介质,比如以太网,令牌环(Token Ring)和分布式光纤接口(FDDI);在点到点类型的串行链路中比如PPP和HDLC,还有帧中继和ATM;带宽大于T1线路的多点线路,比如交换式多兆位数据服务(SMDS),帧中继,ATM和ISDN PRI
2.在以下类型中间隔时间是60秒:带宽小于T1线路的多点线路,比如ISDN BRI,帧中继,SMDS,ATM和X.25当配置EIGRP的时候,EIGRP进程动态发现和它直接相连的运行了EIGRP的路由器.每个路由器在它自己的neighbor table中都保持的有邻居的信息,包括到达邻居路由器的地址和接口.还保持的有hold time.hold time是3倍于hello time
看下各个输出的含义,如下:
1.neighbor address:邻居路由器的地址,如上图可以看出p2r2有2个邻居
2.queue(Q Cnt):等待发送的排队排列的包.如果这个值持续高于0的话,说明发生了拥塞问题
3.Smooth Round Trip Timer(SRTT):从邻居处发送和接收包的平均回程时间.单位是毫秒.这个通常用来决定
4.RTO:单位是毫秒.路由器在重新传输包之前等待ACK的时间
5.hold time:定义了等待没有从邻居那里接收到任何包的最大时间.当接受到新的包以后,hold timer复位
6.Interface:本地到邻居的接口
具体过程如下:
1.路由器A启动,然后在链路上发送hello包
2.路由器B接收到A发来的hello包,然后做出应答,发回update包给A,告诉A它自己的路由表的信息.但是这个时候
3.当双方交换过hello包以后,邻居关系建立.A发回ACK包给B确认它已经收到了从B而来的update包
4.A吸收update包到它自己的topology table中去.topology table包括了从邻居那里得来的所有目的地信息
5.A发送update包给B
6.B收到A发来的update包后做出应答;发回ACK包给A
整个过程完成
RouterA#debug eigrp packets
(略)
01:38:29: EIGRP: Sending HELLO on Serial0/0
01:38:29: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0
01:38:31: EIGRP: Received HELLO on Serial0/0 nbr 10.1.2.2
01:38:31: AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
Received EIGRP Update
01:38:33: EIGRP: Received UPDATE on Serial0/0 nbr 10.1.2.2
01:38:33: AS 100, Flags 0x0, Seq 23/37 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
01:38:33: EIGRP: Enqueueing ACK on Serial0/0 nbr 10.1.2.2
01:38:33: Ack seq 23 iidbQ un/rely 0/0 peerQ un/rely 1/0
01:38:33: EIGRP: Sending ACK on Serial0/0 nbr 10.1.2.2
(略)
如果K值不匹配的话,当然就建立不了邻居关系,如下 :
RouterA#debug eigrp packets
(略)
01:39:13: EIGRP: Received HELLO on Serial0/0 nbr 10.1.2.2
01:39:13:AS 100, Flags 0x0, Seq 0/0 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/0
01:39:13: K-value mismatch
(略)
RouterA#debug ip eigrp
IP-EIGRP Route Events debugging is on
01:57:23: IP-EIGRP: Processing incoming UPDATE packet
01:57:23: IP-EIGRP: Int 172.16.1.0/24 M 10639872 - 9999872 640000
SM 384000 - 256000 128000
(略)
如上输出,内部路由标的有Int字样,FD为9999872(带宽值)+640000(延迟)=10639872,其中FD是路由器A到达目标网络172.16.1.0/24;SM代表source metric,advertised distance是256000+128000=384000.因为带宽值是由10的7次方除以真正的带宽得来的,而且计算EIGRP度的时候是选择链路带宽值低的那条.所以EIGRP的度为9999872(bandwidth)+640000(delay)=10639872
假设路由器B把网络10.1.1.0/24宣告给它的邻居路由器C,B到网络10.1.1.0/24的耗费为1000,C把这个值作为从B那里得到的advertised distance.C再加上它自己到达B的耗费(1000)得到通过B到达目标网络的FD(即1000+1000=2000)
D宣告网络10.1.1.0/24给C.如图,D到达网络10.1.1.0/24的耗费是1500,C从D那里得到这个作为advertised distance,然后加上它自己到达D的耗费(1000)得到FD为2500.路由器C比较所有的FD,选择值低的那个作为最佳路由,即选择通过B到达目标网络.所以路由器B作为C到达目标网络的successor
AD of second best route < FD of best route(successor) = FS
注意这里的AD不是管理距离而是advertised distance
如下是没有FS的一个公式:
AD of second best route ≥ FD of best route(successor) ≠ FS
1.在全局配置模式下使用router eigrp [[AS number]命令启用EIGRP,在一个AS内,所有要配置EIGRP的路由器必须拥有相同的AS号
2.定义EIGRP网络号使用network [network-number] [wildcard-mask]命令,可以使用wildcard mask来定义特殊的IP地址,子网或网络
3.如果你使用了串行连接,还得定义链路带宽.如果你不定义带宽,EIGRP默认认为带宽为T1线路的带宽大小,即1.544Mbps.如果实际的链路带宽比这个低的话,路由器将不能收敛,或者路由update包会丢失.使用bandwidth [Kb]命令定义带宽.这个带宽对于点对点的帧中继网络中,定义的带宽是CIR;而对于其他的普通串行线路,定义的就是实际带宽
如图,所有的路由器都在AS 109里,路由器A没有使用wildcard mask.如果A使用了以下的配置:
RouterA(config)#router eigrp 109
RouterA(config-router)#netw 10.1.0.0
RouterA(config-router)#netw 10.4.0.0
RouterA(config-router)#netw 172.16.1.0
RouterA(config-router)#netw 172.16.2.0
路由器A将对网络进行自动汇总,使得配置看上去像是这样的,如下:
RouterA(config)#router eigrp 109
RouterA(config-router)#netw 10.0.0.0
RouterA(config-router)#netw 172.16.0.0
如果路由器A的配置命令是如下这样的:
RouterA(config)#router eigrp 109
RouterA(config-router)#netw 10.1.0.0 0.0.255.255
RouterA(config-router)#netw 10.4.0.0 0.0.255.255
RouterA(config-router)#netw 172.16.1.0 0.0.0.255
RouterA(config-router)#netw 172.16.2.0 0.0.0.255
使用wildcard mask来定义参与AS 109的EIGRP进程的直接相连的路由器接口.在上面这个例子里,定义的就是处于10.1.0.0/16,10.4.0.0/16,172.16.1.0/24和172.16.2.0/24里的所有接口都会参与AS 109里的EIGRP进程看看在EIGRP中使用wildcard mask的例子,如下图:
如图,路由器C并没有使用network 172.16.0.0 0.0.0.255,而使用的是network 172.16.3.0 0.0.0.255和network 172.16.4.0 0.0.0.255,因为C的S0口连接的是外部网络,即S0口没有运行EIGRP.如果在S0口运行了EIGRP的话,将会给外部发送不必要的信息造成带宽的浪费和CPU的负担
路由器A连接外部网络172.31.0.0/16,A使用了ip default-network 172.31.0.0命令配置了一条默认路由;然后A把它宣告给B,B把也它标记成默认路由.注意[network-number]参数是基于类的网络号
RouterA#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, D - EIGRP, EX - EIGRP external, O - OSPF,
(略)
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 1 subnets
D 172.16.1.0 [90/10639872] via 10.1.2.2, 06:04:01, Serial0/0 10.0.0.0/24 is subnetted, 4 subnets
D 10.1.3.0 [90/10514432] via 10.1.2.2, 05:54:47, Serial0/0
D 10.3.1.0 [90/10639872] via 10.1.2.2, 06:19:41, Serial0/0
C 10.1.2.0 is directly connected, Serial0/0
C 10.1.1.0 is directly connected, Ethernet0/0
注意D代表是从EIGRP学来的,*代表默认路由
RouterA# show ip protocols
Routing Protocol is "eigrp 100"
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Default networks flagged in outgoing updates
Default networks accepted from incoming updates
EIGRP metric weight K1=1, K2=0, K3=1, K4=0, K5=0
EIGRP maximum hopcount 100
EIGRP maximum metric variance 1
Redistributing: eigrp 100
Automatic network summarization is not in effect
Maximum path: 4
Routing for Networks:
10.1.0.0/16
10.0.0.0
Routing Information Sources:
Gateway Distance Last Update
10.1.2.2 90 05:50:13
Distance: internal 90 external 170
(略)
RouterA# show ip eigrp topology
IP-EIGRP Topology Table for AS(100)/ID(10.1.2.1)
Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply, r - reply Status, s - sia Status
P 10.1.3.0/24, 1 successors, FD is 10514432
via 10.1.2.2 (10514432/28160), Serial0/0
P 10.3.1.0/24, 1 successors, FD is 10639872
via 10.1.2.2 (10639872/384000), Serial0/0
P 10.1.2.0/24, 1 successors, FD is 10511872
via Connected, Serial0/0
P 10.1.1.0/24, 1 successors, FD is 2190
via Connected, Ethernet0/0
P 172.16.1.0/24, 1 successors, FD is 10639872
via 10.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网络的收敛发生了问题
1.可以基于接口的配置汇总
2.当在接口做了人工汇总以后,路由器将创建一条指向null0口的路由,这样做是为了防止路由循环
3.当汇总之前的路由down掉以后,汇总路由将自动从路由表里被删除
4.汇总路由的度取决于特定路由中度最小的来做为自己的度
如图,路由器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号
如图所示意,使用了variance 2,即乘数是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(关系是必须小于,不能等于或大于)
对多点链路比如帧中继网络,ISDN PRI和SMDS的配置比较麻烦.当你配置多点链路的接口的时候,把带宽配置成最小的CIR和VC之积
注意这个星形环境,有10条VC(图中只显示4条),每条VC的带宽都是56Kbps,使用的是点到点环境,所以在C上,划分10个子接口,分别指定接口带宽为56Kbps
如果是在下面这种混合环境,如图:
配置的办法是把CIR最低的作为点到点链路,定义带宽BW=CIR;把带宽较高的作为多点环境,BW=CIR之和.上述例子就是把3条带宽较高的划分为一条多点链路的接口,指定带宽为768Kbps(256Kbps*3);带宽最低的那条(56Kbps)作为点到点环境,单独划分一个点到点的接口,并且指定带宽为它实际的CIR即56Kbps
1.邻居之间信息交换量
2.路由器的数量
3.拓扑结构的深度
4.替代路径的数量
所以EIGRP在大型网络中不能够即插即用(Plug-and-Play),而且查询的代价可能会比较高
1.通过在路由器的outbound接口使用ip summary-address eigrp命令配置路由汇总
2.把远程路由器做为stub EIGRP路由器
路由汇总可以减小查询的范围;把远程路由器作做为stub EIGRP路由器使得这些远程路由器被查询.还有其他的一些限制查询范围的方法诸如路由过滤(route filtering)或接口包过滤(interface packet filtering)
如图,路由器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不可达的应答,然后不再将查询继续传递下去
1.路由器对查询的应答过于繁忙比如路由器CPU资源占用过高;还有内存不足,不足以分配处理查询包或者建立应答包
2.路由器之间的链路状态不稳定,因此可能产生丢包现象.路由器足够多的包来维持邻居关系,但是却没有收到全部的查询包或应答包
3.单向链路(unidirectional link),即网络流量只朝一个方向传输的故障通过使用路由汇总,可以使得路由表最小化,这样就使得路由器的CPU资源和带宽尽可能的减少,而且减少了SIA情况的发生
通过在B的两边划分不同的AS,当网络X消失以后,C发送查询给B,B做出网络不可达的应答.在AS 1中查询不会继续
Router(config-router)#eigrp stub [receive-only | connected | static | summary]
一些参数的含义如下:
receive-only:不能和其他3个参数(connected,static和summary)一起使用.只接收从邻居路由器发送来的信息
connected:指定该路由器可以把和它直接相连的网络信息传递给它的邻居.这个选项默认是开启的
static:把静态路由信息传递给它的邻居
summary:把汇总路由信息传递给它的邻居.这个选项默认也是开启的
Router(config)#router eigrp 1
Router(config-router)#netw 10.0.0.0
Router(config-router)#eigrp stub
但是假如你使用了receive-only选项的话,其他3个选项的信息就不会被发送,如下:
Router(config)#router eigrp 1
Router(config-router)#netw 10.0.0.0
Router(config-router)#eigrp stub recive-only