在IEEE 802.1w标准里定义了快速生成树协议RSTP(Rapid Spanning Tree Protocol)。RSTP协议在STP协议基础上做了三点重要改进,使得收敛速度快得多(最快1秒以内)。
第一点改进:为根端口和指定端口设置了快速切换用的替换端口(Alternate Port)和备份端口(Backup Port)两种角色,当根端口/指定端口失效的情况下,替换端口/备份端口就会无时延地进入转发状态。无需等待两倍Forward Delay时间。

第二点改进:在只连接了两个交换端口的点对点链路中,指定端口只需与下游网桥进行一次握手就可以无时延地进入转发状态。如果是连接了三个以上网桥的共享链路,下游网桥是不会响应上游指定端口发出的握手请求的,只能等待两倍Forward Delay时间进入转发状态。

第三点改进:直接与终端相连而不是把其他网桥相连的端口定义为边缘端口(Edge Port)。边缘端口可以直接进入转发状态,不需要任何延时。由于网桥无法知道端口是否是直接与终端相连,所以需要人工配置。

可见,RSTP协议相对于STP协议的确改进了很多。为了支持这些改进,BPDU的格式做了一些修改,但RSTP协议仍然向下兼容STP协议,可以混合组网。虽然如此,RSTP和STP一样同属于单生成树SST(Single Spanning Tree),有它自身的诸多缺陷,主要表现在三个方面。

第一点缺陷:由于整个交换网络只有一棵生成树,在网络规模比较大的时候会导致较长的收敛时间,拓扑改变的影响面也较大。

第二点缺陷:近些年IEEE 802.1Q大行其道,逐渐成为交换机的标准协议。在网络结构对称的情况下,单生成树也没什么大碍。但是,在网络结构不对称的时候,单生成树就会影响网络的连通性。

第三点缺陷:当链路被阻塞后将不承载任何流量,造成了带宽的极大浪费,这在环行城域网的情况下比较明显。

这些缺陷都是单生成树SST无法克服的,于是支持VLAN的多生成树协议出现了。


PVST/PVST+

每个VLAN都生成一棵树是一种比较直接,而且最简单的解决方法。它能够保证每一个VLAN都不存在环路。但是由于种种原因,以这种方式工作的生成树协议并没有形成标准,而是各个厂商各有一套,尤其是以Cisco的VLAN生成树PVST(Per VLAN Spanning Tree)为代表。

为了携带更多的信息,PVST BPDU的格式和STP/RSTP BPDU格式已经不一样,发送的目的地址也改成了Cisco保留地址01-00-0C-CC-CC-CD,而且在VLAN Trunk的情况下PVST BPDU被打上了802.1Q VLAN标签。所以,PVST协议并不兼容STP/RSTP协议。

Cisco很快又推出了经过改进的PVST+协议,并成为了交换机产品的默认生成树协议。经过改进的PVST+协议在VLAN 1上运行的是普通STP协议,在其他VLAN上运行PVST协议。PVST+协议可以与STP/RSTP互通,在VLAN 1上生成树状态按照STP协议计算。在其他VLAN上,普通交换机只会把PVST BPDU当作多播报文按照VLAN号进行转发。但这并不影响环路的消除,只是有可能VLAN 1和其他VLAN的根桥状态可能不一致。

PVST/PVST+协议实现了VLAN认知能力和负载均衡能力,但是新技术也带来了新问题,PVST/PVST+协议也有它们的“难言之隐”。

第一点缺陷:由于每个VLAN都需要生成一棵树,PVST BPDU的通信量将正比于Trunk的VLAN个数。

第二点缺陷:在VLAN个数比较多的时候,维护多棵生成树的计算量和资源占用量将急剧增长。特别是当Trunk了很多VLAN的接口状态变化的时候,所有生成树的状态都要重新计算,CPU将不堪重负。所以,Cisco交换机限制了VLAN的使用个数,同时不建议在一个端口上Trunk很多VLAN。

