动态路由协议-EIGRP 上

动态路由协议-EIGRP 上

Scroll Down
请注意,本文发布日期:  227  天前,最后编辑日期:  139  天前,内容可能已经不具有时效性,请酌情参考。

一、EIGRP介绍与特性

EIGRP(即增强型内部网关路由协议),是内部网关路由协议之一,属于距离矢量路由协议,EIGRP协议被封装在IP协议中。

20200318145622.png

二、EIGRP基本原理与实现

一张图先来简单了解下EIGRP的工作原理

20200318145637.png

tips:为了更好的描述对象,我们将发送路由器称为sender;接收路由器称为receiver

1. 可靠传输协议

可靠传输协议(RTP):可靠传输是指发送是有保障的而且数据包是有序的发送的。主要用来管理EIGRP数据包的发送和接收。

  • 有保障的:是指依赖cisco的私有算法、使用组播地址224.0.0.10、每一个接收可靠组播数据包的邻居都会发送一个单播的ACK数据包
  • 数据包是有序的发送:是指通过在每个数据包中包含两个序列号来实现的。每个数据包都包含一个由发送该数据包的路由器分配的序列号[A],[A]在每台路由器发送一个新的数据包时+1。此外,sender会把最近从receiver收到的数据包的序列号[B]放在该数据包中。

Tips:RTP也可以使用不可靠的发送!不可靠发送的数据包不包含序列号不需要ACK数据包作确认

20200318150050.png

如果queryupdate数据包通过可靠组播发送出去,而没有从邻居那里收到一个ACK数据包,那么该数据包就会以单播的方式被重新发送给那个没有响应的邻居。如果超过16次这样的单播重传还没有收到ACK数据包的话,该邻居会被通告无效。

从组播方式切换到单播方式之前等待一个ACK时间可以由组播流计时器指定。后续的单播之间的时间内可以由超时重传(即RTO)指定。对于每个邻居,组播流计时器和超时重传计时器都可以通过平均回程时间(即SRTT)来计算。SRTT是一个用来衡量路由器发送EIGRP数据包到邻居和从邻居那里接收对该数据包的ACK数据包所花费的平均时间,以ms为单位。

tips:有意思的是,超时重传在TCP协议中是影响网络性能的重要因素之一

20200318150355.png

(一)、EIGRP数据包封装

20200318150428.png

其中EIGRP头部,包含了TLV。LV不仅携带路由条目的信息,而且提供多个字段来管理DUAL算法的处理、组播的先后次序和IOS软件版本。

(二)、EIGRP头部解析

20200318151024.png

  • opcode:区分EIGRP包的类型
  • checksum:除了IP头部,计算整个EIGRP数据包的校验和
  • sequence:RTP中的32bits的序列号
  • ACK:本地路由器从邻居路由器收到的32bits序列号,一个包含有非0(即单播)ACK字段的hello包将被看作一个ACK数据包。
  • AS:指定一个EIGRP协议域的标识号
  • TLV:分为一般的TLV字段和IP特有的TLV字段

一般TLV超过了我们的研究范畴,这里不过多阐述。我们只讨论IP特有的TLV字段。每一个内部或外部路由的TLV都包含了一个路由条目。每个update、query、reply数据包都至少包含一个路由TLV。内部和外部路由的TLV包括了路由的度量信息。

20200318151301.png

2. 邻居发现和恢复

邻居:指网络上直连的通告EIGRP的路由器

由于EIGRP协议的更新消息是触发更新的,因此有一个发现和跟踪邻居的方法是非常重要的;大多数网络中,hello数据包是以组播方式每5s发送一次,并且hello数据包是不进行ACK确认的

当receiver从它的邻居sender收到一个hello数据包时,该数据包内有一个holdtime,这个holdtime会告诉receiver,在它收到后续的hello数据包前等待的最长时间。如果holdtime超时没有收到hello包,那么通告该邻居不可达,并且通知DUAL该邻居丢失。所以EIGRP具有15s内检测邻居丢失的能力。对EIGRP的快速收敛起到很大作用!

默认3 * hellotime = holdtime

影响EIGRP邻居建立的因素:AS号不一致K值不一致认证不通过


修改hello包发送时间间隔:ip hello-interval eigrp

修改holdtime时间间隔:ip hold-time eigrp

3. 扩散更新算法(DUAL)

扩散更新算法(即DUAL算法)是一种收敛算法,代替了一般距离矢量路由协议使用的bellman-ford算法。DUAL算法是由dijkstra和scholten提出的。DUAL算法的设计思想:即使短暂的路由环路也会对一个网络的性能造成损害,指的是为了随时打破路由环路

RTP和邻居发现与恢复满足了DUAL实施的以下几个条件:

  • 一个路由器需要在短时间内检测到一个新邻居的存在/邻居的丢失
  • 在一个正在运行的链路上传送的所有消息应该在短时间内正确的收到,并且包含正确的序列号
  • 所有的消息,包括改变链路的代价、链路失败、发现新邻居的通告,都应该在短时间内一次一个的处理,并且应该被有顺序的检测到

预备概念:

邻接(adjacency):刚启动时,路由器每5s向组播地址224.0.0.10发送一次hello包发现它的邻居并标识自己给邻居识别。当邻居被发现时,EIGRP协议将试图和它的邻居形成一个邻接关系。邻接是指两个相互交换路由信息的邻居之间形成的一个逻辑的关联关系。一旦邻接建立成功,路由器就可以从它们的邻居那里接收路由更新消息了。这里的路由更新消息包括sender所知道的所有路由和这些路由的metric。对于每一条路由,路由器都将会基于它邻居通告的距离和到它的邻居的链路代价计算出一个距离

