第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 | 错误时 | 出错了,再见 |
九、思考
- BGP 为什么使用 TCP 作为传输层?这给 BGP 带来了什么好处?
- Open 报文中的 Optional Parameters 有什么作用?
- Keepalive 报文的发送间隔是如何计算的?默认是多少秒发送一次?
- 一条 Update 报文是否可以同时通告多条路由?是否可以同时撤销多条路由?
- 如果收到 Notification 错误码 2(Open Message Error),可能是什么原因?
下篇预告:第83篇《BGP 状态机——Idle→Connect→Active→OpenSent→OpenConfirm→Established》——理解 BGP 连接的完整生命周期。