Open 报文承载什么
TCP 建连完成后,双方各发一个 Open 报文,把会话必需参数摆到桌面上:协议版本、本端 AS 号、Hold Time、BGP Identifier(Router ID)以及可选参数中的能力列表。参数协商失败时对端直接回 Notification 并拆会话,所以 OpenSent 阶段卡住或反复重置,第一件事就是看这五个字段。
基本信息
| 版本 | 1 字节,BGP-4 固定为 4 |
|---|---|
| 本端 AS | 2 字节,使用 4 字节 ASN 时向老对端发送 AS_TRANS(23456) |
| Hold Time | 2 字节,取值 0 或 3 秒以上;两端取较小值运行 |
| BGP Identifier | 4 字节,即 Router ID,两端不能相同且不能为 0 |
| 可选参数 | 能力通告(Capabilities),如 MP-BGP、Route-Refresh、GR、Add-Path |
典型使用场景
- 会话停在 OpenSent:核对版本、AS、Router ID 与能力四项,多数问题出在这里
- 4 字节 ASN 与老设备对接:查看是否出现 AS_TRANS,判断对端是否支持 ASN4 能力
- Hold Time 不一致引起的抖动:确认实际运行值是按协商的小值还是被调成 0
- 能力缺失定位:会话 Up 但某地址族没有路由,先看能力段落里有没有对应族
- 抓包复盘:Open 报文里能看到对端真实参数,不受本地配置描述的影响
协商计算示例
协商计算示例
# 本端 Hold=90,对端 Hold=180
协商结果 Hold = 90(取较小值)
Keepalive 建议值 = Hold/3 = 30 秒
# 本端 Hold=0 表示不发 Keepalive、不因超时断开
# 与对端 90 秒协商后仍为 0,会话不会因 Keepalive 超时中断字段异常对照
| 字段 | 常见异常 | 表现与处理 |
|---|---|---|
| 版本 | 对端为非 4 版本 | 回 Open Message Error 子码 1,老设备互联时偶见 |
| AS 号 | 与本端 remote-as 不匹配 | 回 Bad Peer AS(子码 2),先核对两端 AS 配置 |
| BGP Identifier | 为 0 或与对端相同 | 回 Bad BGP Identifier(子码 3),改 Router ID 后重启会话 |
| Hold Time | 一端配 2 秒这类非法值 | 取值范围违规会被拒绝,需改成 0 或 3 秒以上 |
| 能力 | 缺少 MP-BGP 或 ASN4 | 会话能 Up,但对应地址族不通或 AS 号显示为 23456 |
查看与抓包
查看与抓包
show ip bgp neighbors 10.0.0.2
# 关注段落:BGP version / remote AS / BGP state = OpenSent
# Hold time / keepalive interval / 能力列表
!
# 抓包直接看 Open 原文(Wireshark 过滤器)
bgp.type == 1BGP Identifier 在 BGP-4 中通常取本机 Router ID,取值来源优先看 bgp router-id 配置,其次取最大的环回地址,最后才取物理接口地址。同一设备上多个进程或 RR 场景要保证全网唯一。