一直以来都觉得生成树是个难点,估计很多人都有和我一样的感觉吧,今天我们就来简单介绍下它。首先考虑为什么需要生成树,通常网络中都会存在单点故障问题,于是我们就提出了冗余解决方案,可是冗余会有一个不好的地方,那就是会形成环路,于是生成树就出来了,他就是用来解决冗余网络中的环路问题的。生成树有很多种,最早的就是通常我们所说的802.1D,既通常的生成树协议,其余的还有PVST,PVST+,MST,RSTP。我们一个一个的来介绍它,首先是通常的生成树协议,既然是树,那必然会有根,那么这种生成树的跟桥是如何选择出来的呢?那就是由桥ID选择出来的,桥ID由桥优先级+MAC组成,桥优先级默认都是一样的32768,但他也是可以改变的。BPDU中含有很多有用的信息。

 这张图片就是BPDU的包结构,其实理解生成树的很大一部分在于理解BPDU,因为它毕竟是靠BPDU里信息来选择出各种角色的。这里我们只做简单的介绍,里面详细的内容我们就不做介绍了。

   PVST,PVST+这两种生成树协议都是思科私有的,在前面介绍的第一中生成树中,整个交换机是只有一颗生成树的,而这两种生成树都是基于vlan的,也就是说他的每个vlan里面都会有一颗生成树,而这里面的生成树可以是通用的生成树也可以是快速生成树。大家可以想想这种好不好,因为他是基于vlan的,也就是说有多少vlan就会有多少颗生成树,其实这是很费资源的。可以看到他们都走了极端,通用的生成树整个交换机只有一颗生成树,而PVST,PVST+是每个vlan一颗生成树,所以说他们都不太好,才会有后面的生成树协议的出现。

         RSTP:快速生成树协议,从名字上我们就可以知道这种生成树的关键在于它能够快速的收敛。通常用的生成树协议收敛速度是很慢的,于是思科提出各种各样的特性来解决他的慢速收敛的问题,如portfast,uplinkfast,backbonefast等,但是这些都是思科私有的,太过于局限了,于是IEEE就把这些快速收敛特性和通常的生成树结合起来就成了公有的标准。表面上是这样,但其实它是通过修改BPDU的数据帧格式来实现快速收敛的,

这是普通的bpdu的格式,可以看到bpdu的flags字段里面只用了最高位和最低位这两位,中间的六位是没有用的,rstp就是充分利用了中间的六位才能实现他的快速收敛,其中比较关键的两位是提议和确认,而且这个是在一段一段进行的,这就是rstp诞生的原因,因为他的快速收敛,这中生成树也是整个交换机只用一个的,这也是目前用的比较多的一种。

        MST:多实例生成树协议,这种生成树是基于实例的,他可以多个vlan一颗生成树,另外多个vlan用另一个生成树,可以看到它其实是在前面的生成树中来了个折中。这种生成树协议效率也是比较高的,也是用的比较多的一种。其实生成树协议是一个很复杂的协议,他还有各种各样的特性。这里我们只是简单的介绍了下生成树,文章如有不足,请多指教。