生成树STP/RSTP/MSTP-原理介绍+报文分析+配置指导

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在STP/RSTP/MSTP协议(Spanning Tree Protocol/Rapid Spanning Tree Protocol/Multiple Spanning tree protocol)报文的基础上进行介绍,以详细介绍相关内容。

关于STP的标准化文档:

协议标准的继承更新关系上有

  • IEEE Std 802.1D-2004修正IEEE Std 802.1D-1998,且被整合( integrate/ integrated )于IEEE Std 802.1Q-2011
  • IEEE Std 802.1W-2001修正IEEE Std 802.1D-1998,且被修改( revise/ revised )于IEEE Std 802.1D-2004
  • IEEE Std 802.1S-2002修正IEEE Std 802.1Q-1998,且被包含( incorporate/ incorporated )于IEEE Std 802.1Q-2003
  • IEEE Std 802.1T-2001中也涉及到生成树的相关定义,被取代( supersede/ superseded )于IEEE Std 802.1D-2004

自动换行
IEEE Std 802.1Q-2003陆续主要有修改( Revise, Amend, Corrigenda, Supersede )版本IEEE Std 802.1Q-2005,IEEE Std 802.1Q-2011,IEEE Std 802.1Q-2012,IEEE Std 802.1Q-2011/Cor 2-2012,IEEE Std 802.1Q-2014,IEEE Std 802.1Q-2014/Cor 1-2015,IEEE 8802-1Q:2016/Cor1:2017(E),IEEE 802.1Q-2018和IEEE 802.1Q-2022,等众多版本。
自动换行
IEEE 802.1是一组协议的集合。协议之间通过在IEEE 802.1后面加上不同的小写字母进行区分。
常用的802.1协议:802.1a局域网体系结构;802.1b网际互连,网络管理及寻址;802.1d生成树协议;802.1p优先级队列;802.1qVLAN标记协议;802.1s多生成树协议;802.1w快速生成树协议;802.1x局域网安全认证。
其他:802.2主要与逻辑链路控制子层(LCC)相关;802.3主要与以太网介质访问控制的CSMA/CD(Carrier Sense Multiple Access/Collision Detectio,载波侦听多路访问/冲突检测)相关;802.4主要与Token Bus局域网相关;802.5主要与Token Ring局域网相关;802.11主要与Wireless相关。

IEEE Std 802.1Q标准化文档共约2000页,其中关于生成树协议的介绍约100页。此处将依照个人逻辑进行介绍说明。
厂家关于 STP 实现上可能有所不同。例如HW的STP中不存在 blocking 状态而是融合了 RSTP 的 discarding 状态。具体实现上,还请阅读相关资料。
个人能力有限,如有疑问欢迎留言指导。

目录

1.生成树介绍

1.1.协议背景

ISO(国际标准化组织)在1985年提出了一种网络互连模型OSI模型(Open System Interconnection,开放式通信系统互联参考模型),在这个模型之上定义了开放系统的层次结构、层次之间的相互关系以及各层所包括的可能的任务,用来协调进程间通信标准的制定。
在这里插入图片描述生成树协议正是IEEE基于OSI模型802.1协议组中定义的一种。IEEE 802.1协议组主要定义了局域网体系结构、寻址、网络互联和网络。

802协议与OSI(Open System Interconnection)模型的关系可参照下图:在这里插入图片描述
相似的 802.3ad LACP 链路聚合控制协议也是基于OSI模型主要与物理层或数据链路层相关的协议。

数据帧2层环路的影响
1@:广播风暴。这是由于交换机本身对BUM(Broadcast、Unknowncast和Multicast)报文的处理机制所决定的。
2@:MAC漂移。交换机在转发报文时,将学习数据帧的二层地址信息。由于在不同端口间重复收到数据帧,交换机的MAC表不稳定,MAC在不同接口之间循环漂移。
3@:重复帧。由于数据转发在整个网络中进行转发,设备可能会收到大量重复数据帧。这同时也会影响设备的处理性能。

1.2.相关术语

BPDU:Bridge Protocol Data Unit。桥协议数据单元,也即STP所使用的报文名称。
TCN:Topology Change Notification,拓扑改变通知消息。BPDU的一种,主要在STP中通知根桥网络网络拓扑的改变以发送 TC BPDU。
CIST:Common and Internal Spanning Tree。公共和内部生成树。
CST:Common Spanning Tree,公共生成树。
IST:Internal Spanning Tree,内部生成树。
MCID:MST Configuration Identifier,MST配置ID。
RB:Root Bridge,根桥。发送最好BPDU的网桥/交换机。

RID:Root ID,根桥ID。用于标识设备根桥/交换机。
RPC:Root Path Cost,根桥路径开销。用于描述网桥到根桥的路径开销,是一个累加值。
BID:Bridge ID,桥ID。用于标识设备网桥/交换机。
PID:Port ID,端口ID。用于标识交换机的端口号。

@:Bridge网桥 是一个“古老的”概念,可以简单的理解为交换机。
@:BID=Priority+MAC。Priority只能为4096*N,标准N取值为0-16的整数。HW实现上N取值为0-15的整数。
@:对于网桥/交换机而言,其本身设备通常有2个MAC。一个MAC地址供设备每个端口使用,另一个MAC通常在CPU内部使用。而对于路由器而言,每个三层口都具有独立的地址。
@:根桥的RPC值为0。
@:通常,链路带宽越大,链路开销越小。1G链路开销默认为20000,该规则值由IEEE 802.1T定义。
@:PID=Priority+Port。Priority只能为16*N,标准N取值为0-16的整数。HW实现上N取值为0-15的整数。

RP:Root Port,根端口。网桥在确认网络中根桥存在后,选举出的距离根桥最近的端口。
DP:Designated Port,指定端口。网桥上除根端口外的其他无环端口。
BP:Blocked Port,阻塞端口。通常为网桥上从此端口也可到达根桥的次优端口。阻塞端口,不学习MAC地址也不转发BPDU,是用于防止二层环路而阻塞的端口。

@:根桥上不存在根端口。
@:网桥上只存在一个根端口。

STP的相关概念
1@:一个二层网络中只能有一个根桥。
2@:STP协议采用转发的方式泛洪。这里指的是网桥在接收到BPDU报文后,比较自身所配置的BPDU参数。随后更改BPDU中相应字段向端口进行转发。
3@:设备在初始启动STP进程时,都认为自己是根桥。经比较后才确认相应根桥情况。
4@:STP工作模式通常为MSTP,这里以STP/RSTP/MSTP的顺序先后进行介绍。

在这里插入图片描述//stp mode,用于指定stp的工作模式。

点击此处回到目录

2.STP工作原理

生成树的工作原理为
1@:根据设备配置,首先在局域网中唯一选举根桥。在选举出根桥后,根桥周期性发送BPDU报文。
2@:确认根桥的存在后,网桥收到BPDU报文进行端口状态选举,并转发BPDU。

STP选举比较原则
1@:比较 RID 根ID,越小越优先。
2@:比较 RPC 根路径开销,越小越优先。
3@:比较发送设备 BID 桥ID,越小越优先。
4@:比较发送端口 PID 端口ID,越小越优先。
5@:比较接收端口 PID 端口ID,越小越优先。(HUB场景下可能会用到)

2.1.STP报文格式

2.1.1.帧头

这里以STP报文为例进行介绍
在这里插入图片描述@底层使用IEEE 802.3型Ethernet,另一种以太网类型是Ethernet II。

