【技术】史上最强动态路由选择协议详解(理论篇)

最强动态路由选择协议——EIGRP
思科私有协议,EIGRP属于高级距离矢量协议,同时又结合了链路状态协议的特征,也被称为平衡混合型协议。


一、工作原理
路由器之间通过周期性发送和接收Hello报文来建立邻居关系,形成邻居表;邻居关系建立以后,邻居之间发送更新(交换路由信息),形成拓扑表;最后每个路由器通过DUAL算法计算出一条去往目的地的最优路径加入路由表,同时计算成出一条备份路径加入拓扑表;当最优路径不可用时,就可以迅速切换到备份路径;后续通过周期性发送hello报文维护邻居关系.


二、协议特点:
1、收敛速度极快且基本无环路产生,基于Diffusing Update算法(DUAL)。
2、采用的算法高度优化,对路由器CPU和内存消耗极低。
3、采用组播(224.0.0.10)或单播进行路由更新;
4、采用增量更新,减少带宽占用(hello建邻居-更新路由-hello维护邻居关系);
5、支持VLSM、CIDR、手工汇总和不连续子网;32位EIGRP默认开启自动汇总;
6、PDMs支持IPv4、IPv6(64位EIGRP)等多种网络层协议(夜航模式);
7、EIGRP需要维系邻居表、拓扑表和路由表;
8、支持等价负载均衡ECMP和非等价负载均衡UECMP;
9、组网灵活、配置简单;
10、EIGRP的管理距离为90(内部)、170(外部)、5(汇总防环路由);
11、协议版本:IGRP(有类)、EIGRP v2(IPv4-32位)、EIGRP v3(IPv6-32位)、64位EIGRP(同时支持IPv4和IPv6);


三、工作过程
第一步:路由器周期性的发送hello报文,收到hello的路由器会把这个路由器加入到自己的邻居表中(邻居路由器IP/出接口);邻居建立要满足以下条件:
1、邻居路由器能够收到hello消息(hello默认只能发送1跳)
2、两台路由器之间匹配相同的AS号
3、相同的度量值计算公式(K值)
4、使用MD5认证时,链路两端的认证密码保持一致
注:Hello发送周期5秒/次,3倍的dead时间;Hello报文携带AS号、K值等
第二步:邻居关系建立完成后,两台路由器之间会开始发送更新,路由器将邻居发送过来的更新加入到自己的"拓扑表"中(更新实际上是路由条目非拓扑信息)
第三步:路由器通过DUAL算法计算出一条最优路径加入路由表(本地计算)同时计算成出一条备份路径加入拓扑表(本地计算);当最优路径不可用时,迅速切换到备份路径;计算完成后路由器会将更新后的最优路由发送给邻居路由器。
第四步:路由器之间周期性发送hello消息维护邻居关系,每次收到Hello报文,路由器则认为邻居路由器是"活着的",可以与之交换路由信息.当连续一段时间没有收到邻居路由器的hello报文,那么就会认为邻居路由器已经失效,会将该邻居从邻居表中删除并通告区域内所有路由器该邻居路由器已失效。
扩散更新计算:EIGRP采用DUAL算法来实现快速收敛。运行EIGRP的路由器存储了邻居的路由表,因此能够快速适应网络中的变化。如果本地路由表中没用合适的路由且拓扑表中也没有合适的备用路由,EIGRP将查询邻居以发现替代路由。查询将不断传播,直到找到替代路由或确定不存在替代路由。
报文封装:Layer 2/IPv4/EIGRP/FCS (IP协议号88)

Version:协议版本(目前为2) Opcod:报文类型如下:
(1)hello问候:用来建立和实时维护邻居关系状态。
(2)update更新:更新路由信息。
(3)query查询:请求邻居为我查询一条去往目的网络的路由(扩算更新计算)
(4)repay应答:对query报文的应答。
(5)ack确认:对update、query、repay报文的确认,可重传,提供可靠传输
(6)request请求:目前不再使用
Checksum:校验和 Flags:(0x01表示INIT,0x02表示CR)
INIT标志表示发送给新邻居的第一个初始化Update报文,这个报文将携带所有的路由信息,而以后的普通的Update报文将只携带变化了的路由信息
Sequence Number:报文的序列号,用于确认机制,不需要确认的报文,如Hello报文,这个域为0。
Ack Number:报文携带的确认信息.表示已经收到了此序列号的报文。
Autonomous-System Number:自治系统号,一般来说也是进程号。
一般来说就是进程号一般来说就是进程号

