Skip to content

OSPF、IS-IS 与 BGP 路由协议 ​

内容摘要:动态路由协议让路由器交换可达性并在拓扑变化后重新收敛。本章比较 RIP、OSPF、IS-IS 与 BGP 的定位,重点拆解 OSPF/IS-IS 的链路状态数据库与 SPF、BGP 的 TCP 会话、有限状态机、路径属性和策略决策,解释 iBGP/eBGP、路由反射器与互联网路由安全。核心边界:IGP 追求域内可达与快速收敛,BGP 追求跨域策略与可控传播;BGP 不等于“最短路径协议”。

难度:高级 | 前置知识:10 路由基础、07 IPv4、08 IPv6 | 所属层次:网络层控制平面

一、协议定位:先按管理边界分类 ​

自治系统(Autonomous System,AS) 是对外呈现一致路由策略的网络管理域,用自治系统号(Autonomous System Number,ASN)标识。

协议类型典型范围核心算法/模型最适合
RIPIGP小型网络距离矢量、跳数教学、遗留小网
OSPFIGP企业、园区、数据中心链路状态 + Dijkstra SPF多厂商 IP 网络
IS-ISIGP运营商、大型骨干、部分数据中心链路状态 + Dijkstra SPF高扩展性、大规模域内
BGPEGP/路径矢量AS 间;也用于 AS 内传播外部路由路径属性 + 策略决策互联网、云/数据中心策略路由

不是替代关系:典型运营商同时运行 OSPF/IS-IS 保障内部 loopback 与下一跳可达,再运行 iBGP/eBGP 传播互联网或业务前缀。若 IGP 不可达 BGP NEXT_HOP,BGP 路由即使存在也不能正常转发。

二、OSPF:域内链路状态协议 ​

开放最短路径优先(Open Shortest Path First,OSPF) 是 IGP。OSPFv2(RFC 2328)服务 IPv4;OSPFv3(RFC 5340)最初服务 IPv6,后续扩展可承载更多地址族。

1、工作流程 ​

RFC 2328 的关键性质:

  • 同一区域内路由器维护一致的链路状态数据库(Link-State Database,LSDB)。
  • 每台路由器以自己为根运行 Dijkstra,生成最短路径树。
  • 支持区域层次与等价多路径(ECMP)。
  • 以**代价(cost)**作为无量纲度量;如何从带宽映射到 cost 是实现/配置问题。

2、OSPF 报文类型与字段 ​

OSPF 直接封装在 IP 中,IPv4 协议号为 89,不是 TCP/UDP 端口。

报文Type作用关键异常
Hello1发现/维持邻居、选举 DR/BDRArea ID、Hello/Dead、认证、网络类型不匹配
Database Description(DBD)2摘要交换 LSDBMTU 不匹配常卡在 ExStart/Exchange
Link State Request(LSR)3请求缺少或较新的 LSALSDB 差异
Link State Update(LSU)4携带一个或多个 LSA泛洪风暴、序列号异常
Link State Acknowledgment(LSAck)5确认 LSA丢失导致重传

OSPFv2 公共头:

字段位宽/长度语义生成方接收方处理抓包显示常见异常
Version1BOSPF 版本(v2)发送路由器版本检查Version 2版本不兼容
Type1B五类协议报文发送路由器分派处理Message Type非法类型
Packet Length2BOSPF 包总长发送路由器定界Packet Length截断/MTU
Router ID4B32 位稳定路由器标识配置/实现选择识别邻居Source OSPF Router重复 Router ID
Area ID4B所属区域配置必须匹配Area ID区域不匹配不建邻
Checksum2B报文校验发送方验证Checksum报文损坏
AuType/Auth2B+8BOSPFv2 认证发送方按安全关联验证Auth Type密钥/Key ID 不一致

认证版本提醒:RFC 2328 的明文密码和 Keyed-MD5 属于历史兼容机制;现代 OSPFv2 优先使用 RFC 5709 的 HMAC-SHA(至少 HMAC-SHA-256,具体看设备支持)。OSPFv3 可用 RFC 7166 Authentication Trailer。不要把弱算法作为新部署推荐。

3、邻居状态机 ​

  • 在广播网络上,普通 DROther 之间停在 2-Way 可以是正常状态;它们分别与 DR/BDR 建 Full。
  • ExStart/Exchange 长时间不前进,优先检查 MTU、Router ID、重复邻居、主从协商。
  • 频繁 Full → Down → Full 是邻接抖动,会触发 LSA 泛洪与 SPF 计算,影响全域。

