首页 / 博客 / 本文

动态路由协议进阶:OSPF 与 BGP 的选路逻辑、收敛与排障

🧭 路由交换📅 2026-09-02⏱ 16 分钟

静态路由能解决「我知道怎么去」的问题,动态路由解决的是「网络会变,怎么自动、快速、正确地重新找到路」。上一篇文章聊的是 IP 子网与 VLAN——那是「链路层到网络层怎么把包送到隔壁」;这一篇往上走一层,讲路由器之间如何交换「我能到达哪些网段」的信息,并各自独立地算出一条到达全网的最优路径。

先分清两个角色。动态路由协议按作用域分成两类:IGP(内部网关协议)负责在同一个自治系统(AS)内部选路,代表是 OSPF、IS-IS、RIP;EGP(外部网关协议)负责AS 之间选路,今天几乎只剩 BGP。一句话记忆:OSPF 求的是「网内最快」,BGP 求的是「网间最可控」——一个优化指标,一个强调策略。

一、为什么需要动态路由:收敛才是核心价值

动态路由协议存在的根本原因不是「省得手工配」,而是收敛(convergence)——网络拓扑发生变化(链路断了、设备挂了、新链路加进来)后,全网路由器在尽可能短的时间内重新达成一致的、无环路的路由表。衡量一个 IGP 好坏,收敛速度是最关键的指标之一:

协议算法收敛速度适用规模
RIP距离矢量(跳数)慢(最大 15 跳 + 定时刷新)小网络,已基本淘汰
OSPF链路状态 + SPF(Dijkstra)快(增量更新)中大型企业网
IS-IS链路状态 + SPF快,扩展性极强运营商骨干
BGP路径矢量(携带完整 AS 路径)较慢(策略驱动,不是速度优先)AS 之间 / 大型数据中心

关键认知:距离矢量协议「传的是传闻」(我只告诉你我从邻居听来的方向),链路状态协议「发的是事实」(我把自己的链路状态洪泛给全网,各自算图)。传闻式的 RIP 之所以会数到无穷(count-to-infinity),根源就是它没有全网拓扑、只能靠跳数上限与水平分割硬扛;而 OSPF 每台路由器手里都有一张完整的 LSDB(链路状态数据库),算出来的路径天然无环。

二、OSPF:链路状态、LSA 与区域设计

OSPF 的三个核心概念——邻接关系、LSA(链路状态通告)、SPF 计算——对应三个问题:跟谁交换、交换什么、怎么算路。

1. 邻接关系:不是所有邻居都会交换 LSA

OSPF 邻居之间要先经历 Down → Init → 2-Way → Exstart → Exchange → Loading → Full 七种状态,最终进入 Full 才真正同步了 LSDB。广播网络上不是每两台邻居都交换信息,而是选举出 DR/BDR,其余路由器只和 DR 建立邻接——这是为了把 N² 的泛洪流量压成 O(N)。诊断时最常卡在这两个状态:

# 邻居一直卡在 2-Way / Exstart,先查这几点:
show ip ospf neighbor          # 看状态是 Full 还是卡住
show ip ospf interface         # 核对 Hello/Dead 定时器、区域 ID、MTU 是否一致
show ip ospf interface s1/0 | include MTU   # MTU 不一致 → 卡 Exstart 的经典原因

建立邻接的四个必须一致:区域 ID、Hello/Dead 定时器、认证(类型与密钥)、(在部分实现里)网络掩码与 MTU。任何一个不一致,邻居就永远停在 2-Way。

2. LSA 类型:知道每种通告在说什么

类型名称由谁产生作用
Type 1Router LSA每台路由器描述自己的直连链路与开销
Type 2Network LSADR描述一个广播网段上有哪些路由器
Type 3Summary LSAABR(区域边界路由器)把其他区域的路由汇总注入本区域
Type 4ASBR SummaryABR告诉区域「ASBR 在哪」
Type 5External LSAASBR重发布进来的外部路由(如从 BGP 引入)
Type 7NSSA ExternalNSSA 区域内的 ASBRNSSA 区域里的外部路由,出区域时转成 Type 5

一个实用技巧:看到路由表里 O IA(域间)、O E1/E2(域外)、O N1/N2(NSSA 域外)的前缀,就知道这条路由经过了怎样的区域穿越。E2 是默认的外部度量类型(度量不累加),E1 会把沿途开销也算进去——多 ASBR 出口选路时这两者差别很大。

3. 区域设计:为什么不能全塞一个 Area 0

OSPF 引入「区域」是为了限制 LSA 泛洪范围、缩小 SPF 计算规模、加快收敛。设计铁律:所有非骨干区域必须通过 ABR 直连 Area 0(骨干区),区域间路由永远绕不开骨干。骨干区的 LSDB 最小、SPF 最快,这是把高频变动隔离在边缘区域、把骨干做成「稳定快车道」的代价。

# 特殊区域类型,本质都是「在边缘区域里少发某类 LSA」
Stub    # 不收 Type 5 外部路由,用一条默认路由代替
Totally Stub  # 连 Type 3 域间汇总都不要,只剩一条默认
NSSA    # 允许引入外部路由,但用 Type 7 承载(Stub 的增强版)