IEEE 802.3 Ethernet
总的来说以太网可以分为IEEE 802.3型Ethernet和Ethernet II。Ethernet II由Ethernet I发展而来。第一代以太网技术最早由Digital,Intel,Xerox三家公司于1982年代联合研发而来,因此Ethernet有时也可称为DIX。Ethernet II是目前应用最为广泛的一种以太网技术。802.3 Ethernet standard由IEEE于1983年提出,用于推进网络设备的协议标准化。

两种以太网的主要区别在于帧布局。
此处省略前导字段。
在这里插入图片描述在DMac和SMac之后是2字节的 EtherType
Date 字段长46-1500字节,取决于相应封装。
Frame Check Sequence或者Cyclical Redundancy Check 长4字节,通常用于差错校验。这是一种基于地址、类型和数据字段的 1 和 0(位)数生成的算法。接收设备根据相应的算法生成CRC值,并将该值与数据帧中的CRC值进行比较。如果一致,则认为数据帧在传输过程中没有错误。
这里省略了相应的纠错功能,详情可查阅相关资料。

EtherType=0x0800表示IPv4(RFC894),
EtherType=0x0806表示ARP(RFC7042),
EtherType=0x8100表示Dot1Q(IEEE Std 802.1Q)
EtherType=0x86DD表示IPv6(RFC7042)等。
详细的字段分类,可参考IANA发布的IEEE 802 Numbers。

在这里插入图片描述在DMac和SMac之后是2字节的 Length。其值总是小于0x05DC(十进制为1500)。
Logical Link Control (LLC) 字段=DSAP(1字节)+SSAP(1字节)+Control(1字节) 。由IEEE802.2标准定义用于提供上层协议信息。
Date 字段长43-1497字节,取决于相应封装。
Frame Check Sequence 或者 Cyclical Redundancy Check 与Ethernet II概念相同。

@:Control 字段通常取1字节的0x03,表示 Unnumbered 帧。此外该字段长2字节时又可分为 Information 帧和 Supervisory 帧。
@:由于客观上 SAP字段(1字节)表示的协议类型数量有限同时为更好的支持IP协议,后续又提出了 SNAP(Sub-Network Access Protocol)型的IEEE 802.3 Ethernet。主要是在LLC字段后插入了OUI厂商标识(3字节)+Type(2字节)。此时的 DSAP/SSAP=0xAA ,Control=0x03。
@:IEEE 802.3 Ethernet 和 Ethernet II 主要通过SMAC后的2字节进行区分。如果该字段值小于0x05DC(十进制为1500)表示 IEEE 802.3 Ethernet,反之表示 Ethernet II。

2.1.2.STP报文

在这里插入图片描述Protocol Identifier:2字节,表示协议ID。0x0000为默认值。
Protocol version Identifier:1字节,表示协议ID。0x00表示STP,0x02表示RSTP,0x03表示MSTP。
BPDU Type:1字节,BPDU类型。STP通常有两种:0x00表示配置 BPDU,0x80表示TCN BPDU。

RSTP/MSTP 中该字段为0x02。

BPDU flags:1字节,BPDU标识位。仅在配置 BPDU(configure BPDU)中有效。

关于RSTP/MSTP协议中配置 BPDU/TCN BPDU 以及 BPDU flags 功能的实现将在后文进行介绍。

Root ldentifier:8字节,根桥ID。由2字节的优先级和6字节的桥MAC组成。

在这里插入图片描述//修改STP的优先级。Priority只能为4096*N,标准N取值为0-16的整数。HW实现上N取值为0-15的整数。因此这里最大为61440。默认取值为8*4096=32768。
这里可能有一个问题
Q:优先级字段有2字节,为什么只能配置为4096的倍数?

A:这是因为2字节共16bits,只有高位的4个bit可被使用。剩余的12bits在某些场景设计下用于填充VLAN ID,以便实现 PVST(Per Vlan Spantree)的效果。
自动换行
在这里插入图片描述//查看设备网桥MAC。所有端口共用该MAC,通常全球唯一。

Root Path cost:4字节,到达根桥的路径开销。

应该这样对RPC字段进行描述:如果 A 接收到来自 B 发送携带 RFC=b 的 BPDU 报文,那么 A 就知晓从此接口到达根桥的开销为 a 。这里的a=b+自己该链路上的开销。因此设备发出BPDU中的该字段的含义是:通知其他设备,报文发送者自己到根桥的开销。在这里插入图片描述以上图为例进行说明,SW6收到来自根桥的RPC为0。SW6向SW7发送BPDU时其报文中填充RPC字段为21000=0+21000。SW7向其他交换机转发的RPC =21000+20000,同时SW7自己到根桥的RPC=21000+20000。
注意,接口开销通常用于发送方告知接收方自己到根桥的链路开销。这里隐藏了一个消息,那就是一条链路往往有双向的两条开销。具体的计算逻辑要取决于对应方向。
自动换行在这里插入图片描述//stp cost。基于端口修改链路开销。
在这里插入图片描述//stp pathcost-standard,修改链路开销计算方法。缺省情况下,路径开销值的计算方法为IEEE 802.1t。此种情况下,100M全双工链路为200,000;1G全双工链路为20,000;10G全双工链路为2,000。

Bridge ldentifier:8字节,桥ID。由2字节的优先级和6字节的桥MAC组成。
Port identifier:2字节,端口ID。由1字节的优先级和1字节的端口标识组成。

在这里插入图片描述//端口优先级默认0x80=128。相似的1个字节优先级,其中只有高位的4bits用于优先级配置。因此只能为16的倍数,此处为8*16=128。

Message Age:2字节,反应了 BPDU 经过交换机的个数。STP/RSTP 默认在经过20个交换机后丢弃BPDU。
Max Age:2字节,接口的BPDU老化时间。本地取值与根桥不同时,以根桥取值保存于本地。

接口通常会缓存接收到的BPDU报文。如果在 Max Age 时间内未收到缓存的BPDU包,就认为链路对端失效从而从此口进行相应的动作。
这里的动作通常指的是向该口发送BPDU包。此外还有一种情况是接收到次优BPDU。端口突然收到与之前端口不同的次优BPDU,将该次优报文丢弃同样等待 Max Age 时间是否还会收到之前的BPDU报文。但此时的端口状态需重新进行STP的切换,因为收到了BPDU报文。也就端口需要重新历经 listening/learning 状态。
自动换行在这里插入图片描述//stp timer max-age,配置交换设备端口上的BPDU老化时间。本地取值与根桥不同时,以根桥取值保存于本地。

Hello Time:2字节,交换机发送 BPDU 报文的间隔时间。本地取值与根桥不同时,以根桥取值保存于本地。

在这里插入图片描述//stp timer hello,配置stp hello间隔。默认为2s。

Forward Delay:2字节,转发时延。listening和learning状态的维持时间。
可用于防止 blocking 端口突然由于收到更优 BPDU 时直接升级为 RP 端口进入 forwarding 状态时(其他端口/交换机角色未收敛完成)造成的临时环路。
本地取值与根桥不同时,以根桥取值保存于本地。

在这里插入图片描述//stp timer forward-delay,配置stp的转发时延。默认15s。

2.2.STP基本原理

生成树的工作原理为
1@:根据设备配置,在局域网中唯一选举根桥。在选举出根桥后,根桥周期性发送BPDU报文。网桥收到BPDU报文进行转发
2@:确认网络中根桥的存在后,每台网桥设备选举根端口及其他端口。

