【★】路由环路大总结!

一。前言:

       "人类的创造力与破坏力同样强大"。互联网行业尤其是网络构建这一领域,从根本上一直存在着一个无奈之处:网络本可以设计的很简单,只要实现网络的连通性即可,甚至全互联,但就是因为要fight against"天灾人祸",尤其是人祸,互联网才衍生出了纷繁复杂的路由协议和各种因特网服务,以及"网络安全"这个庞大的领域。这也是为什么说当今所有的网络通讯流量中,80%的资源都被浪费(用于承载路由消息,协议字段等信息),只有20%被用以有效数据的传输。

 

防环机制就是在这样一个大背景下产生的。

       环路出现在互联网的各个层面,不同环路的出现原因与解决方法也不同。通常网络环路分为第二层环路和第三层环路,所有环路的形成都是由目的路径不明确导致混乱而造成的。二层环路主要就是交换机广播流的恶性循环。

       三层环路就复杂多了,通常由各种网络故障导致!!!也是本文研究的重点。笔者将三层环路分成三类:单链路环路、跨结点环路、区域/AS间环路。

 

二。交换层广播流与生成树:

       众所周知,交换网络是一个小型的本地接入网(LAN),所以二层交换机默认允许转发广播流(路由器则默认丢弃)。除了广播流,交换机查询mac地址表无果时会将数据帧从除接收接口外的所有接口发送出去。

       所以最初,当三个交换机两两相连时,一个数据帧会在其中无限循环。生成树就是为了让交换网络中防环而出现的。由于具体的生成树工作原理过于复杂需另成文,在此只做介绍不做详解。

       生成树最原始的版本是802.1d,也就是STP(Spanning Tree Protocol),但这个版本的标准是所有VLAN共用一个生成树,所以也叫CST(Common Spanning Tree)思科在此基础上增强了一下,发布了PVST+(Per Vlan Spanning Tree)。

       802.1d的下一个版本是802.1w,也就是RSTP(Rapid STP),但还是共用生成树,搞不懂IEEE不长点记性。于是思科又搞了一下,发布了PVRST+。

       IEEE又基于思科的MISTP的方案,发布了802.1s(MSTP),这个就比较强了,但凡是大一点的交换网络都用MSTP,也是现在的主流。

 

三。RIP的5种防环机制:

       Rip作为一个古老的路由协议,虽然正逐渐被淘汰,还是有必要了解一番以理解路由协议的进化史。

       !!视角:仅限于自身。rip没有邻居表,不知道邻居的信息,也没有下一跳。

rip的局限性造致它有5种防环机制,且5种机制默认同时工作!!!

       先谈一个易理解的的程序员逻辑,即路由器接从F0接口收到的某个路由条目A不应该从F0反发出去(水平分割),但是距离矢量路由协议的路由更新要向外发送完整的路由表,因此从F0发出之前将A路由的度量值改为15,这样对方收到的A的度量值为16不可达(计数最大跳&毒性逆转)。

       当路由器R1检测到某网段的网络故障(比如收到icmp报错),它将要做两件事,第一,告诉其他路由器:"你们无法从我这里到达这个子网",第二,寻找其他路径到达这个子网。此时R1将抑制定时器,即在规定时间内不接收邻居发来的关于该子网的路由。试想若没有抑制定时器,这时邻居正好发送该子网的路由,而这条路径恰好经过R1,那么后果将不堪设想。

       在抑制时间内R1在做什么呢?当然是等待rip网络中所有路由器都收到这条16跳的路由后更正自己的路由表,因此需要触发更新,不必等时间到期再发路由表。此外当某接口的度量值被改动了也会触发更新,防环原理相同。

       可以看出rip的5个防环机制中,设置最大跳才是终极武器,它配合抑制定时器,不仅能解决"单链路环路",更能防止"跨结点环路"。

 

四。EIGRP与DUAL算法:

视角:周围可视/局部视角。

Eigrp的进步之处在于多了两张表:邻居表与拓扑表。

       邻居表的建立直接避免了单链路环路:当在收到的路由更新中看到下一跳是自己,那没得说了,这条更新定是来源于我的,拒收。

       Eigrp的核心算法叫DUAL(弥散更新),其中有一条公式专门用来防止跨结点环路:当邻居通向一个网络的报告距离(RD)比本地路由器通向同一个目的网络的可行距离(FD)短时,即符合了可行性条件(FC),该路径被写进拓扑表。但这样的算法可想而知也是有缺陷的,即很多高开销的可行备份路径也会被当做"环路"而拒绝收录。

