news 2026/5/16 18:12:06

别再死记硬背了!用Wireshark抓包带你真正看懂思科BGP的Update、Keepalive和Notification报文

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再死记硬背了!用Wireshark抓包带你真正看懂思科BGP的Update、Keepalive和Notification报文

从抓包视角拆解BGP协议:Update、Keepalive与Notification报文的实战分析

当网络工程师在CLI界面输入neighbor 1.1.1.1 remote-as 100时,背后究竟发生了什么?本文将带您深入BGP协议的报文层面,通过Wireshark抓包揭示邻居建立、路由更新和错误处理的完整生命周期。不同于配置手册的步骤罗列,我们将聚焦TCP 179端口上的真实数据交互,用十六进制解码说话。

1. BGP协议栈与抓包环境搭建

BGP运行在TCP协议之上,这决定了它的会话建立方式与普通应用层协议截然不同。在GNS3模拟环境中,我们构建了一个典型的跨AS拓扑:

  • AS 100:R1(1.1.1.1)、R2(2.2.2.2)、R3(3.3.3.3)形成全互联IBGP
  • AS 200:R4(4.4.4.4)通过物理接口与R3建立EBGP

关键配置提示:在EVE-NG中启用SPAN端口镜像时,需确保捕获方向同时包含RX/TX流量

抓包前需要特别注意的BGP特性参数:

参数类型默认值可调范围影响维度
Hold Timer180秒3-65535秒邻居存活检测灵敏度
Keepalive间隔60秒1-65535秒控制平面流量开销
MTU1500字节576-65535路径MTU发现成功率
# 调试命令示例:修改全局BGP计时器 R3(config-router)#timers bgp 30 90

2. Open报文:BGP会话的握手协议

当首次启动BGP进程时,抓包会显示经典的TCP三次握手后,立即出现19字节的BGP Header,其结构如下:

FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF 00 [长度] [类型]

Open报文的独特之处在于其携带的能力协商参数。通过解析Wireshark中的BGP Open Message部分,我们可以看到:

  • Version:始终为4(IPv4)
  • My AS:发送方的自治系统号(如AS 100)
  • Hold Time:建议的保持时间(默认180秒)
  • BGP Identifier:通常采用环回口IP(1.1.1.1)
# Open报文解析示例(Python结构体) class BGP_Open: def __init__(self, data): self.version = data[0] # 1字节版本号 self.my_as = struct.unpack('!H', data[1:3])[0] # 2字节AS号 self.hold_time = struct.unpack('!H', data[3:5])[0] # 2字节保持时间 self.bgp_id = socket.inet_ntoa(data[5:9]) # 4字节路由器ID

当出现Router-ID冲突时(如两台设备都声明1.1.1.1),会立即触发Notification报文,错误代码为2/3(BGP Identifier冲突),此时Wireshark会显示:

BGP Notification Message - Error Code: Open Message Error (2) - Error Subcode: Bad BGP Identifier (3)

3. Update报文:路由信息承载实体

Update报文是BGP最复杂的报文类型,抓包分析时需要重点关注以下字段:

路径属性分类解析:

属性类型传输标志功能描述示例值
ORIGIN必选路由来源(IGP/EGP/Incomplete)IGP (0)
AS_PATH必选经过的AS路径200 300
NEXT_HOP必选下一跳IP地址34.34.34.4
LOCAL_PREF可选IBGP优先级100
MED可选跨AS优先级提示0

在Wireshark中观察路由撤回过程时,会看到特殊的Withdrawn Routes字段。例如当R4的环回口4.4.1.0/24宕机时:

BGP Update Message - Withdrawn Routes Length: 1 - Withdrawn Routes: 4.4.1.0/24

调试技巧:使用debug bgp updates命令时,控制台输出会与抓包内容严格对应,可交叉验证

4. Keepalive与Notification:会话维持与异常处理

Keepalive报文是BGP最简单的报文类型,仅包含19字节的头部。但它的发送机制却大有讲究:

  • 心跳间隔:实际值为Hold Time/3,与配置值可能不同
  • 传输触发:任何BGP消息都会重置Hold Timer计数器
  • 丢包容忍:连续丢失3个Keepalive才会断开会话
# 查看邻居状态机转换日志 R3#show logging | include BGP-5-ADJCHANGE

Notification报文的错误代码体系值得深入理解:

主错误码子错误码范围典型场景
11-6消息头错误(如非法长度)
21-7Open报文错误(如AS号不匹配)
31-10Update报文错误(如属性错误)
40Hold Timer超时
51-2有限状态机错误
60连接关闭

