博客

TCP/IP详解阅读笔记之STP协议

STP协议

STP(Spanning Tree Protocol)协议的的目的是为了:

在每一个”Ethernet segment”(如每两个交换机)之间只提供一条链路。

因为如果出现如下图中所示的两条链路的情况,将会出现如下故障:

  • 广播风暴
  • 每个交换机的MAC表将变得不稳定
  • 主机将收到大量相同的包
    image
    具体原理的阐述见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网站上下载的包,有什么问题么?

    image
    往下看

image
按照上一节的解释,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地址一致了。
    我没有思科的三层交换机来验证了,但上面的解释蛮有道理的,那么到此为止吧!