通告距离(AD):下一跳路由器到达目的网络的开销
可行距离(FD):(本路由器到达下一跳距离+下一跳路由器通告过来的AD)min
可行性条件(FC):AD<FDmin ? 防环机制
可行后继路由器(FS):满足FC条件,那么就会成为备份路径中到达目标网络最近的下一跳设备
后继路由器:最佳路径中到达目标网络最近的下一跳设备

20200318151938.png

tips:

  • 可行后继路由器(FS)可以有多个,只要满足FC条件即可
  • 后继路由器可以有多个,执行等价负载均衡
  • FC条件:最佳路径的FD肯定是最小的;AD为判断备份路径是否成立的路由的AD

20200318152008.png

如图,链路之间是以delay为链路代价的,查看A的拓扑表,显示如下信息:
P 10.1.6.0/24 , 1 successors ,FD is 1024
Via 10.1.3.1 (1024/512), s0 最佳路径
Via 10.1.5.2 (1792/768), s1 备份路径
从拓扑表中分析的出10.1.3.1是后继路由器,10.1.5.2是可行后继路由器(因为AD<FDmin),以下是最佳路径的FD和AD:

FD=256*(2+1+1)=1024

AD=256*(1+1)=512

可行后继路由器减少了扩散计算的数量,并提高了网络的性能,因此可行后继路由器非常重要。可行后继路由器也对降低重新收敛的次数也有一定贡献。如果由于链路失效/链路代价增加并超过了FD而丢失了后继路由器,那么会先查看拓扑表中是否有可行后继路由器,如果有则立刻成为后继路由器。如果没有,则执行DUAL计算。

(一)、DUAL有限状态机

所谓的DUAL计算,就是DUAL的有限状态机执行顺序。以下是简化的有限状态机

20200318152207.png

对于每一台收到query的邻居路由器,本地路由器将设置一个答复状态标记来不断跟踪所有未处理的query,当本地路由器收到所有发送到邻居路由器的query的reply时,DUAL计算完成。

在DUAL计算开始,活动计时器就开始计时(默认3min),如果活动计时器超时后还没有收到希望收到的所有reply,那么这条路由就被宣告“卡”在活动状态(即SIA状态),这些没有答复的邻居将从邻居表中删除,并且DUAL计算认为这个邻居回应了一个无穷大的metric。(该情形一般发生在低速带宽或质量差的链路的大型网络中)

由于query丢失而造成邻居的删除会带来负面影响。所以增加了两个新的EIGRP数据包类型:即SIA querySIA reply。这两个类型的EIGRP数据包可以减少SIA故障的机会。在DUAL完成时,始发路由器会将FD设置成无穷大,这样可以确保任何reply到达目的地时有限距离的邻居路由器都能满足FC,并成为一台可行后继路由器。

(二)、扩散计算示例

示例:路由器B到达10.1.7.0的路由,由于B和C之间的链路断开了。EIGRP将失效的链路当作一条拥有无穷大距离的链路。

20200318152313.png

1st. B检查拓扑表,查到达子网10.1.7.0的FS,但是没有找到;

2nd. B变为活动状态,这条路由的距离和FD也变成不可达的了;

3rd. B发送query到邻居A,B关于A的答复状态标记被置为1(用来指出期待一个reply);

4th. 一旦收到query,A将执行本地计算,由于A拥有到达子网10.1.7.0的FS,所以它的路由将保持P状态;

5th. C将变成新的后继路由器,而A将发送一个reply(经过C到达10.1.7.0的距离的答复消息)给B,因为到达子网10.1.7.0的距离已经增加了,而且路由不处在活动状态,因此A的FD没有变化

6th. B从A收到reply,就会把答复状态标记置为0,路由状态置为P状态

7th. A成为了B的新后继路由器,FD也将设置成新的距离

8th. B发送一个包含本地计算度量的更新给A

9th. A也发送新的更新来通告它的新度量值

4. 度量值计算

度量值:即metric,衡量一个路由协议内部的最优路径的参数

在实际调整metric的时候,除了需要设置串行链路的带宽与其实际带宽相符,还应避免修改bandwidth的配置。如果需要修改一个接口的metric来影响EIGRP的路由选择,应该修改delay的配置

两个路由器之间的链路的metric值是通过公式计算出来的:

20200318152546.png

其中的参数解释:

  • BW(bandwidth):带宽;源和目的之间的最小带宽
  • DLY(delay):延迟;路径上接口的累计延迟
  • RELIA(reliability):可靠性;源和目的之间的最低可靠性,基于存活消息
  • LOAD(loading):负载;源和目的之间链路上的最大负载,基于速率和接口配置的带宽
  • K1-5默认值:1 0 1 0 0

默认的metric公式 = (delay + bandwidth)

  • delay:表示取值为沿路所有数据出接口/路由入接口delay的累计和
  • bandwidth:表示取值为沿路所有数据出接口/路由入接口bandwidth的最小值
    计算得出的metric值越小,路径越优

#查看bandwidth、delay:sh int e0/0

#查看k值:sh ip protocols

#修改k值:metric weight 0 k1 k2 k3 k4 k5

#修改接口带宽:bandwidth value

#修改接口延迟:delay value

Tips:

  • 建立邻居后,修改K值会导致邻居断开
  • 串行接口缺省带宽为1544kbit/s

实例:计算出下面的R1路由器路由表中的去往3.3.3.3/32的metric值

20200318152924.png

bandwidth = (10^7/10000kbit)*256 = 256000
delay = (1000+5000)/10 * 256 = 153600
metric = 25600 + 153600 = 409600

20200318153052.png

动态路由协议 EIGRP 下