增强型内部网关路由协议(Enhanced interior gateway routing protocol,EIGRP)
EIGRP协议使用的是扩散计算——在多台路由器之间通过一个并行的方式执行路由的计算,从而保持在无环的拓扑时可以随时获取较快的收敛。
EIGRP通告的仍然是距离矢量,但EIGRP的更新是非周期、增量的、有界的。
非周期:EIGRP的更新不是按照一定的时间间隔进行更新,而是只有在路由的度量发生变化或是网络拓扑变化时才发送更新,即触发更新。
增量更新:更新只包含发生变化的路由条目。
有界更新:路由器仅仅将更新消息发送给受到影响的路由器。
简单总结:EIGRP的更新是,何时更,更什么,为谁更。
EIGRP使用单播和组播方式更新。
EIGRP支持多种网络协议。
EIGRP的基本原理和实现
EIGRP的复合度量计算(默认简化公式):
EIGRP的四大部分:
-
依赖于协议的模块
-
可靠传输协议
-
邻居发现和恢复
-
扩散更新算法
-
依赖于协议的模块(protocol-dependent modules, PDM)
EIGRP实现了IPX、IP、Apple Talk 协议的模块,它可以担任起特定协议的路由选择任务。 -
可靠传输协议(reliable transport protocol, RTP)
RTP用于管理EIGRP协议的数据包发送和接收。可靠的发送是指发送是有保障的而且数据包是有序列的发送。有保障的发送是依赖CISCO的私有算法——可靠组播,来实现。它使用保留组播224.0.0.10.每一个接收组播数据包的邻居都会发送一个单播的确认数据包。
有序列的发送是通过数据包中的两个序列号实现的。每个数据包都包含一个由发送该数据包的路由器分配的一个序列号,这个序列号在每台路由器发送一个新的数据包时递增1。另外,发送路由器会把最近从目的路由器接收的数据包序列号放在该数据包中。
在一些实例中,RTP也使用不可靠传输,即不需要确认也没有序列号。
EIGRP使用多种类型的数据包,所有数据包都通过IP头部协议88标识。 -
Hello——用于邻居发现和恢复进程。Hello数据包通过组播方式发送且使用不可靠的传输。
-
确认(Ack)——是不包含数据的Hello包,ACK总是使用单播和不可靠方式发送。
-
更新(update)——用于传递路由更新信息。不像rip的更新,EIGRP的这些数据包只会在必要的时候传递必要的信息,而且仅传递给需要路由更新信息的路由器。当只有某台路由器需要路由更新时,更新数据包就是以单播的方式发送,当有多台路由器需要路由更新时,数据包就以组播方式发送更新数据包。且更新数据是以可靠传输方式发送。
-
查询(query)和答复(reply)——是DUAL有限状态机来管理它的扩散计算的。查询数据包可以是组播方式发送,也可以是单播方式发送,而答复数据包只能是单播方式发送。查询和答复数据包总是使用可靠传输方式发送。
如果任何的数据包通过可靠方式组播出去,而没有从邻居处收到一个ACK数据包,那么这个数据包就会以单播方式发送给那个没有响应的邻居。如果经过16次这样的重传仍没有收到ACK数据包,那么这个邻居就被宣告为无效。
在组播方式切换到单播方式之前,等待ACK到来的时间由组播流计时器(multicast flow timer)指定,后续的单播重传时间间隔由重传超时(RTO)指定。对于每一个邻居,组播流计时器和重传超时都可以使用平均回传时间(smooth round-trip time,SRTT)来计算。SRTT是一个用来衡量路由器发送EIGRP数据包到邻居,再从邻居处接收到该数据包的确认所花费的平均时间,以毫秒为单位。
-
邻居发现和恢复
因为EIGRP的更新是非周期的,所以有一个发现和跟踪邻居的方法是非常重要的;这里的邻居是指网络上直连的通告EIGRP的路由器。在大多数网络中,Hello数据包都是以组播方式每隔5s发送一次,其中减掉一个随机差来防止更新的同步。在多点X.25、帧中继、ATM接口上,由于它们的链路速率都是T1或更低速率,因此它们的Hello数据包都是以单播方式每60s发送一次的。在接口上修改hello时间:#ip hello-interval eigrp
当一台路由器从它的邻居路由器收到一个hello数据包时,这个数据包将包含一个保存时间(hold time),这个保存时间告诉本路由器,这个时间是它收到后续hello数据包之前最大的等待时间。如果保存计时器超时了,路由器还未收到hello数据包,那么宣告这个邻居不可达。并且通知DUAL这个邻居丢失了。默认保存时间是hello时间的三倍,对于低速非广播(NBMA)网络是180s,对于其它网络是15s.在接口上修改默认值:
#ip hold-time eigrp
EIGRP协议具有15s以内检测邻居丢失的能力,对照RIP的180s,显然这是EIGRP能够快速收敛的一个重要因素。
EIGRP的每一个邻居的信息都记录在邻居表中。
邻居表(neighbor table)中记录了邻居路由器的IP地址以及接收邻居Hello数据包的接口,邻居路由器的保存时间、SRTT和邻居关系建立时间一起记录在路由表中,这里的邻居关系建立时间是指从邻居第一次被添加到邻居表到现在的时间。重传超时(RTO)是指在组播方式发送失败的数据包在单播方式发送后,路由器等待确认的时间,单位为毫秒(ms).
如果一个EIGRP的更新、查询、答复数据包发送出去,那么数据包的一个拷贝就会放在重传队列中排队,如果重传超时了还未收到确认数据包。重传队列中的拷贝数据包将再次发送出去。队列标记(Q count)就是标识在这个重传队列中待发送的数据包数量的。从邻居收到的最新更新、查询、答复数据包的序列号也记录在邻居表中。可靠传输协议RTP跟踪这些序列号,以确保来自邻居的数据包不是无序的。最后,H列记录了这台路由器所学到的邻居顺序号。