生成树协议(Spanning Tree Protocol,STP),是一种工作在OSI网络模型中的第二层的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太网中无环路的逻辑拓扑结构.从而避免了广播风暴,同时具备链路的备份功能。

摘要: 1.生成树背景 2.STP 3.RSTP 4.PVST 5.MSTP

生成树协议主要是为了解决因为环路而形成的网络风暴和网络中的冗余链路

STP 工作原理: STP协议会阻塞冗余端口,使网络中的节点在通信时,只有一条链路生效(没有冗余) 当通信链路出现故障时,将处于“阻塞状态”的端口重新打开,从而保证网络正常通信 网络拓扑图发生变化时 网络将会重新生成收敛 工作过程 在一个扩展的局域网中参与STP的所有交换机之间通过交换桥协议数据单元BPDU(bridge protocol data unit)来实现; 为稳定的生成树拓扑结构选择一个根桥; 为每个交换网段选择一台指定交换机;将冗余路径上的交换机置为blocking,来消除网络中的环路。 BPDU的生成和配置 每台交换机在生成树最开始都会已自己为根桥向外发送配置 交换机会保存收到的高优先级的BPDU消息并泛洪,丢弃低优先级的BPDU消息 网络收敛后 根交换机向外发送BPDU报文 其他交换机对该报文进行配置 BPDU报文

协议ID:该值总为0。 版本号:STP的版本(为IEEE 802.1d时值为0)。 报文类型:BPDU类型(配置BPDU=0,TCN BPDU=80)。 标记域:LSB(最低有效位)=TCN标志;MSB(最高有效位)=TCA标志。 根网桥ID:根信息由2字节优先级和6字节ID组成。这个信息组合标明已经被选定为根网桥的设备标识。 根路径成本:路径成本为到达根网桥交换机的STP开销。表明这个BPDU从根网桥传输了多远,成本是多少。这个字段的值用来决定哪些端口将进行转发,哪些端口将被阻断。 发送网络桥ID:发送该BPDU的网桥信息。由网桥的优先级和网桥ID组成。 端口ID:发送该BPDU的网桥端口ID。 计时器:计时器用于说明生成树用多长时间完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。 最大老化时间:网桥将将根桥看做不可用前保留根ID的最大时间。 访问时间:根网桥连续发送BPDU的时间间隔。 转发延迟:网桥在监听学习状态所停留的时间。 STP使用原则 在一个STP域内选举一台唯一的Root Bridge; 比较所有交换机的BID,谁小谁就是Root,选完Root之后只有Root才能周期性的发送BPDU。 在所有非Root之上选举一个唯一的根端口(RP); 第一步,比较该交换机所有能接收到BPDU的接口的入站方向的Cost of path, 小的获胜; 第二步,比较第一步取胜的所有接口接收到BPDU的发送者BID,小的获胜; 第三步,比较第二步取胜的所有接口的发送者Port-ID,小的获胜。 选完RP之后在所有交换机链路两端选举一个唯一的指定端口(DP)。 第一步,比较链路两端的接口的发送方向的Cost of path,小的获胜; 第二步,比较链路两端接口的发送者BID,小的获胜; 第三步,比较链路两端接口的发送者Port-ID,不过除非在一台交换机上打环 然后在这两个端口中选择DP,否则不会使用此步骤。 STP端口状态 只能接收BPDU,不能接收或者传输数据,不能把MAC地址加入地址表 监听状态(Listening) 可以接收和发送BPDU,不能接收或者传输数据,不能把MAC地址加入地址表 学习状态(Learning) 可以发送和接收BPDU,可以学习MAC地址,不能传输数据 转发状态(Forwarding) 可以发送和接收数据,可以学习MAC地址、发送和接收BPDU STP拓扑结构变化 由出现链路故障的交换机首先发送 拓扑变更报文(TC),沿最短路径 传递,接收到的交换机回应,直到根交换机为止。 根交换机向下发送TCN给非根交换机,网络重新计算STP,从而使网络重新收敛 重新收敛的时间可能长达50s

RSTP 由于STP太慢了 因此快速生成树协议RSTP(Rapid Spanning Tree Protocol)在STP基础上实现了快速收敛,并增加了边缘端口的概念及保护功能。 RSTP在STP基础上新增加了2种端口角色: Backup端口和边缘端口。通过端口角色的增补,简化了生成树协议的理解及部署。Backup端口:由于学习到自己发送的配置BPDU报文而阻塞的端口,指定端口的备份,提供了另外一条从根节点到叶节点的备份通路。边缘端口:如果端口位于整个交换区域边缘,不与任何交换设备连接,这种端口叫做边缘端口。边缘端口一般与用户终端设备直接连接。 边缘端口特点: 边缘端口会节省30S的延时,端口UP后会立即进入转发状态。 边缘端口的UP/DOWN不会触发拓扑改变。 边缘端口收的TC置为的配置BPDU报文不会将MAC地址的老化时间设置为15s。 边缘端口如果收到配置的BPDU报文会马上变为一个普通端口,进行STP的收敛边缘端口也会发送配置BPDU报文。 PA协商不会阻塞边缘端口。