STP选举比较原则
1@:比较 RID 根ID,越小越优先。
2@:比较 RPC 根路径开销,越小越优先。
3@:比较发送设备 BID 桥ID,越小越优先。
4@:比较发送端口 PID 端口ID,越小越优先。
5@:比较接收端口 PID 端口ID,越小越优先。(HUB场景下可能会用到)

2.2.1.STP的端口及端口角色

STP端口角色
@–RP:Root Port,根端口。网桥上到根桥的端口。
一台网桥上只有一个;根桥上无根端口。
@–DP:Designated Port,指定端口。网桥上到其他网桥的工作端口。
@–BP:Blocking Port,阻塞端口。网桥上到根桥的次优端口,是 STP 实现2层破环的端口。

STP端口状态
@–disabled:端口未启用STP时的状态,或者端口down的状态。
@–listening:端口接收BPDU,但不学习MAC表不转发数据的状态。在默认情况下,端口会在这种状态下停留15秒钟时间。
@–learning:端口接收BPDU学习MAC表,但不转发数据报文的状态。在默认情况下,端口会在这种状态下停留15秒钟时间。
@–forwarding:端口正常进行所有动作的状态。
@–blocking:端口接收BPDU,但不学习MAC表不转发数据的状态。
listening的15s用于在给定一个充足时间使得来自根桥BPDU能够到达全网,并有充分时间进行选举和端口角色切换。
learning的15s则主要用于学习MAC表,防止网络中瞬时出现大量未知单播泛洪挤占带宽。

在这里插入图片描述1@:端口初始化后,STP将该端口置为blocking。
2@:端口根据收发BPDU情况动态进入listening。
3@:端口不在是 RP 根端口或 DP 指定端口。
4@:端口在此状态维持一个 forwarding delay 以充分保证网络拓扑的收敛学习。
5@:端口禁用或链路失效。

还有一个可能忽略的错觉是
端口角色和端口状态不具有绑定关系。端口角色的切换在接受到 BPDU 后几乎是在一瞬间完成的,而端口的状态则需要经历相应的状态机才能过渡到稳定状态。

2.2.2.MAC表和TCN BPDU

STP的MAC收敛问题
交换机的二层转发,通常需要依靠MAC进行相应转发。在稳定的STP网络中发生拓扑改变时,往往会导致端口状态从 forwarding 状态切换至 blocking 状态,同时该端口的MAC表等表项被清除。

然而网络中的其他交换机设备如果无法感知到网络拓扑的改变,MAC表仍维持原有条目状态,很可能会将数据报文转发到端口的MAC表已被清除交换机上。此时即使进行未知单播泛洪也很可能会导致目的设备无法接收到数据帧。

解决办法
1@:交换机向自己的 RP 根端口发送 TCN BPDU 报文,以通知根桥网络中拓扑改变。
2@:根桥收到后回应 TCA-bit BPDU,表明自己已已收到 TCN BPDU 报文。并同时周期性发送 TC-bit BPDU。
3@:收到 TC-bit BPDU 的交换机,将自己端口的MAC表老化时间由默认的300s更改为15s以加速MAC表的老化。

工作实例
在这里插入图片描述@1:下游设备SW1=6cbd向 RP 根端口/根桥发送 TCN BPDU 以通知根桥网络中发生拓扑改变。

在这里插入图片描述//TCN BPDU 仅有3个字段Protocol IdentifierProtocol version IdentifierBPDU Type

@2:根桥设备SW3=0565收到该 BPDU 后,将自身的 MAC 表进行相应老化。向下游设备在 forwarding delay+Max age =35s时间内周期性发送 配置 BPDU。其中对 BPDU Flags 做相应的处理。

@:根桥设备0565首先发送的是 TCTCA 置位的BPDU以回应下游设备收到 TCN BPDU。在这里插入图片描述@:随后在一定周期内发送 TC 置位的BPDU,以充分保证网络中其他设备做出相应的响应。在这里插入图片描述//仅TC置位。

@3:下游设备SW1=6cbd收到 TC 置位的BPDU后,将MAC表进行相应老化。向下游设备转发来自根桥的 BPDU 报文。

TCN BPDU的相关说明
@:STP 只有根桥能产生 BPDU,非根桥只能根据情况进行相应的转发。
@:TCN BPDU仅会向根端口发送,用于通知根桥。非根桥交换机接收到TCN BPDU后,也将其向根端口转发。同时也会回应置位的BPDU确认收到下游的 TCN BPDU。
@通常发送 TCN BPDU的场景指的是端口的 up/down,或者说 forwarding 端口状态切换。
准确的是指 DP 端口过渡到 blocking,以及(有 DP 端口)交换机的 blocking 端口从 blocking 状态过渡到 forwarding 状态。
@:STP 报文类型总的分为 配置 BPDU 和 TCN BPDU,其中 TC BPDU 又根据 BPDU Flags字段置位情况有 TC/TCN 置位 BPDU 等类型。
@:需要注意的是 TCN BPDU 仅用于加速MAC表项老化,与 STP 网络收敛无关。

2.3.STP工作实例

在这里插入图片描述这里以上图为例,进行STP基本工作过程的介绍

STP选举比较原则
1@:比较 RID 根ID,越小越优先。
2@:比较 RPC 根路径开销,越小越优先。
3@:比较发送设备 BID 桥ID,越小越优先。
4@:比较发送端口 PID 端口ID,越小越优先。
5@:比较接收端口 PID 端口ID,越小越优先。(HUB场景下可能会用到)

1@:SW1、SW2和SW3分别具有不同的MAC地址。
2@:SW1、SW2和SW3的其余STP参数采用默认值。
3@:设备BPDU可用优先级向量{ RID,RPC,BID,PID } 进行表示。
4@:设备初始状态都认为自己为根桥因此分别具有如下BPDU报文–
SW1.GE1={ 32768+6cdb,0,32768+6cdb,128+1 } ;
SW1.GE2={ 32768+6cdb,0,32768+6cdb,128+2 } ;

SW2.GE1={ 32768+57fb,0,32768+57fb,128+1 } ;
SW2.GE2={ 32768+57fb,0,32768+57fb,128+2 } ;

SW3.GE1={ 32768+0565,0,32768+0565,128+1 } ;
SW3.GE2={ 32768+0565,0,32768+0565,128+2 } ;

1@根桥选举
由于设备启用STP进程往往存在差别且STP竞选过程需同时考虑实际网络情况,因此这里仅假定网络中较为稳定不存在波动情况。
为了简化STP选举过程,这里假定SW2和SW3优先启动比较。随后SW1随后启动。

1@:SW2和SW3启动后分别发送如下BPDU–
SW2.GE2={ 32768+57fb,0,32768+57fb,128+2 } ;
SW3.GE1={ 32768+0565,0,32768+0565,128+1 } ;

根据上述选举原则,很容易比较SW3的BPDU更优。SW3应当为根桥设备。

2@:第一次选举完成后
SW3.GE1周期性发布BPDU={ 32768+0565,0,32768+0565,128+1 } 。

SW2不在发布自身优先的BPDU而是转发来自根桥SW3的BPDU报文。此时的动作为SW2在GE2上不发布BPDU报文仅接收来自SW3的BPDU报文。
SW2在GE1上转发BPDU报文={ 32768+0565,20000,32768+57fb,128+1 }

