STP 
  -定义
  -作用
  -类型
      1、802.1d - STP  :生成树协议             PVST/PVST+(思科)
      2、802.1w - RSTP :快速生成树协议         PV-RSTP(思科)
      3、802.1s - MSTP :多生成树协议
  -报文

PVST:per-vlan STP,即在每个 VLAN 内部都运行一个 STP (802.1d);

STP的工作过程:
    1、确定交换机的角色
            根交换机:整个交换网络中,有且只有一个;
            非根交换机:剩余的其他交换机,都称之为非根交换机

        注意:
            每一个非根交换机都会计算出一条去往根交换机的最短的、
            无环、2层数据转发路径,并且最终该路径是“转发”状态;

            选举原则:
                  比较每个交换机的 BID (bridge ID):优先级+MAC地址
                  优先级:默认值为 32768 ; 2个字节;
                  MAC地址:使用的是交换机的主板MAC;6个字节;
                     比较原则 - 
                           首先比较优先级,越小越好;
                           其次比较MAC地址,越小越好;

    2、确定端口的角色
            根端口:在每一个非根交换机上,有且只有一个;
                    距离根交换机最近的端口;

            指定端口:在每一个"网段/segment"中,有且只有一个;
                    距离根交换机最近的端口;

            非指定端口:其他所有端口,都叫做“非指定端口”

    3、确定端口的状态
            down       -关闭(指的是当前端口没有启动STP)

            listening  -侦听,此时侦听的是网络中的所有的BPDU
                              目的是为了确定交换机和端口的角色;
                              端口在该状态停留15s;

            learning   -学习,该阶段主要是学习端口上收到的数据帧
                               的源MAC地址,从而形成 MAC地址表;
                               端口在该状态停留15s;

            forwarding -转发(最终状态),该状态实现数据包的发送和接收

            blocking   -阻塞(最终状态),该状态不能发送和接收数据包;
                                        只能接收 BPDU。
BPDU类型:
    1、配置BPDU
           用于创建和维护 STP 无环转发路径树
    2、TCN BPDU 
           只有当 STP 无环转发路径树(拓扑)变化的时候,才会
           产生并发送。
           并且是:感知到该变化的交换机,产生 TCN BPDU ,只
           发送给根交换机,然后再由根交换机转发给其他的所有
           非根交换机;

STP计时器:
     hello:交换机周期性发送 BPDU 的时间间隔,默认是 2s ; 
     forward-delay : 转发延迟,默认时间为15s ; 
     max-age:最大老化时间,默认时间为 20s ;

------------------------------------------------------------------------
STP参数修改(思科):
    1、修改交换机的 STP 优先级 (确保网络中有主根交换机和辅根交换机)
            spanning-tree  vlan x priority {value} , value 是4096的倍数

    2、修改交换机的 STP 模式 (必须确保网络的所有交换机的STP模式相同)
            spanning-tree mode  {pvst | rapid-pvst | mstp }

    3、修改交换机的 端口  cost 
            interface fas0/22 (该链路指的是 trunk 链路)
               spanning-tree  vlan 3 cost {value} 
    4、针对某个 VLAN ,关闭 STP 功能
            no spanning-tree vlan x 

STP参数修改(华为):
    1、修改交换机的 STP 优先级: 
           [SW] stp priority {value} -> 必须得是4096的倍数
    2、修改交换机的 STP 模式
           [SW] stp mode {stp | rstp | mstp }
    3、修改交换机的端口的 STP  cost : 
           [SW]interface fas0/13 
           [sw-fas0/13]stp cost {value}
    4、在交换机上关闭/开启 STP :
           [sw]stp disable -> 关闭 STP ;
           [sw]stp enable -> 开启 STP ,默认是开启的;

验证命令:
    show spanning-tree vlan  x ->可以查看交换机上关于 VLAN x 的 STP 信息
    show spanning-tree         ->可以查看交换机上关于所有VLAN的 STP 信息
    show spanning-tree summary ->可以查看交换机运行的 STP 的模式; 
    show version -> 可以查看交换机的 base mac ;

    display  stp  
    display  stp brief 

注意:
   交换机上的 STP 功能,默认都是开启的;可以人工关闭;

=============================================================
MSTP的配置:
    - MST域(region),同一个域中,可以同时包含多个实例;
    - MSTI(instance),即MST 实例,一个MSTI 可以同时关联多个 VLAN ;

  配置 MST region 
       [SW]stp region-configuration 
       [sw-mstp-region]region-name {string}  //配置 region 的名字;
       [sw-mstp-region]instance {id} vlan x y z m n  //配置关联的VLAN
       [sw-mstp-region]active region-configuration 
       [sw-mstp-region]display this
  配置 MSTI 
       [sw1]stp instance {id} priority {value} <-将 SW1设置为 实例id 的根;

  验证命令:
       display stp instance {id}
       display stp brief 
注意:
    默认情况下,所有的 VLAN 都是属于 instance 0 ; (系统的默认instance)
    一个MSTP网络中,可以同时包含多个 region ; 
    每个MST Region 中,可以包含多个 instance (MSTI)
    属于相同 region 的交换机上,以下参数必须相同:
             #region-name 
             #实例与vlan的映射关系必须相同

    属于同一个 region 中的多个交换机之间,可以基于 instance 进行
       流量的负载均衡和备份;

=====================================================================

STP 收敛速度比较慢 :30-50s 

RSTP收敛速度要比 STP 快,因为做了以下改进:
  1、发现问题比较快

  2、反应/传输问题比较快
        发现拓扑变更的交换机,会产生TCN BPDU,直接发送给与自己相连
        的其他所有交换机;

  3、解决问题比较快
---------------------------------------------------
端口角色细化:

    根端口(root port ) 
    指定端口 (designated port )  
    替代端口(alternative port ):是根端口的备胎;
    备份端口(bakcup port ):是指定端口的备胎

(边缘端口:一般都建议关闭 STP ;或者将连接非交换机的端口,设置非边缘端口)

----------------------------------------------------------------------

端口状态精简化:
    learning   :学习
    forwarding :转发
    discarding :丢弃,相当于之前 STP 中的 down / blocking / listening

------------------------------------------------------------------------