STP(Spanning Tree Protocol) (IEEE 802.1D) 生成树协议
是一种逻辑阻塞。
·在一个交换网络中有可能会出现单点失效的故障,所谓单点失效,指的是由于网络中某一台设备的故障,而影响整个网络的通信。为了避免单点失效,提高网络的可靠性,可以通过构建一个冗余拓扑来解决。但是,一个冗余的拓扑,又会给我们的网络造成环路,而产生其它的影响。为了解决二层环路问题,而设计了SPT协议。
·当2个Segment之间,只有一个物理设备连接时,就有可能“单点失效”。
·Segment:(段的概念)
  1.STP:一段网络介质(网线/光纤)。
  2.数据封装:携带4层报头的用户数据。
  3.路由:一个逻辑子网。
·避免单点失效的方法就是构造冗余网络。
·但冗余网络会导致新的问题:
 1.多帧复制
 2.MAC地址表的翻动
 3.广播风暴
·STP是为克服冗余网络中透明桥接的环路问题而创建的。
 STP通过判断网络中存在环路的地方,并阻断冗余链路来实现无环网络。
·STP采用STA(Spanning Tree Arithmetic)算法。
 STA会在冗余链路中选择一个参考点(生成树的根),将选择到达要的单条路径,同时阻断其他冗余路径。一旦已选路径失效,将启用其他路径。
 
BPDU(Bridge Protocol Data Unit)
·STP的各种选举是通过交换BPDU报文来实现的,BPDU是直接封装在以太网帧中的。
·对于参与STP的所有SW,它们都通过数据消息的交换来获取网络中其他SW的信息,这种消息就被称为BPDU。
·BPDU是直接封装在二层的协议,其MAC地址最后封装数为:00。(01:80:c2:00:00:00)
·BPDU的功能:
 1.选举根桥
 2.确定冗余路径的位置
 3.通过阻塞特定端口来避免环路
 4.通告网络的拓扑变更
 5.监控生成树的状态
·BPDU每2S由根桥发送一次。
 最初的网络,每个SW都认为自己是根桥,都会发送BPDU,比较Lowest BID,选举出一个根桥,当根桥选出来以后。此时就只有根桥发送BPDU。非根桥只进行转发。
BPDU分两种类型:
1、配置BPDU--通常由根网桥以周期性间隔发出,包括了STP参数,用于进行各种选举。
2、TCN(topology change notification 拓扑变更通告)BPDU--这种BPDU是当交换机检测到拓扑发生变更时所产生。
·配置BPDU包含以下的字段(configuration BPDU)
  1、Protocol ID      : 固定为0,2bit
  2、Version          : 802.1D (0),1bit
  3、Message Type     : (Config BPDU=0x00 / TCN BPDU=0x80),1bit
  4、Flags:1bit(第1位为0是not topology change acknowladgment,最后位为0是not topology change)
  5、Root ID:8bit
  6、Cost of Path:4bit
  7、Bridge ID:8bit(2bit priority+6bit MAC)
  8、Port ID:2bit
  9、Message age:2bit
  10、Max age:2bit:20S
  11、Hellotime:2bit:3S
  12、Forward delay:2bit:15S
 
·TCN(Topology Change Notification) BPDU
 这种BPDU是交换机检测到拓扑变更时产生的。只包含下列三个字段
   1、Protocol ID
  2、Version
   3、Message Type : (Config BPDU=0x00 / TCN BPDU=0x80)

<STP的4大工作流程>(STP里选举参数都是越小越优)
One root bridge per network
One root port per nonroot bridge
One designated port per segment
Nondesignated ports are blocked

One root bridge per network(每个网络只有一个根桥)
·根桥的选举:Lowest BID (最小的BID)
·STP为每台SW分配唯一的一个标识符,称为BID(Bridge ID)。
 BID的组成:2(Bridge Priority优先级)+6(MAC)=8 Bytes
 默认Priority:32768(0x8000)可以从0到65535
  2950以上的交换机会在这个值上再加上VLAN号,因为CISCO默认启用PVST(一个VLAN是一个生成树)
  每个交换机都有一个基准的MAC地址,用下面的命令可以看到
 Sw2#show version
 Base ethernet MAC Address: 00:0D:28:61:35:00
  交换机的每一个端口都有一个MAC地址,就是以Base(基准) MAC地址加上端口号得到的。
  Show interface f0/1   这一命令可以看到交换机端口的MAC地址
