58 交换机启动后端口转发状态的过渡
1 从initialization->blocking
2 从blocking->listening或disable
3 从listening->learning或disable
4 从learing->forwarding或disable
被disable的接口就相当于关闭了。

59 各种状态的功能
blocking:丢弃所有收到的数据帧,不学习MAC地址,能收BPDU但不发BPDU。
Listening:丢弃所有收到的数据帧,不学习MAC地址,能收BPDU和处理BPDU,并进行STP计算
Learing:丢弃所有收到的数据帧,学习MAC地址,能收BPDU和处理BPDU。
Forwarding:正常转发状态,能转发收到的数据帧,能学习MAC地址,接收并处理BPDU。
Disable:丢弃所有的数据帧,不学习MAC地址,能收BPDU,除此之外不会做其它的。

60 交换机的启动过程:交换机启动时,都以为自己是根交换机,然后向外通告BPDU,说自己是根交换机,若是,此交换机收到含更优Bridge-ID的BPDU时,将它从自己所有接口转发出去,并保存在接口,自己不发BPDU了;若是收到差的BPDU,就直接丢掉,所有最后只有根交换机的BPDU在转发,普通的不出现在网络中。

61 根交换机的BPDU在每hello发一次,默认2s,用来保持自己的地位,若是普通交换机在max-age时间内没有收到根交换机的BPDU,就认为根交换机失效了,开始重新选举BPDU,max-age默认20s,10倍。

62 还有一个forward delay时间,默认15s,接口在经过listening和learning状态,都会停留一个forward delay时间,所以一般经过了这30s,在后面的优秀的STP有改变了这个现状。

下面介绍其他的优秀STP
63 RSTP :快速STP,协议号为IEEE 802.1w,它将普通STP中blocking,listening,disable归为一个状态,即discarding状态,还有两个learing和forwarding状态。
通过比较,普通STP根交换机失效了,等20s看不到BPDU才反应过来,再重新计算生成树,又花去15+15秒,一共要50s,而RSTP只要在3个hello时间没看到BPDU,就认为根交换机废了,立刻启用discarding状态的接口,它并不进行完整的STP,在低于1s的时间恢复网络。不过缺点是仍和第一种一样,一次生成树,所有VLAN做相同的路线。

64 PVST+
  思科私有,前面有PVST,但是只支持ISL Trunk,所有有了PVST+也可以支持IEEE 802.Q。PVST+不像普通的只计算一次树,而是每个VLAN进行一次计算。他的内在好处就是负载均衡,控制VLAN流量的走向不同。不过就是思科私有的。他只支持128个实例,如果交换机配置的VLAN数超过128,那么超过的没有STP运行了,会出现环路的。PVST+在全局可以关闭某个VLAN的数据:no spanning-tree vlan 10开启spanning-tree vlan 10
应该默认就是这个协议。

65 默认交换机的Bridge-ID 的优先级为32768,若开启Extended System ID功能,优先级就会加上自己的VLAN号码。

66 Rapid PVST+:具有RSTP特性的PVST+。基于IEEE802.1w

67 MSTP :用的很多,很重要。他的协议号IEEE 802.1s,交换机中有多个VLAN,普通STP将所有流量放在单条线路中传输,不优。PVST+可以实现每个VLAN运行一个STP实例,达到分流负载。然而资源有限,128。因而MSTP划分实例的方式改变了,只将需要进行相同STP计算的VLAN映射到同一个STP实例中,即无论多少VLAN,实际有多少条不同的路径,就根据需要维护几个实例,从而节省系统资源。

68 当网络的链路发生变化,必须进行新的STP计算,为了快速反应,当交换机检测到链路变化是,可以通知网络中的根交换机,此时用一种特殊的BPDU,叫topology change notification TCN,就是TCN BPDU。它只能从根端口发出去,如果接收者不是根交换机,也必须回复确认消息,这个消息是一个设置了TCA位的BPDU,然后在从自己根端口向根发TCN BPDU,直到收到位置,根收到,也回复该BPDU,方式为设置了TC位的BPDU。

69 注意:修改bridge-id的优先级必须为4096的整数倍,端口优先级必须为16的整数倍。

70 关于PVST+的部分配置说明(注意,交换机之间的链路都要先trunk)
第一步:在所有交换机的所有VLAN都配置他们的优先级,如spanning-tree vlan 10-40 priority 4096,通过配置不同交换机的不同优先级,借此选出根交换机。这个不同交换机优先级的不同也影响选择指定端口和根端口。
第二步:要是链路中可能存在线路冗余,我们可以配置端口优先级来控制选择指定端口。配置如:int fa0/20;
spanning-tree vlan 10-40 port-priority 112(16的倍数)。
第三步:查看配置的内容,用命令show spanning-tree;show spanning-tree brief,诸如。可以看到不同VLAN的指定端口,根端口。然后我们可以根据不同的VLAN选举不同的路径,此时可用到修改中间的交换机优先级来做调整,因为根端口和指定端口的选举都用到这个优先级。

71 调整STP参数
spanning-tree vlan 10 hello-time 3
spanning-tree vlan 10 max-age 30
spanning-tree vlan 10 forward-time 10
将某个VLAN在某个交换机上配置为根
spanning-tree vlan 10 root primary

72
第一步: 配置所有交换机的STP模式为MSTP,这个很重要。
配置:spanning-tree mode mst //模拟器好像不支持
第二步:映射VLAN到实例
spanning-tree mst configuration
name ccie
revision 1
instance 1 vlan 10,20
instance 2 vlan 30,40
其他交换机也这样配置,必须region name和revision number完全相同,否则属于不要的region。【区域】
第三步:假如在一交换机上配置实例1和实例2的根交换机,配置spanning-tree mst 1 root primary;spanning-tree mst 2 root primary.
第四步:由于用到负载均衡,可以在对端交换机上配置,这个交换机可以从两边到达根交换机,所以根据实例来做负载均衡。配置如下:
int range fa0/19 - 20;spanning-tree mst 1 cost 10;int range fa0/23 - 24;spanning-tree mst 2 cost 10.通过修改链路的cost来实现负载均衡。此时同查看命令发现会根据实例将链路流量进行负载。而且只用两个实例就完成任务了,也节省了很多资源。