《重识云原生系列》专题索引:
EIGRP(Enhanced Interior Gateway Routing Protocol)增强内部网关路由协议,也是Cisco公司的私有协议(2013年已经公有化),它结合了链路状态和距离矢量型路由选择协议的Cisco专用协议,具有快速收敛,减少带宽占用等特点。
EIGRP是由距离矢量和链路状态两种路由协议混合,因此可以像距离矢量协议那样,从它的相邻路由器那里得到更新信息;也像链路状态协议那样,保存着一个拓扑表,然后通过自己的DUAL算法选择一个无环路径。
不同于传统的距离矢量协议,EIGRP有着很快的收敛时间,而且不用发送定期的路由更新;也不像链路状态协议,EIGRP并不知道整个网络是什么样的,它只能靠邻居公布的信息。EIGRP使用与IGRP相同的路由算法DUAL(扩散更新算法),DUAL机制是EIGRP的核心,通过它来实现无环路径。内部EIGRP管理距离为90,外部EIGRP管理距离为170,支持等价和非等价负载均衡。IP数据包中,EIGRP的协议字段为88。
注意:路由协议都是通过端口的Primary IP传输数据流并形成Neighbor ID(代表一个接口)。EIGRP路由器在接收到Hello后会用自己的Primary IP的子网掩码与Hello中的Neighbor ID进行与运算,得出网络地址后与自己路由表中的直连网段进行匹配,有则认为对方是邻居,并将其放入邻居表中,没有就会以不在同一子网为由来拒绝形成邻居。
说明:IGRP和EIGRP在相同的自制系统中可以自动再发布路由信息,但是也可以关闭自动再发布路由信息。
IGRP(Interior Gateway Routing Protocol,内部网关路由选择协议)是Cisco特有的基于距离向量的路由协议,虽然同样应用于规模较小的局域网络,但是,与RIP路由协议有所不同,IGRP使用IP层的端口号9进行报文交换,而RIP则是使用520端口进行报文交换。
IGRP同样是一种动态距离向量路由协议,它由Cisco公司20世界80年代中期设计推出,使用跳数来确定到达一个网络的最佳路径,使用延迟、带宽、可靠性和负载来确定最优路由。默认状态下,IGRP每90秒钟发送一次路由更新广播,在3个更新周期(即270秒)内,如果没有从路由中的第一个路由器接受到更新,则宣布路由器不可访问。在7个周期(即630秒)后,Cisco IOS(网际操作系统)软件会从路由表中清除该路由。
EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议,采用弥散修正算法(DUAL)来实现快速收敛,可以不发送定期的路由更新信息以减少带宽的占用,支持Appletalk、IP、Novell和NetWare等多种网络层协议。自从EIGRP路由协议诞生后,IGRP路由协议便很少再被使用了。
初始运行EIGRP的路由器都要经历发现邻居、了解网络及选择路由的过程,在这个过程中同时建立三张独立的表格:Neighbor Table、Topology Table、Routing Table。其中Neighbor Table保存了和路由器建立了邻居关系的且直连的路由器;Topology Table包含路由器学习到的到达目的地的所有路由条目;Routing Table则是包含记录到达目的地址所需最短可行距离与下一跳路由地址的路由表。
以路由器R4为例介绍Neighbor Table、Topology Table、Routing Table
EIGRP使用可靠传输协议RTP(Reliable Transport Protocl),RTP确保每一个EIGRP分组都必须得到确认,只有前一个分组得到确认之后才会发送下一个分组,RTP的重传机制使得发送给邻居可靠的报文在RTO(Retransmit Time Out)超出以后,还没得到确认的话,RTP会将分组重传(重传为单播,目的是为了不影响那些已经正常确认的路由),最多重传16次,如果16次之后还没有确认则重置邻居关系,直到邻居关系保持时间(hold time)超出,宣布邻居不可达。接收者需要对update、reply和query这些有序号的报文进行确认,不需要可靠性的报文(如Hello和ACK)则没有必要确认。
EIGRP使用多种类型的packet,这些packet通过IP头部信息里的协议号88来标识。在EIGRP协议中,总共会使用5种类型的数据包,分别为Hello、Update、 Query、Reply、Ack,下面介绍各种数据包的功能与用途:
说明:OSPF要求邻居必须具有相同的Hello和Down的判定间隔才能进行通信,而EIGRP没有这种限制。在实际应用中,将EIGRP的保持时间设为Hello间隔的3倍,而在OSPF中将保持时间设为Hello间隔的4倍。
EIGRP选择一条主路由(最佳路由)和一条备份路由放在topology table(EIGRP到目的地支持最多16条链路。从12.3T IOS版本之后,最多支持16条负载均衡,之前为6条).它支持几种路由类型:内部,外部(非EIGRP)和汇总路由.EIGRP使用混合度量值.
10的7次方除以源和目标之间最低的带宽乘以256(10的7次方除以以Kbit/s为单位的最小带宽,然后加上延迟之和除以10,最后乘于256)
接口的累积延迟乘以256,单位是10微秒
根据keepalive而定的源和目的之间最不可靠的可靠度的值
根据包速率和接口配置带宽而定的源和目的之间最不差的负载的值
路径中最小的MTU.MTU包含在EIGRP的路由更新里,但是一般不参与EIGRP度的运算
EIGRP 要求两台路由器的K值必须相同才能成为邻居。另外,K2,K4,,K5最好不要设置,因为这些参数设置为非零之后,会导致计算度量值时会考虑接口的负载和可靠性,而负载和可靠性会随时间变化,这将导致EIGRP重新泛洪拓扑数据,还可能导致路由器不断地选择不同的路由,由此导致网络不稳定。
EIGRP的Update包是非周期性发送的:
在所有的情况中,Hello包是不需要确认的.可以在接口配置模式下修改该接口的Hello包默认的发送间隔,命令为
ip hello-interval eigrp
当一个路由器收到从邻居发来的Hello包的时候,这个Hello包包含了一个holdon time,这个holdown time告诉这个路由器等待后续Hello包的最大时间.如果在超出这个holdown time之前没有收到后续Hello包,那么这个邻居就会被宣告为不可达,并通知DUAL这个邻居已丢失.默认hold time是3倍于Hello包发送间隔的, 更高链路-- 默认Hello间隔和保持时间是5s和15s T1或低于T1链路-- 分别是60s和180s可以在接口配置模式下修改这个默认的holdown time,命令为:
ip hold-time eigrp.
EIGRP邻居信息都记录在邻居表(neighbor table)中,使用show ip eigrpneighbors命令查看IP EIGRP的邻居。
如果EIGRP不考虑环路的问题,那么当连接路由3和4的线路断开后会因到不了network a而使路由1-3相互查询怎么去network a而产生环路。因此EIGRP对于环路的防止考虑两方面:
永远不会在同一个接口下通告一条该接口学到的路由信息
接收路由信息的接口,再从该接口通告出刚才学到的路由为不可达
触发条件:
在一些大型网络中,往往存在不同的自治区域需要互联的情况。比如在图1的情况下,AS号为1000的要与AS号为2000的两个EIGRP相互通信,只需要在中间路由器配置重分发,注意配置重分发也要避免路由环路。
示例:
Router One
router eigrp2000 network 172.16.1.0 0.0.0.255
Router Two
router eigrp2000
redistribute eigrp1000 route-map to-eigrp2000
network 172.16.1.0 0.0.0.255--在AS=2000内定义邻居AS=1000去AS=2000的网段
!
router eigrp1000
redistribute eigrp2000 route-map to-eigrp1000--在AS=1000内定义邻居AS=2000去AS=1000的网段
network 10.1.0.0 0.0.255.255
route-map to-eigrp1000 deny 10
match tag 1000
!
route-map to-eigrp1000 permit 20
set tag 2000
!
route-map to-eigrp2000 deny 10
match tag 2000
!
route-map to-eigrp2000 permit 20
set tag 1000
--当AS=1000的网段被标上(tag)1000的标记,当AS=2000重分发进AS=1000时,被标上1000的路由信息将被拒绝,以防产生环路;反之在AS=2000上亦然。
Router Three
router eigrp 1000network 10.1.0.0 0.0.255.255
路由1和3之间就能互访了。
精确路由计算和多路由支持。EIGRP协议继承了IGRP协议的最大的优点是矢量路由权。EIGRP协议在路由计算中要对网络带宽、网络时延、信道占用率和信道可信度等因素作全面的综合考虑,所以EIGRP的路由计算更为准确,更能反映网络的实际情况。同时EIGRP协议支持多路由,使路由器可以按照不同的路径进行负载分担。
较少带宽占用。使用EIGRP协议的对等路由器之间周期性的发送很小的hello报文,以此来保证从前发送报文的有效性。路由的发送使用增量发送方法,即每次只发送发生变化的路由。发送的路由更新报文采用可靠传输,如果没有收到确认信息则重新发送,直至确认。EIGRP还可以对发送的EIGRP报文进行控制,减少EIGRP报文对接口带宽的占用率,从而避免连续大量发送路由报文而影响正常数据业务的事情发生。
快速收敛。路由计算的无环路和路由的收敛速度是路由计算的重要指标。EIGRP协议由于使用了DUAL算法,使得EIGRP协议在路由计算中不可能有环路路由产生,同时路由计算的收敛时间也有很好的保证。因为,DUAL算法使得EIGRP在路由计算时,只会对发生变化的路由进行重新计算;对一条路由,也只有此路由影响的路由器才会介入路由的重新计算。
MD5认证。为确保路由获得的正确性,运行EIGRP协议进程的路由器之间可以配置MD5认证,对不符合认证的报文丢弃不理,从而确保路由获得的安全。
路由聚合。EIGRP协议可以通过配置,对所有的EIGRP路由进行任意掩码长度的路由聚合,从而减少路由信息传输,节省带宽。
实现负载分担。去往同一目的的路由表项,可根据接口的速率、连接质量和可靠性等属性,自动生成路由优先级,报文发送时可根据这些信息自动匹配接口的流量,达到几个接口负载分担的目的。
配置简单。使用EIGRP协议组建网络,路由器配置非常简单,它没有复杂的区域设置,也无需针对不同网络接口类型实施不同的配置方法。使用EIGRP协议只需使用router eigrp命令在路由器上启动EIGRP 路由进程,然后再使用network 命令使能网络范围内的接口即可。
区域概念,EIGRP已经引用AS概念,可以进行大规模网络的路由支持了。
定时发送HELLO报文。运行EIGRP的路由器之间必须通过定时发送HELLO报文来维持邻居关系,这种邻居关系即使在拨号网络上,也需要定时发送HELLO报文,这样在按需拨号的网络上,无法定位这是有用的业务报文还是EIGRP发送的定时探询报文,从而可能误触发按需拨号网络发起连接,尤其在备份网络上,引起不必要的麻烦。所以,一般运行EIGRP的路由器,在拨号备份端口还需配置Dialer list和Dialer group,以便过滤不必要的报文,或者运行TRIP协议,这样做增加路由器运行的开销。而OSPF可以提供对拨号网络按需拨号的支持,只用一种路由协议就可以满足各种专线或拨号网络应用的需求。
基于分布式的DUAL算法。EIGRP的无环路计算和收敛速度是基于分布式的DUAL算法的,这种算法实际上是将不确定的路由信息散播(向邻居发query报文),得到所有邻居的确认后(reply报文)再收敛的过程,邻居在不确定该路由信息可靠性的情况下又会重复这种散播,因此某些情况下可能会出现该路由信息一直处于活动状态(这种路由被称为活动路由栈),并且,如果在活动路由的这次DUAL计算过程中,出现到该路由的后继(successor)的测量发生变化的情况,就会进入多重计算,这些都会影响DUAL算法的收敛速度。而OSPF算法则没有这种问题,所以从收敛速度上看,虽然整体相近,但在某种特殊情况下,EIGRP还有不理想的情况。
EIGRP是Cisco公司的私有协议。Cisco公司是该协议的发明者和唯一具备该协议解释和修改权的厂商。如果要支持EIGRP协议需向Cisco公司购买相应版权,并且Cisco公司修改该协议没有义务通知任何其他厂家和使用该协议的用户。而OSPF是开放的协议,是IETF组织公布的标准。世界上主要的网络设备厂商都支持该协议,所以它的互操作性和可靠性由于公开而得到保障,并且在众多的厂商支持下,该协议也会不断走向更加完善。