简单描述标准生成树协议STP生成树协议STP为什么需要生成树如上图所示网络拓扑，如果没有生成树协议，在网络通信开始时，假设PC0向PC1发送一个数据包，交换机S2的MAC地址表中并没有对应的MAC地址，因此会产生ARP洪泛（详情参考交换机自学习算法那篇文章）发送广播帧，由S2的Fa0/1和Fa0/3端口向对端发出。当S1、S3分别接收到广播帧后，根据同样原理进行广播帧转发。这时网络形成了一个环路，但交换机并不知道这将导致广播帧在环路中永远循环下去。随着时间增加，广播帧将会越来越多，最终形成网络广播风暴导致网络瘫痪。（对于交换机的运算速度来讲，网络由正常变瘫痪过程中的时间是非常短的）STP概念由上述描述就可以知道，我们需要一套方案去解决这种问题，所以就有了生成树协议。生成树协议（英语：Spanning Tree Protocol，STP），是一种工作在OSI网络模型中数据链路层的通信协议，基本应用是防止交换机冗余链路产生的环路。用于确保以太网中无环路的逻辑拓扑结构。从而避免了网络广播风暴，大量占用交换机的资源。与图论中所指的生成树概念一致，目的就是为了破环（将环形图变成树形）。STP会阻塞备用链路，当正常线路损坏时会启用备用链路。交换机上默认的STP版本还有多实例生成树（MSTP）、快速生成树（RSTP）等，本文只描述标准版本。生成树协议核心是生成树算法（Spanning Tree Algorithm，STA），下面对STA算法过程进行描述。生成树算法STA交换机是由网桥演变而来的，在描述生成树算法的时候也指代交换机STA大致分为三步：选举根网桥选举根端口选举指定端口并阻塞备用端口选举根网桥选举条件：网桥ID(BID)最小者当选BID由以下两部分构成：优先级交换机的基本MAC地址优先级范围为0-61440，步长4096，默认值为32768看到这里可能会有人问，为什么步长恰好是2的12次方即4096？这并不是巧合，因为这里的步长就是VLAN号（VLAN号使用12比特）BID的比较方法：优先级取值越小，BID就越小若优先级相同，则比较MAC地址，从MAC地址左侧开始比较，数值小的BID就越小选举根端口根端口（Root Port， RP）的选举是在非根网桥（非根交换机）上的，并且在每个交换机上只能存在一个RP。RP用于接收根网桥发来的BPDU，也用来转发普通流量。RP的选举首先考虑BPDU接收端口到根网桥的路径成本最小，其路径成本与链路带宽对应如下（该值不绝对，交换机上可更改）链路带宽成本值4Mb/s25010Mb/s10016Mb/s62100Mb/s191Gb/s410Gb/s2如果存在多个端口到根网桥的成本相同时，则比较对端的BID，对端BID小的本机端口则选举为RP。（注意BID是对端，也就是与参加选举的端口相连的其它交换机的端口，而参与选举的端口是在本交换机上）如果对端BID也相同，则比较对端的端口ID（PID），同样对端PID小的本机端口选举为RP。PID参数如下：范围0-240步长16默认值128端口号（如Fa0/1比Fa0/2小）（其实还存在一种对端BID与PID都相同的情况，详细请看本文 STA举例部分->其他例子->使用集线器的情况）选举指定端口并阻塞备用端口在每一个网段上选出一个指定端口（Designated Port，DP）。DP用于转发根网桥发来的BPDU，也用来转发普通流量。注意：每网段上存在且只能存在一个DPDP的选举条件如下：根网桥的所有端口都是DP根端口的对端端口一定都是DP（反之不一定成立）BPDU转发端口到根网桥的路径成本最小本端的BID最小剩余端口成为备用端口（Alternate Port，AP），它们将被阻塞。STA举例主要例子网络拓扑如下按照上文中的步骤首先选举根网桥优先级都是32768，然后比较MAC地址，S1的MAC地址为00-01-...，比其它地址都小，所以S1是根网桥。然后选取根端口交换机S2的到S1路径上的所有链路都是1Gb/s，所以开销都是4，G0/1到S1的总开销为4，G0/2到S1的总开销为8，G0/3到S1的总开销为12，所以S2的根端口为G0/1。与此同理，S3根端口为G0/1，S4的根端口的为G0/2（G0/2的对端BID比G0/1对端BID小，二者成本相同）。S5的根端口为Fa0/1（Fa0/1与Fa0/2的成本相同，对端BID相同，但Fa0/1对端为S4的Fa0/1，端口号小，所以PID小）。选举指定端口并阻塞备用端口S1为根网桥，所以S1的G0/1与G0/2都是指定端口然后按照第二个条件，所有的RP对端端口都是DP，那么选出来的有：S3的G0/3，S4的Fa0/1剩下的几个网段无法根据第二个条件选出DP，然后根据第三个条件即到S1成本路径最小来选首先来看S4Fa0/2-S5Fa0/2这个网段，到S4Fa0/2成本为8，到S5Fa0/2成本为27，所以S4的Fa0/2端口胜出，为该网段的DP再看S2G0/2-S3G0/2这段链路，这两个端口到S1的开销相同，但是S3的BID比S2小，所以S3的G0/2为该网段下的DP同理S2的G0/3也是DP剩下的端口都是AP其他例子已知条件如下：所有链路带宽都相等（也就是说链路成本值相同）S2 BID < S3 BID那么下图中S4的RP如红圈所示有一种特殊情况，使用了集线器，在S4上Fa0/1与Fa0/2链路成本相同，Fa0/3成本比前两者大，并且Fa0/1与Fa0/2对端BID与对端PID相同，此时比较的是本机端口的PID，如下图所示结束上述仅对STA最基本的情况进行描述分析，实际网络中的情况更复杂，例如某个网桥（交换机）突然掉线、链路损坏、生成树还未生成时交换机发生故障需重新选举等等。