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:00 | STP/RSTP/MSTP | 标准生成树 BPDU |
| 01:80:c2:00:00:02 | LACP | 链路聚合协商报文 |
| 01:80:c2:00:00:03 | LLDP | 邻居发现,部分厂商改用 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 与厂商私有实现。