第82篇:BGP 报文类型——Open、Update、Keepalive、Notification

关键词

BGP、报文类型、Open、Update、Keepalive、Notification、Route-Refresh


一、BGP 的四种核心报文

BGP 使用 TCP(端口 179) 作为传输层,共定义了四种报文类型:

报文类型 作用 触发时机
Open 建立 BGP 连接,协商参数 TCP 连接建立后的第一条报文
Update 通告或撤销路由 路由变化时
Keepalive 维护 BGP 连接 周期性发送(默认 60 秒)
Notification 报告错误,断开连接 检测到错误时

二、Open 报文

2.1 作用

Open 是 BGP 建立连接的第一步,用于协商双方的能力和参数。

2.2 报文结构

Marker (16 字节,全 1) Length (2 字节) Type = 1 (Open) Version (1 字节,当前为 4) My Autonomous System (2 字节) Hold Time (2 字节,默认 180s) BGP Identifier (4 字节,Router ID) Optional Parameters Length Optional Parameters (TLV 格式) - Capabilities (IPv4/IPv6/VRF等)

2.3 关键字段

字段 说明
Version BGP 版本号,当前为 4
My AS 本端 AS 号
Hold Time 保持时间(默认 180 秒)
BGP Identifier Router ID(IPv4 地址格式)
Optional Parameters 能力协商(如 IPv6、VRF、4 字节 ASN)

2.4 能力协商

Open 报文中的 Optional Parameters 用于能力协商,确保双方都支持某些扩展功能:

display bgp peer 10.0.12.2 verbose

  Peer: 10.0.12.2, AS: 200
  Negotiated capabilities:
    Route refresh:          ✅ 支持路由刷新
    4-byte AS:              ✅ 支持 4 字节 ASN
    Address family IPv4:    ✅ 支持 IPv4 单播
    Address family VPNv4:   ❌

三、Update 报文

3.1 作用

Update 是 BGP 最核心的报文,用于通告新路由撤销已通道路由

3.2 报文结构

Marker (16 字节)
Length (2 字节)
Type = 2 (Update)
Withdrawn Routes Length (2 字节)
Withdrawn Routes (可变) ← 要撤销的路由列表
Total Path Attributes Length (2 字节)
Path Attributes (可变) - ORIGIN, AS_PATH, NEXT_HOP ... ← 路由属性
NLRI (可变) - 前缀长度 + 前缀 ← 通告的路由前缀

3.3 一条 Update 可以做什么?

场景 Update 内容
通告新路由 AS_PATH + NEXT_HOP + NLRI
撤销路由 Withdrawn Routes
修改路由属性 新属性 + NLRI

一个 Update 报文可以同时通告多条 NLRI,也可以同时撤销多条路由。

3.4 查看 Update 报文

display bgp update

BGP Update Information:
  Sent: 120 Updates
  Received: 150 Updates
  ...

display bgp update 10.0.12.2
  ...
  Total Path Attributes: 5
  Path Attribute: ORIGIN (Type 1)
  Path Attribute: AS_PATH (Type 2)
  Path Attribute: NEXT_HOP (Type 3)
  Path Attribute: LOCAL_PREF (Type 5)
  Path Attribute: MED (Type 4)
  NLRI: 172.16.0.0/16

四、Keepalive 报文

4.1 作用

Keepalive 用于定期确认 BGP 连接仍然存活。

4.2 报文格式

Keepalive 是最简单的 BGP 报文——只有 BGP 头部(19 字节),没有数据体

Marker (16 字节,全 1) Length = 19 (2 字节) Type = 4 (Keepalive)

4.3 发送间隔

Keepalive Interval = Hold Time ÷ 3

默认 Hold Time = 180 秒
默认 Keepalive 间隔 = 60 秒
# 修改 Hold Time
bgp 100
 peer 10.0.12.2 timer hold 120       # Hold Time = 120 秒
 peer 10.0.12.2 timer keepalive 40   # Keepalive = 40 秒

五、Notification 报文

5.1 作用

当 BGP 检测到错误时,发送 Notification 报文并断开连接。

5.2 错误类型

错误码 错误类别 说明
1 Message Header Error 报文头错误
2 Open Message Error Open 报文参数错误
3 Update Message Error Update 报文内容错误
4 Hold Timer Expired 保持时间超时
5 Finite State Machine Error 状态机错误
6 Cease 管理员断开

5.3 常见 Notification

# 常见断连原因
% BGP-3-NOTIFICATION: sent to peer 10.0.12.2:
  Error Code: 2 (Open Message Error)
  Subcode: 2 (Peer AS number mismatch)  ← AS 号不匹配

% BGP-3-NOTIFICATION: received from peer 10.0.12.2:
  Error Code: 6 (Cease)
  Subcode: 3 (Administrative Reset)    ← 管理员重置

六、Route-Refresh 报文(扩展)

除四种核心报文外,BGP 还支持 Route-Refresh(路由刷新):

Route-Refresh 报文的作用:
  请求对端重新发送所有 Update 信息

使用场景:
  - 修改路由策略后,无需重置 BGP 连接
  - 请求策略重新生效
# 触发路由刷新(不需要重置 BGP 连接)
refresh bgp 100 import              # 重新从邻居接收路由
refresh bgp 100 export              # 重新向邻居发送路由

七、四种报文交互过程

BGP 连接建立 → 路由交换 → 维护 → 断开

RouterA                          RouterB
  │                                │
  │──── TCP 三次握手 ────────────→│  TCP 连接建立
  │←── TCP 三次握手 ─────────────│
  │                                │
  │──── Open ───────────────────→│  协商参数
  │←── Open ─────────────────────│
  │                                │
  │──── Keepalive ──────────────→│  Open 确认
  │←── Keepalive ───────────────│
  │                                │
  │  连接已建立(Established)      │
  │                                │
  │──── Update (NLRI) ──────────→│  路由交换
  │←── Update (NLRI) ───────────│
  │                                │
  │──── Keepalive (每 60s) ─────→│  维护连接
  │←── Keepalive (每 60s) ──────│
  │                                │
  │──── Notification ───────────→│  错误或断开
  │                                │
  │  连接断开                      │

八、总结

报文 方向 长度 频率 一句话记住
Open 双向 约 30B 连接建立时 1 次 初次见面,报上家门
Update 双向 可变 路由变化时 好消息或坏消息
Keepalive 双向 19B 每 60s 我还活着
Notification 双向 约 21B 错误时 出错了,再见

九、思考

  1. BGP 为什么使用 TCP 作为传输层?这给 BGP 带来了什么好处?
  2. Open 报文中的 Optional Parameters 有什么作用?
  3. Keepalive 报文的发送间隔是如何计算的?默认是多少秒发送一次?
  4. 一条 Update 报文是否可以同时通告多条路由?是否可以同时撤销多条路由?
  5. 如果收到 Notification 错误码 2(Open Message Error),可能是什么原因?

下篇预告:第83篇《BGP 状态机——Idle→Connect→Active→OpenSent→OpenConfirm→Established》——理解 BGP 连接的完整生命周期。