当遇到BGP-3-NOTIFICATION: received from neighbor 34.34.34.4 3/1 (Update Message Error/ Malformed Attribute List)这类告警时,抓包分析应重点关注:

  1. 检查Update报文中的属性顺序(RFC4271规定必须按类型码升序排列)
  2. 验证可选属性的Transitive标志位是否一致
  3. 确认AS_PATH属性中的AS_SEQUENCE格式

5. 实战:从抓包诊断BGP路由黑洞

通过构造一个典型的路由黑洞场景——R3未正确配置next-hop-self,观察EBGP路由无法传递给IBGP邻居的现象。抓包会显示:

  1. R4正常发送Update报文给R3,包含有效NEXT_HOP 34.34.34.4
  2. R3在传递给R1时保持原NEXT_HOP不变
  3. R1因没有到达34.34.34.4的路径,将路由标记为RIB-failure
# 验证路由黑洞的关键命令 R1#show ip bgp rib-failure Network Next Hop RIB-failure RIB-NH Matches 4.4.1.0/24 34.34.34.4 Higher admin distance n/a

解决方案的抓包对比显示,启用next-hop-self后,R3发出的Update报文中:

  • NEXT_HOP字段变为3.3.3.3
  • AS_PATH前缀追加AS 100(仅对EBGP路由有效)
  • LOCAL_PREF属性被添加(默认为100)

6. 高级技巧:BGP报文操纵实验

在安全研究场景中,可以尝试以下抓包分析实验:

实验1:非法AS_PATH注入

  • 使用Scapy构造AS_PATH包含私有AS号(64512-65534)的Update报文
  • 观察合规路由器返回的Notification报文(错误码3/6)
# Scapy构造异常AS_PATH示例 from scapy.all import * bgp_update = IP(dst="34.34.34.3")/TCP(dport=179)/BGPUpdate( path_attributes=[BGPPathAttr(type_flags=0x40, type_code=2, attribute=BGPPathAttrASPath(segments=[(2, [65535, 65534])]))])

实验2:Keepalive洪泛攻击

  • 以10ms间隔发送Keepalive报文
  • 目标路由器CPU利用率会因频繁状态机处理而升高
  • 防御方案:启用bgp max-neighbors限制

这些实验必须在隔离环境进行,同时抓取控制平面和数据平面流量,才能完整分析协议栈行为。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 18:11:21

Claude Code Auto Mode转正实战:Token消耗+避坑指南

Claude Code Auto Mode转正实战:我用它从零完成了一个完整项目 2026年5月,Claude Code Auto Mode结束测试期,正式全面开放。 这不是一个简单的功能更新。之前的Claude Code每做一步操作都要你点确认,93%的操作你都会点"允许&…

作者头像 李华
网站建设 2026/5/16 18:08:56

阿里Qwen3.6系列实测

阿里Qwen3.6系列实测|1M上下文封神!企业香爆,个人用官方举步维艰AI圈彻底沸腾!阿里Qwen3.6系列甩出王炸——Plus/Flash支持1MToken超大上下文,思维链推理、全栈编程、多模态理解拉满,企业级生产力怪兽实锤&…

作者头像 李华
网站建设 2026/5/16 18:08:40

[A2A协议与实现-02]Agent发现机制和两种响应方式

要使用A2A协议进行协作,Agent首先需要相互发现并了解彼此的功能。在A2A协议中,当服务端接收到来自客户端针对Agent的调用请求时,它可以以两种基本方式进行响应,一是响应承载结果的消息,二是响应异步执行的任务。Agent的…

作者头像 李华
网站建设 2026/5/16 18:08:30

RA6M4驱动SSD1306 OLED:RT-Thread软件I2C配置与驱动移植详解

1. 项目概述与核心思路最近在折腾瑞萨的RA6M4开发板,手头正好有一块闲置的0.96寸OLED屏幕,驱动芯片是经典的SSD1306,通信接口是I2C。这类小屏幕在嵌入式项目里太常见了,做个状态显示、参数监控或者简单的UI交互都非常方便。RA6M4作…

作者头像 李华
网站建设 2026/5/16 18:06:12

从API密钥管理角度体验Taotoken平台的安全与便捷

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从API密钥管理角度体验Taotoken平台的安全与便捷 对于需要集成多个大语言模型的团队而言,API密钥的管理往往是一项繁琐…

作者头像 李华
网站建设 2026/5/16 18:05:40

鸿蒙系统显示问题查找命令

1、查看服务列表,系统中所有正在运行的系统服务 hidumper -ls2、服务状态和配置信息 hidumper -s3、查看所有系统参数的统计信息 hidumper --ipc -a --stat4、屏幕信息 hidumper -s WindowManagerService -a -a5、观察渲染服务render_service 进程的CPU占用率是否在花屏时…

作者头像 李华