TOP:
批注:交换机的stp是默认开启的
STP协议介绍:STP---Spanning Tree Protocol(生成树协议)逻辑上断开环路,防止广播风暴的产生,在一个交换网络中有可能会出现单点失效的故障,所谓单点失效,指的是由于网络中某一台设备的故障,而影响整个网络的通信。为了避免单点失效,提高网络的可靠性,可以通过构建一个冗余拓扑来解决。但是,一个冗余的拓扑,又会给我们的网络造成环路,而产生其它的影响。为了解决二层环路问题,而设计了STP。
对于参与STP的一个扩展的局域网中的所有交换机,它们都通过数据消息的交换来获取网络中其他交换接的信息。这些消息被称为桥接协议数据单元(BPDU)。
桥接协议数据单元(BPDU)
BPDU是以组播信息的形式发送,每隔2秒由根桥发送一次
BPDU分两种类型:
1、配置BPDU--通常由根网桥以周期性间隔发出,包括了STP参数,用于进行各种选举。
2、TCN(topology change notification 拓扑变更通告)BPDU--这种BPDU是当交换机检测到拓扑发生变更时所产生。
配置BPDU的的字段(其中有四个是关注字段)
Protocol ID : 固定为0
Version : 802.1D (0)
Message Type : (Config BPDU=0x00 / TCN BPDU=0x80)
Flags
【1】BID(Priority【默认32768】+Mac 越小越优先)
【2】cost
10Mbit/s 开销100 100Mbit/s 开销19 1Gbit/s 开销 4 10Gbit/s 开销2 只算入不算出,开销累加,越小越优先
【3】发送者BID
选举根端口时是以接受到对方的BPDU中的BID字段为准
选举指定端口时是以发送方(或者是转发方即自身)的BPDU的BID字段为准
【4】发送者PID
以接受到对方的BPDU中的PID字段为准 Priority【默认128】+接口ID
Message age
Max age
Hellotime
Forward delay
TCN BPDU只包括三个字段:
【1】Protocol ID
【2】Version
【3】Message Type : (Config BPDU=0x00 / TCN BPDU=0x80)
对于运行STP的交换机,它能够使用BPDU完成下列任务:
- 选举根网桥
- 确定冗余路径的位置
- 通过阻塞特定端口来避免环路
- 通告网络拓扑的变更
- 监控生成树的状态
端口状态:
阻塞【blocking】------在阻塞状态,第二层接口不参与帧转发,但却监听流入的BPDU。端口不能学习帧的mac地址。
监听【listening】------在监听状态下,交换机能够决定根,并且可以选择根端口、指定端口、和非指定端口。在监听状态的过程中,端口不能学习任何接收帧的单播地址。
学习【learning】-----在学习状态,第二层接口准备参与帧转发。端口能够在这个状态学习流入帧的MAC地址,但却不能转发帧。
转发【forwarding】----在转发状态,第二层接口能够转发帧。端口学习到接收帧的源MAC地址,并且可以根据目标MAC地址将它们进行准确转发。
禁用【disabled】-----在禁用状态下,第二层接口不能参与生成树,并不能转发数据帧。
STP采用STA(Spanning Tree Arithmetic)算法,在冗余链路中选择一个参考点(生成树的根),最初的网络,每个SW都认为自己是根桥,都会发送BPDU,比较最小BID,选举出一个根桥,当根桥选出来以后,根桥交换机作为参考点,从此就只有根桥发送BPDU,非根桥只进行转发。
STP的操作过程:
(1)根桥的选举
依据BID来选举,由于MAC地址唯一,所以通过比较BPDU的BID一定能够比较出来
(2)选举根端口
在非根桥交换机选举,比较BPDU的后三个字段,并将此端口置成forwarding状态
(3)选择指定端口
每一个网段(即每个冲突域)需要选一个端口来到达根桥,比较BPDU的后三个字段,并将此端口置成forwarding状态
(4)非指定端口
不是根端口也不是指定端口的端口为非指定端口,比较BPDU后三个字段,这样的端口会被Blocking
注:在网络中,任何拓扑的变化都会引起STP的重新计算,2950以上的交换机的Priority会加上VLAN号,因为CISCO默认启用PVST
分析:
第一步选根桥:通过比较交换机A和B的BID,发现A的BID小于B的BID,但是越小越优先,所以交换机A为根桥交换机。
第二步选根端口:在非根桥交换机上选取,B为非根桥交换机,两个接口的cost都为4,所以比发送者BID,选根端口时是以接受到对方的BPDU中的BID字段为准,都是根桥A的BID,无法比出来,接下来比发送者PID,发现Gi0/2口的发送者PID为128.25小于Gi0/1口的发送者PID为128.26,所以B的Gi0/2口为根端口。
第三步选指定端口:每一冲突域选一个指定端口,所以拓扑中的两个冲突域选取两个指定端口,由于stp中cost只计算入口开销,不算出口开销,所以根桥交换机A的两个端口的cost为0即为指定端口(根桥交换机上的端口都是指定端口)
第四步选非指定端口:不是根端口也不是指定端口的端口是非指定端口,所以交换机B的Gi0/1口为非指定端口,并被blocking掉,注意blocking状态只是不参与帧转发,但却监听流入的BPDU,端口不能学习帧的mac地址,并不是物理上的down掉,当拓扑发生变化时该端口有可能成为其它角色并置成相应的端口状态。
通过命令我们查看一下SW A 的stp运行状况
A#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0040.0BCD.9DE7
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 0040.0BCD.9DE7
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Gi0/1 Desg FWD 4 128.25 P2p
Gi0/2 Desg FWD 4 128.26 P2p
//查看绿色背景的字体,我们发现SW A 是根桥(默认交换机优先级为32768 BID=32768+vlan ID)
//查看红色背景的字体,我们发现SW A的Gi0/1和Gi0/2口是指定端口同时被置成forwarding状态
查看SW B的stp运行情况
B#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0040.0BCD.9DE7
Cost 4
Port 26(GigabitEthernet0/2)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 0090.2105.C6D7
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Gi0/1 Altn BLK 4 128.25 P2p
Gi0/2 Root FWD 4 128.26 P2p
//实验现象与我们推测相符。
网络拓扑变更时STP的收敛:
当网络出现故障导致拓朴发生变化时,生成树要进行收敛,在收敛过程中,一个blocking接口变到forwarding状态时会经历以下四种状态变化。
当拓扑发生变化时,端口从阻塞状态过渡到正常转发状态的时间是30-50S
如果是直连接口down掉,端口状态过渡最大需要30S
如果是非直连故障,最大需要50S
当发生如下事件时,SW会发送TCN:
1.链路故障(FWD -> BLK)
2.端口进入转发状态,并且SW已经拥有DP
3.非根桥从它的DP接收到TCN BPDU,并将其转发
注意:在网络拓朴发生改变后,不仅会有STP的收敛,还会导致二层MAC地址表的收敛。
二层MAC地址表的收敛:
MAC地址表的收敛过程如下:
1、拓扑发生改变的交换机向RP端口发出TCN的BPDU
2、上级交换机做两件事:先回应一个TCA置位的BPDU,再继续向自已的RP接口发出TCN的BPDU
3、TCN的BPDU被这样一跳跳的传到根桥交换机上
4、然后根桥交换机将自已MAC地址表的老化时间由默认的300S改为转发延迟时间(15S)。
5、根交换机再向网络中发出TCA置位的BPDU
6、网络中的其他交换机收到TCA置位的BPDU后,也将自已MAC地址表的老化时间由默认的300S改为15S。
这样,每台交换机就快速的老化了MAC地址表,清除掉了已经失效的MAC地址条目。
下面在分析一个案例:
第一步选根桥:通过比较优先级我们可以删除A和D,B和C优先级一样接下来比较MAC地址,C的MAC要小于B的MAC,所以C为根桥。
第二步选根端口:在非根桥交换机A、B和D上选,首先是A,f0/1的cost是4,f0/3的是19,f0/2的是27,f/4的是12,所以f0/1口是RP;交换机B,f0/1的cost是23,f0/2的是8,f0/3的是8,f0/4的是8,所以接下来比较发送者的BID,f0/2的是A的,f0/3和f0/4的是B的,发现A的BID要小于B的,越小越优先,所以交换机B的f0/2口是RP;交换机D,f0/1和f0/2的cost为12,f0/3的为19,f0/4的为4,所以交换机D的f0/4口是RP。
第三步选指定端口:在每个冲突域中选一个,共有8个冲突域,根桥C的四个端口都是DP,交换机A和B两个冲突域中,通过比较cost可以比出交换机A的f0/2和f0/4为DP,交换机B和D的两个冲突域也通过比较cost可以比出交换机D的f0/1和f0/2为DP。
第四步选非指定端口:没有角色的端口都是非指定端口,并将这些端口置成blocking。
分析结果: