五类报文
BGP 会话依赖五类报文:Open 用于参数协商,Update 用于携带路由更新,Notification 用于报告错误并关闭会话,Keepalive 用于保活,Route-Refresh 用于请求对端重新发送路由。排障时按报文类型过滤抓包,比全量看包高效得多。
基本信息
| 承载协议 | TCP 179 |
|---|---|
| Open | 协商版本、AS 号、hold time、能力 |
| Update | 携带 NLRI 与路径属性,一次可带多条 |
| Notification | 错误码与子码指出具体失败原因 |
| Keepalive | 默认 60 秒发送一次,内容为空 |
| Route-Refresh | 需能力协商支持,是软重置的前提 |
典型使用场景
- 抓包排障:按报文类型判断会话停在哪一步
- 定位断连原因:查看会话关闭前的 Notification 错误码
- 验证策略是否生效:观察 Update 是否携带了预期属性
- 会话抖动分析:核对 Keepalive 间隔与超时是否匹配
- 变更前后对比:记录 Update 数量与内容变化
报文一览
| 报文 | 用途 | 要点 |
|---|---|---|
| Open | 参数协商 | 版本、AS 号、hold time 与能力字段 |
| Update | 路由更新 | NLRI 加路径属性,一次可带多条前缀 |
| Notification | 错误与关闭 | 错误码定位原因,是断连排查的关键 |
| Keepalive | 保活 | 默认 60 秒,内容为空,仅维持会话 |
| Route-Refresh | 请求重通告 | 支持软重置的前提,需能力协商 |
抓包与查看
抓包与查看
# 设备侧查看报文计数与收发统计
show ip bgp neighbors 10.0.0.2 # 输出含消息收发计数与队列
show ip bgp summary # 会话级状态与前缀数
# 抓包时按端口与报文类型过滤
tcpdump -i eth0 -nn 'tcp port 179' # 全量抓取
tcpdump -i eth0 -nn 'tcp port 179 and tcp[tcpflags] & tcp-push != 0' # 只看带数据的报文Notification 报文的错误码与子码是断连原因的直接证据:会话消失前的那一条通知,比事后猜测配置问题可靠得多。
Route-Refresh 只是请求对端重发,不等于重新协商:它依赖双方都宣告了该能力,未协商时该机制不可用。
按报文类型排障
| 观察到的现象 | 相关报文 | 排查方向 |
|---|---|---|
| 会话建立后立即断开 | Notification | 读错误码与子码,定位参数不匹配项 |
| 路由迟迟不到 | Update | 检查策略过滤与收发计数 |
| 会话周期性中断 | Keepalive | 核对 hold time 与实际链路质量 |
| 软重置无效 | Route-Refresh | 确认双方是否协商该能力 |