SW2将来自根桥的BPDU报文填充(自己计算而来的 RPC 根路径开销),(自己的 BID 网桥ID)和(自己的 PID 端口ID)向其他端口转发。
同时SW.GE2也就称为了自身设备的 Root Port 根端口。

3@:假如此时SW1的STP进程启动完成。
依照上述两个步骤,这里比较RID很容易发现SW3是根桥。
这里从两个端口比较BPDU报文都能发现SW1自身为非根桥,SW1上的GE2为根端口。

2@根端口选举
在根桥选举完成后,SW1和SW2在非根端口发送BPDU报文。
Note:这里考虑的是理想情况,因为按照上文定义SW1很可能已经选举出结果而不会在发送BPDU报文。

SW1在GE1上转发BPDU报文={ 32768+0565,20000,32768+6cbd,128+1 }
SW2在GE1上转发BPDU报文={ 32768+0565,20000,32768+57fb,128+1 }

通过这个BPDU报文可以很容易发现SW2发送的BPDU报文更优,因此SW1的GE1上也不在发送BPDU报文。
最终结果:SW2的GE1为 DP 指定端口;SW1发现从GE1和GE2都能收到去往根桥的BPDU报文但GE2更优,因此将GE1作为 BP 阻塞端口而将GE2作为 RP 根端口。

点击此处回到目录

3.RSTP基本原理

3.1.基本内容

STP基本上已经完成二层破环的基本任务,但仍然面临以下问题:
1@:网络收敛慢。
原有下游的 Blocking 接口收到次级BPDU将其丢弃,最长需要等待 Max Age + 2*forwarding delay = 50s 时间才能进行网络的收敛。
本地 Blocking 端口感知本地 RP 失效后。需要等 2*forwarding delay =30s 时间才能进行网络的收敛。

改进措施
RSTP的 P/A 选举机制、AP 端口的转化(AP 端口过渡到DP端口,AP端口过渡到RP端口。)和 forward delay 的应用优化。

HW的一个STP优化机制是取消了 MAX Age 的20s端口 BPDU 缓存超时,而直接进入 listening 状态开始端口角色的切换。此时需要的时间为 2*forwarding delay =30s过渡到forwarding状态。
如果端口在 3*hello*TimerFactor 时间内未收到BPDU就认为端口失效。
在这里插入图片描述//stp timer-factor设定Hello Time的TimerFactor。默认为3。

2@:对拓扑改变发送 TCN BPDU 的场景区分不够明确,导致网络中存在无效的拓扑收敛过程。
改进措施
新增边缘端口和 TCN BPDU的发送情况明细规定。

RSTP/MSTP仅在如下场景下认为拓扑改变,发送 TC-bit BPDU:
@:端口从其他状态过渡到 forwarding 状态。
@:RP 根端口从 forwarding 状态过渡到 blocking/discarding 状态。客观上通常有其他端口成为 RP 端口过渡到 forwarding 状态。
@:边缘端口的状态改变不影响 TC-bit BPDU 的发送。

3@:复杂的端口状态。RSTP 将 STP 的 disable、block、learning 状态合并为 discarding 状态。

STP端口状态RSTP端口状态可能的端口角色
DisabledDiscardingDisabled Port
BlockingDiscardingAlternat Port/Backup Port
ListeningDiscardingRoot Port/Designated Port
LearningLearningRoot Port/Designated Port
ForwardingForwardingRoot Port/Designated Port

RSTP额外定义了 Alternat Portedged PortBackup Port
Alternat Port:RP 端口的备用端口,稳定状态位discarding。AP 端口是从两个接口收到同一个根桥的BPDU竞选失败者。
edged Port:边缘端口,通常配置于与终端连接场景。
Backup Port:DP 端口的备用端口,稳定状态为 discarding。通常仅用在自环场景或2个端口连接在同一个HUB场景下出现。BP 端口是从两个接口收到自己的BPDU竞选失败者。

4@:RSTP报文结构改变。

在这里插入图片描述Protocol Version Identifier:1字节,字段值改为0x02表示 RSTP。
BPDU Type:1字节,字段值改为0x02表示 RSTP。
BPDU Flags:1字节,新增bit位用于表示端口状态、端口角色和 P/A 选举标识。
version 1 Length:1字节,新增字段。

3.2.RSTP基本原理

BPDU flags
在这里插入图片描述TCA-bit:拓扑改变BPDU类型标识。继承于STP协议,在RSTP实际工作中该bit无实际意义。因为,RSTP中不存在 BPDU Type =0x80的 TCN BPDU。而且所有设备都可发送 TC 置位的 BPDU,无需由根桥生成其他设备转发。

对于STP来说,有 BPDU Type=0x00 表示配置BPDU,有 BPDU Type=0x80 表示 TCN BPDU。
而在RSTP中的 BPDU Type 仅有 0x02 表示 RSTP。严格意义上 RSTP 不存在配置 BPDU,而仅仅通过 BPDU flags 来表明 BPDU 的具体作用。

Agreement-bit:P/A 协商的回应标识,用于 AP 端口的快速切换到 forwarding 状态。
Forwarding-bit:forwarding状态标识。
Learning-bit:learning状态标识。

RSTP 将 STP 的5个端口状态从disable、blocking、listening、learning和forwarding缩减为discarding、listening和forwarding。但是总的转发时间保持不变。
@:在不考虑 RSTP 的各种快速收敛手段的前提下,端口最初保持 discarding 状态15s。在此期间周期性发送 Forwarding-bit =0 和 Learning-bit =0 的 RSTP BPDU。
@:随后端口保持在 Learnin 状态15s。此期间周期性发送 Forwarding-bit =0 和 Learning-bit =1 的 RSTP BPDU。
@:最终端口过渡到 Forwarding 状态。此期间周期性发送 Forwarding-bit =1 和 Learning-bit =1 的 RSTP BPDU。
总的转发时延仍然为 2*forward delay 时间。

Port Role-bits:标识自己的端口角色。

00:Unknown未知状态;
01:Alternate\Backup Port备份端口;
10:Root Port根端口;
11:Designated Port。

Proposal-bit:P/A 协商的请求标识,用于全双工 AP 端口快速切换到 forwarding 状态。
TC-bit:拓扑改变标识。接收交换机收到后将非边缘端口的MAC表进行老化。

3.2.1.RSTP的P/A协商

P/A协商:Proposal/Agreement。
前提
1@:RSTP的 P/A 协商只能工作在全双工链路上。因为半双工链路在同一时间只能单方向接收或发送数据流。在此种情况如果出现链路两端同时为 forwarding 状态,将很有可能出现短时环路。

在这里插入图片描述//stp point-to-point配置当前端口的链路类型。默认情况自动检测与端口相连的链路是否是点到点链路(全双工)。共享链路为半双工。

2@:只有 DP 端口处于中间过渡状态,才进行 P/A 选举。
3@:“只有” DP 端口发送 Proposal-bit BPDU,RP 端口响应 Agreement-bit BPDU才是完整的 P/A 协商。

自动换行
P/A协商的程序状态机
1@–proposing:DP 指定端口处于 discarding 或 learning 状态的时,设置该变量。同时向下游交换机传递 Proposal flag 置位的RST BPDU。

2@–proposed:收到 DP 指定端口发来的 proposal-bit BPDU的时候,设置该变量。该变量指示链路上的发送端口希望尽快的进入 forwarding 状态。

