BGP协议报文类型及结构解析
BGP 报文类型概述
BGP(Border Gateway Protocol)作为域间路由协议的核心,通过五种标准报文实现对等体之间的路由信息交换与状态维护。这些报文包括:
- OPEN:用于建立BGP对等关系,协商参数。
- UPDATE:传递路由可达性信息或撤销无效路由。
- KEEPALIVE:维持TCP会话活跃,确认连接正常。
- NOTIFICATION:在检测到错误时终止会话并报告原因。
- ROUTE-REFRESH:请求对端重新发送特定地址族的路由信息。
BGP 公共头部格式
所有BGP报文均以统一的头部开始,其结构如下:
Marker (16字节) | Length (2字节) | Type (1字节)
| 字段 | 说明 |
|---|---|
| Marker | 全为1(十六进制f...f),用于同步校验;若启用认证,则包含哈希值。 |
| Length | 整个报文长度,范围为19至4096字节。 |
| Type | 标识报文类型:1=OPEN,2=UPDATE,3=NOTIFICATION,4=KEEPALIVE,5=ROUTE-REFRESH。 |
OPEN 报文详解
该报文在TCP连接建立后立即发送,用于初始化BGP会话。
Version: 4
My AS: 100
Hold Time: 180
BGP Identifier: 24.1.1.2
Optional Parameters Length: 22
Optional Parameters:
Capability: Multiprotocol Extensions (AFI=1, SAFI=1)
Capability: Route Refresh
Capability: 4-Octet AS Number
| 字段 | 描述 |
|---|---|
| Version | 当前默认版本为4,支持多协议扩展(如IPv6、EVPN等)。 |
| My AS | 本地自治系统编号,必须与对端配置一致才能建立邻居。 |
| Hold Time | 保持时间,通常设为180秒。若在此期间未收到有效报文,则断开连接。实际Keepalive间隔为此值的1/3。 |
| BGP Identifier | BGP路由器ID,通常取自Loopback接口IP,选举规则类似OSPF。 |
| Optional Parameters | 可选参数列表,主要携带能力通告(Capabilities),例如:
|
UPDATE 报文结构分析
UPDATE报文用于发布新路由或撤回已失效路由。一个典型报文可同时包含多个操作。
Withdrawn Routes Length: 0
Total Path Attribute Length: 28
Path attributes:
ORIGIN: IGP
AS_PATH: []
NEXT_HOP: 12.1.1.2
MED: 0
LOCAL_PREF: 100
NLRI:
2.2.2.0/24
当策略变更导致部分路由被过滤时,将生成仅含撤回路由的UPDATE报文:
Withdrawn Routes Length: 9
Withdrawn Routes:
2.2.2.0/24
2.2.22.2/32
Total Path Attribute Length: 0
对于EVPN等复杂场景,使用MP_REACH_NLRI属性传递扩展路由信息:
Path Attribute - MP_REACH_NLRI
AFI: Layer-2 VPN (25)
SAFI: EVPN (70)
Next hop: 3.3.3.3
NLRI: Inclusive Multicast Route
RD: 1:1
Ethernet Tag: 0
IP: 3.3.3.3
| 关键字段 | 功能说明 |
|---|---|
| Withdrawn Routes | 列出需要撤销的前缀列表。 |
| Path Attributes | 路径属性分为四类:公认必遵(ORIGIN、AS_PATH、NEXT_HOP)、公认任意、可选过渡、可选非过渡。其中前三者必须存在于每个UPDATE中。 |
| MP_REACH_NLRI | 多协议可达属性,用于传输非IPv4单播路由(如EVPN、IPv6)。包含AFI/SAFI标识和下一跳信息。 |
| NLRI | 网络层可达信息,即发布的IPv4/IPv6/EVPN前缀。 |
注意:当出口策略(route-policy export)发生变化时,设备会触发新的UPDATE报文,可能包含新增或撤销的路由条目。
NOTIFICATION 报文与错误处理
当BGP状态机检测到严重错误时,会发送NOTIFICATION报文并关闭连接。
Major Error Code: Hold Timer Expired (4)
Minor Error Code: 0
Major Error Code: Cease (6)
Minor Error Code: Administratively Reset (4)
| 主错误码 | 含义 |
|---|---|
| 1 | 消息头格式错误 |
| 2 | OPEN报文协商失败(如AS不匹配) |
| 3 | UPDATE报文内容非法 |
| 4 | 保持计时器超时 |
| 5 | 有限状态机异常 |
| 6 | 会话被主动终止(如管理员reset) |
常见触发场景包括:邻居Reset、Hold Time超时未收Keepalive、认证失败、AS号冲突等。
KEEPALIVE 报文作用
该报文非常简洁,仅包含BGP头部:
Marker: ffffffffffffffffffffffffffffffff
Length: 19
Type: KEEPALIVE (4)
- 发送频率为Hold Time的1/3,最低不低于1秒。
- 若在Hold Time内已发送过UPDATE报文,则不再重复发送Keepalive。
- 主要用于维持TCP会话存活,无其他附加信息。
ROUTE-REFRESH 报文机制
用于动态请求对端重新发送指定地址族的路由更新,避免硬重置邻居。
Type: ROUTE-REFRESH (5)
AFI: IPv4 (1)
SAFI: Unicast (1)
Subtype: Normal Request (0)
当入方向策略(import route-policy)发生变更时,本端将向对端发送此报文,要求其重新推送IPv4单播路由表。
TCP 层安全增强:MD5 认证
BGP认证并非在应用层实现,而是利用TCP选项字段提供保护:
TCP Options:
Kind: MD5 Signature (19)
Length: 18
Digest: ee6fdfa9617b88a538ac256e16e0fdf5
该机制确保BGP会话只能在共享密钥的双方之间建立,防止非法接入。