路由技术(IPv4版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 EIGRP协议使用的数据包

EIGRP发送的报文即有单播报文也有多播报文,EIGRP使用多播报文以尽量减少报文数量,在不能使用多播的情况下使用单播报文。

4.3.1 数据包类型

EIGRP协议运行时使用以下5种数据包。

●Hello:用于发现邻居和维护邻居关系。EIGRP协议具有链路状态型路由协议的特性,和OSPF协议一样需要建立邻居关系(请参见4.4节)。Hello数据包使用组播地址224.0.0.10发送,并携带一个值为0的确认码。在高速链路(接口)上,即带宽大于T1的接口上,每5秒种发送一个Hello包,在低速接口上(带宽小于等于T1),每60秒中发送一个Hello包。

●更新(Update):路由器用来发送其认为已经收敛的路由。当发现新的路由并且达到收敛时,路由器使用更新数据包以组播方式把该路由发送给邻居。在启动时更新数据包使用单点传送地址传送给邻居。更新数据包需要对方确认,所以更新数据的发送比较可靠。

●查询(Query):路由器向邻居查询到达某目的地路由时使用的数据包。查询数据包以组播方式发送并需要邻居的确认,所以也是可靠的。

●答复(Reply):用来应答查询数据包。答复数据包使用单点传送地址应答查询方。该数据也需查询方确认,以保证可靠性。

●确认(ACK):用来确认更新、查询和答复数据包的数据。确认数据包是以单点地址传送的数据包,并携带一个非零确认码。

EIGRP发送的单播报文有:

①Reply报文。当收到一个Query报文后,EIGRP要向查询者发送一个Reply应答报文,该应答报文采用单播发送。

②初始化的Update报文。两台路由器一建立起邻居关系,便要互相交换路由信息,这些交换的路由信息是通过单播发送Update报文来实现的。

③重传报文。当一台路由器相邻居发送多播Update或者Query报文而未收到邻居的确认信息时,EIGRP会向未确认的邻居发送重传报文,重传报文总是采用单播发送。

④ACK信息。ACK信息可以携带在其他单播报文中发送,也可以单独使用单播发送。

EIGRP发送的多播报文包括:

①Hello报文。EIGRP在使能的各个接口上使用多播地址向外周期性发送Hello报文。

②Update报文。除了初始化的Update报文以外,其他路由信息变化时的Update报文都是采用多播的方式发送的。

③Query报文。Query报文总是采用多播的方式来发送的。

对于多播报文,发送后不会进行重传,多播报文的序号确认和可靠重传被分解成各个单播报文进行。也就是说,EIGRP在发送完多播报文后,将分别等待各个邻居的确认,分别给超时的邻居进行重传,重传总是采用单播的方式进行的。为了保证重传过程的效率,保证每一个邻居都可以按照正确的顺序接收报文,EIGRP采用了“流控”和“选择接收(CR)”等处理方式。

4.3.2 序号确认

在EIGRP中,只有可靠传输的报文需要对方在接收报文后确认,不可靠传输则不需要。

采用可靠传输的报文,在EIGRP报文头中的Sequense Number字段中将填入一个顺序递增的序列号,不可靠传输的Sequense Number字段为0。当对端收到报文后,会对该序号进行确认,以通知发送方接收方已经收到报文,不需要再进行重传。确认时将被确认的序号填写在EIGRP报文头中的ACK Number字段中。

EIGRP没有单独的确认报文类型,确认信息携带在其他报文类型中(所有的报文类型都可以携带ACK信息)。当报文不携带确认信息时,ACK Number字段为0。

如果ACK报文采用Hello报文类型单独发送,这种Hello报文被称为ACK报文。ACK报文是一种特殊的Hello报文,它与前面所述的建立并维护邻居关系的Hello报文不同,表4-1列出了它们的区别。

表4-1 ACK报文与一般Hello报文的区别

4.3.3 超时重传

可靠传输的报文在发送出去一段时间后,如果没有得到邻居的应答,那么就会重传该报文。重传16次后如果还没有应答,就将该邻居复位。

报文发送后到重传该报文之间的这段时间称为超时重传时限(Retransmit Time Out,RTO),RTO的计算参照TCP的方法确定(参见RFC793),具体操作如下所述。

①每次发送报文成功后都根据报文的往返时间来计算RTO,计算方法如下(单位毫秒):

●RTT(Round Trip Time,往返时间)——从发出报文到收到ACK所需要的时间,一般来说,RTO为SRTT的6倍。

●SRTT(Smoothed Round Trip Time,平滑往返时间)——对往返时间的平均估算。

每收到一次ACK报文:

②在每一次因为RTO超时而重发报文后,重传时间将越来越长,下一次的重传时间为:

RTO (New)=RTO (Old)×1.5 200≤RTO≤5000

4.3.4 流控(Flow Control)

EIGRP对多播传送采用了一种多播的流控技术,主要目的是协调同一接口上不同响应速度的各个邻居。

流控原理:EIGRP在发送了一个多播报文后,等待一小段时间。如果在这段时间内没有收到任何邻居的确认,EIGRP不会在这个接口上发送下一份多播报文,而会继续等待。只有当至少收到了一个邻居的确认时,EIGRP才会发送下一份多播报文。

在发送下一份多播报文之前,为了避免那些还没有收到前一份报文的邻居产生接收失序,EIGRP会先发送一个Hello报文。在这个Hello报文中将携带有Sequence TLV和Next Multicast Sequence TLV,这2个TLV会将那些收到了前一份报文的邻居置为CR状态。而且,发出的下一份多播报文会在报文头上做CR标记,只有在CR状态的邻居才会收到后续带有CR标记的报文。而那些没有收到前一份多播报文的邻居因为不在CR状态,也会丢弃后一份多播报文(因为后一份多播报文带有CR标记)。EIGRP将采用单播方式对这些邻居依次重发它们错过的报文。

这样做的好处是:既可以利用多播传送来节省网络带宽,又可以避免响应速度快的路由器等待响应速度慢的路由器而影响效率。