STP帧格式:
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
STP包内容:
1、 BPDU采用的是多播,目标MAC地址:01-80-C2-00-00-00(Bridge_group_addr:网桥组多播地址)
2、 协议标识符和协议版本都是固定的0
工作流程:
1、 建立生成树
根桥选择:选举的原则是根据BPDU当中的BID来进行判断,优先级最小的成为根网桥;当BID中 的网桥的优先级相同时就根据MAC地址小的选为根桥。
选定根端口:根据下列配置消息的优先级进行比较,落选端口进入阻塞状态,只侦听BPDU。
配置消息的优先级比较原则
标识 |
优先级 | |
RootID(根ID) |
越小优先级越高 |
BPDU携带信息 |
RootPathCost(根开销) |
越小优先级越高 | |
TransmitID(根桥ID) |
越小优先级越高 | |
PortID(端口ID) |
越小优先级越高 |
交换机本身比较 |

指定端口和阻塞(Blocking)端口的定义:
端口类型 |
条件 |
指定端口 |
收到的配置消息里的RootID>其他端口收到的RootID |
如果收到的配置消息里的RootID相同,比较开销:开销>RootPathCost+1 | |
如果RootID相同,开销=RootPathCost+1,BID< 配置消息里的BID | |
阻塞(Blocking)端口 |
收到的配置消息里的RootID=根ID |
如果RootID相同,开销=RootPathCost+1,BID> 配置消息里的BID |
2、 生成树的维护
参数 |
说明 |
Message Age(消息年龄) |
报文老化时间,按时间递增,每当收到一个生存期更小的配置消息,则更新自己的配置消息 |
Max Age(信息寿命) |
BPDU的生存期(控制交换机保存BPDU信息的最长时间,根据BPDU更新)
当一段时间未收到任何配置消息,生存期达到Max Age时,网桥则认为该端口连接的链路发生故障,进行故障处理 |
Hello time |
根交换机发送BPDU的时间间隔,根交换机发送BPDU包,非根交换机转发 |
3、 生成树的重新建立
拓扑改变消息的传播

BPDU 分为两种:Configuration BPDU (配置的BPDU) 和 TCN BPDU(拓扑变化的BPDU)
< 1 > TCN BPDU ---拓扑变化的BPDU
非根桥始发。当一台非根桥交换机,检测到网络拓扑发生变化的时候,就会产生一个TCN BPDU,这个BPDU是告诉根桥的,也就是说只有根端口才会向跟桥方向发送这类的BPDU,上行 。
当交换机从它的指定端口接收到TCN类BPDU时,它必须为其做转发,从它自已的根端口上发送出去,这样一级一级地传到根交换机后,TCN的任务才算完成。
在以上的过程中,无论是哪台交换机从它的指定端口上收到了TCN类型的BPDU包,它都必须给一个回复,必须从指定端口上发出BPDU Type=0x01 的configuration BPDU包
< 2 > Configuration BPDU ---配置BPDU
根桥始发。当根桥收到 TCN BPDU 后,会产生一个配置BPDU,告诉所有它知道的非根桥交换机,拓扑发生了变化。会发现这种的BPDU 是通过指定端口始发和转发的,下行。
当所有交换机都知道拓扑发生改变后,开始重新进行生成树计算,端口进入Listening状态
端口的五种状态:
端口状态 |
端口能力 |
Disabled |
不收发任何报文 |
Blocking |
不接收或转发数据,接收但不发送BPUDs,不进行地址学习 |
Listening |
不接收或转发数据,接收并发送BPDUs,不进行地址学习 |
Learning |
不接收或转发数据,接收并发送BPDUs,开始地址学习 |
Forwarding |
接收并转发数据,接收并发送BPDUs,进行地址学习 |
Forward Delay(转发延迟):交换机端口处于侦听、学习状态的时间;决定了listening与learning状态之间的切换时间
转载于:https://blog.51cto.com/cindy0smile/112036