查看STP信息--
SW1# sh spanning-tree bri
VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    32768
             Address     cc00.0838.0000
            This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
 Bridge ID  Priority    32768
             Address     cc00.0838.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 0 
Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/1      128.42   128    19 FWD     0 32768 cc00.0838.0000 128.42
FastEthernet1/2      128.43   128    19 FWD     0 32768 cc00.0838.0000 128.43
FastEthernet1/3      128.44   128    19 FWD     0 32768 cc00.0838.0000 128.44
FastEthernet1/4      128.45   128    19 FWD     0 32768 cc00.0838.0000 128.45
FastEthernet1/5      128.46   128    19 FWD     0 32768 cc00.0838.0000 128.46 
 
·PVST(Per Vlan Stp)
 Cisco SW 默认为每个VLAN生成一个STP,互不影响。
  由于是为不同的VLAN生成不同的生成树。所以每一台交换机需要为不同的VLAN生成一个不同的桥优先级,所以在CISCO交换机上,交换机在每一个VLAN中的优先级是默认的32768再加上VLAN的号码。
可通过以下命令指定一台交换要为根桥:
Sw1(config)#spanning-tree vlan 1-10 root primary (24576=0x6000) (建立优先级,成为根桥,只是一次变化,不是动态的,敲一次起一次作用)
SW2(config)#spanning-tree vlan 1 root primary
 VLAN 1 bridge priority set to 8192
 VLAN 1 bridge max aging time unchanged at 20
 VLAN 1 bridge hello time unchanged at 2
 VLAN 1 bridge forward delay unchanged at 15
SW1#sh spanning-tree bri
VLAN1
  Spanning tree enabled protocol ieee
 Root ID    Priority    8192
             Address     cc01.0838.0000
             Cost        19
            Port        44 (FastEthernet1/3)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
 Bridge ID  Priority    32768
             Address     cc00.0838.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 0 
Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/1      128.42   128    19 FWD    19 32768 cc00.0838.0000 128.42
FastEthernet1/2      128.43   128    19 FWD    19 32768 cc00.0838.0000 128.43
FastEthernet1/3      128.44   128    19 FWD     0  8192 cc01.0838.0000 128.44
FastEthernet1/4      128.45   128    19 BLK     0  8192 cc01.0838.0000 128.45
FastEthernet1/5      128.46   128    19 FWD    19 32768 cc00.0838.0000 128.46
Sw3(config)#spanning-tree vlan 1-10 root secondary (28672=0x7000) (备份根桥,防止优先级根桥showdown了)
Sw1(config)#spanning-tree vlan 1-10 priority 4096 
                   (设置必须是4096的倍数)
SW1#sh spanning-tree bri
VLAN1
  Spanning tree enabled protocol ieee
 Root ID    Priority    4096
             Address     cc00.0838.0000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
  Bridge ID  Priority    4096
             Address     cc00.0838.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 0 
Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet1/1      128.42   128    19 FWD     0  4096 cc00.0838.0000 128.42
FastEthernet1/2      128.43   128    19 FWD     0  4096 cc00.0838.0000 128.43
FastEthernet1/3      128.44   128    19 FWD     0  4096 cc00.0838.0000 128.44
FastEthernet1/4      128.45   128    19 FWD     0  4096 cc00.0838.0000 128.45
FastEthernet1/5      128.46   128    19 FWD     0  4096 cc00.0838.0000 128.46
 
One root port per nonroot bridge(每个非根桥都要选出一个根端口)
·根端口(RP):每个非根桥有且只有一个根端口
选举RP/DP的方法:
1.Lowest RID(最小的RID)  是SW1(根桥)的BID
2.Lowest path cost to root bridge(到达根的最小路径开销)
3.lowest sender BID (最小的发送BID)
4.Lowest sender port ID  当两台交换机之间有两条线路直连时会用到这一项来选
 
·Path Cost:根桥发出的COST值是0,在下一交换机的入口处才加上COST值,出口处COST值不变。
SW2#sh int st
Interface FastEthernet1/0 is disabled
FastEthernet1/3
          Switching path    Pkts In   Chars In   Pkts Out  Chars Out
               Processor        210      14162        117      10480
             Route cache          0          0          0          0
                   Total        210      14162        117      10480
FastEthernet1/4
          Switching path    Pkts In   Chars In   Pkts Out  Chars Out
               Processor        211      14519         15       4094
             Route cache          0          0         87       5220