3@–sync:当 proposed 变量置位后,收到 proposal-bit BPDU的 RP 根端口会依次为自己的其他端口创建并设置 sync 变量。将所有不是边缘的 DP 指定端口转为 discarding 状态。

4@–synced:当端口完成转到 discarding 后,会设置自己的synced。Alternate、Backup 和边缘端口会马上设置该变量。根端口在所有其他端口的 synced 被设置后,根端口会设置自己的 synced 变量,然后回应 Agreement flag 置位的RST BPDU。同时自己的根端口转入 forwarding 状态。

5@–agreed:当 DP 指定端口接收到一个Agreement flag 置位的 RST BPDU 且 BPDU flags 的 Port Role-bit 字段是"根端口"时,设置该变量。具有 agreed 状态的 DP 指定端口将马上转入 forwarding 状态。·

@:这一过程详细描述了 P/A 协商的过程。简单来说为,DP 发送 Proposal-bit 置位BPDU。交换机 RP 接收后将其他“所有”端口临时阻塞,回应 Agreement-bit 置位BPDU。上游接收到 Agreement-bit 置位BPDU,迅速过渡到转发状态。下游依据情况继续进行 P/A 协商。
@:这里有一个省略的内容,也即交换机实际上需要接收 BPDU 的同时完成了端口角色的判断和切换。
@在 MSTP 中还存在一种增强型P/A协商机制。在此种状态下,DP 指定端口发送 Proposal-bit 置位BPDU的同时也会将 Agreement-bit 置位。下游设备接收到后,根端口直接转为 Forwarding 状态。其他程序动作保持一致。
在这里插入图片描述//stp no-agreement-check用于配置不进行 Agreement-bit 检查,使用普通的快速迁移机制。缺省情况下,端口使用增强的P/A协商机制。
@:DP 发送 Proposal-bit 置位 BPDU 并不仅发送一次,而是类似 STP 的TCN机制。STP 的根桥收到 TCN BPDU 后在 forwarding delay+Max age=35s持续发送 TC-bit 的配置BPDU。
DP 发送 Proposal-bit 置位 BPDU,如果未得到相应则持续至端口过渡到 forwarding 状态。
@P/A协商还有一个重要特性是在AP端口也会产生。
这一表达的含义是,自身 AP 端口收到来自对端发送 Proposal-bit 置位的次级 BPDU时,以 Agreement-bit 置位的更优BPDU进行相应。这通常意味着对端设备上 RP 端口失效。此时 AP 端口的对端设备将进行 DP 端口向 RP 端口的过渡,同时客观上端口也会经历 discarding 状态。

P/A协商实例
在这里插入图片描述此处以上图为例,进行 P/A 协商的介绍。RSTP 的相应参数选择默认值,因此在稳定状态下有上图所示的端口角色。将SW2和SW3之间链路up后,网络中随后发生P/A协商。
Note:这里在SW2和SW3之间借助HUB设备实现抓包,为了避免混乱请忽略这一细节问题。
并且由于链路up,SW2和SW3都发送 Proposal-bit 置位 BPDU。只是SW2不会响应SW3的 P/A 协商。此处不做说明。

1@:SW3也即0565开启 P/A 协商。
在这里插入图片描述其中BPDU Flags表明自己为 DP 端口,Proposal-bit 和 Agreement-bit 都置位(增强型 P/A 协商),端口状态为 discarding。

2@:SW2也即57fb回应 P/A 协商。
在这里插入图片描述其中 BPDU Flags 表明自己为 RP 端口,Agreement-bit 置位,端口状态直接过渡到forwarding。此时接口可以开始转发数据。

3@:SW3也即0565进行状态切换。
在这里插入图片描述其中BPDU Flags表明自己为 DP 端口,Agreement-bit 都置位(增强型 P/A 协商),端口状态直接过渡到forwarding。此时接口可以开始转发数据。
值得注意的是此时根桥发送了两次 TC-bit RSTP BPDU(后文进行介绍)。其他 BPDU Flags可自行分析。

SW2的剩余操作
1@:链路未up前,SW1也即6cdb为根桥。周期性转发 BPDU。在这里插入图片描述//BPDU Flags保持转发状态。
自动换行
2@:链路未up前,SW2也即57fb升级为根桥。开始转发来自根桥的BPDU。在这里插入图片描述//其中BPDU Flags表明自己为 DP 端口,Proposal-bit 和 Agreement-bit 都置位(增强型 P/A 协商),端口状态为discarding。
自动换行
3@:链路未up前,SW2也即57fb接收的是次级BPDU,且对端SW1的端口状态不为 RP 根端口。此时将不会触发 P/A 协商。在这里插入图片描述//持续发送 Proposal-bit 和 Agreement-bit 都置位的RSTP BPDU,端口角色保持 discarding 状态。
自动换行
4@:在经历一个forwarding delay后,SW2也即57fb过渡到 learning 状态。在这里插入图片描述//持续发送 Proposal-bit 和 Agreement-bit 都置位的RSTP BPDU,端口角色过渡到 learning 状态。
自动换行
5@:在经历一个 forwarding delay 后,SW2也即57fb过渡到 forwarding 状态。在这里插入图片描述//此时端口角色和状态都保持稳定状态,并且不在进行 P/A选举。

点击此处回到目录

3.2.2.RSTP的拓扑改变和新增端口状态

RSTP的拓扑改变

对于STP来说,有 BPDU Type=0x00 表示配置BPDU,有 BPDU Type=0x80 表示 TCN BPDU。
而在RSTP中的 BPDU Type 仅有 0x02 表示 RSTP。严格意义上 RSTP 不存在配置 BPDU,而仅仅通过 BPDU flags 来表明 BPDU 的具体作用。

在 RSTP 中检测拓扑是否发生变化只有一个标准:
一个非边缘端口迁移到 Forwarding 状态。

拓扑改变标准的底层逻辑个人浅谈
1@:生成树的本质在于二层破环。从逻辑上说如果网络本身不存在环路,那么端口的 down状态/discarding状态 明显不会影响网络。
2@因此重点在于考虑有环网络的 down 状态。 如果网络存在环路,则势必有端口角色处于 AP/BP 端口。
3@:网络中的 AP/BP 端口虽然为 up 状态,但在协议上处于 discarding 状态。也即 AP/BP 端口的 down 也不会生成树的环路,反而促进了网络无环。
4@:因此,重要的是 RP 端口的 down 状态。对于有环网络的 RP 端口故障,AP 端口自动升级为 RP 端口立刻过渡到 forwarding 状态进行转发。此时仅需刷新 MAC 等相应表项即可。
自动换行
Q:“一个非边缘端口迁移到 Forwarding 状态”意味着什么
A:网络中新接入了设备或新增加了链路或者有AP端口补充了网络。在这些情况下,势必要进行MAC的重新学习。并且还需要强调的是,拓扑改变用于刷新表项防止数据帧黑洞,与生成树状态形成无关。

1@:首先清空状态发生变化的端口上学习到的MAC地址。

2@:同时在 TC While Timer=2*hello time 定时器的时间内不断向非边缘端口发送 TC-bit 的 RST BPDU。

3@:其他设备收到 TC-bit 的 RST BPDU 后,清空其他所有端口学习到的MAC地址(除了收到RST BPDU的端口)。同时也会从自己的非边缘端口和根端口(在 TC While Timer=2*hello time 定时器的时间内)向外泛洪 TC-bit 置位的 RST BPDU。注意,这里发送的 TC-bit 置位的 RST BPDU 指的不是由根桥发送而非根桥转发的 STP 模式。而是发现拓扑改变的交换机直接产生并发送 TC-bit 置位的 RST BPDU。

