# STP(Spanning-Tree Protocol,生成树协议)的工作原理,在分层网络中存在冗余链路的情况下容易引起流量环路,使用STP能够动态的管理这些冗余链路;当某台交换机的一条连接丢失时,另一条链路能迅速取代失败链路,并且不会产生流量环路。文章主要包括下面几点内容:冗余拓扑中存在的问题、生成树协议、生成树收敛、利用生成树实现负载均衡等。

# 1、STP交换机角色
# 根交换机(root bridge)和非根交换机(none root bridge)
# 首先要知道什么是BID(Bridge ID,桥ID),因为根交换机的选举是基于BID的,BID由三部分组成——优先级、发送交换机的MAC地址、Extended System ID(扩展系统ID,可选项);BID一共8个字节,其中优先级2个字节,MAC地址6个字节。优先级包括Priority 4bit(4096*n)和Extended System ID 12bit(pvst协议和rapid-pvst协议采用vlan id,MST 采用instance id);在进行BID比较时,先比较桥优先级,优先级值小的为根桥;当桥优先级值相等时,再比较桥的背板MAC地址,MAC地址小的为根桥。

IOU1#sh spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee     # 表示交换机使用的生成树协议是"PVST+",这也是思科默认的生成树协议
  Root ID    Priority    32769            # 表示根交换机的优先级是32769,
             Address     aabb.cc00.0800   # 根交换机的MAC地址  
             This bridge is the root      # 表示当前这台交换机就是根交换机  
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec    # BPDU发送间隔默认2秒,最大存在时间是20秒,转发延时是15秒。

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)    # Extended System ID是1,所以总优先级就是32768+1=32769
             Address     aabb.cc00.0800   
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et1/1               Desg FWD 100       128.6    Shr 
Et1/2               Desg FWD 100       128.7    Shr 
Et1/3               Desg FWD 100       128.8    Shr 

IOU2#sh spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     aabb.cc00.0800
             Cost        100
             Port        10 (Ethernet2/1)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0d00
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et2/1               Root FWD 100       128.10   Shr 
Et2/3               Altn BLK 100       128.12   Shr 
Et3/3               Altn BLK 100       128.16   Shr 

IOU3#sh spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     aabb.cc00.0800
             Cost        100                # 端口cost :100
             Port        14 (Ethernet3/1)   # Ethernet3/1 为 10M
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0a00
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et3/1               Root FWD 100       128.14   Shr 
Et3/2               Desg FWD 100       128.15   Shr 
Et3/3               Desg FWD 100       128.16   Shr
# 2、端口cost和路径cost
# 根交换机被选举出来后,计算其他交换机到根交换机的cost,STA考虑两种cost,端口cost和路径cost,路径cost是从根交换机出发到最终交换机入方向的端口cost总和,也就是说在上面的拓扑图图三中,假设SW1是根交换机,想要改变SW3到根交换机SW1的花费,应该在SW3的fa0/1来改变,而不是在SW1的fa0/3端口上改变。
# 如果一台交换机有多条路径到达根交换机,这台交换机会选择路径花费最小的那条,下面是默认的端口cost参照表:
# 10G -- 2,1G -- 4,100M -- 19,10M -- 100

# 3、BPDU结构浅析
# BPDU包含12个字段
Frame 1417: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface 0
IEEE 802.3 Ethernet 
Logical-Link Control
Spanning Tree Protocol
    Protocol Identifier: Spanning Tree Protocol (0x0000)
    Protocol Version Identifier: Spanning Tree (0)
    BPDU Type: Configuration (0x00)
    BPDU flags: 0x00        # 标记域,包含TC(Topology Change,拓扑改变)比特位,TCA(Topology Change Acknowledgment,拓扑改变确认)比特位。
    Root Identifier: 32768 / 1 / aa:bb:cc:00:08:00      # Root ID:包含了根交换机的BID。
    Root Path Cost: 0                                   # Cost of path:到根交换机的路径花费。
    Bridge Identifier: 32768 / 1 / aa:bb:cc:00:08:00    # Bridge ID:转发BPDU的交换机的BID。
    Port identifier: 0x8007                             # Port ID:转发BPDU的交换机的PID,PID等于端口优先级(默认128)加端口号,
    Message Age: 0                                      # Message age:BPDU已经存在的时间。
    Max Age: 20                                         # Max age:BPDU最大存在时间。
    Hello Time: 2                                       # Hello time:根交换机发送配置信息的间隔时间,默认2秒。
    Forward Delay: 15                                   # Forward Delay:转发延时,默认15秒。 

# STP端口角色
# 1)根端口(Root Port,RP):转发并接收BPDU;每个非根交换机上有且仅有一个根端口,
# 2)指派端口(Designated Port,DP):转发并自身发送BPDU;网络上除根端口外,所有允许转发流量的端口,每个网段都有一个指派端口,根交换机上的端口都是指派端口。
# 3)非指派端口:只接收BPDU;既不是根端口也不是指派端口,这种端口虽然是激活的但是会被堵塞(Blocking)用来阻止环路,根端口和指派端口都处于转发(Forwarding)状态。
# 4)禁用端口:被管理员使用"shutdown"命令关闭的端口称作禁用端口,禁用端口不参与生成树算法。