bgp 4 中, trap, update, keepalive, notification 的作用?
在 BGP-4(Border Gateway Protocol version 4) 中,协议通过 消息(Message) 实现邻居会话的建立、维护和路由信息交换。BGP 定义了 4 种核心消息类型:
OPEN、UPDATE、KEEPALIVE、NOTIFICATION(RFC 4271),此外还有 ROUTE-REFRESH(RFC 2918)。
以下是每种消息的作用和机制详解:
1. OPEN 消息
作用
- 用于 建立 BGP 邻居(Peer)关系,是 TCP 连接建立后的第一个消息。
- 协商双方的 BGP 参数(如 AS 号、Hold Time、BGP Identifier 等)。
关键字段
字段 | 说明 |
---|---|
Version | BGP 版本(默认为 4)。 |
My AS | 发送方的 AS 号(用于验证对端是否合法)。 |
Hold Time | 保持时间(秒),双方协商取最小值(默认为 180s)。 |
BGP Identifier | 发送方的 Router ID(通常为环回口 IP)。 |
Optional Parameters | 可选项(如支持多协议扩展、路由刷新能力等)。 |
示例流程
plaintext
BGP Peer A(AS 100) --- TCP 179 ---> BGP Peer B(AS 200) A 发送 OPEN 消息 → B 回复 OPEN 消息 → 双方校验通过后发送 KEEPALIVE 确认。
2. UPDATE 消息
作用
- 通告或撤销路由,是 BGP 的核心功能。
- 包含 可达路由(NLRI) 或 不可达路由(Withdrawn Routes)。
关键字段
字段 | 说明 |
---|---|
Withdrawn Routes | 要撤销的路由前缀列表(长度 + 前缀)。 |
Path Attributes | 路径属性(如 AS_PATH、NEXT_HOP、LOCAL_PREF、MED 等)。 |
NLRI (Network Layer Reachability Info) | 新增的可达路由前缀。 |
示例
plaintext
UPDATE 消息示例: - 撤销路由:Withdrawn Routes = [192.168.1.0/24] - 新增路由:NLRI = [10.1.1.0/24], Path Attributes = [AS_PATH: 100 200, NEXT_HOP: 1.1.1.1]
3. KEEPALIVE 消息
作用
- 维持 BGP 邻居关系,周期性发送(默认间隔为 Hold Time/3,即 60s)。
- 若 Hold Time 内未收到 KEEPALIVE 或 UPDATE,则认为邻居失效。
特点
- 无实际数据,仅包含 BGP 头部(19 字节)。
- Hold Time = 0 时表示不发送 KEEPALIVE(仅依赖 UPDATE)。
示例
plaintext
Peer A 每 60s 发送 KEEPALIVE → Peer B 回复 KEEPALIVE。
4. NOTIFICATION 消息
作用
- 报告错误并立即终止 BGP 会话,用于异常场景(如参数不匹配、报文格式错误)。
- 发送后,TCP 连接会被主动关闭。
关键字段
字段 | 说明 |
---|---|
Error Code | 错误类型(如 1=消息头错误,2=OPEN 消息错误,3=UPDATE 消息错误)。 |
Error Subcode | 子错误码(如 2.1=不支持的版本号,3.4=无效的 NEXT_HOP)。 |
Data | 错误详情(如错误的 AS 号)。 |
常见错误
错误码 | 含义 | 触发场景示例 |
---|---|---|
2 | OPEN 消息错误 | AS 号不匹配、不支持的认证方式。 |
3 | UPDATE 消息错误 | 无效的 AS_PATH、属性冲突。 |
4 | Hold Timer 超时 | 未收到 KEEPALIVE/UPDATE。 |
6 | 连接关闭(Cease) | 管理员手动重置邻居。 |
5. ROUTE-REFRESH 消息(可选)
作用
- 动态请求对端重新发送路由表(需双方支持
Route Refresh
能力)。 - 用于策略(Policy)变更后快速更新路由,避免手动重置会话。
触发条件
- 通过
capability route-refresh
在 OPEN 消息中协商支持。 - 命令触发(如华为设备:
refresh bgp all import
)。
6. 消息交互流程(BGP 状态机)
- Idle → Connect(TCP 连接建立)
- Connect → OpenSent(发送 OPEN 消息)
- OpenSent → OpenConfirm(收到对端 OPEN 并校验通过)
- OpenConfirm → Established(交换 KEEPALIVE)
- Established 后:
- 周期性发送 KEEPALIVE。
- 通过 UPDATE 交换路由。
- 错误时发送 NOTIFICATION 终止会话。
7. 总结
消息类型 | 作用 | 触发场景 | 是否必需 |
---|---|---|---|
OPEN | 建立邻居,协商参数 | TCP 连接建立后 | 是 |
UPDATE | 通告/撤销路由 | 路由变化、策略更新 | 是 |
KEEPALIVE | 保活,维持会话 | Hold Time 定时触发 | 是(除非 Hold Time=0) |
NOTIFICATION | 报告错误并终止会话 | 协议错误、配置冲突 | 否(异常时触发) |
ROUTE-REFRESH | 请求重新发送路由表 | 策略变更后动态更新 | 可选 |