扩散更新算法
DUAL(Diffusing update algorithm)
后继站(Successor):最优路径的下一跳路由器。
可行后继站 (Feasible successor):备份路径的下一跳路由器。
可行距离 (Feasible Distance):邻居路由器去往目的地的度量值+自身去往邻居路由器的度量值之和。
通告距离 (Advertise Distance):邻居路由器去往目的地的度量值。
可行备份 (FC):次有路径的AD小于本地最优路径的FD时,可作为备份路径。
1、本地计算:汇总邻居发送过来的跟新加入拓扑表,使用DUAL算法计算出一条最优路径加入路由表,同时计算出一条无环次优路径加入拓扑表,备份路由选择条件需满足FC条件:AD(FS)<FD(S)<FD(FS);当最优路径不可用时将最优路径从路由表中删除,自动将次优路径加入路由表并通告邻居该路由度量值已改变。
2。扩散更新计算:当一台路由器丢失了一条路由且该路由没有备份路由时,则启动扩散更新计算:该路由器会向所有邻居路由器发送Query报文,查询关于丢失路由条目,同时将本地路由表中该路由FD设为无穷大(Passive改为Active),表示该路由条目已经不可达;
2.1 查找本地是否存在被查询路由;
--不存在;直接丢弃Query报文并以Reply应答给查询路由器该路由不可达;
--存在;判断查询者是不是本路由器的后继站:
2.2 查询者不是被查询路由的后继站,就将该路由以Reply应答给查询路由器
2.3 查询者是被查询路由的后继站,首先删除本地路由表中的该路由;则判断本地拓扑表内是否拥有该路由的备份路由:
--有;将最优路由切换为备份路由,并将备份路由以Reply应答给查询路由器;
--没有;会先欠着查询者的应答,判断自己是否拥有除查询者之外的其他邻居:
----有;发送Query查询给邻居路由器;
----没有;发送Reply告知查询者该路由不可达。
注:查询路由器标记未回复query应答的邻居为“r”状态;一个邻居只能发送一次query查询,一次查询收到reply应答后才能进行第二次查询;邻居收到查询者的query查询时,不能反向进行查询;查询者等待所有邻居都回复了reply
应答后才可以进行更新计算,将180S内未回复reply应答的邻居置为SIA状态。

度量值因素
1、带宽(bandwidth):K1(1),取最小值
2、延迟(delay):K3(1),计算总和
3、可靠性(reliability):K4(0),丢包率,取最小值
4、负载(loading):K2(0),带宽利用率,取最大值
5、最大传输单元(MTU):K5(0)一般不参与EIGRP度量值的计算。
32位度量值计算:10的7次方除以(Kbit/s为单位)的最小带宽加上(10的负5次方秒为单位)的延迟之和除以10,最后乘于256;默认情况下,K1和K3是1,K2、K4、K5值是0;
带宽:控制层面路由流向的所有入接口提取带宽的最小值。
延时:控制层面路由流向的所有入接口提取延时之和。
1、计算出的度量值不是整数时自动取整,比如计算结果为8501.39 ,显示值将为8501;
2、 通过配置K值,可以修改EIGRP度量值计算方式;K值取值范围(0-255)。
3、EIGRP的度量值=IGRP度量值*256
EIGRP 要求两台路由器的K值必须相同才能成为邻居。另外,K2,K4,,K5最好不要设置,因为这些参数设置为非零之后,会导致计算度量值时会考虑接口的负载和可靠性,而负载和可靠性会随时间变化,这将导致EIGRP重新泛洪拓扑数据,还可能导致路由器不断地选择不同的路由,由此导致网络不稳定。
64位度量值计算:10的7次方乘以65536除以(Kbit/s为单位)的最小吞吐量加上(10的负5次方秒为单位)的时延之和乘以65536;
度量值因素:吞吐量throughout(带宽)、时延latency(延时)
注:64位EIGRP默认度量值最大上限是2的32次方;当链路带宽特别低时或者延时特别高时,会出现度量值超过上限值,此时可以通过在AS内所有路由器上设置metric rib-scale(路由信息库)值(默认值128),设置一个(129-255)的值。

