多实例生成树MSTP包括域间的外部生成树CST和域内的内部生成树IST,我们通称为CIST。
我们先讨论CST的计算。在CST中,一个MST域看作是一台"交换机",那么在进行CST计算时,这台"交换机"的桥ID是多少呢?
是域根的桥ID。一个MST域中IST的根桥ID,就是该域的桥ID,代表这个域参与CST计算。
如果一个域根的桥ID是所有域根中最优的,那么这个域根叫做CIST总根。CIST总根所在的域,就是CST的根桥。
CST的BPDU与RSTP的RST BPDU完全相同,只是我们把CST的BPDU中根桥ID看作是CIST总根,RPC改叫ERPC(外部根路径开销,图中蓝色链路的开销),指定桥ID就是每个MST域内域根的桥ID。
理解了这些,CST的计算实际上就是RSTP的计算。
IST的计算稍复杂,我们一会详细分析。
CST和IST的计算是同步完成的,叫做CIST计算。
可是我们发现了一个问题:CST的BPDU是公共的,可是IST的BPDU每个域都不同呀,怎么同步计算呢?
我们刚才说过,CST的BPDU与RSTP的BPDU完全相同,这个BPDU在进入一个MST域时,会添加这个域内的信息,我们把这些信息叫"MST专有字段",主要包括:
域配置信息:域名、修订级别、VLAN映射关系;
IRPC:内部根路径开销,域内其他交换机到达域根的链路开销;
CIST指定桥ID:域内除域根外其他交换机的桥ID。域根的桥ID在CST的BPDU里是指定桥ID,代表一个域参与CST计算。
MSTI配置信息:每一个实例(除实例0外)的生成树信息,包括MSTI域根、MSTI IRPC、MSTI指定桥ID等。
IST计算示意图如下:
IST BPDU中包含了CIST的配置信息,共有七项:
CIST总根ID:所有MST域中域根ID最优的;
ERPC:其他域到达CIST总根所在域的链路开销,可以理解为CST"交换机"到达CST根桥的链路开销;
域根ID:MST域内实例0的根桥ID;
IRPC:MST域内其他交换机到达域根的链路开销;
指定桥ID:MST域内除域根外其他交换机的桥ID;
指定端口ID:MST域内交换机发出IST BPDU的端口ID;
接收端口ID:MST域内交换机接收IST BPDU的端口ID。
CST的计算,通过以上前三项信息就可以完成;而IST的计算,每个MST域各不相同,通过以上七项配置信息来完成。
CIST的计算搞清楚了,再来看看MSTI的计算。
简单来说,MSTI是一个域内每个实例(除实例0)的生成树,这棵生成树是独立的,只存在于域内,和其他任何生成树都没有关系。每个MSTI的BPDU寄生在CIST的BPDU内,与CIST同步完成计算。域内交换机收到CIST BPDU后,把本域内各MSTI配置信息加上,就构成了本域的IST BPDU。发给其他域时,再把本域内的MSTI配置信息去掉。
域内每个MSTI的配置信息共有五项:
MSTI域根ID:每个实例(除实例0)的根桥;
IRPC:域内其他交换机到达本实例根桥的链路开销;
指定桥ID:除本实例根桥外其他发送本实例BPDU的交换机桥ID;
指定端口ID:发送本实例BPDU的端口ID;
接收端口ID:接收本实例BPDU的端口ID。
这些配置信息和普通的RSTP BPDU也完全相同,只是有的换了个叫法而已。比如MSTI域根ID,在RSTP中叫根桥ID。
对于MSTP的计算,我们可以总结一下:
首先,CST、IST、各MSTI的计算是同步完成的;
其次,CST是公共生成树,IST是域内实例0的生成树,统一称为CIST;
再次,域内其他手工配置的实例映射到不同的MSTI生成树,是独立的生成树,其内容寄生在CIST内。
下文我们来详细分析MSTP的BPDU报文内容。