1. MSTP基础概念
1.1 单个生成树弊端
1.1.1 部分VLAN路径不通
- 如图所示,使用一台3700连接终端网段,上行使用两条链路连接两台5700。
- 配置VLAN2通过两条链路上行,配置VLAN3只通过一条链路上行。
- 为了解决VLAN2的环路,需要运行生成树,在运行单个生成树的情况下,假设3700与5700-B相连的端口成为预备端口,进入Discarding状态。此时,VLAN3的路径被断开,就无法上行到5700-B。
1.1.2 无法使用流量分担
- 如图所示,使用一台3700连接终端网段,上行使用两条链路连接两台5700做双机热备份,并实现流量分担。
- 为了实现双机热备份,需要在3700上配置两条上行链路为Trunk链路,配置两条链路上都允许通过所有VLAN,两条5700之间的链路也配置为Trunk链路,允许通过所有VLAN。
- 将VLAN2的三层接口配置在5700-A上,将VLAN3的三层接口配置在5700-B上。
- 我们希望VLAN2和VLAN3分别使用不同的链路上行到相应的三层接口,可是如果网络中只有一个生成树,3700和两台5700所形成的环路就会被打开,例如,3700连接到5700-B的端口成为预备端口(Alternate Port)并处于Discarding状态,则VLAN2和VLAN3的数据都只能通过一条上行链路上行到5700-A,不能实现流量分担。
1.1.3 次优二层路径
- 如图所示,3700和两台5700相连的链路配置为Trunk链路,允许通过所有VLAN,两台5700之间的链路也配置为Trunk链路。允许通过所有VLAN。
- 运行单个生成树之后,环路被打开,VLAN2和VLAN3都直接上行到5700-A。
- 在5700-A上配置VLAN2的三层接口,在5700-B上配置VLAN3的三层接口,则VLAN3到达三层接口的路径就是次优的,最优的路径应当是直接上行到5700-B。
1.2 MSTP解决方案——多生成树实例
- MSTP允许将一个或多个VLAN映射到一个多生成树实例(MST Instance)上,MSTP为每个MST Instance单独计算根交换机,单独设置端口状态,即在网络中计算多个生成树。
- 每个MST Instance都使用单独的RSTP算法,计算单独的生成树。
- 每个MST Intance都有一个标识(MSTID),MSTID是一个两字节的整数。
- VRP平台支持16个MST Instance,MSTID取值范围为0~15,默认所有VLAN映射到MST Instance 0。
- 本例中,在网络中配置两个MST Instance,VLAN2映射到MST Instance 1,VLAN3映射到MST Instance 2。
- 通过修改交换机上不同MST Instance的交换机优先级,可以将不同的交换机设置成不同的MST Instance的根交换机。
- 本例中,设置5700-A为MST Instance 1的根交换机,设置5700-B为MST Instance 2的根交换机。
- 启用了多个MST Instance之后,可以看出,VLAN2的数据直接上行到5700-A,VLAN3的数据直接上行到5700-B。如此,单生成树的弊端:流量分担,某些VLAN路径不可达,二层次优路径等问题都可以得到解决。
1.3 MST配置表
- 为了在交换机上标识VLAN和MST Instance的映射关系,交换机维护一个MST配置表(MST Configuration Tbale)
- MST配置表的结构是4096个连续的两字节元素组,代表4096个VLAN,第一个元素和最后一个元素均设置为0,第二个元素表示VLAN 1映射到的MST Instance的MSTID,第三个元素表示VLAN 2映射到的MST Instance的MSTID,以此类推,倒数第二个元素(4095个元素)表示VLAN 4094映射到的MST Instance的MSTID。
- 交换机初始化时,此表格所有字段设置为全0,表示所有VLAN映射到Instance 0.
1.4 MST区域
- MSTP允许一组相邻的交换机组成一个MST区域(MST Region)。同一个区域的交换机有着相同的VLAN到MST Instance的映射关系。
- 除了Instance 0之外,每个区域的MST Instance都独立计算生成树,不管是否包含相同的VLAN,不管VLAN是否通过区域间链路,区域间的生成树计算互不影响。
1.5 MST配置标识
- 交换机通过MST配置标识(MST Configuration Identifier)来标识自己所在的区域。
- MST配置标识被封装在交换机相互发送的BPDU中, 如图所示,MST配置标识的数据结构包括四部分,只有四部分设置都相同的相邻交换机才能被认为是在同一个区域中。
- Configuration Identifier Format Selector:配置标识格式选择符,长度为一个字节,固定设置为0.
- Configuration Name:配置名称,也就是交换机的MST域名,长度为32字节。每个交换机都配置一个MST域名,默认为交换机的MAC地址。
- Configuration Digest:配置摘要,长度为16字节。相同区域的交换机应当维护相同的VLAN到MST Instance的映射表,可是MST配置表太大(8192字节),不适合在交换机之间相互发送,此字段是使用MD5算法从MST配置表中算出的摘要信息。
- Revision Level:修订级别,长度为两个字节,取值范围为全0。由于Configuration Digest是MST配置表的摘要信息,因此有很小的可能会出现MST配置表不同但摘要信息却相同的情况,这会导致本来不在同一区域的交换机被认为在同一区域中,此字段是一个额外的标识字段,建议不同的区域使用不同的数值,以消除上述可能产生错误的情况。
1.6 MST基本配置
1.7 MST高级配置
- MSTP工作模式
- 主用/备用交换机
- MSTP最大跳数
- 调整时间参数
- 网络直径与时间参数的关系
- 边缘端口保护
- 根交换机的指定端口保护
- 环路功能保护
- TC-BPDU保护功能
2. MSTP进阶概念
2.1 MSTP域
MST域是多生成树域(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。同一个MST域的设备具有下列特点:
- 都启动了MSTP
- 具有相同的域名
- 具有相同的VLAN到生成树实例映射配置
- 具有相同的MSTP修订级别配置
所谓实例就是针对一组VLAN的一个独立计算的STP。通过将多个VLAN捆绑到一个实例,相对于每个VLAN独立计算来说,可以节省通信开销和资源占用率。MSTP各实例的计算过程相互独立,使用多个实例可以实现物理链路的负载均衡。当把多个相同拓扑结构的VLAN映射到一个实例之后,这些VLAN在端口上的转发状态取决于该端口在对应MSTP实例中的状态。
2.2 CST/IST/CIST/总根/主桥
- CIST:公共和内部生成树CIST,是通过STP或RSTP协议计算生成的、连接一个交换网络内所有交换设备的单生成树。
- 总根是整个网络中优先级最高的网桥,即为CIST的根桥。
- 拓扑中,MST域内的红线和MST域间的蓝线共同组成了CIST。CIST的根桥为MST Region1中的S1。
- CST:公共生成树CST(Common Spanning Tree),是连接交换网络内所有MST域的一棵生成树。
- CST就是这些节点通过STP或RSTP协议计算生成的一棵生成树。
- 拓扑中,由蓝线组成CST。CST的根即为MST Region1。
- IST:内部生成树IST(Internal Spanning Tree)是各MST域内的一棵生成树。
- MST域内每颗生成树都对应一个实例号,IST的实例号为0。实例0无论有没有配置都是存在的,没有映射到其他实例的VLAN默认都会映射到实例0,即IST上。
- IST是CIST在MST域中的一个片段。
- 拓扑中,由红线组成IST。
- 主桥(Master Bridge):也就是IST Master,它是域内距离总根最近的交换设备。
- 如果总根在MST域中,则总根为该域的主桥。
- 拓扑中,Master桥为黄色的网桥,即为S1/S4/S7。
- 构成单生成树SST(Single Spanning Tree)有两种情况:
- 运行STP或RSTP的交换设备只能属于一个生成树。
- MST域中只有一个交换设备,这个交换设备构成单生成树。
- 拓扑中没有给出实例。
2.3 MSTI/MSTI域根
MSTI
- 一个MST域内可以存在多颗生成树,每颗生成树都称为一个MSTI。MSTI域根是每个多生成树实例的树根。域中不同的MSTI有各自的域根。
- MSTI之间彼此独立,MSTI可以与一个或者多个VLAN对应。但一个VLAN只能与一个MSTI对应。
- 每一个MSTI对应一个实例号,实例号从1开始,以区分实例号为0的IST。
- 拓扑中,VLAN2映射到实例2,即MSTI 2,VLAN4映射到实例4,即MSTI 4。
MSTI域根
- MSTI域根是每个MSTI上优先级最高的网桥,MST域内每个MSTI可以指定不同的根。
- 拓扑中,假设S9在MSTI 2中优先级最高,所以S9为MSTI 2中的域根,假设S8在MSTI 4中优先级最高,所以S8为MSTI 4中的域根。
2.4 MSTP端口角色
- MSTP在RSTP的基础上新增了2种端口,MSTP的端口角色共有7种:根端口、指定端口、Alternate端口、Backup端口、边缘端口、Master端口和域边缘端口。
Master端口
- Master端口是MST域和总根相连的所有路径中最短路径**上的端口,它是交换设备上连接**MST域到总根的端口。
- Master端口是域中的报文去往总根的必经之路。
- Master端口是特殊的域边缘端口,Master端口在CIST上的角色是Root Port,在其它各实例上的角色都是Master端口。
拓扑中,S7面向Region 1的端口为Master口。
域边缘端口MST域内网桥和其他MST域或者STP/RSTP网桥相连的端口为域边界端口。
- 拓扑中,S8面向Region 2的端口为域边界端口。
- 由于网桥在不同MSTI上可以具有不同的角色,所以网桥端口在MSTI上可能有不同的角色。唯一例外的是Master端口,该端口在所有MSTI上的角色都相同,都为Master端口。
3. MSTP报文结构
目前MSTP的BPDU报文存在两种格式:
- Dot1S:IEEE802.1S规定的报文格式
- legacy:私有协议报文格式
采用的端口收发MSTP报文格式可配置(STP Compliance)功能,能够实现对BPDU报文格式的自适应
无论是域内的MST BPDU还是域间的,除MST专有字段,其它消息和RST BPDU相同:
- RST BPDU中的Root ID字段在MSTP中表示CIST中的总根ID。
- EPC字段在MSTP中表示CIST外部路径开销,即发送此BPDU的网桥所属的域距离总根所属的域的CST路径开销。
- Bridge ID字段在MSTP中表示CIST域根ID。(其实所谓的CIST域根就是主桥,即IST Master)
- Port ID字段在MSTP表示MSTP中CIST指定端口ID。
- MST专有字段:
- Version 3 Length,Version3 BPDU的长度,用于对接收到的BPDU进行校验。
- MST Configuration Identifier,MST配置标识,表示MST域的标签信息,包含4个字段。标识自己所在的区域。MST配置标识包括四部分数据结构,只有四部分设置都相同的相邻交换机才被认为是在同一个区域中。
- Format Selector:配置标识格式选择符,长度为一个字节,固定设置为0。
- Name:配置名称,也就是给交换机的MST域名,长度为32字节。每个交换机都配置一个MST域名,默认为交换机的MAC地址。
- Digest:配置摘要,长度为16字节。相同区域的交换机应当维护相同的VLAN到MST Instance的映射表,可是MST配置表太大(8192字节),不适合在交换机之间相互发送。此字段是使用MD5算法从MST配置表中算出的摘要信息。
- Revision Level:修订级别,长度为两个字节,默认取值为全0。由于Configuration Digest是MST配置表的摘要信息,因此有很小的可能MST配置表不同但摘要信息却相同的情况,这会导致本来不在同一区域的交换机认为在同一区域中,此字段是一个额外的标识字段,建议不同的区域使用不同的数值,以消除上述可能的错误的情况。
- CIST Internal Root Path Cost,CIST内部路径开销指从本端口到IST Master交换设备的累计路径开销。CIST内部路径开销根据链路带宽计算。
- CIST Bridge Identifier,CIST的指定交换设备ID,即发送此BPDU的交换机。
- CIST Remaining Hops,BPDU报文在CIST中的剩余跳数。用来限制MST的规模。从CIST域根(IST Master)开始,BPDU每经过一个网桥的转发,跳数就被减1;网桥丢弃收到的跳数为0的BPDU。
MSTI Configuration Messages(may be absent),MSTI配置信息。
- MSTI Flag,1个自己,第1位到第7位和RSTP定义的相同,第8位为Master标志位,表示该网桥是否为Master桥,取代RSTP中的TCA位。
- MSTI region Root ID,表示该MST实例的域根ID。
- MSTI IRPC,表示发送此BPDU的网桥到达MSTI域根的路径开销。
- MSTI Bridge Priority,发送此BPDU的网桥的优先级。
- MSTI Port Priority,发送此BPDU端口的优先级。
- MSTI Remaining Hops,定义同CIST剩余跳数,表示BPDU在该MST实例中剩余跳数。
4. MSTP拓扑计算
4.1 比较原则
MSTP拓扑计算基本原则
- MSTP将整个二层网络划分为多个MST域,各个域之间通过计算生成CST。域内则通过计算生成多颗生成树,每颗生成树都被称为是一个多生成树实例。其中实例0被称为IST,其它的多生成树实例为MSTI。MSTP同STP一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上MSTP的配置信息。
向量解释
- 根交换设备ID,根交换设备ID用于选择CIST中的根交换设备(即选举总根和IST Master)。根交换设备ID = Priority(16bits) + MAC(48bits)。其中Priority为MSTI0的优先级。
- 外部路径开销(ERPC),从CIST的域根到达总根所在域的外部路径开销。MST域内所有交换设备上保存的外部路径开销相同。若CIST根交换设备在域中,则域内所有交换设备上保存的外部路径开销为0。
- 域根ID,域根ID用于选择MSTI中的域根。域根ID = Priority(16bits) + MAC(48bits)。(注意域根跟普通的STP或者MSTP域内的根桥是不一样的,域根指的是主桥,即IST Master)
- 内部路径开销(IRPC),本桥到达域根的路径开销。
- 指定交换设备,发送该BPDU的网桥。
- 指定端口,指定交换设备上同本设备上根端口相连的端口。Port ID = Priority(4位) + 端口号(12位)。端口优先级必须是16的整数倍。
- 接收端口,接收到BPDU报文的端口。Port ID = Priority(4位) + 端口号(12位)。端口优先级必须是16的整数倍。
- 如果端口接收到的BPDU内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。
4.2 CST计算
CST计算
- CST和IST计算方式和RSTP类似。在进行CST计算时,将会把MST域看做逻辑上的一个网桥,其中网桥ID为IST域根的ID。
CIST的比较向量为{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID},但是在CST的计算中,比较向量为{总根,外部路径开销,域根ID,指定端口ID,接收端口ID}。
拓扑描述假设网络中S1为Region1的域根,S4为Region2的域根,S7为Region3的域根。S1优先级最高,S4优先级最低,且各个路径开销相同。(也就是说,先在MST域内选举域根)
- 初始时,每个域被看做一个网桥,网桥ID为域根ID。每个域向其他域发送以该域根为总根的BPDU,外部开销为0。
- 经过RSTP计算,可以确定S1为总根。
- 经过外部路径开销,可以确定每个域根面向Region1的端口为Master端口。
- 经过比较域根ID优先级,可以确定域边界端口的角色。
4.3 IST计算
IST计算
- CST和IST计算方式和RSTP类似。在每个MST域内MSTP通过计算生成IST,CST和IST构成了整个交换设备网络的CIST。
CIST的比较向量为{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID},但是在IST的计算中,比较向量为{域根,内部路径开销,指定桥ID,指定端口ID,接收端口ID}。
拓扑描述CST计算完成之后,S1为Region1的域根,S4为Region2的域根,S7为Region3的域根。需要注意,此时的域根并不一定是各个域中优先级最高的网桥,而只是距离总根最近的网桥。
- 域内以域根为根桥,结合内部路径开销确定各个网桥端口角色,最终得到IST。(这里的根桥是IST的根桥,而不是MSTI的根桥,需要注意)
- 域内网桥通过比较内部路径开销确定IST根端口。
- 通过比较BPDU的优先级确定IST上的端口角色。
4.4 Region 1计算
MST1计算
在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。
拓扑描述Region1通过配置将VLAN2映射到实例2,将VLAN4映射到实例4,其余VLAN映射到IST。
- 对网桥指定不同实例不同的优先级,假设S2为实例2的根桥,S3为实例4的根桥。
- 实例2中,各个网桥的优先级大小为S2>S1>S3,经过运算阻塞S3面向S1的端口。
实例4中,各个网桥的优先级大小为S3>S1>S2,经过运算阻塞S2面向S1的端口。
MSTI的特点每个MSTI独立计算自己的生成树,互不干扰。
- 个MSTI的生成树计算方法与STP基本相同。
- 每个MSTI的生成树可以有不同的根,不同的拓扑。
- 每个MSTI在自己的生成树内发送BPDU。
- 每个MSTI的拓扑通过命令配置决定。
- 每个端口在不同MSTI上的生成树参数可以不同。
- 每个端口在不同MSTI上的角色、状态可以不同。
4.5 Region 2计算
MST2计算
拓扑描述
- Region2通过配置将VLAN2映射到实例2,将VLAN3映射到实例3,其余VLAN映射到IST。
- 对网桥指定不同实例不同的优先级,假设S5为实例2的根桥,S6为实例3的根桥。
- 实例2中,各个网桥的优先级大小为S5>S4>S6,经过运算阻塞S6面向S4的端口。
- 实例3中,各个网桥的优先级大小为S6>S4>S5,经过运算阻塞S5面向S4的端口。
4.6 Region 3计算
MST3计算
拓扑描述
- Region2通过配置将VLAN2映射到实例2,将VLAN4映射到实例4,其余VLAN映射到IST。
- 对网桥指定不同实例不同的优先级,假设S9为实例2的根桥,S8为实例4的根桥。
- 实例2中,各个网桥的优先级大小为S9>S10>S8>S7,经过运算阻塞S7面向S8和S10的端口,阻塞S8面向S10的端口。
- 实例4中,各个网桥的优先级大小为S8>S7>S10>S9,经过运算阻塞S9面向S7和S10的端口,阻塞S10面向S7的端口。
4.7 MSTP计算结果
MSTI计算
- CIST以及各域内的MSTI均计算完毕,从拓扑中可以看到每个域内的VLAN映射关系是独立的。
- 在运行MSTP协议的网络中,一个VLAN报文将沿着如下路径进行转发:
- 在MST域内,沿着其对应的MSTI(包括IST路径)转发。
- 在MST域间,沿着CST转发。
5. MSTP与RSTP交互
MSTP与RSTP交互
- RSTP/STP网桥将MSTP域看做一个桥ID为域根ID的RSTP桥
- 当RSTP/STP网桥收到MST BPDU后,会提取BPDU中的{总根,外部路径开销,域根ID,指定端口ID}作为RSTP/STP的{RID,RPC,BID,PID}
- 当MSTP网桥收到RSTP/STP的BPDU后,会将BPDU中的{RID,RPC,BID,PID}对应到MSTP中,其中,BID作为MSTP中的域根ID,也作为指定交换机ID,内部路径开销为0。
6. MSTP快速收敛
在MSTP中,P/A机制工作过程如下:
- 上游设备发送Proposal报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
- 上游设备继续发送Agreement报文。下游设备接收到后,根端口转为Forwarding状态。
- 下游设备回应Agreement报文。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。
- 缺省情况下,华为使用增强的快速迁移机制。如果华为设备与其他厂商的设备进行互通,而其他厂商的设备P/A机制使用普通的快速迁移机制,此时,可在华为设备上通过命令
stp no-agreement-check
设置P/A机制为普通的快速迁移机制,从而实现华为设备和其他厂商的设备进行互通。