四、关于EIGRP的特性:
EIGRP出现Down邻居的三种情况:
1.1 3倍hello时间未收到邻居的hello响应,立即down邻居删除路由。
注:带宽低于1.544Mbps,hello发送周期60S,3倍dead时间;带宽高于1.544Mbps,hello发送周期5S,3倍dead时间;邻居两端的hello发送周期可以不一样,但是要低于dead时间。
1.2 在可靠机制RTP中,报文重传了16次仍未收到ACK确认,将重置邻居关系。
注:初次重传计时器multicast flow timer(时间值不固定)
第2-16次重传计时器retransmission timeout(时间值不固定)
1.3 在执行扩散更新计算时,发送Query查询报文在180S内都没有收到邻居的回复应答repay,会将该邻居关系置为SIA(stack in active)。2.1 BFD双向转发检测机制:可以提供毫秒级的检测,可以实现链路的快速检测,通过使用BFD与EIGRP协议联动,可以让EIGRP路由器之间建立BFD的邻居,快速感知链路变化,实现路由的快速收敛
下放默认路由的4种方法:
R2(内网)------ R1(边界路由器)------ R3(ISP)
3.1 在R1左边的接口配置一条汇总路由0.0.0.0 0.0.0.0(EIGRP支持CIDR),R1就会把该汇总路由发给R2(边界路由器不能发送明细路由给内网路由器了)。
3.2 全局模式下配置ip default-network后面接外网接口主类地址段;EIGRP进程中宣告该外网接口的主类地址段;边界路由表中必须拥有该外网接口的主类路由(边界路由器开启自动汇总或者手工配置一条静态路由指向null0接口)
3.3 全局模式下手工创建一条默认路由后面跟出接口但不包含下一跳地址,然后在EIGRP进程中宣告network 0.0.0.0;此时路由表会出现一条标记为D*的内部EIGRP路由。
3.4 EIGRP进程中使用路由重分发(redistribute static)将默认路由下放,凡是重分发至EIGRP域的都是外部EIGRP,标记为D*EX;此方法支持距离矢量协议中使用,不支持链路状态协议中。
路由选路:
4.1 修改带宽和延时可以在接口下操控bandwidth和delay值 ,bandwidth的单位是kbit/s,delay的单位是10微秒。
注:带宽设置会影响接口速率计算、QOS参数的基础以及用于SNMP统计报告;而延时设置除了对EIGRP外其他功能几乎没有影响,所以想要调整EIGRP的度量值,最好选择修改延时。修改bandwidth和delay参数只会影响控制层面的管理带宽/延时,影响路由度量值计算,不会影响接口实际数据转发,修改speed(带宽)和duplex(双工模式)参数才会影响接口实际数据转发。
4.2 使用偏移列表offer-list能够给去往指定目的地的路由度量值计算到加上一个偏移量;从而实现修改度量值的目的,进而操控路由选路;结合ACL工具抓取路由(access-list),度量值只能改大不能改小。4.3 修改管理距离,由于发送的更新中不携带管理距离(distance),只能在本地修改;使用分发列表distribute-list过滤路由。
4.4 根据最长匹配原则,汇总后的路由掩码往往较短而不会被选为最优路径。
5.1等价负载均衡ECMP:当两条路由前缀、掩码和度量值相同,就会被同时加入路由表进行负载均衡;等价负载均衡默认支持4条,数据转发的负载比例是1:1。
5.2 非等价负载均衡UECMP:最优路径的FD*variance值大于等于次优路径的FD且次优路径的AD小于最优路径的FD,当满足以上两个条件时,就可以实现非等价负载均衡,路由表中会出现两条度量值不同的路由;非等价负载均衡数据转发的负载比例是1:X(X代表两条路由度量值的比例)
注:variance值取值范围1-128,1代表只支持等价负载均衡;2-128的值代表支持非等价负载均衡。
6.1 自动汇总:32位EIGRP默认开启了自动汇总;64位EIGRP默认关闭了自动汇总;自动汇总只支持本地产生的路由汇总;使用自动汇总时,路由器会自动产生一条指向null0接口的防环路由,可以有效地防止可能出现的路由环路和路由黑洞,EIGRP本地产生的防环路由是不会被传递出去,度量值默认为5;6.2 手工汇总:部署在控制层面路由流向的出接口上,可以支持超网路由聚合CIDR;手工汇总可以汇总本地始发路由和穿越路由。
注:只有当汇总路由中的全部明细路由down了,汇总路由才会消失;汇总路由使用明细路由中最小度量值(64位EIGRP中取最大值);EIGRP自动汇总的度量值和接口使用的手工汇总的度量值一样;当防环路由度量值影响其他路由选择协议正常收发路由时,可修改自动汇总路由的管理距离,建议修改为21-89的数值。
当重分发进来的路由经过手工汇总之后,路由传递模式会发生改变,重分发路由标识会由DEX变成内部路由D。
EIGRP认证:只支持MD5密文认证,基于链路的钥匙链认证。
7.1 EIGRP认证的基本配置:首先配置KEY CHAIN,接着定义KEY ID,再接着定义KEY-STRING,然后到接口模式下引用KEY CHAIN,最后,在接口模式下把EIGRP的MD5认证功能打开。
7.2 KEY CHAIN不同,只要KEY ID和KEY-STRING相同,也可以认证成功。
7.3 默认情况下,只会发送密钥ID最小的密钥,密钥接收后只要在钥匙链中找到一把匹配成功的密钥即可单向认证成功。
7.4 高级属性:可以用send-lifetime和accpet-lifetime限制钥匙链中钥匙的发送和接收时间,使用这个方法,可以实现定期自动更换密钥;还可以使用NTP(Network Time Protocol 网络时间协议)同步计算机时钟。
EIGRP Stub:DUAL算法也有缺点,有的时候需要限制Query报文的发送。
8.1 Stub特性:建议把最边缘的路由器作为stub路由器;后面可以加很多参数:receive-only、summary、static、connected、redistributed、leak-map
receive-only表示只收不发更新,默认情况下为connected和summary,表示只将直连路由和汇总路由发出去。
Summary表示能发送由本地路由器汇总的路由,不能发送其他路由器汇总路由。
static表示只能发送重分发至eigrp的static路由。
Redistributed 表示可以发送重分发至eigrp的所有类型的路由。
8.2 汇总可以限制查询范围。假设边界路由器上汇总33.1.0.0/16,邻居向其发起33.1.1.0/24的查询,路由表查看路由表发现只有汇总路由,没有33.1.1.0/24这条路由就马上回复邻居,不会再扩散去查询邻居路由器了。
9.1 被动接口passive-interface:被设置为passive-interface的接口是不能收发任何EIGRP报文。
9.2 单播更新:在帧中继环境中,若未开启伪广播特性,则必须使用单播特性;neighbor命令需要在邻居和本地接口都使用,单播特性才能建立。
9.3 水平分割:在帧中继环境中,不仅需要关闭物理水平分割,也要关闭逻辑水平分割;(config-if)#no ip split-horizon 关闭物理水平分割
(config-if)#
no ip split-horizon eigrp 90 关闭逻辑水平分割
9.4 network 0.0.0.0:宣告所有接口且永久有效;当该路由器上有一条只关联出接口的静态路由,可以把该路由引入EIGRP。
9.5 EIGRP支持主类宣告,也支持精确宣告后面必须加上反掩码。
9.6 EIGRP不支持使用接口的辅助地址(secondary address)建立邻居。
9.7 在串行链路中,EIGRP默认最多可以使用50%的接口带宽来承载EIGRP发送更新(这个带宽占比可以使用ip bandwidth-percent eigrp来修改),这就保证了EIGRP不会在主要的网络收敛过程中“饿死”常规的数据分组。RIP和IGRP没有这种特性,所以大量的RIP和IGRP更新可能会影响常规的数据发送。
9.8 Stuck in Active:如果有一个邻居在180s之内没能发送Reply,则重置邻接关系,并进入SIA状态。改进后的方案,添加了SIA-Query和SIA-Reply报文。当180s倒计时到一半时,发送SIA-Query,若邻居返回SIA-Reply表明还在干活,将重置180s。若连续发送7次SIA-Query后,仍未收到Reply,则不再发SIA-Query,待180s到时后,重置邻接关系。9.9 Graceful Shutdown:当路由器不再运行EIGRP或者将某网段从network通告中删除时,将发送goodbye报文(特殊的hello),告知邻居此网段已经不可达。
这里是网工们学习交流的乌托邦
这里可以解答你的一切技术疑问
这里可以免费获取100G学习资料
这就是“太阁网络技术交流群”

