内部网关协议IGP(如RIP、OSPF、ISIS)的防止环路的方案:
1、RIP协议
| 机制 | 作用 | 收敛加速效果 |
|---|---|---|
| 周期性更新(30秒) | 基线更新 | 慢(秒~分钟级) |
| 触发更新 | 检测到变化后立即发送 | 显著加速(收敛时间缩短到数秒内) |
| 触发更新 + 抑制计时器 + 毒性逆转 | 避免环路等 | 更可靠,但收敛时间仍在秒级 |
结论 :触发更新是RIP加速收敛的关键手段之一 ,让RIP能较快响应网络故障,但仍无法突破其固有局限。对于需要亚秒级 收敛和大规模网络的场景,OSPF或IS-IS仍然是更合适的选择。
"毒性逆转":主动"撒谎"来快速同步信息
"毒性逆转"是为像RIP这样的距离矢量协议设计的防环机制,它通过"主动通告坏消息"来加速网络收敛。
- 核心思想 :当路由器发现某个网段不可达 时,它不会沉默,而是会主动 在更新路由时,将这个失效网段的跳数设置为 16 (即RIP协议定义的"无穷大"或"不可达"),并通告给它的邻居。
- 工作原理:这个"16"就是一个有毒的信号。当它的邻居B收到这个更新时,就能立刻知道该网段已失效并更新自己的路由表(通过触发更新将信息传遍全网),无需再等待长达180秒的无效计时器计时。
- 与水平分割的区别 :
- 水平分割:是避免"事物重复"的简单规则。A从接口X学到某条路由,就不会再从X接口把它通告回去。
- 毒性逆转:是水平分割的加强版,会主动通告"有毒"的坏消息,能更主动地打破环路风险。
问:rip总共16跳,收敛的速度慢,如果设置成8跳或者10跳不是更好吗?现在的网络设备性能、吞吐量越来越强,足够处理大多数局域网段的数据包收发了。更大的广域网就用ospf协议就行。
答:RIP的最大跳数限制,本质上是为它的"距离矢量"算法兜底的安全机制,而不是因为设备性能不够。
如果RIP的最大跳数被设为8 ,那么一个网络直径就不能超过8。这在今天很多稍微大一点的局域网里都不够用(比如一个大学校园网可能轻松超过10跳)。所以8或10会过度限制网络规模,让RIP连普通中型网络都覆盖不了。历史上RIP选择15跳,是因为在80年代末期15跳已经能覆盖绝大多数局域网和校园网,并且与"16作为无穷大"的二进制表示(4位)契合,实现简单。
如果简单地把最大跳数提高到32,确实能让RIP覆盖更大的网络,但代价是收敛时间会急剧恶化。不仅不能提升RIP的实用性,反而会暴露它的算法缺陷。
- "数到无穷"时间延长 :当网络出现故障(比如某条链路断开),RIP依靠"16跳=不可达"来终结环路的传播。如果最大跳数变成32,那么一个失效的路由需要被递增到33跳才能被判定为不可达。在默认30秒更新周期下,最坏情况下需要 33 × 30秒 = 990秒(16.5分钟) 才能从所有路由器上彻底清除!这期间网络会持续存在路由环路,几乎不可用。
- 触发更新也不能完全解决问题:虽然触发更新可以加速,但在复杂的网络拓扑中,仍然可能因为丢包或更新传播延迟,导致部分路由器陷入"慢收敛"状态。跳数上限越大,潜在的环路持续风险就越高。
- RIP的度量值只有跳数:它无法像OSPF那样考虑带宽、延迟等更丰富的指标。在大网络中,15跳可能已经代表极长的物理距离或极低的带宽,再增加跳数只会让路由选择更不合理。
2、OSPF协议
OSPF协议主要依赖以下机制来避免路由环路:
- SPF算法(最短路径优先算法,也称Dijkstra算法)
OSPF属于链路状态路由协议,每台路由器都维护整个区域(Area)的精确链路状态数据库(LSDB)。基于这个数据库,每台路由器独立以自己为根,计算出到所有目的地的最短路径树。由于每台路由器都使用同一份完整拓扑数据计算,且计算出的路径是树状结构(从根出发无分叉返回),因此天然不会产生环路。 - 区域间必须经过骨干区域(Area 0)
OSPF规定所有非骨干区域(Area 1,2,...)都必须与骨干区域Area 0直连,区域间的路由传递需通过Area 0。这种星型架构避免了区域间的潜在环路。如果试图在非骨干区域之间直接传递路由(例如通过虚链路不当配置),OSPF会利用防止区域间环路的机制(如要求ABR只通告从Area 0学到的区域间路由)来阻止。 - 水平分割原则
在某些特定场景(如LSA泛洪),OSPF通过接口上的水平分割来避免重复发送和可能造成的临时环路。例如,从某个接口收到的LSA不会再从同一接口发回。
总结 :OSPF避免环路的根本手段是链路状态数据库 + SPF树计算,而不是距离矢量协议那种靠"最大跳数"或"毒性逆转"等被动防环措施。这就是OSPF能在大型复杂网络中实现快速、无环收敛的原因。
3、IS-IS协议
和 OSPF 一样,都是一种链路状态路由协议 ,其避免环路的核心原理也相似,都依赖于SPF(最短路径优先)算法。每台 IS-IS 路由器都拥有一份描述整个网络拓扑的精确地图(LSDB),并独立以自身为根计算出一棵无环的"最短路径树"。基于同一张全网拓扑信息计算出整个路径树,拓扑结构和计算过程本身天然无环。但在实际设计中,IS-IS 还有自己的一套防环机制:
🧱 分层架构
OSPF的分层依赖Area 0骨干区域,而IS-IS的L2区域本身就是骨干,所有L1区域必须通过L1/L2路由器连接到L2区域,这种设计自然地将整个域分成了"源汇聚域"(L1)和"传输骨干"(L2)两层,从架构上避免了跨区域的潜在环路。
- Level-1 (L1):相当于OSPF的普通区域,只知道本区域的拓扑细节。
- Level-2 (L2):相当于骨干区域,拥有区域间的完整拓扑。
- Level-1-2 (L1/L2):连接L1和L2区域的边界路由器。
🔑 关键机制:为路由泄漏加装"警报器"
为了让L1区域能选择最优路径去往外部,可以配置"路由泄露"(Route Leaking),即把L2区域的部分路由"泄露"到L1区域中 。为了防止泄露后的路由信息又被传回L2形成环路,IS-IS利用LSP(链路状态协议数据单元)报文中的 Up/Down 比特位 来标记路由来源。
- 当路由器将一条来自 L2区域 的路由泄露到 L1 区域时,会在该LSP中将 Up/Down 比特位 置位为 "Down"。
- 当 L1/L2 路由器收到来自 L1 区域的路由信息时,如果发现 Up/Down 比特位 已经为 "Down" ,表示这条路由是从L2泄露过来的"外来户",就不会再将它重新通告回 L2 区域。
简单来说,"Up/Down"位就像一个单向闸门,允许L2的路由单向流入L1,但禁止它们被重新注入回L2,从而有效防止了数据流在两个层级间来回"震荡"形成环路。
🩹 微环避免
无论是 OSPF 还是 IS-IS,在网络拓扑发生变化的瞬间,不同路由器收敛速度不一,也可能产生短暂的、微秒至毫秒级的瞬时环路。对此,IS-IS 有多种应对机制:
- TI-LFA :在故障发生时,利用SR(Segment Routing)快速将流量切换到一条预先计算好、绝对无环的备份路径上。
- 收敛后路径延迟安装 :让路由器在确定新的无环主路径前,等待一段预设的延迟时间,以确保所有路由器都刷新了路由表。
二、外部网关协议EGP(如BGP协议)防环机制
1、BGP的防环机制是分层设计的:AS之间依靠 AS_PATH 检查,AS内部依靠 IBGP水平分割 ,并通过**路由反射器(Route Reflector,RR)或联盟(Confederation)**来优化内部防环机制。
🌐 AS之间 (EBGP):基于AS_PATH的"路径记录"
当路由在AS之间传递时,BGP依靠 AS_PATH属性 来防止环路。
- 工作原理 :BGP路由每经过一个AS,该AS的编号就会被添加到AS_PATH列表的最左侧 (也叫追加 )。当一个路由器收到一条EBGP路由时,会立刻检查其AS_PATH:如果AS_PATH中包含了自身的AS编号,就说明这条路由曾经来过,构成了环路,于是会直接丢弃该路由,从而从根本上避免了环路。
🏢 AS内部 (IBGP) 的基础防环:水平分割与全互联
在同一个AS内部,AS_PATH在IBGP邻居间传递时不会改变,这意味着无法再用AS_PATH来检测环路。因此BGP定义了严格的 IBGP水平分割规则 :任何一个BGP路由器,从它的一个IBGP邻居学到的路由,都不能再通告给其他任何IBGP邻居。
- 如何生效 :这一规则有效防止了路由在AS内部"绕圈",但代价是路由信息在AS内部无法传递。为确保每台路由器都能学到完整路由,必须在AS内部建立一个全互联(Full-mesh)的IBGP邻居关系 ,但这(N个路由器的会话数是
N(N-1)/2)在大型网络中会带来巨大的资源开销。
📡 优化IBGP防环:如何打破水平分割
为了解决IBGP全互联的可扩展性问题,BGP在水平分割的基础上引入了两种打破限制的机制,同时配备了相应的防环措施。
1. 路由反射器
- 核心思路 :在AS中设置若干台路由反射器 (Route Reflector, RR) 作为路由交换中心,允许它们有选择地将从IBGP学到的路由反射给其他IBGP邻居。
- 防环措施 :
- Originator_ID (发起者ID):由RR在反射路由时创建,值为路由发起者的Router ID。当该路由被传递时,如果其他路由器发现Originator_ID与自己的Router ID相同,就知道是自己发出的路由,从而将其丢弃。
- Cluster_List (集群列表) :将多个RR和它们的客户机组成的集群(Cluster)进行标识。路由反射时,RR会将自身集群ID (Cluster ID) 添加到Cluster_List。当一条路由的Cluster_List中已包含某个RR的集群ID,该RR就不会再接收此路由,从而防止了集群间的环路。
2. 联盟 (Confederation)
- 核心思路 :将一个大的AS划分为多个相互独立的子AS (Sub-AS) 。子AS内部保持IBGP全互联,而子AS之间则建立一种特殊的 联盟EBGP (Confederation EBGP) 连接。
- 防环措施 :联盟利用了改进的AS_PATH机制:
- 内部防环:路由在联盟内传递时,经过的子AS编号会被记录到AS_PATH中,有效防止了路由在子AS间环路。
- 对外透明 :联盟对外部AS只通告大AS的编号,联盟内部的子AS编号不会被泄露,确保路由的简洁和稳定。
💎 总结
BGP通过一套分层协作的机制来防止路由环路:
- AS之间 (EBGP) :靠 AS_PATH 属性实现"路径追溯"。
- AS内部 (IBGP) :有两大优化方案:路由反射器 (RR) 凭借 Originator_ID 和 Cluster_List 两个属性进行防环;联盟 (Confederation) 则依靠特殊的 联盟AS_PATH 机制来检测环路。
2、外部网关协议(EGP)是一个协议类别。虽然边界网关协议(BGP)是其中最主流、甚至是当代唯一在用的标准,但并不是唯一一个,历史上还存在着它的"前任"------EGP协议,现在也有一些旨在替代BGP的新兴方案出现。
⏳ EGP:BGP的"前任"
在BGP成为行业标准之前,就有一种被称为EGP的协议。它是指一个特定的、已淘汰的协议,全称也叫外部网关协议(Exterior Gateway Protocol)。
它于20世纪80年代早期被开发出来,用于在当时还相对简单的互联网中连接不同的自治系统(AS),但存在不少问题:
- 📏 拓扑限制:只能用于树状拓扑结构,适应性差。
- 🚫 无环路避免:缺乏有效的机制,容易产生路由环路。
- ⚙️ 功能简单:主要通告可达信息,不能进行路由优选。
- 🥾 技术笨拙:依靠周期性更新,收敛慢,资源消耗大。
正是由于这些缺陷,它从20世纪90年代中期起,就被我们现在熟知的BGP所取代。
💡 探索BGP可能的继任者
目前业界已经有了一些旨在解决BGP固有缺陷(尤其是安全问题)的新兴方案,但大多还处于实验或小范围部署阶段。
- SCION:由苏黎世联邦理工学院(ETH Zürich)开发的全新互联网路由架构。它对安全性的重新设计,能更有效地抵御路径劫持和路由泄露等攻击,已在银行、医疗等部分行业得到应用。
- noBGP:面向云环境的网络平台。旨在通过创建私有且安全的网络,彻底消除对BGP和传统公网IP地址的依赖,让多云等环境下的网络连接变得更快、更强、更安全。
- BIGP:一个早期的研究性建议,未曾推广。
📊 总结
| 协议分类 | 具体名称 | 全称/说明 | 当前状态 |
|---|---|---|---|
| 通用类别 | External Gateway Protocol (EGP) | 外部网关协议,AS间的路由协议类别 | "活化石":活跃于80-90年代,现已淘汰 |
| 当前事实标准 | Border Gateway Protocol (BGP) | 边界网关协议,互联网基石 | 现行标准:迄今仍是唯一被广泛使用的EGP协议 |
| 未来探索方案 | SCION | 新一代安全路由架构 | 探索中:已在部分行业部署 |
| noBGP | BGP替代云网络平台 | 探索中:已在部分行业部署 |