在这里插入图片描述//SWE直接产生并发送 TC-bit 置位的 RST BPDU,其他交换机进行转发在全网泛洪。

自动换行
RSTP的 AP 备份端口
前文的《3.1.基本内容》我们提到 RSTP 新定义的 Alternat Port 备份端口可用于加速 RSTP 的收敛。这一行为可分为 AP—>RP 和 AP—>DP 两种场景
AP—>RP
在这里插入图片描述在如上图的稳定情况下,如果SW1的RP链路失效。此时其AP端口过渡到RP端口,端口状态从 discarding 状态立刻迁移到 forwarding 状态。

AP—>DP
在这里插入图片描述在如上图的稳定情况下,如果SW2的RP链路失效。此时其DP端口过渡到RP端口,端口状态首先从 forwarding 状态立刻迁移到 discarding 状态。在此种情况下,会触发 P/A 协商最终过渡到 forwarding 状态。

@:由于 SW1 的 AP 端口需要过渡到 DP 端口,因此实际上 SW1 也会主动发起一次 P/A 协商。
@:根据 RSTP 拓扑改变的定义,此时由 SW1 的 GE0/0/1 发送 TC-bit RSTP BPDU。SW2接收后进行转发泛洪处理。

自动换行
RSTP的边缘端口
1@:可以节省30S收敛时间(端口直接进入到forwarding)。
2@:边缘端口的 up/ down不会触发拓扑改变。
3@:边缘端口在P/A协商过程中不会被discarding。
4@:边缘端口收到 TC-bit BPDU 后不会处理。
5@:边缘端口不会发送 TC-bit BPDU。

但是需要注意的是:
边缘端口会发送 BPDU以防止下行网络出现环路;
边缘端口会收到 BPDU会丢弃边缘端口角色转变为普通端口;
在自环情况下,端口的forwarding会造成瞬时环路。

在这里插入图片描述//stp edged-port用于将端口配置为边缘端口。

3.3.RSTP的生成树优化策略

根端口保护
对于使能根保护功能的指定端口,其端口角色只能保持为指定端口。端口收到优先级更高的BPDU时,端口状态将进入 Discarding 状态不再转发报文。在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的BPDU,端口会自动恢复到正常的 Forwarding 状态。
在这里插入图片描述//stp root-protection,通常用于在非根端口下配置根端口保护。

TC保护
在指定时间内,设备只会处理stp tc-protection threshold指定的最大数量的拓扑变化报文。对于其他超出该数量的 TC BPDU,待超时后做相应处理。
在这里插入图片描述//stp tc-protection,配置生成树的tc保护。默认每 hello time 处理1个 TC BPDU。

边缘端口的 BPDU 保护
边缘端口配置BPDU保护功能后,如果边缘端口收到BPDU报文,边缘端口将会被shutdown,边缘端口属性不变。
在这里插入图片描述//stp bpdu-protection,配置边缘端口的 BPDU 保护。

@在这里插入图片描述//error-down auto-recovery cause bpdu-protection interval ,配置端口因 BPDU 保护 down 的恢复时间。
@:这里暗含的意思为,边缘端口也会发送 BPDU。主要用于防止边缘端口下连接的网络发送环路。

BPDU 过滤
在这里插入图片描述//stp bpdu-filter,配置端口的 BPDU 过滤。通常在边缘端口配置,用于此时端口既不发送 BPDU,也不接收 BPDU。防止 BPDU 报文发送到其他网络,引起其他网络产生震荡。

STP的环路保护
使能环路保护功能的端口如果接收不到 BPDU 报文(链路错包,拥塞,短时时延等),该端口不会迁移到 Forwarding 状态而是一直保持在 Discarding 状态,直到根端口或 AP 端口收到 BPDU,端口状态才恢复正常为 Forwarding 状态。这样可以避免产生环路。
在这里插入图片描述//stp loop-protection,配置STP的环路保护。

点击此处回到目录

4.MSTP基本原理

RSTP的缺点
RSTP 经 STP 改进而来,已经有了较大的优化,可以在保证二层无环的情况下大大提高收敛速度。RSTP 的显著缺点在于链路的闲置浪费和流量的次优路径。

RSTP 环路的本质在于链路冗余,RSTP破环的手段在于将端口 blocking/discarding 阻塞。那么有没有一种手段可以在既保证链路冗余的情况下,又防止链路的浪费实现链路的负载?

尽管听起来非常的矛盾@_@,但确实是一种网络优化需求。

这种技术就是 MSTP:基于 instance实例 构建生成树,每个 instance实例 下生成树保证链路无环的同时保证整个网络无环。

这里准确的描述应当是基于域(实例域)构建生成树。每个域可以有多个实例。每个实例又与 vlan list 相对应。并且由于整个网络基于 instance 实例 构建生成树,BPDU很有可能将不局限于一方发送一方接收并转发。而是链路两方都发送,两方都接收并转发。
注意以上 BPDU 收发特点仅局限于 MST 域中。域间行为与 RSTP 一致仍然是一方发送,一方仅监听。
有时 MSTP 也可称为基于VLAN构建生成树。Cisco 有私有的 PVST 协议可基于每个vlan构建生成树。
MSTP 和 RSTP 的其余基本原理保持一致。

MSTP 的实现目标:域内无环和域间无环。

4.1.基本内容及原理

相关术语
CST:Common SpanTree,公共生成树。
IST:Internal SpanTree,内部生成树。
CIST:Common Internal SpanTree,公共内部生成树。通常指的是默认生成树,或者 instance 0 实例组成的生成树。
MSTI:Mulit-SpanTree Instance,多生成树实例。基于实例创建不同的生成树。

RegRoot:Region Root,域根。
ERPC:External Root Path Cost,外部根路径开销。
IRPC:Internal Root Path Cost,内部根路径开销。

4.1.1.MSTP的网络模型

MSTP 的网络示例
在这里插入图片描述//如上图展示了一个具有5个区域的 MSTP 网络。其中,MSTP 的实现目标:域内无环和域间无环。

在这里插入图片描述域内:通过相应域名、修订级别和vlan实例映射表(实例摘要)来相互识别为同一个域。在同一个域内,依照 RSTP 相应逻辑进行域根选举和基于实例的端口破环。此时构成 IST内部生成树。

域间:将每个域虚化成相应的逻辑点可组成 CST 公共生成树。由于每个域的特征信息(域名、修订级别和vlan实例映射表)不同,域间通过 CIST 公共内部生成树 来进行识别和破环。每个域的 instance 0 实例0 共同组成了 CIST 公共内部生成树。

@:此时每个域到总根所在域的开销为 ERPC,同一个域中的设备的 ERPC 保持一致。
@:每个域中到域所在根桥的开销为 IRPC。当然由于 instance实例 的不同,每个域应当基于实例有多个 IRPC。

因此 MSTP 逻辑中有三种根桥:总根、域根和域中实例根桥。总根和域根在 CIST 公共内部生成树中分别指代了域间破环依据和域代表。域中实例根桥则是域中基于实例破环的依据。

域根本身是域中 instance 0 的根桥,因此上述概念在某种程度上具有重叠性。

