弦月的博客
锦瑟无端五十弦,一弦一柱思华年。

生成树协议是一种二层管理协议,它通过有选择地阻塞网络冗余链路来达到消除网络二层环路地目的,同时具备链路地备份功能。
由于生成树协议本身比较小,所以并不像路由协议那样广为人知。但是它却掌管着端口的转发大全。特别是和别的协议一起运行的时候,生成树协议就有可能阻断其他协议地报文通路,造成种种地奇怪现象。
生成树协议和其它协议一样,时随着网络的发展而不断更新换代的。在生成树协议发展过程中,老的缺陷不断被克服,新的特性不断被开发出来。按照大功能地改进情况,我们可以粗略地把生成树协议地发展过程划分为三代。

第一代生成树协议:STP/RSTP

在网络发展初期,透明网桥时一个重要角色。它比只会放大和广播信号地集线器(Hub)拥有更多的功能,它会悄悄地把发向它地数据帧地源MAC地址和端口号记录下来,下次碰到这个MAC地址作为目的MAC地址的报文就从记录中的端口号发送出去,如果目的MAC地址没有记录在案或者目的MAC地址本身就是多播地址才向所有端口发送.通过透明网桥,不同的局域网之间可以实现互通,网络可操作的范围得以扩大,而且由于透明网桥具备MAC地址学习功能而不会像Hub那样造成网络报文冲突。
但是,透明网桥也有它的缺陷,它的缺陷就在于它的透明传输。透明网桥并不能像路由器那样知道报文可以经过多少次转发,一旦网络存在环路就会造成报文在环路内不断循环和增生,甚至造成恐怖的“广播风暴”。在这种情况下,网络将变得不可用,而且在大型网络中故障不好定位。
为了解决这个问题而提出了STP(Spanning Tree Protocol),其中以IEEE的802.1D版本最为流行。
图1 生成树工作示意图

生成树时图论中的术语,对于一个拥有n个节点的无向图,从中选取n-1条边,使得从n个节点中的任意一个经由这n-1条边都能到达另外一个任意的节点,这这n个点和n-1条边的集合就是这个图的一颗生成树。
STP协议中定义了根桥(Root Bridge)、根端口(Root Port)、指定端口(Designated Port)、路径开销(Path Cost)等概念,目的就在于通过构造一棵自然树的方法达到裁剪冗余环路的目的,同时实现链路备份和路径最优化。用于构造这棵树的算法称为生成树算法SPA(Spanning TreeAlgorithm)。
要实现这些功能,网桥之间必须要进行一些信息的交流,这些信息交流单元就称为配置消息BPDU(Bridge Protocol Data Unit)。STP BPDU是一种二层报文,目的MAC是多播地址01-80-C2-00-00-00,所有支持STP协议的网桥都会接收并处理收到的BPDU报文。该报文的数据区里携带了用于生成树计算的所有有用信息。

生成树协议的工作流程是,首先进行根桥的选举。选举的依据是网桥优先级和网桥MAC地址组合成的桥ID(Bridge ID),桥ID最小的网桥将成为网络中的根桥。在图1所示的网络中,各网桥都以默认配置启动,在网桥优先级都一样(默认优先级是32768)的情况下,MAC地址最小的网桥成为根桥,例如图1中的SW1,它的所有端口的角色都成为指定端口,进入转发状态。
接下来,其他网桥将各自选择一条 “最粗壮”的树枝作为到根桥的路径,相应端口的角色就成为根端口。假设图1中SW2和SW2、SW3之间的链路是千兆GE链路,SW1和SW3之间的链路是百兆FE链路,SW3从端口1到根桥的路径开销的默认值是19,而从端口2经过SW2到根桥的路径开销是4+4=8,所以端口2成为根端口,进入转发状态。同理,SW2的端口2成为根端口,端口1成为指定端口,进入转发状态。
根桥和根端口都确定之后一棵树就生成了,如图中实线所示。下面的任务是裁剪冗余的环路。这个工作是通过阻塞非根桥上相应端口来实现的,例如SW3的端口1的角色成为禁用端口,进入阻塞状态(图中用“×”表示)。
生成树经过一段时间(默认值是30秒左右)稳定之后,所有端口要么进入转发状态,要么进入阻塞状态。STPBPDU仍然会定时从各个网桥的指定端口发出,以维护链路的状态。如果网络拓扑发生变化,生成树就会重新计算,端口状态也会随之改变。

posted on 2017-07-05 23:14  弦月C  阅读(1779)  评论(0编辑  收藏  举报