STP(Spanning Tree Protocol)是运行在交换机上的二层破环协议,环路会导致广播风暴、MAC地址表震荡等后果,STP的主要目的就是确保在网络中存在冗余路径时,不会产生环路。
STP是数通的基本特性,交换机、路由器、WLAN等产品均支持配置STP。本章节以华为CloudEngine系列交换机为例进行介绍。
STP是一个用于局域网中消除环路的协议,它的标准是IEEE 802.1D。运行该协议的设备通过彼此交互信息而发现网络中的环路,STP将部分冗余链路强制为阻塞状态,其他链路处于转发状态。当处于转发状态的链路不可用时,STP重新配置网络,并激活合适的备用链路状态。
由于局域网规模的不断增长,生成树协议已经成为当前最重要的局域网协议之一。
从环形网络拓扑结构到树形结构,总体来说有三个要素:根桥、根端口和指定端口。
AP1、AP2、BP1、BP2、CP1、CP2分别表示设备S1、S2、S3的端口。
S1通过端口AP1向S2转发配置消息,则S2的指定桥就是S1,指定端口就是S1的端口AP1。
此外,交换设备和端口都有ID,分别是桥ID(BID)和端口ID(PID)。端口ID由端口优先级和端口号组成。桥ID由桥优先级和桥MAC两部分组成,在STP网络中,桥ID最小的设备会被选举为根桥。
一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根、非指定端口都处于阻塞(Blocking)状态,它们只接收STP协议报文而不转发用户流量。
上述桥ID、路径开销和端口ID等信息都是通过BPDU协议报文传输的。BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC头,LLC之后是BPDU报文头。以太网数据帧格式如图2所示。
在初始化过程中,每个桥都主动发送配置BPDU。但在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置BPDU后,才触发发送自己的配置BPDU。配置BPDU的长度至少要35个字节,包含了桥ID、路径开销和端口ID等参数,即{根桥ID,累计根路径开销,发送者BID,发送端口PID}。只有当发送者的BID或端口的PID两个字段中至少有一个和本桥接收端口不同,BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。
STP的树形结构实现过程如下:
网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换BPDU消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。根桥上的所有端口都是转发状态。
如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接收不发送配置消息。
缺省情况下,交换机运行MSTP模式,MSTP模式兼容STP和RSTP模式。
缺省情况下,交换设备的优先级取值为32768。数值越小,优先级越高,成为根桥的可能性越大。对于网络中部分性能低、网络层次低的交换设备,不适合作为根桥设备,一般会配置其低优先级以保证该设备不会成为根桥。
缺省情况下,路径开销值的计算方法为IEEE 802.1t(dot1t)标准方法。同一网络内所有交换设备的端口路径开销应使用相同的计算方法。
存在环路的网络环境中,对于链路速率值相对较小的端口,建议将其路径开销值配置相对较大,以使其在生成树算法中被选举成为阻塞端口,阻塞其所在链路。
缺省情况下,交换设备端口的优先级取值是128。
如果希望将某交换设备的端口阻塞从而破除环路,则可将其端口优先级设置比缺省值大,使得在选举过程中成为被阻塞的端口。
如果您想了解STP的其他配置及RSTP的配置,如网络直径、超时时间、定时器、边缘端口等,请参见《CloudEngine 8800, 7800, 6800, 5800 V200R005C10 配置指南-以太网交换》中的“STP/RSTP配置”。
以下图的组网环境为例,介绍STP的配置步骤、查看配置结果。
<SwitchA> system-view [~SwitchA] stp mode stp [*SwitchA] stp root primary [*SwitchA] stp pathcost-standard legacy [*SwitchA] commit
<SwitchB> system-view [~SwitchB] stp mode stp [*SwitchB] stp root secondary [*SwitchB] stp pathcost-standard legacy [*SwitchB] interface 10ge 1/0/2 [*SwitchB-10GE1/0/2] stp disable [*SwitchB-10GE1/0/2] commit
<SwitchC> system-view [~SwitchC] stp mode stp [*SwitchC] stp pathcost-standard legacy [*SwitchC] interface 10ge 1/0/1 [*SwitchC-10GE1/0/1] stp cost 20000 [*SwitchC-10GE1/0/1] quit [*SwitchC] interface 10ge 1/0/2 [*SwitchC-10GE1/0/2] stp disable [*SwitchC-10GE1/0/2] commit
<SwitchD> system-view [~SwitchD] stp mode stp [*SwitchD] stp pathcost-standard legacy [*SwitchD] commit
[~SwitchA] stp enable
[*SwitchA] commit
[~SwitchA] display stp brief MSTID Port Role STP State Protection Cost Edged 0 10GE1/0/1 DESI forwarding none 2 disable 0 10GE1/0/2 DESI forwarding none 2 disable
原文:https://www.cnblogs.com/Crazy-Liu/p/13207679.html