STP协议
STP(Spanning Tree Protocol)协议的的目的是为了:
在每一个”Ethernet segment”(如每两个交换机)之间只提供一条链路。
因为如果出现如下图中所示的两条链路的情况,将会出现如下故障:
- 广播风暴
- 每个交换机的MAC表将变得不稳定
- 主机将收到大量相同的包

具体原理的阐述见firewall网站
STP,Spanning Tree Protocol,生成树协议——首先要有一个“树根”才行,称它为root bridge。在拓扑结构中的每一个交换机都会参与root bridge 的竞争。一开始每台交换机都会默认自己就是root bridge,并广播出去含有root ID和bridge ID的包(BPDU),bridge ID里面含有自己的MAC地址,root ID里面最初也是自己的MAC地址(因为起初默认自己就是root bridge)。直到收到了来自其他交换机发来的更小的root ID,就会把广播出去的root ID换成自己收到的更小的root ID。最后root ID最小的那台交换机就被选为了root bridge了,也就是“树根”了。一个从wireshark网站上下载的包,有什么问题么?

往下看

按照上一节的解释,Bridge ID里的MAC地址就是发送这个包的交换机的MAC地址,为什么Bridge ID里的MAC地址和ethernet header 里的源MAC地址不一样呢?
- 是有中间设备把ethernet header 里的源MAC地址处理过了么?
当一个包要“跨越”不同网段时,路由器或三层交换机会处理这个包的二层信息,把source MAC address替换成路由器或三层交换机自己的,再根据路由表把目的MAC地址也换掉,但STP是二层协议啊,没理由改的;
- 这两个地址应该就是指的同一个交换机啊,难道一个交换机同时用两个MAC地址?
是的,这个交换机是思科的
谢谢林沛满先生给的链接
我把链接里的尴尬的内容去掉,大概的意思就是:
思科的三层交换机每一口都有一个MAC地址,以太网包头里的source MAC地址就是交换机某一个发送口的MAC地址,是不参与“root bridge”竞争的。而Bridge ID里的MAC地址是交换机的系统MAC地址( system mac addresses),是参与“root bridge”竞争的;如果是思科的二层交换机的话,每个接口没有单独的MAC地址,那么以太网包头里的source MAC地址就和而Bridge ID里的MAC地址一致了。
我没有思科的三层交换机来验证了,但上面的解释蛮有道理的,那么到此为止吧!