TCPIP卷一(10):EIGRP的DUAL算法和SIA解决方案

2023-11-03 02:21

本文主要是介绍TCPIP卷一(10):EIGRP的DUAL算法和SIA解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明

对于EIGRP来说,核心就是DUAL算法了,它决定EIGRP的很多参数和在网络中快速收敛起到决定性的作用。

DUAL的预备概念

1、一个EIGRP的路由器必须在有效时间内检查到邻居的存在或者丢失,也就是指的Hello包功能

2、当一个可靠的组播传送发送出去后,就必须在规定的时间内收到确认信息

3、当链路代价、链路down/up、和新的邻居发现后,都必须在规定的时间内一次一个的处理,并且是有序的。
4、邻接概念:EIGRP会通过Hello包来发现邻居的存在,当邻居存放在邻居表后,EIGRP试图将邻居关系形成一个邻接,也就是尝试着路由信息的交换,这些路由信息包括从它邻居那所知道的所有关于这些路由的度量值,计算出最优的放入进路由表中。

FD、FC、S、FS的详细分析

tcpip

如图,地址信息如上,来研究DUAL算法中的FD、FC、S、FS的概念,其中A、B、C路由器以R1、R2、R3来命名

R1(config)#router eigrp 1
R1(config-router)#network 12.1.1.1 0.0.0.0
R1(config-router)#network 10.1.1.1 0.0.0.0

R2(config)#router eigrp 1
R2(config-router)#network 12.1.1.2 0.0.0.0
R2(config-router)#network 10.1.1.2 0.0.0.0
R2(config-router)#network 23.1.1.1 0.0.0.0

R3(config)#router eigrp 1
R3(config-router)#network 23.1.1.2 0.0.0.0
R3(config-router)#network 3.3.3.3 0.0.0.0

tcpip

这次主要查看 关于3.0.0.0/8的路由信息。

一、FD(Feasible Distance,可行距离):到达每一个目的地的最小度量值将作为该目的的网络可行距离,出现在路由表中。(其余的放入拓扑表中作于备份),关于3.0.0.0/8这条路由,FD is 435200,可以发现它由两个下一条,一个为435200,一个为2323456,因为435200是最小的,所以,它出现在路由表中,而2323456则作为备份存在。

tcpip

二、AD (Advertisement distance) :邻居到达该目的地的度量值,也就是指的邻居的FD

tcpip

可以发现在R1上的关于3.0.0.0/8的度量值是435200,后面还有个409600,这就是AD,邻居到达3.0.0.0/8这条路由的最优度量值

tcpip

可以看到关于R2上面到达3.0.0.0/8的度量值是409600,也就是R1的AD

三、S(Successor,后继路由器):抵达目的地最佳的下一跳,也就是FD最小的。

四、FS (Feasible Successor,可行后继路由器)和FC (Feasible Conditions,可行性条件):
FS的作用就是当有多条路径去往同一个目的地的时候,当满足了特定条件后(也就是FC),它就能成最佳路径的备份。
FC就是规定当什么情况下才能满足这个条件,只有当这条次优路径的AD值小于最佳路径的FD的时候,就相当于FC条件成立了。

tcpip

还是查看3.0.0.0/8这条路由,它的最优路径是从12.1.1.2走,也就是FD为435200,次优路径为2323456走的是10.1.1.2,这时候它在拓扑表中,是因为次优路径的AD<最佳路径的FD,也就是409600<435200。如果这时候当409600变成436200的时候,那么它就不会出现在拓扑表中,其实是存在的,不过需要通过 show ip eigrp topology all-links才能看到,这在调整cost值的时候,是非常有帮助的。 总结:

1、在设计EIGRP的时候,成功的关键就在于是否有FS的存在,有了FS的存在,那么整个收敛的速度是非常之快的,就连OSPF也比拟不了。
2、可行性后继路由器和可行性条件的概念是避免环路的核心技术,也就是说可行性后继路由器到达目的的度量值比本地的更短
3、拓扑表中记录着:1、目的网络的可行距离 2、所有的可行后继路由器 3、每一个可行性后继路由器通告到目的的网络的通告距离,也就是AD。 (其实在拓扑表还记录着其他没有达到FC条件的链路,只是不显示正常的拓扑表中)
4、到达下一跳设备的链路fail或者到达目的地的cost增加,如果存在可行后继路由器,那么可行后继路由器将在次秒的时间内成为后继路由器,极其迅速的收敛

 

DUAL的有限状态机

当EIGRP不执行扩散计算时,每一条路由都处于稳定状态(passive state),当发生了某种变化的时候就会重新查找可行性后继路由器的存在。

