tcpdump 抓 STP BPDU

STP/RSTP/MSTP 的 BPDU 发往组播 MAC 01:80:c2:00:00:00,二层环路与拓扑震荡排查可先确认 BPDU 是否正常收发。

STP BPDU 与组播地址

STP、RSTP、MSTP 的 BPDU 是标准以太网帧,目的 MAC 固定为组播地址 01:80:c2:00:00:00。二层环路、拓扑反复震荡时,抓 BPDU 看端口有没有在正常收发,是成本最低的第一步。BPDU 工作在二层,所以过滤必须用 ether dst,并建议加 -e 让帧头可见,否则判读时缺少必要信息。

基本信息

适用平台Linux / macOS 的 tcpdump(-e 打印以太帧头)
过滤语法ether dst 01:80:c2:00:00:00
协议族IEEE 802.1D(STP)、802.1w(RSTP)、802.1s(MSTP)
发送周期Hello Time 默认 2 秒,由根桥周期发出

典型使用场景

  • 环路排查:确认是否同时收到来自多个网桥的 BPDU 声明
  • 拓扑震荡定位:观察根桥声明是否频繁切换、BPDU 是否冲突
  • 验证 BPDU 保护:开启 BPDU Filter 或 Guard 的端口应当收不到或直接阻断
  • 镜像口分析:在汇聚设备的镜像口抓包,核对各接入端口的收发情况
  • 与 LACP、LLDP 区分:同一组播地址段还有其它协议,需按协议字段细分

常用示例

常用示例
sudo tcpdump -i eth0 -nn -e 'ether dst 01:80:c2:00:00:00' -c 20   # 抓前 20 个 BPDU
sudo tcpdump -i eth0 -nn -e 'ether dst 01:80:c2:00:00:00 and ether[14:2] = 0x0000'   # 按版本字段细分
sudo tcpdump -i eth0 -nn -e 'ether dst 01:80:c2:00:00:00' -w stp.pcap   # 存盘后再看根桥与开销
# Wireshark 打开后按 stp 过滤,直接读 Root Identifier 与 Port Cost

相关组播地址

目的 MAC协议说明
01:80:c2:00:00:00STP/RSTP/MSTP标准生成树 BPDU
01:80:c2:00:00:02LACP链路聚合协商报文
01:80:c2:00:00:03LLDP邻居发现,部分厂商改用 01:80:c2:00:00:0e
01:80:c2:00:00:00厂商私有PVST+ 等实现会复用同一地址
完全收不到 BPDU 先别急着下结论:交换机接入端口默认不向终端转发 BPDU,普通网卡挂在接入口抓不到属于正常,应在镜像口、汇聚上行口或网关链路上抓。
部分网卡驱动会把 01:80:c2:00:00:00 这类保留组播当作控制帧自行屏蔽,导致抓包文件里看不到 BPDU。复核时换一块网卡或换一台抓包设备,避免把驱动行为当成网络故障。
思科 PVST+ 环境里每个 VLAN 各有一棵生成树,BPDU 会按 VLAN 分别发送,同一个物理口上能看到多份内容互不相同的 BPDU。按目的 MAC 过滤会把它们一次全抓到,判读时需要从协议标识字段区分标准 MSTP 与厂商私有实现。

易错点

  • 交换机端口默认不向接入设备转发 BPDU,普通网卡抓不到属正常;要在镜像口或网关链路抓
  • 华为/思科设备 BPDU 格式细节有差异,判读字段时注意版本与协议号
  • 同一组播地址被多个协议复用,不做协议字段区分会把 LACP、LLDP 误读成 STP 异常
  • 只看 BPDU 有无会漏判:拓扑看起来正常但根桥频繁切换才是震荡根因,必须结合时间线看

数据来源与参考

  • man 8 pcap-filter
  • IEEE 802.1D(STP)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