4、区域、DR/BDR 与 LSA ​

  • Area 0 是骨干区域;其他区域原则上经 Area 0 互联。
  • 区域边界路由器(Area Border Router,ABR) 连接多个区域并传播区域间摘要。
  • 自治系统边界路由器(Autonomous System Boundary Router,ASBR) 把外部路由引入 OSPF。
  • 广播多路访问网络选举 DR/BDR,把邻接数从全互联的 O(n²) 降低。

常见 OSPFv2 LSA:

LSA名称范围主要内容
Type 1Router-LSA区域路由器链路
Type 2Network-LSA区域DR 描述多路访问网段
Type 3Summary-LSA跨区域ABR 发布区域间前缀
Type 4ASBR-Summary跨区域到 ASBR 的可达性
Type 5AS-ExternalAS外部路由
Type 7NSSA ExternalNSSANSSA 内的外部路由

5、OSPFv2 与 OSPFv3 ​

维度OSPFv2OSPFv3
基础标准RFC 2328RFC 5340
传统地址族IPv4IPv6
运行粒度每 IP 子网每链路
邻接地址IPv4IPv6 链路本地地址
Router ID/Area ID32 位仍为 32 位,不是 IPv6 地址
认证OSPF 头内机制 + RFC 5709IPsec 或 RFC 7166 Authentication Trailer

三、IS-IS:运营商常用的链路状态 IGP ​

中间系统到中间系统(Intermediate System to Intermediate System,IS-IS) 源自 ISO 10589;集成 IS-IS(RFC 1195)用同一协议承载 IP 可达性。它与 OSPF 都运行 SPF,但工程形态不同。

1、核心机制 ​

  • L1:区域内路由;L1 路由器把域外流量交给最近的 L1/L2 路由器。
  • L2:区域间骨干;L2 路由器维护区域间拓扑。
  • LSP(Link State PDU):类似 OSPF LSA,可靠泛洪形成 LSDB。
  • TLV(Type-Length-Value):协议能力和前缀通过 TLV 扩展,扩展性强。
  • 直接运行在二层 CLNS 上,不依赖 IP 建邻,因此 IP 地址变化与 IGP 邻接相对解耦。

2、OSPF 与 IS-IS 工程对比 ​

维度OSPFIS-IS
标准体系IETF RFCISO 10589 + IETF RFC 1195
承载直接在 IP 上(协议号 89)直接在二层 CLNS 上
层次Area 0 + 非骨干区域L1 区域 + L2 骨干
扩展新 LSA/字段TLV,扩展灵活
广播网代表DR/BDRDIS(无 BDIS 等价机制)
常见部署企业、多厂商园区运营商骨干、大规模网络
算法Dijkstra SPFDijkstra SPF
优劣结论取决于团队、规模、设备支持不是天然“更快”或“更好”

IS-IS 的完整规范需结合 ISO 10589;RFC 1195 只描述把 IP 集成进 IS-IS 的扩展。不能只读 RFC 1195 就声称覆盖完整 IS-IS 状态机。

四、BGP:策略型路径矢量协议 ​

边界网关协议(Border Gateway Protocol,BGP-4,RFC 4271) 是 AS 间路由协议。它交换“前缀 + 路径属性”,以策略选择与传播可达性。

  • BGP 使用 TCP,IANA 注册服务名 bgp、端口 179/TCP。
  • TCP 只保证 BGP 消息可靠有序传输;BGP 自己维护邻居状态、路由属性和策略。
  • BGP 的目标不是全网最短,而是满足商业/安全/运维策略的可达路径。

1、BGP 消息与状态机 ​

消息作用关键字段/内容
OPEN协商版本、ASN、Hold Time、BGP Identifier、能力版本/ASN/能力不匹配会失败
UPDATE发布/撤销 NLRI 与路径属性BGP 的核心
KEEPALIVE维持会话、确认 OPEN无载荷
NOTIFICATION报错并关闭会话Error Code/Subcode
ROUTE-REFRESH请求按当前策略重发路由(扩展)地址族

名为 Active 不代表“会话已激活”,而是 TCP 连接重试状态。生产中邻居长期 Active 常意味着 TCP/179 不通、源地址/路由不对、ACL 拦截或对端未配置。

2、UPDATE 与路径属性 ​

属性RFC 类型语义典型策略
ORIGINwell-known mandatory路由起源类别 IGP/EGP/Incomplete通常低权重决策
AS_PATHwell-known mandatory经历的 AS 序列;用于环路检测prepend 影响入站流量
NEXT_HOPwell-known mandatory数据面的下一跳必须由 IGP/静态路由可达
LOCAL_PREFwell-known discretionaryAS 内偏好,值大优先控制出站选路
MEDoptional non-transitive向邻 AS建议入口,值小优先控制邻 AS进入本 AS
COMMUNITYoptional transitive,RFC 1997给路由打策略标签NO_EXPORT、客户/地域策略
ORIGINATOR_ID / CLUSTER_LISToptional non-transitive,RFC 4456路由反射防环RR 内部使用

