X

修改MSTP(多生成树)配置的后果,你知道吗?

弈心:从事计算机网络工作十年(新加坡7年,沙特3年),2013年考取CCIE,在新加坡先后任职于AT&T,新加坡交通部,苹果,Equinix,苏格兰皇家银行等大型企业、银行和政府部门。 目前供职于“世界第一土豪大学“沙特阿卜杜拉国王科技大学(KAUST),担任Senior Network Engineer,为KAUST校史上第一位也是唯一一位华人IT部门高级职员。2019年6月在知乎发布了华语圈第一本专门为编程零基础的网络工程师量身打造的Python教程《网络工程师的Python之路》。


笔者几年前在新加坡某SI公司做网络顾问时曾收到某位客户发来的一封很长的邮件,向我咨询一个关于MSTP的问题,自己花了大半天时间思考和参阅材料来分析这个问题,觉得确实很值得记录下来以作将来参考。

将当时讨论到的拓扑图回忆整理了下,大致如下:

接入层两个交换机:Acc-1和Acc-2。

汇聚层两个交换机:Dist-1和Dist-2

Acc-1 和 Acc-2下接两个服务器,用ping测试连通性。


在真机上重复了一边实验,四个交换机上配置一样的MSTP:

spanning-tree mode mstspanning-tree mst configurationname testrevision 2instance 1 vlan 1-99instance 2 vlan 100-199


MST0和MST1的根交换机为Dist -1

MST2的根交换机为Dist-2

根据MSTP的计算结果,如图所示,在MST2里,因为Dist-2做根桥,所以Acc-1连Dist-1的端口(Gi0/16) 以及Acc-2连Dist-1的端口(Gi0/16)均处在BLK状态,其余所有端口则都在FWD状态。


客户问题:

当客户在4个交换机上将VLAN 200加入instance 2后 (即敲入命令instance 2 vlan 100-200),服务器端有半分钟左右的断线情况(即ping中断),之后连接自动恢复。客户想知道这是什么原因引起的。


原因分析:

分析这个问题首先要分析这四个交换机是否处于同一个MSTP Region下。


A. 当交换机处于同一MSTP Region下时

1.根据MSTP的定义,配置了MSTP的交换机必须要同时满足如下几个条件才能视它们为处于同一Region下:

a. Configuration name必须一致

b. Revision number 必须一致

c. VLAN到Instance的映射必须一致

2. 同一MSTP Region下的交换机相互之间交换的不是VLAN-Instance的映射数据,而是由该映射数据计算出的hash值。

3. 没有VLAN-Instance映射的交换机被自动分配在CIST,也就是MST0这个instance下面。


B. 当交换机处于不同的MSTP Region下时:

1. 如果交换机处于不同的MSTP Region下,那么不同MSTP Region之间的连接被称为Boundary,拥有该连接的交换机被称为Boundary Switch。

2. 把所有MSTP Region中的交换机拿出来做比较,MAC地址最小的交换机被选举为CIST ROOT。

3. 在选举出CIST ROOT后,每个Region下面再选举出一个Regional ROOT,选举原则是该交换机到CIST ROOT的链路开销(cost)最小,值得注意的是,只有Boundary SW才有资格竞选Regional ROOT。

4. 关键一点:如果不同Region之间有多个连接,则其中只能有一个boundary port(Etherchannel端口(即拓扑里的Po1)也视为一个boundary port)处于FWD状态,剩下的boundary port全部处于BLK状态。


客户实例分析:

1. 从配置来看,刚开始的时候,客户的4个交换机处在同一个MSTP Region下面,因为这4个交换机满足了上述的三个条件。

2. 客户首先在ACC-1上更改了VLAN-instance的映射,把VLAN 200加入到了Instance 2,这也就等于改变了该映射的hash值那么这时ACC-1和剩下的三个交换机(Dist-1,Dist-2, ACC-2)已经处在了不同的Region下面。为了区别,这里姑且把Dist-1,Dist-2, Acc-2所在的Region称为Region 1, Acc-1所在的Region称为Region 2。

3. 这时4个SW里面拥有最小MAC地址的Dist-1被选举为CIST ROOT,而Acc-1所在的Region2只有一个交换机,即Acc-1本身,因此Acc-1被选为Regional 2的Regional ROOT。如下图所示:

4. 同理,当客户接下来在Acc-2上更改VLAN-Instance的映射后,导致Acc-2脱离了Region 1,这时Acc-2和Acc-1有同样的hash值,因为他们都有同样的VLAN-Instance映射,这时ACC-2加入到了Region 2。


5. 同理,当客户在Dist-1上更改VLAN-Instance的映射后,Dist-1同样脱离了Region 1,加入了Region 2,而此时,Region 1只剩下Dist-2一个SW,这时CIST ROOT依然是Dist-1,而做为Region 1下Boundary Switch的Dist-2到Dist-1链路开销最小的端口正好是它和Dist-1直连的Po1口,所以Dist-2剩下的两个boundary port(即连接Acc1和Acc-2的端口)处于BLK状态(如下图),这也就解释了为什么两个服务器之间的ping中断了!



6 . 最后,当客户把DIST-2的VLAN-Instance映射修改好后,Dist-2也加入了Region 2, 这样4个SW又处在同一MSTP Region下,拓扑又回到了最初的状态,这时两个服务器之间的链路自然也就恢复了!