BGP 报文头部与计数
所有 BGP 报文共享一个 19 字节固定头:16 字节 Marker、2 字节 Length、1 字节 Type,报文最大长度为 4096 字节。Marker 在全 1 时表示未使用认证机制,使用认证时其取值由认证算法决定。Type 字段直接标识报文种类,抓包时最常见的异常是长度与实际内容不符、以及类型序列不符合协议预期——后者往往意味着中间设备或实现有问题。
基本信息
| 固定头长度 | 19 字节(Marker 16 + Length 2 + Type 1) |
|---|---|
| Length 范围 | 最小 19,最大 4096 |
| Marker | 未使用认证时为全 1;使用认证时取值由算法决定 |
| Type 取值 | 1 OPEN、2 UPDATE、3 NOTIFICATION、4 KEEPALIVE、5 ROUTE-REFRESH |
| 解析工具 | 抓包工具自带 BGP 解析器,可展开到每个字段 |
典型使用场景
- 抓包排查:确认报文类型序列是否符合协议预期
- 长度异常:判断是否存在错帧或中间设备改写
- 会话建立过程分析:按 OPEN、KEEPALIVE 的先后顺序核对协商流程
- 计数核对:把抓到的报文数与设备计数交叉验证
- 教学与评审:说明头部结构,便于理解后续字段的含义
抓包与过滤
抓包与过滤
# 只抓 BGP 报文
tcpdump -ni eth0 'tcp port 179' -c 40
# Wireshark 显示过滤器:只看 UPDATE
# bgp.type == 2
# 保存后按类型统计
tshark -r /tmp/bgp.pcap -Y bgp -T fields -e bgp.type | sort | uniq -c
# 对照设备侧计数
show ip bgp neighbors 10.0.0.2 | include messages头部字段读法
| 字段 | 长度 | 含义与异常 |
|---|---|---|
| Marker | 16 字节 | 未使用认证时为全 1;异常取值需确认是否启用认证 |
| Length | 2 字节 | 含头部总长度,19~4096;与实际内容不符说明错帧或实现问题 |
| Type | 1 字节 | 1~5 对应五类报文;出现未知值需警惕 |
| 内容部分 | 变动 | OPEN 含能力协商,UPDATE 含路由信息,NOTIFICATION 含错误码 |
直接对着十六进制手工解析头部效率很低,用抓包工具的 BGP 解析器展开字段即可;核对时重点关注长度与类型序列,这两处异常最能说明问题。
UPDATE 是最值得细看的一类:它承载路由信息,长度与内容不符通常出现在这里。OPEN 则包含能力协商结果,是判断「为什么某个地址族没有交换路由」的第一手材料。