2025 年标准更新:RFC 9774 更新 RFC 4271/5065,禁止常规产生或传播 AS_SET/AS_CONFED_SET;收到包含这些段类型的 UPDATE 默认采用 treat-as-withdraw。新设计不要再把 AS_SET 当作推荐的聚合方案。

3、BGP 决策:标准与实现必须分开 ​

RFC 4271 定义三阶段决策过程与必要属性语义;实际设备常加入 Weight、厂商特定 tie-break 等。下面是常见但非跨厂商完全统一的高层顺序:

  1. 路由有效且 NEXT_HOP 可解析。
  2. 本地策略产生的偏好更高(如 Weight,厂商专有)。
  3. LOCAL_PREF 更高。
  4. 本地产生优于外部学习(实现细节)。
  5. AS_PATH 更短。
  6. ORIGIN 更优(IGP < EGP < Incomplete)。
  7. 可比较条件下 MED 更低。
  8. eBGP 常优于 iBGP。
  9. 到 NEXT_HOP 的 IGP 代价更低。
  10. 后续按年龄、Router ID、邻居地址等打破平局(实现不同)。

不要背一张“万能 BGP 选路表”。排障必须查看目标设备版本的官方决策输出,例如 FRR show bgp ... detail、厂商 bestpath 原因,并区分 RFC 必选逻辑与实现扩展。

五、eBGP 与 iBGP ​

维度eBGPiBGP
邻居 ASN不同相同
目的AS 之间交换路由AS 内传播 BGP 路由
AS_PATH出站通常前置本 ASN不前置本 ASN
NEXT_HOP通常改为本端默认可能保持不变
邻接范围常直连,也可多跳常 loopback 多跳
防环AS_PATHiBGP split-horizon + RR 属性

iBGP 的基本传播规则:从一个 iBGP 邻居学到的路由不再发布给另一个 iBGP 邻居。因此传统 iBGP 要全互联,n 台路由器需:

text
n × (n - 1) / 2 个会话

100 台需要 4950 个会话,无法扩展,于是引入路由反射器。

六、路由反射器 ​

路由反射器(Route Reflector,RR,RFC 4456) 可把 iBGP 学到的路由反射给客户端,消除全互联。

防环属性:

  • ORIGINATOR_ID:原始发布者的 BGP Identifier;路由器看到自己的 ID 应忽略。
  • CLUSTER_LIST:经过的 RR Cluster ID 列表;本地 Cluster ID 已存在则忽略。

工程风险:

  • RR 只反射自己选中的最佳路由,客户端可能看不到其他可用路径。
  • RR 所在位置与 IGP 代价会影响最佳路径,拓扑设计不合理会产生**路径隐藏(path hiding)**或次优转发。
  • 至少部署冗余 RR,并让 RR 拓扑与物理/IGP 拓扑尽量一致。

七、路由策略:BGP 的核心 ​

BGP 的价值在于策略,不在于“算最短”。典型手段:

目标常用属性/策略方向
选择本 AS 出口提高/降低 LOCAL_PREF影响出站
影响邻居进入本 ASMED、AS_PATH prepend、按上游 community影响入站(仅建议,不保证)
限制传播范围NO_EXPORT、NO_ADVERTISE发布控制
客户/对等/上游关系prefix-list + AS_PATH + community防路由泄漏
控制规模maximum-prefix防错误全表/泄漏耗尽

误区:AS_PATH prepend 只是影响部分网络的偏好,不能保证所有入站流量按预期切换;上游可能优先 LOCAL_PREF 或有自己的策略。

八、BGP 路由安全 ​

1、风险模型 ​

风险条件影响证据
前缀劫持非授权 AS 发布他人前缀/更具体前缀流量黑洞或中间人起源 AS 异常、全球路由观测
路由泄漏合法获得的路由被错误传播给不该接收的邻居大范围绕路/拥塞AS_PATH 商业关系异常
会话攻击可达 TCP/179、伪造 RST/注入邻接中断或恶意 UPDATE会话重置日志、异常包
路由抖动前缀频繁发布/撤销控制平面压力、可达性波动UPDATE 频率、flap 计数

