多实例生成树MSTP的计算较为复杂,下面我们通过抓包分析,加强理解MSTP的计算。
上图是CIST BPDU,从Root Identifier开始,分别表示CIST总根ID、ERPC、域根ID、指定端口ID。
其中,域根ID与CIST总根ID相同,是因为我在CIST总根所在域抓包,CIST总根与域根是同一台交换机。
指定端口ID指当前报文的上游交换机发送端口。这里用十六进制0x8003表示,其中,0x80是默认优先级,换算成十进制就是128;0x03是端口索引号。
我们还看到BPDU老化时间Max Age,这是为了与802.1d生成树兼容而保留。
重点是最后一行,MST专有字段。这个字段在域内才有意义。
展开MST专有字段,可以看到域配置(域名abc,修订级别0),VLAN映射关系没有在这里显示,但显示了域配置的Hash散列值(MST Config digest)。交换机的散列值相同,就认为在同一个MST域。
IRPC为20,是发送当前BPDU的交换机到达域根的路径开销。
指定桥ID,域内发送此BPDU的交换机桥ID。
CIST Remaining Hops,默认为20,用于限制域内IST的规模。域内交换机数量过多,可能使生成树收敛不稳定。从域根开始,BPDU每经过一台交换机,其值减1。交换机会丢弃值为0的BPDU。
后面还有两个生成树实例,分别为MSTI 1和MSTI 2,可以确定我们配置了两个实例,分别是实例1和实例2。每个实例的配置信息是独立的,只在各自的实例中有效。
大家发现没有,这里没有域根ID,也没有MSTI 0信息,为什么?
因为域根ID在上面的CIST BPDU中。我们曾经说过,IST与CST同步完成CIST计算,其他手工配置的实例才会单独有配置信息。
展开MSTI 1,可以看到优先级字段。我们曾经讨论过,生成树的优先级有2个字节,分为两部分,前4位是优先级,后12位用于表示VLAN(12位与802.1Q中VLAN的取值范围相同)。
在这里我们看到,优先级为二进制0000,十进制为0,VLAN部分在MSTP中表示为实例ID。
优先级字段和下面的MAC地址共同构成MSTI域根ID。
IRPC,表示发送此BPDU的交换机到达实例1的根桥的路径开销。
Bridge Identifier Priority值为8,这是什么意思呢?其实这里只显示了桥优先级高4位,取值为二进制1000,十进制为8,低12位没有显示。
同理,端口优先级也是只显示了高4位,取值为二进制1000,低4位没有显示。
Remaining hops表示实例1从MSTI 1域根开始,还剩几跳。
另外,需要补充一点,MSTP具备RSTP的所有快速收敛特性,必要时也需要应用保护机制。
对于P/A机制,MSTP与RSTP稍有不同。RSTP的Proposal报文只需把P位置1即可,在MSTP中,Proposal报文需要将P位和A位同时置1。