MSTP 的选举和端口角色
为了实现以上效果,MSTP 选举相比于 STP/RSTP 多了2个步骤
1@比较总根的 RID,越小越优先。
2@比较到总根的 ERPC,越小越优先。
3@:比较域根的 RID,越小越优先。
4@:比较到域根的 IRPC,越小越优先。
5@:比较发送设备 BID 桥ID,越小越优先。
6@:比较发送端口 PID 端口ID,越小越优先。
7@:比较接收端口 PID 端口ID,越小越优先。(HUB场景下可能会用到)

为了域间无环,MSTP 新增了两种端口角色
Master Port:每个域到达总根所在域的最短端口,也即每个域具有 ERPC 最小的端口。
Region Edge Port:域边缘端口,每个域连接其他非总根所在域的端口。

1@:如果将每个域都虚化成逻辑点,总根所在域就是根桥。Master Port就相当于非根桥的 Root Port 根端口。域边缘端口就相当于 Designed Port 指定端口。
2@:只有在非 instance 0 中,才会出现 Master Port 和 Region Edge Port。

4.1.2.MSTP的报文结构

MSTP 的报文示例
在这里插入图片描述Protocol Version Identifier:1字节,MSTP 默认为0x03。
BPDU Type:1字节,MSTP 默认为0x02,与 RSTP 保持一致。

Protocol Version IdentifierBPDU Type
STP0x000x00/0x80
RSTP0x020x02
MSTP0x030x02

设备可通过如上字段来区分生成树的具体类型。

Message Age:2字节,在 MSTP 中指的是经过 MSTI域 的个数。与 STP/RSTP 类似,该字段不可更改。

除 MST Extension 外,其他字段基本与 RSTP 保持一致。但是相应的字段表示的是域间内容。
比如RID表示总根,BID表示域的公共根。RPC实际表示到总根所在域的ERPC。此时的端口状态用于 CIST 防环或者域间防环。

MST Extension

由 Version 3 Length 字段(2字节)标识的 MST 的扩展长度,这里表明为112字节。有时也可将该字段算入 MST Extension 字段中,此时总长114字节。

MST Config ID format selector:1字节,格式选择器。默认为0,目前不可更改。
MST Config name:32字节,域名。与构建实例域相关。默认取设备MAC。

该字段使用 ASCII码 进行编译。例如在这里插入图片描述//test 的 ASCII码 为0x74657374。

MST Config revision:2字节,修订级别。与构建实例域相关。默认为0。
MST Config digest:16字节,生成树摘要。与构建实例域相关。

只有当以上4个字段(格式选择器、域名、修订级别和签名)完全一致时,才能建立同一个实例域。
在这里插入图片描述//display stp region-configuration用于查看mstp的域配置。其中未指定的vlan会自动归入 instance 0中。
自动换行
MST Config digest 字段反应的是 Instance ID 和 vlan list 之间的映射关系。由相应的MD5算法计算而来。因此 Instance 和 vlan 之间的映射必须完全一致,既不能错误也不能缺少。
在这里插入图片描述//stp config-digest-snoop。如果两台设备的域名、修订级别和 VLAN 映射表都一致,但是由于BPDU报文密钥不一致导致不能互通,则可执行本命令使得华为设备的BPDU报文与其他制造商设备的BPDU报文互通。

CIST Internal Root Path Cost::4字节,公共内部生成树的内部根路径开销。反映的是到域根的 RPC。
CIST Bridge Identifier:8字节,公共内部生成树的桥ID。由2字节的优先级和6字节的MAC组成,类似于 RSTP 的 RID 和 BID。
CIST Remaining hops:1字节,剩余下一跳。与 RSTP 报文中 Message Age 字段概念一致,用于反映 BPDU 报文到达根桥/域根经过交换机的个数。但是 Remaining hops 计数从20开始倒数,Message Age 字段从0开始计数。这样的设计方式使得其可以在根桥处调整 STP 网络的大小。

在这里插入图片描述//stp max-hops,在根桥处配置 BPDU 报文经过的个数。MSTP 工作模式下,Message Age 字段始终取0。

以上 MST Extension 字段实际上反映的是域中 instance 0 的相关信息。

MST Extension–MSTI
在这里插入图片描述MSTI flags:1字节,MSTI 标志位。与 RSTP 中表示的含义相同,只是此处表示的基于实例的标识。
Priority+MSTID:2字节,主要反映实例中根桥的优先级和实例ID。
Regional Root:6字节,基于实例的根桥MAC。
IRPC:4字节,基于实例到实例根桥的RPC。
BID Priority:1字节,基于实例的网桥优先级。
PID Priority:1字节,基于实例的端口优先级。

BID Priority 和 PID Priority 都只有1字节,因此相当于分别配置值的 1/4096 和 1/16 。
在这里插入图片描述//stp instance 10 priority,基于实例配置优先级。在这里插入图片描述//stp instance 10 port priority,基于实例配置端口优先级。

Remaining hops:1字节,剩余下一跳。反映的是基于实例的可途径下一跳。

需要注意的是:当 MSTP 的配置参数完全使用默认参数时,某些参数的取值将偏离以上介绍。此时系统认为其只是携带了默认 MST Extension 字段的 RSTP。比如此时 Remaining hops 始终取值为默认20,并且 Message Age 字段从0开始计数。

尤其当网络中存在 MSTP、RSTP 或 STP 的混合场景时,BPDU 报文情况也将有所不同。更别提不同厂家的实现效果差异。

在这里插入图片描述//MSTP 报文字段总结如上图所示。

点击此处回到目录

4.2.MSTP的域内选举

在这里插入图片描述这里以上图为例,进行 MSTP 域内基本工作过程的介绍

1@:同一个 MSTP 域要求域名、修订级别和vlan实例映射表(签名)完全一致。
2@:MSTP 基于实例构建生成树,每条链路上可能放行了不同vlan。因此每条链路的双方都会发送 BPDU。
3@:MSTP 的域内选举主要是根据 MST Extension 字段来交互信息。
4@:MSTP 基于实例构建生成树,也意味着基于 vlan 构建生成树。因此,端口需要放行相应 vlan 才可生效。这里为简化说明,将所有涉及到的 vlan 进行放行。
5@MSTP 的域内选举的基本过程与 RSTP 完全相同,区别只在于多了相应的实例概念。

1@:SW1、SW2和SW3分别具有上图描述的不同MAC地址,并在不同实例中具有上图指定优先级。
2@:SW1、SW2和SW3的其余STP参数采用默认值。
3@:设备BPDU可用优先级向量{ RID,RPC,BID,PID } 进行表示。
其中 { CIST-RID,CIST-IRPC,CIST-BID,CIST-PID } 表示域内的 instance0 生成树信息, { MST-RID,MST-IRPC,MST-BID,MST-PID } 表示域内的 非instance0 生成树信息
4@:设备初始状态都认为自己为根桥因此分别具有如下BPDU报文–
SW1.GE1<—>SW2.GE1

SW1.GE1SW2.GE1
CIST/MST0{32768+6cdb,0,32768+6cdb,128+1}{32768+57fb,0,32768+57fb,128+1}
MST10{0,0,0,8*16}{8*4096,0,8*4096,8*16}
MST20{8*4096,0,8*4096,8*16}{0,0,0,8*16}
MST30{8*4096,0,8*4096,8*16}{8*4096,0,8*4096,8*16}

SW1.GE2<—>SW3.GE2

