EIGRP

18 Jun

EIGRP是高级距离矢量协议,比RIP高级的地方在于:EIGRP除路由表外,还多了邻居表和拓扑表。通过邻居表,从邻居那里获得路由后,保存到拓扑表里,然后根据DUAL算法选 择一个最优的无环路径加入路由表,因此EIGRP是100%防环的。另外EIGRP能快速收敛。支持VLSM和CIDR。支持多种网络层协议 (IP/IPX/AppleTalk)。支持组播(地址是224.0.0.10)及单播路由更新。支持手动汇总。支持非等价负载均衡。

AD值:

EIGRP的AD值是90,汇总EIGRP的AD值为5,外部EIGRP的AD值为170。

度量:

RIP的度量值是跳数,相对比较粗糙。EIGRP的度量就先进多了,有5个参数:带宽,延时,(可靠性,负载,MTU一般不用)。计算公式:10^7/路径的最小带宽)+延时/10]×256,带宽单位kbps,延时单位ms

EIGRP有5种报文:Hello,Update,Query,Reply,Ack。报文封装在IP协议内的协议号为88。

1.Hello(用于建邻居):

EIGRP组播发送Hello包来发现邻居,并非所有直连的路由器都是邻居,直连只是形成邻居的条件之一,其他条件有:AS号相同,度量计算的K值 相同,通过认证。邻居建立后追加入邻居表,还要定时维护邻居表,具体做法是:每隔5秒邻居给发送Hello包,如果3倍时间(即15秒)内都没有收到邻居 发过来的Hello包,就认为邻居发生故障并将邻居关系down掉。(所以虽说EIGRP只有第一次是完整发送路由信息外,其他时间都是有变化才更新,但 平时并不是完全安静不发送任何报文的,还是会每隔5秒发送Hello包,以维持邻居关系)

2.Update(用于更新路由信息):

邻居建立后,采用可靠传输协议(RTP)组播Update报文,为保障报文到达所有邻居,组播Update后,需要邻居回复ACK进行确认。如 RTO(Retransmit Time Out)超时后还没收到邻居的ACK,就向该邻居重传Update(重传为单播,已回复ACK的邻居就不会收到重传,节约了带宽),最多15次,第16次 重传Update后仍旧没收到对方的ACK答复,就认为邻居发生故障,将邻居关系down掉。从Update报文里得到邻居路由后,保存到拓扑表里,然后 根据DUAL算法选择一个最优的无环路径加入路由表。补充一点:Update,Query,Reply需要回复ACK,Hello和ACK报文没有必要回 复ACK

DUAL算法:(介绍Query和Reply报文前先介绍DUAL算法)

DUAL算法是EIGRP的核心,通过它EIGRP才能实现100%无环。先了解几个术语:

AD(Advertise Distance):邻居到达目的地的成本。注意此处AD非路由条目内的管理距离AD(Administrator Distance),它俩仅仅缩写相同而已

FD(Feasible Distance):到达邻居的成本 + AD

Successor后继:最低成本路径(即最小FD)的邻居。

FS(Feasible successor):次优路径的邻居,但其AD要小于Successor的FD(这样可以避免环路)。当Successor消失后,有FS的话直接将 FS放入路由表(这样可以加快收敛)。没FS的话向所有邻居发Query查询报文,查询这条路由条目,如果邻居自己没有到达目的地的路由,会像它的邻居扩 散开去查询,直到整个EIGRP网络所有路由器都到达不了目的地为止。如果有一个邻居能到达目的地就会回复Reply报文并停止这个查询在网络中蔓延。

3/4.Query/Reply(用于查询路由):

当Successor消失且无FS的话,组播Query报文,向所有邻居查询这条路由条目,如果邻居自己没有到达目的地的路由,会像它的邻居扩散开 去查询,直到整个EIGRP网络所有路由器都到达不了目的地为止。如果有一个邻居能到达目的地就会单播回复Reply报文并停止这个查询在网络中蔓延。所 有Query都得到Reply后,EIGRP重新计算路由,重置FD,选择Successor。如果所有邻居都到达不了目的地就回复一个度量为无穷大的报文。

虽说最坏情况下查询将蔓延到整个EIGRP网络,其实还是有办法限制查询范围的。比如汇总可以限制查询范围。假设边界路由器上汇总 33.1.0.0/16,邻居向其发起33.1.1.0/24的查询,路由表查看路由表发现只有汇总路由,没有33.1.1.0/24这条路由就马上回复邻居,不会再扩散去询问别人了。

另一种限制查询范围的方式是EIGRP的根路由器stub,当把一个路由器配成stub,邻居就不会再向stub路由器发送任何查询目的地的Query了。

5.ACK(略)