PVST PVST(Per-VLAN Spanning Tree)已在每个VLAN上面生成一个树实例,网络中的二层环路能够被识别并消除,保证VLAN不会产生环路。随之而来的也有缺点 1.由于每个VLAN都需要生成一棵树,PVST BPDU的通信量将正比于 Trunk的VLAN个数。 2.VLAN越多,维护生成树的计算量就越大 由于PVST没有形成标准,各个厂商的并不能直接互通

MSTP 由于传统生成树只是解决了单点故障问题,但是缺陷是没有解决负载分担,因此多生成树协议就是为了解决负载均衡的 在以太网中部署MSTP协议后可实现如下功能: 形成多棵无环路的树,解决广播风暴并实现冗余备份。 多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的 路径转发。 配置生成树 PVST 配置步骤: 启用生成树 Switch(config)#spanning-tree vlan vlan-list 配置根网桥 Switch(config)#spanning-tree vlanvlan-list root primary |secondary 修改网桥优先级 Switch(config)#spanning-tree vlan vlan-list prioritybridge-priority 修改端口成本 Switch(config)#spanning-tree vlan vlan-list cost cost 修改端口优先级 Switch(config)#spanning-tree vlan vlan-list port-priority priority 配置上行速链路 Switch(config)#spanning-tree uplinkfast 配置速端口 Switch(config-if)#spanning-tree portfast 查看生成树配置 show spanning-tree 查看VLAN 生成树详细信息 show spanning-tree vlan vlan-id detail Eg: SwitchA#showrunning-config hostname SwitchA spanning-tree modepvst spanning-tree vlan10,30,50 priority 24576 spanning-tree vlan20,40,60 priority 28672 interfaceFastEthernet0/1 switchport trunkallowed vlan 10,30,50 switchport trunkencapsulation dot1q switchport mode trunk interfaceFastEthernet0/2 switchport trunkallowed vlan 20,40,60 switchport trunkencapsulation dot1q switchport mode trunk ! interface GigabitEthernet0/1 switchport trunk allowed vlan 10,20,30,40,50,60 switchport trunk encapsulation dot1q switchport mode trunk ! interface GigabitEthernet0/2 switchport trunk allowed vlan 10,20,30,40,50,60 switchport trunk encapsulation dot1q switchport mode trunk SwitchB#show running-config hostname SwitchB spanning-tree mode pvst spanning-tree vlan 20,40,60 priority 24576 spanning-tree vlan 10,30,50 priority 28672 interface FastEthernet0/1 switchport trunk allowed vlan 10,30,50 switchport trunk encapsulation dot1q switchport mode trunk ! interface FastEthernet0/2 switchport trunk allowed vlan 20,40,60 switchport trunk encapsulation dot1q switchport mode trunk interface GigabitEthernet0/1 switchport trunk allowed vlan10,20,30,40,50,60 switchport trunk encapsulation dot1q switchport mode trunk ! interface GigabitEthernet0/2 switchport trunk allowed vlan10,20,30,40,50,60 switchport trunk encapsulation dot1q switchport mode trunk Mst 基本配置: Switch(config)#spanning-tree mode mst #进入mst配置模式 Switch(config)#spanning-tree mst configu Switch(config-mst)#instance 1 vlan 10,20 #将vlan10、20 放入实例1 中每个实例都会生成一个独立的生成树 Switch(config-mst)#revision 1 #配置多生成树的版本号 Switch(config-mst)#instance 2 vlan 30,40 Switch(config-mst)#revision 1 Switch(config-mst)#exi Switch(config)#spanning-tree mst 1 root primary #指定交换机为STP实例1的主备模式 Switch(config)#spanning-tree mst 2 root secondary Switch(config)#end SwitchA#showrunning-config SwitchA(config)# spanningtree mst configuration SwitchA(configmst)# name region1 SwitchA(configmst)# revision 10 SwitchA(configmst)# instance 1 vlan 10, 30, 100 SwitchA(configmst)# Ainstance 2 vlan 20, 40, 200 SwitchA(configmst)# exit SwitchA(config)#spanningtree mst 01 root primary SwitchA(config)#spanningtree mst 2 rootsecondary SwitchB#showrunning-config SwitchB(config)# spanningtree mst configuration SwitchB(configmst)# name region1 SwitchB(configmst)#revision 10 SwitchB(configmst)#instance 1 vlan 10, 30, 100 SwitchB(configmst)#instance 2 vlan 20, 40, 200 SwitchB(configmst)#exit、 SwitchB(config)# spanningtree mst 2 root primary SwitchB(config)#spanningtreemst 01 root secondary