你了解Cisco的PVST、PVST+和Rapid-PVST+吗?
cisco 负载均衡 网络 tree
Cisco/H3C交换机配置与管理完全手册》一书。
11.5 理解Cisco专有的PVST、PVST+和Rapid-PVST+
在本章最前面就说到了,Cisco除了对IEEE发布的通用生成树标准提供支持外,它还自己针对这些公用生成树标准进行了改进,开发了对应版本的生成树技术——PVST、PVST+、Rapid-PVST+。在PVST+和Rapid-PVST+模式下,最多可支持128个生成树实例。
11.5.1 生成树技术发展历史回顾
在正确认识Cisco所使用的生成树技术之前,先来简单回顾一下生成树技术截止目前为止的一些发展历程。
最初的生成树技术就是IEEE以802.1D标准形式发布的STP技术。它是把整个交换网络都当作一个生成树实例,也就是Common Spanning Tree,公共生成树(Cisco把它称之为“Mono Spanning Tree”,单生成树),要求整个交换网络不存在二层环路。这样一来,在STP技术中,网络中的所有VLAN共享同一个生成树实例,各VLAN使用802.1q中继模式。这种设计的最大不足就是不能通过冗余链路实现VLAN交互工程,即如果一条链路被阻塞了,也就是阻塞了所有VLAN通信在它上面通过。为了解决这一不足,Cisco建议采用它自己开发的PVST/PVST+生成树解决方案,为交换网络中的每个VLAN运行一个独立的生成树实例。这种解决方案使得每个VLAN使用不同的逻辑拓扑,可以明显地允许二层交互工程。但是这种解决方案也带来了不足,可以说是走到了原来的IEEE 802.1D STP的另一个极端,因为随着网络中VLAN数量的增长,PVST/PVST+方案浪费了大量的交换机资源,并且使得整个生成树管理变得十分复杂(因为网络中存在实例数一般都大于网络中活跃的VLAN数),最终就是因为每个VLAN有一个生成树实例,实例数太多。
随着时间的推移,IEEE也没有闲着,也知道原来的IEEE 802.1D的以上不足,正在寻求解决方案。于是就发布了改进的生成树协议版本——RSTP(快速生成树协议)。此时Cisco也同步跟进,发布了针对RSTP的改进版Rapid-PVST+。因为在RSTP中,IEEE还是把整个交换网络当成一个生成树实例,尽管提高了二层收敛速度,但是在较大网络中,这种改善还不足以使得冗余链路上就可以*地进行VLAN通信交互,还是会存在因端口状态转换延时而出现数据丢失现象。Cisco仍然坚持按照它自己的每个VLAN一个生成树实例方式,于是就出现了前面说到的Rapid-PVST+。但是Cisco同样知道自己的每VLAN生成树方案所带来的以上不足,于是它就开始考虑抛弃原来一直坚持的每VLAN生成树方案,开发一种称之为MISTP(Multiple Instances Spanning Tree,多实例生成树)方案。但很快它就发现IEEE也已发布了类似的标准,那就是IEEE 802.1s MSTP(Multiple Spanning Trees Protocol,多生成树协议)。因为两者的功能几乎一样,为了避免术语上的混淆,和一些小功能上差异,最终Cisco就宣布直接等同采用IEEE 802.1s MSTP,这是Cisco直接等同采用的第一个生成树技术。
以上就是整个生成树技术的简单发展历程,从中可以看出Cisco是如何看待和使用这些生成树技术的。
11.5.2 Cisco PVST
Cisco自己开发的最早生成树协议版本就是对应IEEE 802.1D标准STP技术的PVST(Per-VLAN Spanning Tree,每VLAN生成树)。从它的名称上就可以看出,它不再像STP那样把整个交换网络当成一个生成树实例,而是为每个VLAN当作一个生成树实例。在IEEE 802.1D标准STP方案中,它只定义了一个CST(通用生成树),假设整个桥接网络中仅一个生成树实例,这样就要求整个网络无环路。而在PVST中,每个VLAN一个生成树实例,只要每个VLAN内部无环路就可以,不考虑其他VLAN拓扑。这是它与IEEE 802.1D STP的最大区别。
在IEEE 802.1D STP中,如图11-28所示的拓扑中,A与D1、D2的两条连接链路中同一时刻中肯定只有一条链路是活跃的,而另一条链路是被阻塞的,因为在STP中是把整个交换网络看成一个生成树实例,不允许在这个实例中出现环路。而在PVST中允许一个VLAN的中继信息在被其他VLAN阻塞时可以为另一些VLAN的中继信息进行转发。因为PVST把每个VLAN作为一个独立的网络,所以它有能力通过在一条中继链路上转发一些VLAN通信,而在另一条中继链路上转发另一些VLAN通信而实现二层负载均衡。此时的图11-28中就变成了图11-29所示了。
另外,PVST中的VLAN中继是使用ISL,PVST BPDU的格式和STP/RSTP BPDU格式已经不一样,发送的目的地址也改成了Cisco保留地址01-00-0C-CC-CC-CD,而且在VLAN中继的情况下PVST BPDU被打上了ISL VLAN标签,所以,PVST协议并不兼容STP/RSTP协议。
11.5.3 Cisco PVST+和Rapid-PVST+
PVST+(Per-VLAN Spanning Tree Plus,增强型PVST)是使用通用的802.1Q中继协议来实现PVST功能的,是PVST的改进版本。虽然它支持了通用的802.1Q中继,但它仍不能在非Cisco设备上支持。
Rapid-PVST+又是在PVST+和RSTP两种协议基础上开发的,可以在每个VLAN中有一个快速生成树(RST)实例,支持RSTP特性。
经过改进的PVST+和Rapid-PVST+协议在VLAN 1上运行的是普通STP协议,在其他VLAN上运行PVST协议。因为改用了802.1Q中继,所以PVST+协议可以与STP/RSTP互通,在VLAN 1上生成树状态按照STP协议计算;在其他VLAN上,普通交换机只会把PVST BPDU当作多播报文按照VLAN号进行转发。但这并不影响环路的消除,只是有可能VLAN 1和其他VLAN的根桥状态可能不一致。
图11-30中所有中继链路的默认VLAN是VLAN 1(也就是各中继端口的PVID=1),并且都同时允许VLAN 10、VLAN 20的通信。假设A和D1都是运行STP(或RSTP)协议,而D2运行的是PVST+(或Rapid-PVST+)协议。这样一来,对于VLAN 1来说,如果D1是根桥,则D2的中继端口1就会被阻塞,因为它比端口2到达D1的开销大。而对于VLAN 10和VLAN 20,因为A和D1都是运行STP,所以也都属于同一个生成树实例中,而在D2中运行的是PVST+,所以每个VLAN都有一个生成树实例。在D2发出的PVST BDPU只能自己看到,所以在这两个VLAN上都把D2当作是根桥。VLAN 10和VLAN 20发出的PVST BPDU会同时被D1和A转发,这时D2肯定会检测到这种环路,然后可能会在中继端口2上阻塞VLAN 10和VLAN 20,但仍保留VLAN 1的通信,同时还将在中继端口1上保留VLAN 10和VLAN 20的通信,最终实现了PVTS+(或Rapid-PVST+)与STP(或者RSTP)的兼容。
另外,由于在PVST、PVST+和Rapid-PVST+中,每个VLAN都有一棵独立的生成树,还可实现二层负载均衡。在图11-31中,四台交换机都运行PVST+(或Rapid-PVST+)协议,并且各条中继链路都允许VLAN 1、VLAN 10和VLAN 20的通信通过,并且各中继端口的PVID=1。
现假设D1是所有VLAN的根桥,然后通过VLAN中继修剪配置可以使得D4的中继端口1和中继端口2分别阻塞VLAN 10、VLAN 20的流量,但D4的中继端口1仍然可以承载VLAN 20的流量,中继端口2所在链路也可以承载VLAN 10的流量,这样就实现了二层的链路备份和负载均衡功能。这在STP、RSTP生成树技术中是无法实现的,因为在这两种生成树协议中,整个交换网络都视作一个生成树,自然就不会允许在D4中两个端口同时活跃,以达到消除二层环路的目的。但是在PVST、PVST+、Rapid-PVST+生成树技术中,每个VLAN自己维护着一个虚拟的生成树实例,根本不考虑其他VLAN,只要在一个VLAN内部不会出现二层环路就可以了。如在D4的两个中继端口上只要限制部分VLAN(如VLAN 10或者VLAN 20 )流量,则既可以达到消除二层环路的目的,又可以实现负载均衡的目的。当然也可以在D4的两个中继端口的某一个中全部禁止VLAN 10、VLAN 20的流量也可以实现消除环路目的。这样的话,本实例就与上面的图11-30的示例一样了,但这样不能实现负载均衡。
【经验之谈】IEEE颁发的STP、RSTP都属于单生成树实例的生成树协议,是把整个交换网络当成一个生成树,是基于端口的。而Cisco的PVST、PVST+、Rapid-PVST+则是多生成树实例的生成树协议,它是为交换网络中每个VLAN分配、维护着一个生成树实例,是基于VLAN的。而下面将要介绍的MSTP、MISTP也是多生成树实例的生成树协议,但它们是把多个具有相同拓扑的VLAN放进一个生成树实例中,是基于实例的,与PVST、PVST+和Rapid-PVST+基于VLAN的多生成树是有本质区别的。
图11-32是PVST+(或者Rapid-PVST+)进行负载均衡的另一个示例。带有1000他VLAN的交换机A与交换机D1和D2进行冗余连接。在这种情况下,连接到交换机A上的用户和管理通常是想通过上行的两条链路来实现负载均衡,如一条链路承担偶数VLAN用户的负载,另一条链路承担奇数VLAN中的负载,或者是一条承担1~500号VLAN中的负载,另一条承担501~1000号VLAN的负载。
在以上方案中,还可以使每条链路分担一半VLAN中的负载。为了达到这个目的,要选举D1交换机作为501~1000号VLAN的根交换机,而D2则作为1~500号VLAN中的根交换机。在这种方案中,每个VLAN维护着一个生成树实例,也就是说,1000个实例实际上维护着两个逻辑拓扑,因为每个交换机上的物理拓扑链路就两条。很显然,这对于交换机的CPU和网络带宽资源来说是一种浪费。
Cisco/H3C交换机配置与管理完全手册》一书。
11.5 理解Cisco专有的PVST、PVST+和Rapid-PVST+
在本章最前面就说到了,Cisco除了对IEEE发布的通用生成树标准提供支持外,它还自己针对这些公用生成树标准进行了改进,开发了对应版本的生成树技术——PVST、PVST+、Rapid-PVST+。在PVST+和Rapid-PVST+模式下,最多可支持128个生成树实例。
11.5.1 生成树技术发展历史回顾
在正确认识Cisco所使用的生成树技术之前,先来简单回顾一下生成树技术截止目前为止的一些发展历程。
最初的生成树技术就是IEEE以802.1D标准形式发布的STP技术。它是把整个交换网络都当作一个生成树实例,也就是Common Spanning Tree,公共生成树(Cisco把它称之为“Mono Spanning Tree”,单生成树),要求整个交换网络不存在二层环路。这样一来,在STP技术中,网络中的所有VLAN共享同一个生成树实例,各VLAN使用802.1q中继模式。这种设计的最大不足就是不能通过冗余链路实现VLAN交互工程,即如果一条链路被阻塞了,也就是阻塞了所有VLAN通信在它上面通过。为了解决这一不足,Cisco建议采用它自己开发的PVST/PVST+生成树解决方案,为交换网络中的每个VLAN运行一个独立的生成树实例。这种解决方案使得每个VLAN使用不同的逻辑拓扑,可以明显地允许二层交互工程。但是这种解决方案也带来了不足,可以说是走到了原来的IEEE 802.1D STP的另一个极端,因为随着网络中VLAN数量的增长,PVST/PVST+方案浪费了大量的交换机资源,并且使得整个生成树管理变得十分复杂(因为网络中存在实例数一般都大于网络中活跃的VLAN数),最终就是因为每个VLAN有一个生成树实例,实例数太多。
随着时间的推移,IEEE也没有闲着,也知道原来的IEEE 802.1D的以上不足,正在寻求解决方案。于是就发布了改进的生成树协议版本——RSTP(快速生成树协议)。此时Cisco也同步跟进,发布了针对RSTP的改进版Rapid-PVST+。因为在RSTP中,IEEE还是把整个交换网络当成一个生成树实例,尽管提高了二层收敛速度,但是在较大网络中,这种改善还不足以使得冗余链路上就可以*地进行VLAN通信交互,还是会存在因端口状态转换延时而出现数据丢失现象。Cisco仍然坚持按照它自己的每个VLAN一个生成树实例方式,于是就出现了前面说到的Rapid-PVST+。但是Cisco同样知道自己的每VLAN生成树方案所带来的以上不足,于是它就开始考虑抛弃原来一直坚持的每VLAN生成树方案,开发一种称之为MISTP(Multiple Instances Spanning Tree,多实例生成树)方案。但很快它就发现IEEE也已发布了类似的标准,那就是IEEE 802.1s MSTP(Multiple Spanning Trees Protocol,多生成树协议)。因为两者的功能几乎一样,为了避免术语上的混淆,和一些小功能上差异,最终Cisco就宣布直接等同采用IEEE 802.1s MSTP,这是Cisco直接等同采用的第一个生成树技术。
以上就是整个生成树技术的简单发展历程,从中可以看出Cisco是如何看待和使用这些生成树技术的。
11.5.2 Cisco PVST
Cisco自己开发的最早生成树协议版本就是对应IEEE 802.1D标准STP技术的PVST(Per-VLAN Spanning Tree,每VLAN生成树)。从它的名称上就可以看出,它不再像STP那样把整个交换网络当成一个生成树实例,而是为每个VLAN当作一个生成树实例。在IEEE 802.1D标准STP方案中,它只定义了一个CST(通用生成树),假设整个桥接网络中仅一个生成树实例,这样就要求整个网络无环路。而在PVST中,每个VLAN一个生成树实例,只要每个VLAN内部无环路就可以,不考虑其他VLAN拓扑。这是它与IEEE 802.1D STP的最大区别。
在IEEE 802.1D STP中,如图11-28所示的拓扑中,A与D1、D2的两条连接链路中同一时刻中肯定只有一条链路是活跃的,而另一条链路是被阻塞的,因为在STP中是把整个交换网络看成一个生成树实例,不允许在这个实例中出现环路。而在PVST中允许一个VLAN的中继信息在被其他VLAN阻塞时可以为另一些VLAN的中继信息进行转发。因为PVST把每个VLAN作为一个独立的网络,所以它有能力通过在一条中继链路上转发一些VLAN通信,而在另一条中继链路上转发另一些VLAN通信而实现二层负载均衡。此时的图11-28中就变成了图11-29所示了。
另外,PVST中的VLAN中继是使用ISL,PVST BPDU的格式和STP/RSTP BPDU格式已经不一样,发送的目的地址也改成了Cisco保留地址01-00-0C-CC-CC-CD,而且在VLAN中继的情况下PVST BPDU被打上了ISL VLAN标签,所以,PVST协议并不兼容STP/RSTP协议。
11.5.3 Cisco PVST+和Rapid-PVST+
PVST+(Per-VLAN Spanning Tree Plus,增强型PVST)是使用通用的802.1Q中继协议来实现PVST功能的,是PVST的改进版本。虽然它支持了通用的802.1Q中继,但它仍不能在非Cisco设备上支持。
Rapid-PVST+又是在PVST+和RSTP两种协议基础上开发的,可以在每个VLAN中有一个快速生成树(RST)实例,支持RSTP特性。
经过改进的PVST+和Rapid-PVST+协议在VLAN 1上运行的是普通STP协议,在其他VLAN上运行PVST协议。因为改用了802.1Q中继,所以PVST+协议可以与STP/RSTP互通,在VLAN 1上生成树状态按照STP协议计算;在其他VLAN上,普通交换机只会把PVST BPDU当作多播报文按照VLAN号进行转发。但这并不影响环路的消除,只是有可能VLAN 1和其他VLAN的根桥状态可能不一致。
图11-30中所有中继链路的默认VLAN是VLAN 1(也就是各中继端口的PVID=1),并且都同时允许VLAN 10、VLAN 20的通信。假设A和D1都是运行STP(或RSTP)协议,而D2运行的是PVST+(或Rapid-PVST+)协议。这样一来,对于VLAN 1来说,如果D1是根桥,则D2的中继端口1就会被阻塞,因为它比端口2到达D1的开销大。而对于VLAN 10和VLAN 20,因为A和D1都是运行STP,所以也都属于同一个生成树实例中,而在D2中运行的是PVST+,所以每个VLAN都有一个生成树实例。在D2发出的PVST BDPU只能自己看到,所以在这两个VLAN上都把D2当作是根桥。VLAN 10和VLAN 20发出的PVST BPDU会同时被D1和A转发,这时D2肯定会检测到这种环路,然后可能会在中继端口2上阻塞VLAN 10和VLAN 20,但仍保留VLAN 1的通信,同时还将在中继端口1上保留VLAN 10和VLAN 20的通信,最终实现了PVTS+(或Rapid-PVST+)与STP(或者RSTP)的兼容。
另外,由于在PVST、PVST+和Rapid-PVST+中,每个VLAN都有一棵独立的生成树,还可实现二层负载均衡。在图11-31中,四台交换机都运行PVST+(或Rapid-PVST+)协议,并且各条中继链路都允许VLAN 1、VLAN 10和VLAN 20的通信通过,并且各中继端口的PVID=1。
现假设D1是所有VLAN的根桥,然后通过VLAN中继修剪配置可以使得D4的中继端口1和中继端口2分别阻塞VLAN 10、VLAN 20的流量,但D4的中继端口1仍然可以承载VLAN 20的流量,中继端口2所在链路也可以承载VLAN 10的流量,这样就实现了二层的链路备份和负载均衡功能。这在STP、RSTP生成树技术中是无法实现的,因为在这两种生成树协议中,整个交换网络都视作一个生成树,自然就不会允许在D4中两个端口同时活跃,以达到消除二层环路的目的。但是在PVST、PVST+、Rapid-PVST+生成树技术中,每个VLAN自己维护着一个虚拟的生成树实例,根本不考虑其他VLAN,只要在一个VLAN内部不会出现二层环路就可以了。如在D4的两个中继端口上只要限制部分VLAN(如VLAN 10或者VLAN 20 )流量,则既可以达到消除二层环路的目的,又可以实现负载均衡的目的。当然也可以在D4的两个中继端口的某一个中全部禁止VLAN 10、VLAN 20的流量也可以实现消除环路目的。这样的话,本实例就与上面的图11-30的示例一样了,但这样不能实现负载均衡。
【经验之谈】IEEE颁发的STP、RSTP都属于单生成树实例的生成树协议,是把整个交换网络当成一个生成树,是基于端口的。而Cisco的PVST、PVST+、Rapid-PVST+则是多生成树实例的生成树协议,它是为交换网络中每个VLAN分配、维护着一个生成树实例,是基于VLAN的。而下面将要介绍的MSTP、MISTP也是多生成树实例的生成树协议,但它们是把多个具有相同拓扑的VLAN放进一个生成树实例中,是基于实例的,与PVST、PVST+和Rapid-PVST+基于VLAN的多生成树是有本质区别的。
图11-32是PVST+(或者Rapid-PVST+)进行负载均衡的另一个示例。带有1000他VLAN的交换机A与交换机D1和D2进行冗余连接。在这种情况下,连接到交换机A上的用户和管理通常是想通过上行的两条链路来实现负载均衡,如一条链路承担偶数VLAN用户的负载,另一条链路承担奇数VLAN中的负载,或者是一条承担1~500号VLAN中的负载,另一条承担501~1000号VLAN的负载。
在以上方案中,还可以使每条链路分担一半VLAN中的负载。为了达到这个目的,要选举D1交换机作为501~1000号VLAN的根交换机,而D2则作为1~500号VLAN中的根交换机。在这种方案中,每个VLAN维护着一个生成树实例,也就是说,1000个实例实际上维护着两个逻辑拓扑,因为每个交换机上的物理拓扑链路就两条。很显然,这对于交换机的CPU和网络带宽资源来说是一种浪费。