概念介绍完后,介绍下基本配置:(配置IP地址略,可以参见静态路由

20151205183700255

基本配置命令:

20151205184750085

配置好之后,我们先来看一下邻居关系:(如果不能建立邻居,可能是AS号不同,或K值不同,或认证失败)

20151205190231394

邻居表看完后,看一下拓扑表:

20151205201856843

最后看一下路由表:

20151205202306379

路由表里[90/2195456]解释一下:前面90是EIGRP协议的AD值(汇总EIGRP的AD值为5,外部EIGRP的AD值为170),后面 2323456是度量值。上面理论介绍时说过,度量是由5个参数计算得出,分别是带宽,延时,可靠性,负载,MTU(默认只用带宽,延时)。先确认当前度 量的K值确实是带宽和延时:

20151205203436432

度量的计算公式:10^7/路径的最小带宽)+延时/10]×256,带宽单位kbps,延时单位ms。再查看带宽和延时的值:

20151205205045502

同样可以看R2和R3端口的信息,这里就不截图了。R2到R3的带宽比1544大,延时是1000,。度量:(10^7/1544 + (20000+1000)/10)*256 = (6476+2100)*256 = 2195456(K值是可以修改的R1(config-router)#metricweights 0 0 0 1 0 0,这样就表示度量值只考虑延时)

EIGRP汇总

上面的例子里一上来就no auto-summary关闭自动汇总,因为自动汇总会造成的麻烦比它带来的好处(缩小路由表)要大。在不连续子网内,用自动汇总常会发生错误地重复地汇总路由,导致ping不通。因此通常建议关闭自动汇总。如果真想要汇总,建议手动汇总,汇总总是在出接口上做:

20151205220151030

EIGRP的汇总有一点和RIP不同,RIP是汇总全部,而EIGRP是汇总本地宣告的路由。

EIGRP负载均衡:

20151206111438575

基本配置不在赘述(Cisco路由器的话,记得no ip cef以免影响负载均衡的效果)。从图中就能看出R1访问R2有两条路径:

20151206112930971

两条路由的FD都是2195456,因此无法区分出优劣,将负载均衡。在R1上ping 23.1.1.2 source 11.1.1.1,在R2上打开debug看效果:

20151206123907873

上面R1出发去往R2的两条路由由于度量值一样,所以是等价的负载均衡。EIGRP还支持非等价的负载均衡,通过改变variance值来实现。那Successor将和哪些路由进行非等价的负载均衡呢?和FS。非FS的路由不能进行非等价的负载均衡。例如R2的拓扑表:

20151206125512258

为了实现非等价的负载均衡,需要让上面第二条路由成为FS,所以需要修改K值,R3上的show inter s0/1看到带宽是1544,时延20000,根据度量计算的公式,调整一下带宽和时延:

20151206125923474

第二条路由成为FS后,在拓扑表中(非明细拓扑表)就可以看见这条路由了:

20151206130508750

但第二条路由仍旧不会出现在R2的路由表中,要实现非等价的负载均衡,需要修改variance值,只要FS的FD<Successor的 FD*variance值,FS就能被加入路由表内,和Successor一同进行负载均衡(因为Successor和FS的度量值不同,所以是非等价的 负载均衡)。例子中variance需要改成5(2297856 < 460800*5):

20151206132108482

R2上再同样ping 11.1.1.1,打开debug就可以看出前5个包从e1/0途径R3去往R1,第6个包从s0/0途径去R1,根据度量值的倍数分配数据包,实现了非等价的负载均衡。

EIGRP默认路由:

RIP中用default-information originate产生一条默认路由,EIGRP稍微麻烦点。

20151206151648865

R3作为网络内部的边界路由器,R4作为外部路由器。先将R1,R2,R3配置EIGRP。在R3上配置一条静态默认路由去往外部R4:

20151206153325514

R3因为有了一条通往R4的静态默认路由,因此可以ping通R4,但R1和R2无法访问外部网络的R4,因此需要R3上配置默认网络:

20151206154842865

但这样R1和R2仍旧无法ping通R4,打开R1和R2的路由表查看,发现并没有学习到R3的这条默认路由。因为ip default-network指定的是主类网络34.0.0.0/8,但R3向R1和R2宣告的是34.1.1.0 0.0.0.255,且R3上取消了自动汇总,因此需要将R3改成自动汇总,或手动在内网接口e0/1上做汇总ip summary-address eigrp 10 34.0.0.0 255.0.0.0。这样R1和R2的路由表里就有了R3的默认路由,就能ping通外网R4了

EIGRP认证:

认证通不过不能加入邻居表,认证本身和其他协议的认证并无区别,可参照RIPv2

PS:

RIP里介绍过RIP里passive掉端口,该端口只收不发。EIGRP里同样可以passive掉端口,区别是EIGRP里passive掉后 该端口不收不发。一旦passive后邻居就看不见该路由器了,但仍能宣告路由给邻居。如果连路由也不想宣告给邻居,可以直接no network

Leave a Reply

Your email address will not be published. Required fields are marked *