SW1.GE2SW3.GE2
CIST/MST0{32768+6cdb,0,32768+6cdb,128+2}{32768+0565,0,32768+0565,128+2}
MST10{0,0,0,8*16}{8*4096,0,8*4096,8*16}
MST20{8*4096,0,8*4096,8*16}{8*4096,0,8*4096,8*16}
MST30{8*4096,0,8*4096,8*16}{0,0,0,8*16}

SW2.GE2<—>SW3.GE1

SW2.GE2SW3.GE1
CIST/MST0{32768+57fb,0,32768+57fb,128+2}{32768+0565,0,32768+0565,128+1}
MST10{8*4096,0,8*4096,8*16}{8*4096,0,8*4096,8*16}
MST20{0,0,0,8*16}{8*4096,0,8*4096,8*16}
MST30{8*4096,0,8*4096,8*16}{0,0,0,8*16}

由于 MSTP 在域中/实例中的选举逻辑与 STP/RSTP 完全相同,因此在 MSTP 收敛完成后很容易得出如下结果
CIST/MST0:使用默认参数进行比较。SW3作为根桥,SW1.GE1为 AP 端口被 discarding,其他端口为 RP/DP 处于 forwarding。
MST10:SW1作为根桥,SW2.GE2为 AP 端口被 discarding,其他端口为 RP/DP 处于 forwarding。
MST20:SW2作为根桥,SW1.GE2为 AP 端口被 discarding,其他端口为 RP/DP 处于 forwarding。
MST30:SW3作为根桥,SW1.GE1为 AP 端口被 discarding,其他端口为 RP/DP 处于 forwarding。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
SW1.GE1<—>SW2.GE1

SW1.GE1SW2.GE1
CIST/MST0{32768+0565,0,32768+6cdb,128+1}{32768+0565,0,32768+6cdb,128+1}
MST10{0,0,0,8*16}{0,20000,8*4096,8*16}
MST20{0,20000,8*4096,8*16}{0,0,0,8*16}
MST30{0,20000,8*4096,8*16}{0,20000,8*4096,8*16}

SW1.GE2<—>SW3.GE2

SW1.GE2SW3.GE2
CIST/MST0{32768+0565,0,32768+57fb,128+2}{32768+0565,0,32768+57fb,128+2}
MST10{0,0,0,8*16}{0,20000,8*4096,8*16}
MST20{0,20000,8*4096,8*16}{0,0,8*4096,8*16}
MST30{0,20000,8*4096,8*16}{0,0,0,8*16}

SW2.GE2<—>SW3.GE1

SW2.GE2SW3.GE1
CIST/MST0{32768+0565,0,32768+0565,128+2}{32768+0565,0,32768+0565,128+1}
MST10{0,20000,8*4096,8*16}{0,20000,8*4096,8*16}
MST20{0,0,0,8*16}{0,20000,8*4096,8*16}
MST30{0,20000,8*4096,8*16}{0,0,0,8*16}

4.3.MSTP的多域实例

***这里以下图为例进行MSTP实例的介绍。***
这里省略了报文比较发送的具体细节。
在这里插入图片描述//配置上仅以SW1为例简介相关配置。

sysname SW1
#
vlan batch 10 to 40
#
stp instance 10 priority 0
#
stp region-configuration
 region-name test
 revision-level 1
 instance 10 vlan 10 to 19
 instance 20 vlan 20 to 29
 instance 30 vlan 30 to 39
 active region-configuration
#
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094
#
interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 2 to 4094
#

其中的关键配置在于:
@:更改 STP 工作模式为 mstp。这里默认为 mstp。
@:全局需要创建相应vlan,并且需要端口放行相应vlan。如果端口未放行相应vlan,则不在该端口进行相应实例的生成树构建。
@:region-configuration 中如果更改了域配置,则需要每次都进行 active region-configuration 以使得域配置生效。

MSTP 的选举原则
1@比较总根的 RID,越小越优先。
2@比较到总根的 ERPC,越小越优先。
3@:比较域根的 RID,越小越优先。
4@:比较到域根的 IRPC,越小越优先。
5@:比较发送设备 BID 桥ID,越小越优先。
6@:比较发送端口 PID 端口ID,越小越优先。
7@:比较接收端口 PID 端口ID,越小越优先。(HUB场景下可能会用到)

MSTP 工作过程
1@:MSTP 首先进行总根选举。这一选举过程也即全网进行 CIST/instance 0 的选举。
在此例中,全网对 instance 0 使用默认配置。则 SW4 称为总个网络中的总根。

@:总根同时也兼任所在域的域根。

2@:总根选举完成后,此时可进行域根选举和域间破环。

@:域根在选举时,首先比较ERPC。
这里SW1和SW3收到的BPDU中ERPC都为0,因此需要进一步判断。
@:域根总是为靠近总根所在域的域边缘端口。
@:域根为域边缘端口中 BID 小者。
自动换行
这里的描述通常可进行这样现时表达:SW2上进行 instance 0 优先级的更改,(在不大于总根RID前提下)不影响其所在域的域根RegRoot ID 选举结果。
(有多个域边缘交换机具有相同的ERPC,需要进一步判断域边缘交换机 BID的情况下)在保证总根不变的情况下,stp instance 0 priority 仅在域边缘交换机有效影响域根选举。
自动换行
在下图中,则有这样结果。在这里插入图片描述//倘若为上图所示 MSTP 网络,SW6.GE3收到的 ERPC 为0明显优于该区域其他设备接受 BPDU 中的 ERPC值。此时 SW5 和 SW6 组成的域在网络收敛完成后整体具有 ERPC=0+20000,SW5也将认为具有 ERPC=0+20000。
并且 SW5 和 SW6 组成域可的域根为 SW6。在这里插入图片描述//总根SW1,域根SW6。

为简化逻辑,可将域间逻辑图简化为下图:
在这里插入图片描述
由于 SW3 比 SW1 的BID更小,SW3被选举为域根。同时SW1上的 GE3 将被 discarding。

当然如果在 SW1 上 stp instance 0 priority 手动调节,将有可能使 SW1 称为域根。
并且按照前文所说,如果SW2不能通过 stp instance 0 priority 被调整为总根。那么在SW2上,该命令将不会影响域根选举了。
注意:但是该命令还是会影响域内 instance 0 的 AP 端口角色的状态。例如在上粉红色区域的 SW4 上配置该命令,将影响SW2.GE2<—>SW4.GE1链路的哪一端成为 AP 端口被 discarding。

3@:在完成总根,域根选举后,可进行域内相应端口状态的切换。

4.3.1.STP的兼容性问题

@:MSTP 将其他与本域配置不同的设备认为是一个新的 MSTP 域。
@:MSTP 仍然会根据与 STP/RSTP 字段重叠部分选举出正确的根桥/总根。
@:MSTP 如果探测到下游设备未启用 MSTP,则可能自动将报文降级成对应模式后发送。
在这里插入图片描述//例如在上图中,MSTP 认为根桥为 SW1。
在这里插入图片描述并且SW5收到来自上游的 BPDU为 STP 模式
在这里插入图片描述//由于 SW5 从两个端口收到的 BPDU 内容是相同的。此时 SW5 通过比较接受端口的 PID,认为 SW5.GE1 为 RP 根端口。
也通过在 SW5 上手动配置到根桥开销来调整被 blocking/discarding 的端口。

点击此处回到目录

更新

个人能力有限,如有疑问欢迎留言指导。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值