OpenSent 是什么
OpenSent 表示 TCP 已建立、本机已经把 Open 报文发出去,正在等待对端回应的阶段。卡在这里说明对端没有回 Open,或者回了一个 Notification 表示不接受我方参数。此时问题已经不在网络可达性,而在两端的会话参数上:AS 号、版本、hold time、router-id 与认证。
基本信息
| 状态含义 | 已发出 Open,等待对端响应 |
|---|---|
| 卡住原因 | 对端未回 Open,或参数不匹配回 Notification |
| 核对项 | 两端 AS 号、hold time、router-id、认证配置 |
| 证据 | debug 输出与日志中的 Notification 错误码 |
| 抓包 | 过滤 TCP 端口 179 查看 Open 报文字段 |
| 正常流转 | 收到对端 Open 后进入 OpenConfirm |
典型排查动作
- 核对两端 AS 号:remote-as 是否互指正确(最常见错误)
- 核对认证:TCP MD5 或 TCP-AO 密钥是否完全一致
- 核对 hold time 取值是否合法(0、1、2 等值会导致协商失败)
- 核对 router-id 是否合法且唯一
- 查看日志与 debug 中的 Notification 错误码定位具体项
抓包与核对
抓包与核对
# 抓包看 Open 报文字段(AS 号、hold time、能力)
# tcpdump -i eth0 -nn 'tcp port 179'
!
show ip bgp neighbors 10.0.0.2 # 当前状态与最近复位原因
show ip bgp neighbors 10.0.0.2 | include password
show log | include BGP # 日志中的通知与错误码
show ip bgp summary # 两端对照状态常见原因与定位
| 原因 | 表现 | 定位动作 |
|---|---|---|
| AS 号互指错误 | 本端 OpenSent、对端同样异常 | 两端核对 remote-as 配置 |
| 认证密钥不一致 | 反复握手失败后回到初始态 | 核对密钥内容、大小写与特殊字符 |
| hold time 非法 | 参数协商被拒 | 改为合法值或保持默认 |
| router-id 冲突或非法 | 参数校验不通过 | 手工指定唯一标识 |
| 版本或能力不兼容 | 对端回通知报文 | 查看错误码并在两端确认实现版本 |
Notification 的错误码与子码能直接指向 Open 报文的哪一项不匹配,遇到这个阶段的故障应优先读取它。
此阶段 TCP 已经建立,说明网络可达,不要再把排查重点放在 ACL 或路由上,而应转向会话参数比对。
核对两端参数
核对两端参数
show ip bgp neighbors 10.0.0.2 | include remote AS # 对端 AS 号
show ip bgp neighbors 10.0.0.2 | include hold # 定时器协商值
show ip bgp neighbors 10.0.0.2 | include password # 是否配置认证
show ip bgp summary # 与对端输出逐项比对两端的配置需要互相对应:本机的 remote-as 应等于对端的实际 AS 号,对端的 remote-as 应等于本机 AS 号;只检查一端经常看不出问题所在。