2、纵深防御 ​

  1. 前缀与 AS_PATH 过滤:客户只能发布已登记前缀和合法起源 AS;对等/上游过滤特殊用途与过长前缀。
  2. 最大前缀限制:异常数量达到阈值时告警或关闭会话,阈值需留增长余量。
  3. 控制平面保护:仅允许已知邻居访问 TCP/179;直接邻居使用 GTSM(RFC 5082);设备支持时优先 TCP-AO(RFC 5925)。
  4. RPKI 路由起源验证(Route Origin Validation,ROV):ROA 授权“哪个 AS 可起源哪个前缀”,验证状态为 Valid、Invalid、NotFound。
  5. 监控:对自己的前缀做外部 BGP 监测,告警起源 AS、路径、可见性与更具体前缀变化。

RPKI 边界:

  • RFC 6811 只验证起源 AS,不验证完整 AS_PATH;攻击者把合法起源 ASN 放到伪造路径末端可能绕过起源验证。
  • NotFound 不是 Invalid;不能默认等同恶意。
  • RPKI 缓存是分布式数据,更新时刻不同;策略错误可能造成拒绝服务。
  • RFC 8481 强调先为所有路由设置验证状态,没有显式配置就不要自动采取策略动作。

九、收敛与故障路径 ​

收敛不是一个瞬时动作,而是检测 → 协议传播 → 计算 → FIB 下发 → 流量恢复。观测至少记录:

  • 链路失败时间、BFD/Hello 检测时间。
  • OSPF/IS-IS 邻接和 LSDB 更新时间、SPF 运行次数。
  • BGP UPDATE/withdraw 时间、会话状态与最佳路径变化。
  • FIB 安装完成时间、真实丢包窗口。

盲目缩短 Hello/Hold 定时器会增加 CPU 与抖动敏感性。需要亚秒检测时通常评估双向转发检测(Bidirectional Forwarding Detection,BFD),并以设备容量和故障域为前提。

十、最小可复现实验 ​

1、实验目标 ​

在隔离 Linux 容器/虚拟机中:

  1. 建立三台路由器的 OSPF 邻接,观察状态到 Full、LSDB 与 ECMP。
  2. 建立 AS 64512 与 AS 64513 的 eBGP,会话到 Established,验证 AS_PATH 与 NEXT_HOP。
  3. 关闭一条链路,记录邻接、路由与流量恢复时间。

2、版本与执行状态 ​

  • 建议:Linux LTS、FRRouting(FRR)稳定版本;执行前用 vtysh -c 'show version' 记录精确版本。
  • 当前主机:macOS 26.6.2、Docker 29.6.1。
  • 未执行原因:当前本机没有已锁定版本的 FRR 镜像,Docker Hub 查询也未得到预期版本标签。为避免用未知镜像伪造结果,本节提供完整验证步骤并标记“未在当前环境执行”。

3、OSPF 验证命令 ​

bash
# [未在当前环境执行] FRR/vtysh,具体配置语法需以所用 FRR 版本核验
vtysh -c 'show version'
vtysh -c 'show ip ospf neighbor'
vtysh -c 'show ip ospf database'
vtysh -c 'show ip route ospf'
vtysh -c 'show ip ospf route'

预期证据:

  • 邻居从 Down/Init/2-Way/ExStart/Exchange/Loading 到 Full。
  • LSDB 中双方 Router-LSA 序列号一致。
  • 存在两条等价路径时,RIB/FIB 显示两个下一跳。

抓包:

bash
sudo tcpdump -i any -nn -c 100 -w ospf-lab.pcap 'ip proto 89'
# Wireshark 显示过滤器
ospf

4、BGP 验证命令 ​

示例使用 RFC 6996 私有 ASN 与 RFC 5737 文档地址:

text
R1: AS64512, 192.0.2.1
R2: AS64513, 192.0.2.2
R1 宣告 198.51.100.0/24
bash
# [未在当前环境执行] FRR/vtysh
vtysh -c 'show bgp summary'
vtysh -c 'show bgp ipv4 unicast'
vtysh -c 'show bgp ipv4 unicast 198.51.100.0/24 detail'
ss -tnp '( sport = :179 or dport = :179 )'

预期证据:

  • TCP/179 ESTABLISHED,BGP 状态为 Established。
  • R2 路由表看到 198.51.100.0/24,AS_PATH 为 64512。
  • R2 FIB 的下一跳可达;若删除到 NEXT_HOP 的路由,BGP 路径存在但不可用或不下发。

抓包:

bash
sudo tcpdump -i any -nn -s 0 -c 100 -w bgp-lab.pcap 'tcp port 179'
# Wireshark:先看 TCP 三次握手,再看 OPEN/KEEPALIVE/UPDATE
bgp

5、故障注入与清理 ​