{1、直连链路代价发生变化 2、直连链路的状态(up或down)发生变化 3、收到一个更新包 4、收到一个查询包 5、收到一个答复包 }


一、当路由器检查到这些变化后,会在本地路由器上执行一个本地计算,如果有FS存在的话,通知有备份路由器存在,不进行扩散更新。

 

二、如果不存在一台可行性后继路由器的话,那么就进行扩散更新算法,并且比较路由状态改变为活动状态(active state),那么这个路由在扩散更新完之前不能:1、改变路由的后继路由器 2、改变正在通告的路由距离 3、改变路由的FD 4、开始进行另外一个扩散更新算法。

三、当一条路由消失后,并且没有到达该目的可行性后继路由器时候, 就向所有邻居发送query查询包,如果该邻居有去往目的路由的可行性后继路由器,那么就回复一个reply,如果没有可行性后继路由器,那么直接把这条路由变为active状态,并进行扩散更新计算。

四:对于每一个收到查询的路由器邻居,本地路由器将设置一个答复状态标记 (reply status flag)来跟踪所有没有处理的查询,当本地路由器收到发送到所有邻居路由器的查询后,扩散更新完成。

tcpip

五:在某些情况下,三分钟内没有收到reply,那么该设备将reset所有的邻居。这称之为SIA,cisco专门针对这个问题设计了新的报文:SIA Query和SiA Reply,它的意思是说当A的一条路由出现了问题的时候,它会发送query查询包给B,B收到以后,会把这条路由标记为active,B又没有FS的情况下,那么就会询问C, 假设C这时候链路出现了问题,或者链路带宽拥塞了,导致这个查询回不来,这样在A等待180s后,发现查询还没回来,就把A与B之间的邻居给down了,其实在对于B来说是无辜的,因为是来自C的回应不能正常被收到所导致的,这样是不合理的。在12.1的IOS后,引入了SIA的query和reply报文,当发送了查询包90s后,还没有收到来自邻居的reply信息的话,会发送一个SIA的query报文,如果直连邻居是正常的话,就会回复reply报文,那么就不会因为SIA状态影响无辜的邻居,只有回应不了SIAreply的邻居会被重置掉。

在一个良好的网络中,我们需要尽量避免SIA的出现,避免SIA的出现就是保证牧

这里以三种情况来介绍关于,SIA的情况,以及解决办法

案例分析一:有FS的情况下,关于DUAL的收敛和SIA状态

tcpip

这是卷一给出的例子,其实很好理解,路由全部收敛完成后,该例子中,Cayley没有可行后继路由器,当和wright的链路失效,由于没有FS的存在,会向Lilienthal发送查询关于10.1.7.0/24的信息。这时候lilenthalL是拥有到达10.1.7.0的可行后继路由器的,也就是Wright,并且这时候lilenthall把Wright变成为后继路由器,紧接着L会发送reply给Cayley,Cayley将把10.1.7.0从active置为Passive状态这是一个被查询设备有可行后继路由器的情况,重新计算新的度量值。(在reply中是附带这个10.1.7.0/24的度量值的)

关于这个例子,完全可以用GNS3搭建,通过debug信息来观看 reply和query的包,主要注意的是,这个例子中是修改了K值的,也就是说只用了延迟作为度量值的参考,并且注意的时候接口延迟的单位是10us,所以需要注意才行。

案例分析二:在没有FS的情况下,但是reply回应不来。

tcpip

SIA的状态不容易被看见,这时候需要人为的搭建一个SIA的状态出来,地址信息如拓扑,之前已经提到过SIA状态就是当一个路由丢失后,而没有FS的情况下,那么它就会发送查询,当这个查询在3分钟内没有回应的话就会重置邻居关系,但是,有时候直连邻居是无辜的,所以,后续加入了SIA的query和reply报文,在1.5分钟后的时候,就会发送SIA的query,如果邻居回应了reply那么就不会重置邻居,只会重置有问题的邻居。 在这个环境下,我们把C路由器的3.3.3.3给shutdown了,那么它会发送query包,这时候,我们需要做的就是把A和B的holdtime改成200,并且应用一个ACL在B上面,过滤掉来自A的reply回应,这时候SIA状态就会出现了,如果正常的话,那么A和B的EIGRP邻居会down掉,而B与C之间则不会。

A(config)#router eigrp 1
A(config-router)#network 12.1.1.1 0.0.0.0

B(config)#router eigrp 1
B(config-router)#network 12.1.1.2 0.0.0.0
B(config-router)#network 23.1.1.1 0.0.0.0

C(config)#router eigrp 1
C(config-router)#network 3.3.3.3 0.0.0.0
C(config-router)#network 23.1.1.2 0.0.0.0

