STP帧格式:
STP工作流程_第1张图片
STP包内容:
STP工作流程_第2张图片
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
越小优先级越高
交换机本身比较
STP工作流程_第3张图片
指定端口和阻塞( Blocking )端口的定义:
端口类型
条件
指定端口
收到的配置消息里的RootID>其他端口收到的RootID
如果收到的配置消息里的RootID相同,比较开销:开销>RootPathCost+1
如果RootID相同,开销=RootPathCost+1BID< 配置消息里的BID
阻塞(Blocking)端口
收到的配置消息里的RootID=ID
如果RootID相同,开销=RootPathCost+1BID> 配置消息里的BID
STP工作流程_第4张图片 
2、  生成树的维护
参数
说明
Message Age(消息年龄)
报文老化时间,按时间递增,每当收到一个生存期更小的配置消息,则更新自己的配置消息
Max Age(信息寿命)
BPDU的生存期(控制交换机保存BPDU信息的最长时间,根据BPDU更新)
当一段时间未收到任何配置消息,生存期达到Max Age时,网桥则认为该端口连接的链路发生故障,进行故障处理
Hello time
根交换机发送BPDU的时间间隔,根交换机发送BPDU包,非根交换机转发
 
3、  生成树的重新建立
拓扑改变消息的传播
STP工作流程_第5张图片
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 状态之间的切换时间
STP工作流程_第6张图片