bash
# 在隔离环境关闭一条链路,记录时间
date -Ins
sudo ip link set dev eth1 down
# 观察 OSPF 邻居、BGP 下一跳与 ping 丢包

# 恢复
sudo ip link set dev eth1 up
# 删除实验容器/命名空间和 PCAP
rm -f ospf-lab.pcap bgp-lab.pcap

权限与风险:需 root/CAP_NET_ADMIN/CAP_NET_RAW;只允许在独立容器、虚拟机或 20 统一实验 中执行。生产路由协议变更必须先有带外访问、配置快照、回滚与变更窗口。

十一、排障清单 ​

OSPF/IS-IS 邻接不上 ​

  1. 链路与 VLAN 是否通,接口是否 up。
  2. Hello 是否双向可见;组播/CLNS 是否被 ACL 丢弃。
  3. Area/Level、Hello/Dead、网络类型、认证是否一致。
  4. OSPF 是否因 MTU 不一致卡在 ExStart/Exchange。
  5. Router ID/System ID 是否重复。
  6. LSDB 是否一致、SPF 是否执行、路由是否装入 FIB。

BGP 会话或路由异常 ​

  1. ip route get <peer> 与 TCP/179 是否双向可达。
  2. ASN、源地址、eBGP multihop、密码/TCP-AO、GTSM 是否一致。
  3. 状态机卡在 Active 还是 OpenSent/OpenConfirm。
  4. UPDATE 是否被 prefix-list、AS_PATH、community、RPKI 策略拒绝。
  5. NEXT_HOP 是否可解析,是否只存在于 BGP RIB 而未进入 FIB。
  6. 正向与回程路径是否对称,是否经过状态防火墙。

十二、常见误区 ​

误区纠正
“BGP 选最短路径”BGP 先服从本地策略,AS_PATH 只是众多属性之一。
“OSPF 邻居在 2-Way 就坏了”广播网 DROther 之间停在 2-Way 可以正常。
“BGP Established 就一定有路由”会话与路由是两层;策略可过滤全部 NLRI。
“BGP 表里有路由就能转发”NEXT_HOP 必须可达,且路由要装入 FIB。
“RPKI 能验证完整路径”ROV 只验证前缀起源 AS,不验证完整 AS_PATH。
“RR 只是减少会话,无选路影响”RR 只反射最佳路径,可能隐藏路径并产生次优转发。
“OSPF/IS-IS 哪个绝对更快”收敛取决于规模、定时器、实现、硬件与拓扑。

十三、性能与容量 ​

  • OSPF/IS-IS 的压力来自邻接数、LSDB 规模、泛洪与 SPF 频率;区域设计和前缀汇总降低故障扩散。
  • BGP 的压力来自前缀/路径数量、策略复杂度、更新速率和 Add-Path/多路径保留;评估内存、CPU 与 FIB/TCAM。
  • RR 降低会话规模,但把 CPU/内存与收敛依赖集中到 RR;需冗余与容量测试。
  • 路由抖动抑制不是默认万能方案,可能延长合法前缀恢复;应先修复抖动源。

十四、版本与实现差异 ​

  • OSPFv2(RFC 2328)与 OSPFv3(RFC 5340)报文、地址语义与认证不同。
  • IS-IS 完整基础标准是 ISO 10589;RFC 1195 是 Integrated IS-IS 的 IP 扩展。
  • BGP 基础为 RFC 4271,但 MP-BGP、四字节 ASN、错误处理、社区与安全由后续 RFC 扩展。
  • BGP best-path 中的 Weight、部分 tie-break 和 multipath 条件是实现差异。
  • RFC 9774(2025)已更新 RFC 4271:新部署不得继续把 AS_SET/AS_CONFED_SET 当作可推荐功能。

十五、关联章节 ​

检索关键词 ​

OSPF 邻居状态机 Full ExStart OSPF LSA LSDB SPF DR BDR Area 0 OSPFv2 OSPFv3 区别 IS-IS L1 L2 TLV LSP BGP TCP 179 状态机 Active Established BGP UPDATE NLRI AS_PATH NEXT_HOP LOCAL_PREF MED COMMUNITY iBGP eBGP 区别 路由反射器 ORIGINATOR_ID CLUSTER_LIST BGP 路由策略 RPKI ROV Valid Invalid NotFound 前缀劫持 路由泄漏 RFC 9774 AS_SET

权威来源 ​

核心机制已于 2026-09-07 对照 RFC Editor 与 IANA 注册表核验。动态路由实验命令以 FRR 为示例,但因当前环境缺少已锁定版本的 FRR 镜像而未执行;文档没有伪造邻接或抓包输出。

ICP 备案号待补充 · Gitee 主页