A(config)#int f0/0
A(config-if)#ip hold-time eigrp 1 200

B(config)#int f0/1
B(config-if)#ip hold-time eigrp 1 200

tcpip

可以看到关于hold时间已经为200了,这样更改是为了SIA状态的出现。

B(config)#access-list 100 deny eigrp any any
B(config)#access-list 100 permit ip any
B(config)#int f0/1
B(config-if)#ip access-group 100 in

C(config)#int lo 0
C(config-if)#shutdown
C#debug eigrp packets siAquery siAreply reply request

这时候,把ACL挂上以后,就把C的loopback口该down掉,同时开启EIGRP的SIA查询和应答。

tcpip

在1分30s的时候,C发送了SIAquery的擦新,并且收到了来自B的reply,可以通过debug信息查看到。

这时候查看B的状态

tcpip

这时候,B状态显示也为A,也就是active,并且对于状态是Qqr也就是是query状态(发给A路由器了),reply(回应C路由器),replay status(回应给C路由器的) ,这时候还在等待A的查询,但是,A回应了查询的,被B的ACL给拒绝掉了,所以,回应不来。

tcpip

这时候,当B的拓扑表中关于3.0.0.0/8的Successor 到达2分58s后,他还没有收到来自A的回应,所以,当2s过后,从拓扑表中删除,并且提示是 邻居down,原因是stuck in ative。

tcpip

这时候在B路由器上只有关于C路由器的信息了,而A则没有了。

tcpip

这时候C也收到了来自B的回应,在2分59s的时候,3.0.0.0/8路由还是A状态,当到了3分钟后,就从拓扑表中消失了。

总结:可以看出来,当出现 SIA状态是非常麻烦的,并且在大型网络中,网络的范围很大的话,很有可能SIA状态出现,并且在3分钟内收不到回应,所以,我们在设计网络的时候,一定要保证目的路由有FS存在,这样收敛死非常快的,也不会出现SIA状态,另外就是stub的应用了。

案例分析三:stub区域的应用

tcpip

这个环境是继续上个案例来分析的,不过这时候,我们把A路由器设置为stub区域,stub区域的作用就是B路由器不会发送reqer到stub区域的EIGRP邻居,同样的方法把loopback给shutdown了,A与B之间的邻居是否会出现问题。

环境的搭建参考案例分析二,一模一样的,唯一的区别就是在A上面定义为stbu区域

A(config)#router eigrp 1
A(config-router)#eigrp stub

tcpip

可以通过show ip eigrp neighors detail来查看邻居是否为stub,可以看都关于12.1.1.1是stub区域。

这时候同样的把loopback给shutdwn,查看这个SIA状态是否会影响到A与B的邻居,注意B上面的ACL和hold时间都是与案例分析二一样的。

tcpip

可以看到,当把loopback0 shutdown后,EIGRP发送那个了Request,立马收到了来自B的reply,这时候在查看top表,发现已经收敛完成了,从这点上可以看出来,B并没有发送给stub区域,直接回应了reply给C,这时候收敛是非常迅速的。

总结:这次主要介绍了DUAL算法和SIA状态在EIGRP的关键性,这是在设计EIGRP时候的必须明白的事情,一个EIGRP网络的好坏取决于是否都有FS的存在,现在EIGRP在银行和证卷行业还是应用的非常多的,如果不是私有协议的话,我相信不会比OSPF应用的少。这里还有stub区域还有许多参数,将在下篇进行介绍,这次主要介绍DUAL算法和SIA状态的解决方案。

如果大家有任何疑问或者文中有错误跟疏忽的地方,欢迎大家留言指出,博主看到后会第一时间修改,谢谢大家的支持,更多技术文章尽在网络之路Blog(其他平台同名),版权归网络之路Blog所有,原创不易,侵权必究,觉得有帮助的,关注、转发、点赞支持下!~。

这篇关于TCPIP卷一(10):EIGRP的DUAL算法和SIA解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334924

相关文章

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Xshell远程连接失败以及解决方案

《Xshell远程连接失败以及解决方案》本文介绍了在Windows11家庭版和CentOS系统中解决Xshell无法连接远程服务器问题的步骤,在Windows11家庭版中,需要通过设置添加SSH功能并... 目录一.问题描述二.原因分析及解决办法2.1添加ssh功能2.2 在Windows中开启ssh服务2

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

Spring Boot实现多数据源连接和切换的解决方案

《SpringBoot实现多数据源连接和切换的解决方案》文章介绍了在SpringBoot中实现多数据源连接和切换的几种方案,并详细描述了一个使用AbstractRoutingDataSource的实... 目录前言一、多数据源配置与切换方案二、实现步骤总结前言在 Spring Boot 中实现多数据源连接

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6