什么时候该上特殊区域?答案是:当一个区域里全是「末端」路由器、不需要感知外部世界细节时,把它做成 Stub/NSSA,能显著减小该区域的 LSDB 和内存开销。这是企业网 OSPF 调优里性价比最高的手段之一。

三、BGP:选路不是「最快」,而是「最符合策略」

BGP 与 IGP 有一个根本区别:IGP 追求客观最优(最短、最快),BGP 追求策略可控。BGP 的目标不是把包最快送到,而是让 AS 管理员能精确表达「我这条路由只发给谁、我从谁那里更愿意收」的商业与技术策略。

1. 路径属性与选路决策顺序

BGP 靠 路径属性(Path Attributes) 承载策略。收到同一条前缀的多条路径时,路由器按下面这个(简化后的)顺序逐级比较,选出最优:

  1. Weight(最高优先)——Cisco 私有,本路由器本地有效,越大越优先
  2. Local Preference(本地优先级)——在 AS 内传播,控制「出站」方向,越大越优先
  3. 本地始发优先——自己 network / 重发布的路由优先于从邻居学到的
  4. AS Path 最短优先——AS 路径越短越优先
  5. Origin——i(network)优于 e(EGP)优于 ?(重发布)
  6. MED——影响邻居「入站」方向,越小越优先(只在同邻居 AS 之间比较)
  7. eBGP 优于 iBGP、最近的 IGP 下一跳、最老的 eBGP 路由、最小的 Router-ID……
记忆锚点。Weight、Local Pref、MED 是三个「人为调权」旋钮:Weight 管本地、Local Pref 管出站、MED 管入站。出站流量想从 A 出口走就调 Local Pref,入站流量想让邻居从 B 口进就发 MED。而 AS Path 是「天然」的路径长度度量——这也解释了为什么「AS Path prepend(把自家 AS 号多写几遍)」能影响入站选路:路径显得更长,邻居就更不愿意往这条路上送。

2. eBGP 与 iBGP 的环路防范差异

BGP 防环机制因对等关系类型而不同:

这就是为什么大型 AS 里要么 full mesh(规模小时),要么上 Route Reflector——RR 打破了「iBGP 不转发」的规则,允许把从 iBGP 邻居学来的路由反射给其他 iBGP 邻居,用 Originator ID 和 Cluster List 防止路由循环。理解这一点,才能看懂现代数据中心 CLOS 架构里 BGP 的部署形态。

四、排障:从「现象」反推「协议层」

1. 路由通不了,先分层定位

# 拓扑里一条路由不生效,按顺序追问:
show ip route 10.1.1.0/24       # 路由表里有没有?走哪条协议?
traceroute 10.1.1.1             # 包卡在哪一跳?
show ip ospf neighbor           # OSPF 邻接 Full 了吗?
show ip bgp summary             # BGP 对等 Established 了吗?
show ip bgp 10.1.1.0/24         # BGP 表里这条前缀最优吗?下一跳可达吗?

一个高频坑:BGP 下一跳不可达。eBGP 学到的路由下一跳是直连对端,天然可达;但 iBGP 场景下,路由的下一跳仍是外部 eBGP 对端地址,而 iBGP 邻居不一定会递归解析到这条下一跳——此时路由虽进 BGP 表,却因为下一跳不可达而装不进路由表。解决方法是 next-hop-self:让 ASBR 把下一跳改成自己。

2. 环路与路由震荡的常见诱因

IGP 侧最常见的是重发布环路:把 OSPF 重发布进 RIP、又同时把 RIP 重发布回 OSPF,两个域互相喂路由,极易成环。对策是严格的 route-map/tag 过滤与方向控制。BGP 侧则是路由震荡(route flap)——链路频繁 up/down 导致路由反复撤销/通告,用 dampening(路由衰减)惩罚不稳定的前缀,避免它们反复触发全网重计算。

五、选择建议:什么时候用 OSPF,什么时候上 BGP

场景推荐理由
企业园区网内部OSPF收敛快、无环、按区域扩展
数据中心 CLOS(Leaf-Spine)BGP(eBGP)策略灵活、大规模易扩展、ECMP 友好
接多个运营商/互联网出口BGP唯一能表达跨 AS 策略的协议
VPN / MPLS 骨干IS-IS + BGPIS-IS 扩展性强,BGP 承载 VPNv4 路由

趋势值得注意:BGP 正在「下沉」到数据中心内部。传统上「IGP 跑网内、BGP 跑网间」的边界正在模糊,Leaf-Spine 架构大规模采用 eBGP 替代 OSPF/IS-IS,因为它把「路由策略」与「转发平面」解耦得更彻底,也更容易与自动化(如 Ansible、SDN 控制器)协同。

总结。动态路由的精髓是「各算各的图,却能达成全网一致」。OSPF 靠链路状态与 SPF 在 AS 内快速收敛、天然无环;BGP 靠路径属性在 AS 间表达策略。排障时记住三条主线:邻接关系建没建立(状态机)、路由有没有被选为最优(选路决策顺序)、下一跳可不可达(能否装进转发表)。把这三条串起来,绝大多数路由故障都能顺藤摸瓜。
#路由#OSPF#BGP#网络基础#排障
广告