!有一个特例:手动汇总导致的环路。

       其实汇总本身是有"缺陷"的,当路由器把汇总的主类网路由更新传给对端时就相当于让对端生成了一些关于那些"不存在"的子类网路由指向自己。这样就不合理了,如果该路由器有一个默认路由指向对端的话,环路就形成了,一个以不存在的子网ip为目的地址的恶意数据包就会在两个路由器之间无限循环,直到跳数寿命终结。

       解决方法(默认开启)是利用null0接口。本地生成的汇总路由指向这个逻辑空接口,这里要提一下路由查询的先后顺序:收到数据包先查看普通的单播路由条目,再查看本地汇总路由条目,最后才看默认路由。如图,这样就可以识别出那些数据包是恶意数据包,并且从null0口丢弃。

 【★】路由环路大总结!

五。Link state路由协议与SPF算法:

!视角:全局(整个区域)视角/上帝视角。

       除了拥有邻居表,Ospf有一张很强悍的表,叫LSDB(链路状态数据库)(同is-is)。在每个ospf区域中,通过互发lsa(跨网段传输的链路通告),每个路由器都能够获悉所在的整个区域的拓扑和链路状态。这样一来在区域内选路就可以从全局的视角锁定最佳路径,并且百分百无环路,无论是单链路环路还是跨结点环路都可避免,这是链路状态路由协议的创新之处。

   OSPF区域间路由环路的避免又是通过哪种方式实现的?答案是:分层结构的拓扑实现。Ospf规定所有常规区域都要链接到骨干层,即使物理上与骨干层分隔,也要有条逻辑链路(虚链路)连接到骨干区域。这种树形结构从根本上就摒弃了环路。因此ospf也是天然无环的。

   与ospf相似的IS-IS,则不要求L1层必须连接到L2层,因而有两个独特的防环机制:第一,非L2区域的通信都要通告L2区域转发;第二,L2区域路由默认不会进入L1(除了路由泄露)。因而实现了防环。附图:SPF树。

 

六。BGP的高层防环机制:

   谈到Bgp就要有关AS自治系统,bgp的防环主要分为AS内防环与AS间防环(可以类比ospf的区域内和区域间)。

   AS间:路由更新的as-path字段包含所经过的所有AS号,当bgp路由器看到路由更新中有自己的AS号就会果断放弃这条更新(但在特殊情况下可以用命令取消这个特性)。这就是距离向量与距离矢量之间的区别:距离矢量路由协议(如rip)只记录到达目的地经过多少步,而距离向量路由器则记录了途中经过的路径。看来学好思科还得咬文嚼字啊。

   Ibgp的水平分割原则是:IBGP邻居所收到的路由信息,不会传递给其它的IBGP邻居,但可以传递给EBGP邻居。注意这和rip的水平分割不大一样。水平分割是为了防止3个及以上的ibgp peer围绕成环,造成自治系统内部的跨结点环路。

   除了网络故障带来的路由环路,网络的不合理规划也会造成环路。比如在BGP中如果让ibgp间的中转路径路由器处于另一个AS内的话就会造成环路。当然这只是其中一个例子,意在说明人为的环路是很难避免的,但思科想的还真周到,提供了next-hop-unchange这条命令来处理上面那个环路。

   注意,通常使用路由反射器(RR)来解决水平分割带来的路由不学习的问题,但搞笑之处在于,水平分割用来防环,路由反射器用来防水平分割,因而反射器又产生了环。后来RR经过改进,增加了一个特性叫插入簇ID与起源ID。默认情况下RR会在路由更新中加入自己的router-id以及路由更新的起源路由器的router-id,这也是一种路径向量的机制。

附言:

   有一句古话叫"存在即合理"。路由协议中有一些机制或者说小的细节特性,虽然看似很多余且无用,但却始终存在着。据我多年的学习经验,我想这有两种原因:一,从直觉上感觉它"合情合理",比如bgp宣告路由发更新时打上自己的RID以标注起源信息;二,它的开销很小,比如RR发送更新包中携带一个短消息告诉邻居自己是RR,这与复杂的数据头部和各种周期消息比起来根本微不足道。

转载于:https://www.cnblogs.com/jinhengyu/p/7517167.html