第三点缺陷:由于协议的私有性,PVST/PVST+不能像STP/RSTP一样得到广泛的支持,不同厂家的设备并不能在这种模式下直接互通,只能通过一些变通的方式实现,例如Foundry的IronSpan。IronSpan默认情况下运行的是STP协议,当某个端口收到PVST BPDU时,该端口的生成树模式会自动切换成PVST/PVST+兼容模式。

一般情况下,网络的拓扑结构不会频繁变化,所以PVST/PVST+的这些缺点并不会很致命。但是,端口Trunk大量VLAN这种需求还是存在的。于是,Cisco对PVST/PVST+又做了新的改进,推出了多实例化的MISTP协议。


MISTP/MSTP

多实例生成树协议MISTP(Multi-InstanceSpanning Tree Protocol)定义了“实例”(Instance)的概念。简单的说,STP/RSTP是基于端口的,PVST/PVST+

是基于VLAN的,而MISTP就是基于实例的。所谓实例就是多个VLAN的一个集合,通过多个VLAN捆绑到一个实例中去的方法可以节省通信开销和资源占用率。

在使用的时候可以把多个相同拓扑结构的VLAN映射到一个实例里,这些VLAN在端口上转发状态将取决于对应实例在MISTP里的状态。值得注意的是网络里的所有交换机的VLAN和实例映射关系必须都一致,否则会影响网络连通性。为了检测这种错误,MISTP BPDU里除了携带实例号以外,还要携带实例对应的VLAN关系等信息。MISTP协议不处理STP/RSTP/PVST BPDU,所以不能兼容STP/RSTP协议,甚至不能向下兼容PVST/PVST+协议,在一起组网的时候会出现环路。为了让网络能够平滑地从PVST+模式迁移到MISTP模式,Cisco在交换机产品里又做了一个可以处理PVST BPDU的混合模式MISTP-PVST+。网络升级的时候需要先把设备都设置成MISTP-PVST+模式,然后再全部设置成MISTP模式。

MISTP带来的好处是显而易见的。它既有PVST的VLAN认知能力和负载均衡能力,又拥有可以和SST媲美的低CPU占用率。不过,极差的向下兼容性和协议的私有性阻挡了MISTP的大范围应用。多生成树协议MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定义的一种新型多实例化生成树协议。这个协议目前仍然在不断优化过程中,现在只有草案(Draft)版本可以获得。不过Cisco已经在CatOS 7.1版本里增加了M STP的支持,华为公司的三层交换机产品Quidway系列交换机也即将推出支持MSTP协议的新版本。

MSTP协议精妙的地方在于把支持MSTP的交换机和不支持MSTP交换机划分成不同的区域,分别称作MST域和SST域。在MST域内部运行多实例化的生成树,在MST域的边缘运行RSTP兼容的内部生成树IST(Internal Spanning Tree)。

MST域内的交换机间使用MSTP BPDU交换拓扑信息,SST域内的交换机使用STP/RSTP/PVST+ BPDU交换拓扑信息。在MST域与SST域之间的边缘上,SST设备会认为对接的设备也是一台RSTP设备。而MST设备在边缘端口上的状态将取决于内部生成树的状态,也就是说端口上所有VLAN的生成树状态将保持一致。
MSTP设备内部需要维护的生成树包括若干个内部生成树IST,个数和连接了多少个SST域有关。另外,还有若干个多生成树实例MSTI(Multiple Spanning Tree Instance)确定的MSTP生成树,个数由配置了多少个实例决定。

MSTP相对于之前的种种生成树协议而言,优势非常明显。MSTP具有VLAN认知能力,可以实现负载均衡,可以实现类似RSTP的端口状态快速切换,可以捆绑多个VLAN到一个实例中以降低资源占用率。最难能可贵的是MSTP可以很好地向下兼容STP/RSTP协议。而且,MSTP是IEEE标准协议,推广的阻力相对小得多