标题：生成树协议IEEE802.1D
概述
生成树协议－IEEE 802.1D （STP：Spanning Tree Protocol － IEEE 802.1D） 
简介
基本含义网络环路的发生有多种原因，最常见的一种是有意生成的冗余 － 万一一个链路或交换机失败，会有另一个链路或交换机替代。
STP 允许网桥之间相互通信以发现网络物理环路。该协议定义了一种算法，网桥能够使用它创建无环路（loop-free）的逻辑拓朴结构。换句话说，STP 创建了一个由无环路树叶和树枝构成的树结构，其跨越了整个第二层网络。
生成树协议操作对终端站透明，也就是说，终端站并不知道它们自己是否连接在单个局域网段或多网段中。当有两个网桥同时连接相同的计算机网段时，生成树协议可以允许两网桥之间相互交换信息，这样只需要其中一个网桥处理两台计算机之间发送的信息。
网桥之间通过桥接协议数据单元（Bridge Protocol Data Unit － BPDU）交换各自状态信息。生成树协议通过发送 BPDU 信息选出网络中根交换机和根节点端口，并为每个网段（switched segment）选出根节点端口和指定端口。
网桥中的程序能够决定如何使用生成树协议，这称为生成树算法，该算法能够避免网桥环路，并确保在多路径情形下网桥能够选择一条最有效的路径。如果最佳路径失败，可以使用该算法重新计算网络路径并找出下一条最佳路径。
理论讲解利用生成树算法可以决定网络（哪台计算机主机在哪个区段），并通过 BPDU 信息交换以上数据。该过程主要分为以下两个步骤：
步骤1：通过评估它所接收到的所有配置信息和选择最优选项，来决定一个网桥可发送的最佳信息。 
步骤2：一旦选定某网桥发送的信息，网桥将该信息与来自无根（non-root）连接的可能配置信息相比较。如果步骤1中选择的最佳选项并不优于可能配置信息，便删除该端口。
协议结构
网桥协议数据单元（BPDU）： 
_______________________________________________________________________________________
| Protocol ID (2) | Version (1) |Type (1) |Flags (1) |Rood ID (8) |Root Path (4) |
|_________________|_____________|__________|_____________|_____________|______________|
| Sender BID (8) | Port ID (2) |M-Age (2) | Max Age (2) | Hello (2) | FD (2 Bytes) |
---------------------------------------------------------------------------------------
Protocol ID ― 恒为0。 
Version ― 恒为0。 
Type ― 决定该帧中所包含的两种 BPDU 格式类型（配置 BPDU 或 TCN BPDU）。 
Flags ― 标志活动拓朴中的变化，包含在拓朴变化通知（Topology Change Notifications）的下一部分中。 
Root BID ― 包括有根网桥的网桥 ID。会聚后的网桥网络中，所有配置 BPDU 中的该字段都应该具有相同值（单个 VLAN）。NetXRay 可以细分为两个 BID 子字段：网桥优先级和网桥 MAC 地址。 
Root Path Cost ― 通向有根网桥（Root Bridge）的所有链路的积累资本。 
Sender BID ― 创建当前 BPDU 的网桥 BID。对于单交换机（单个 VLAN）发送的所有 BPDU 而言，该字段值都相同，而对于交换机与交换机之间发送的 BPDU 而言，该字段值不同） 
Port ID ― 每个端口值都是唯一的。端口1/1值为0×8001，而端口1/2 值为0×8002。 
Message Age ― 记录 Root Bridge 生成当前 BPDU 起源信息的所消耗时间。 
Max Age ― 保存 BPDU 的最长时间，也反映了拓朴变化通知（Topology Change Notification）过程中的网桥表生存时间情况。 
Hello Time ― 指周期性配置 BPDU 间的时间。 
Forward Delay ― 用于在 Listening 和 Learning 状态的时间，也反映了拓朴变化通知（Topology Change Notification）过程中的时间情况。
工作原理
STP协议的基本思想十分简单。大家知道，自然界中生长的树是不会出现环路的，如果网络也能够像一棵树一样生长就不会出现环路。于是，STP协议中定义了根桥（Root Bridge）、根端口（Root Port）、指定端口（Designated Port）、路径开销（Path Cost）等概念，目的就在于通过构造一棵自然树的方法达到裁剪冗余环路的目的，同时实现链路备份和路径最优化。用于构造这棵树的算法称为生成树算法STA（Spanning Tree Algorithm）。要实现这些功能，网桥之间必须要进行一些信息的交流，这些信息交流单元就称为配置消息BPDU（Bridge Protocol Data Unit，网桥协议数据单元）。STP BPDU是一种二层报文，目的MAC是多播地址01-80-C2-00-00-00，所有支持STP协议的网桥都会接收并处理收到的BPDU报文。该报文的数据区里携带了用于生成树计算的所有有用信息。
了解生成树协议的工作过程也不难，首先进行根桥的选举。选举的依据是网桥优先级和网桥MAC地址组合成的桥ID（Bridge ID），桥ID最小的网桥将成为网络中的根桥。在图6-6所示的网络中，网桥都以默认配置启动，在网桥优先级都一样（默认优先级是32768）的情况下，MAC地址最小的网桥成为根桥（如图中的交换机1），它的所有端口的角色都成为指定端口（Designated port），进入转发状态。接下来，其他网桥将各自选择一条“最粗壮”的树枝作为到根桥的路径，相应端口的角色就成为根端口。假设图6-15中交换机2和交换机1、交换机3之间的链路都是千兆GE链路，交换机1和交换机3之间的链路是百兆FE链路，交换机3从端口1到根桥的路径开销的默认值是19，而从端口2经过交换机2到根桥的路径开销是4+4=8（千兆位链路的默认开销为4，百兆位链路的默认开销为19），因为后者的开销要远小于前者，所以端口2就成为根端口（Root Port），进入转发状态。根据同样的计算道理可以得出，交换机2的端口2成为根端口，端口1成为指定端口，进入转发状态。
  stp工作原理根桥和根端口都确定之后一棵树就生成了，如图6-15中的网桥就是从交换机1→交换机2的2号端口→交换机3的2号端口。下面的任务是裁剪冗余的环路。这个工作是通过阻塞非根桥上相应端口来实现的，例如交换机3的端口1的角色成为禁用端口，进入阻塞状态（图中用“×”表示）。生成树经过一段时间（默认值是30秒左右）稳定之后，所有端口要么进入转发状态，要么进入阻塞状态。STP BPDU仍然会定时从各个网桥的指定端口发出，以维护链路的状态。如果网络拓扑发生变化，生成树就会重新计算，端口状态也会随之改变。
STP协议给透明网桥带来了新生。但是，随着应用的深入和网络技术的发展，它的缺点在应用中也被暴露出来。STP协议的缺陷主要表现在收敛速度上。当拓扑发生变化，新的配置消息要经过一定的时延才能传播到整个网络，这个时延称为Forward Delay（转发延时），协议默认值是15秒。在所有网桥收到这个变化的消息之前，若旧拓扑结构中处于转发的端口还没有发现自己应该在新的拓扑中停止转发，则可能存在临时环路。为了解决临时环路的问题，生成树使用了一种定时器策略，即在端口从阻塞状态到转发状态中间加上一个只学习MAC地址，但不参与转发的中间状态，两次状态切换的时间长度都是Forward Delay，这样就可以保证在拓扑变化的时候不会产生临时环路。但是，这个看似良好的解决方案实际上带来的却是至少两倍Forward Delay的收敛时间！