<think>嗯,用户这次的问题很明确:想系统理解路由环路的概念、影响和避免方法。从ta引用的三篇资料来看,用户应该已经接触过基础的路由协议知识(比如RIP),但需要更结构化的梳理。不过用户提供的引用[1][2][3]都集中在传统RIP协议的环路问题,可能需要补充现代协议的处理方式。 用户之前讨论过抗DDoS和路由回注,这两者其实和路由环路强相关——在流量调度场景下,路由环路会导致清洗失效甚至放攻击。不过当前问题聚焦在基础概念,先不展开DDoS关联性。 需要重点回应用户的四个关键词:定义、影响、避免方法、网络技术背景。特别要注意用户提到的“计数到无穷”和“触发更新”这两个机制,引用[2][3]已经给出案例,可以作为切入点。 关于避免机制,用户提供的引用里只有水平分割和触发更新,实际还需要补充: - 路由毒化(用户引用里没提但很重要) - 抑制计时器(虽然引用[2]提到计数到无穷,但没说明如何解决) - 现代协议(OSPF/BGP)的不同处理方式 数学表达要注意格式:比如“度量值增加到16”要写成$16$,环路形成时的跳数增长要设计公式。不过路由环路本身涉及数学不多,主要用文字和示意图说明。 用户可能存在的认知盲区: 1. 误以为只有RIP才有环路问题(实际所有DV协议都有风险) 2. 不理解环路对业务层的具体影响(丢包/延迟只是表象,业务中断才是关键) 3. 可能混淆路由环路和交换环路(后者是二层问题) 最后生成的问题要引导用户思考实际场景,比如“在您的网络环境中是否使用RIP协议?”但考虑到用户之前研究DDoS防护,更可能接触BGP/OSPF,所以问题设计要偏向运营商级网络。</think>### 路由环路详解:定义、影响与避免机制 --- #### **一、路由环路的定义** **路由环路**(Routing Loop)指数据包在网络中因错误的路由信息而在多个路由器间**循环传输**无法到达目的地的现象。其本质是路由表信息不一致导致的**路径闭环**,常见于距离向量协议(如RIP)[^1][^3]。 **形成条件**: - 路由器$A$认为到达目标需经过$B$ - 路由器$B$认为到达目标需经过$A$ - 数据包在$A \rightarrow B \rightarrow A$循环 --- #### **二、路由环路的影响** | **影响类型** | **具体表现** | |--------------------|-----------------------------------------------------------------------------| | **网络拥塞** | 循环数据包占用带宽,导致合法流量被挤压(严重时可瘫痪整个网段)[^2] | | **资源耗尽** | 路由器持续处理循环数据包,CPU/内存利用率飙升 | | **数据包丢失** | TTL(生存时间)值递减至$0$时数据包被丢弃 | | **业务中断** | 关键服务(如VoIP、视频会议)因高延迟或丢包不可用 | --- #### **三、路由环路避免机制** ##### **1. 基础防御机制** | **机制** | **原理** | **示例协议** | |----------------------|-------------------------------------------------------------------------|------------| | **水平分割(Split Horizon)** | 路由器不从**接收路由信息的接口**回传该路由[^1] | RIP, EIGRP | | **毒性逆转(Poison Reverse)** | 主动通告失效路由(跳数设为$\infty$),覆盖邻居的错误路由 | RIP | | **触发更新(Triggered Update)** | 网络变化时**立即广播更新**,而非等待周期更新(缩短错误路由传播时间)[^3] | RIP, OSPF | > *示例:RIP协议中目标网络失效时,路由器立即发送跳数为$16$(无穷)的更新[^3]* ##### **2. 高级增强机制** - **抑制计时器(Hold-Down Timer)** 检测到路由失效后,在$T$秒内**拒绝新路由更新**(默认$T=180s$),避免接受过期信息[^2] $$ \text{抑制期} = \text{路由失效检测时间} + \text{网络传播延迟} $$ - **最跳数限制(Max Hop Count)** 设置协议最跳数(如RIP为$15$),超过则视为不可达并丢弃数据包[^2] - **路由毒化(Route Poisoning)** 将故障路由的度量值直接设为$\infty$(RIP中为$16$),显式通知邻居该路径失效 --- #### **四、现代协议中的环路防护** 1. **链路状态协议(OSPF/IS-IS)** - 通过SPF算法构建**无环拓扑**(Dijkstra算法保证最优路径) - 使用**LSA序列号**和**老化机制**防止过期路由传播 2. **路径向量协议(BGP)** - **AS_PATH属性**:检测包含自身AS号的路径即拒绝(防止跨自治系统环路) - **Route-Reflector**:在IBGP中通过Cluster-ID和Originator-ID防环 --- #### **五、环路检测与排错** | **方法** | **操作** | |-------------------------|--------------------------------------------------------------------------| | **TTL跟踪** | `traceroute`命令显示路径,若IP地址重复出现则存在环路 | | **日志分析** | 检查路由器日志中的`%DUAL-3-SIA`(EIGRP卡在活跃状态)等错误代码 | | **路由表审计** | 对比邻居路由器的目标网络下一跳,确认是否存在互指 | > **关键命令示例**(Cisco设备): > ```bash > show ip route 192.168.1.0 # 检查目标网络下一跳 > debug ip rip events # 实时监控RIP更新 > ``` --- ### **总结** 路由环路网络层的重故障源,其防护需结合**协议设计**(如水平分割、触发更新)和**运维实践**(如TTL监控、路由审计)。现代网络通过增强型协议(OSPF/BGP)和自动化工具(如BGP Flowspec)显著降低了环路风险,但传统协议(如RIP)部署时仍需严格配置防环机制[^1][^2][^3]。 --- **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值