一个局域网通常由多台交换机互连而成,为了避免广播风暴,我们需要保证在网络中不存在路径回环,即所有链路应该组成一棵无回环的树,交换机上的STP协议就实现了这样的功能。
1、透明网桥概述
(1)透明网桥的应用
对于一般的透明网桥,通常都具有以下特点:
- 拓展LAN能力:原先只在小范围LAN上操作的站点能够在更大范围的LAN环境中工作。
- 透明网桥能够自主学习站点的地址信息,从而有效控制网络中的数据包数量。
当网桥的某个端口上收到含有某个源MAC地址的数据帧时,他就把该MAC地址和接收该数据帧的端口号保存在MAC地址表中。MAC地址表能够指明该MAC地址与透明网桥的哪个端口相连。
当网桥收到一个数据帧时,会查找这张地址表,找到目的MAC所对应的端口,然后分下列三种情况进行处理:
- 如果目的端口是接收端口,则抛弃这个帧;如果不是接收端口,则从那个端口转发该帧
- 如果收到的数据帧不能从该表中找到对应的目的地址的端口,则要从除收到该帧数据之外的所有其他端口广播出去
- 另外如果网桥收到的是广播帧,也要把该帧从除接收端口以外的所有其他端口转发出去
问题是“透明”网桥毕竟不是路由器,他不会对报文做任何修改,报文中不会记录到底经过了几个网桥,如果网络中存在环路,报文有可能在环路中不断循环和增生,造成网络的拥塞,因而导致了网络中“路径回环”问题的产生。
(2)路径回环的产生
图中是一个由于环路造成报文循环和增生的例子,假定A站点还没有发送过来任何包,因此网桥B1、B2、B3的地址表中都没有A的地址记录。当A发送了一个包,最初三个网桥都接受了这个包,记录A的地址在LAN1上,并排队等待将这个包转发到LAN2上。根据LAN的规则,其中的一个网桥将首先成功的发送包到LAN2上,假设这个网桥是B1,那么B2和B3将会再次接收到这个包,因为B1对于B2和B3来说是透明的,这个包好像是A在LAN2上发送的一样,于是B2和B3记录A在LAN2上,排队等待将这个新包转发到LAN1上,假设这时B2成功将最初的包转发到LAN2上,那么B1和B3都接收到这个包。B3还好,只是认为A仍然在LAN2上,而B1又发现A已经转移到LAN2上了,然后B1和B3都会排队等待转发新报到LAN1上,如此下去,包就在环路中不断循环,更糟糕的是每次成功的包发送都会导致网络中出现两个新包。
(3)生成树协议的引入
为什么引入是生成树协议
尽管透明网桥有隐患,但在无回路的网络中发挥重要作用,那么是不是我们就不能组建有回路的网络呢?显然不是,因为回路的存在可以在拓扑结构的某条链路断开之后,仍然保证网络的连通性。
为此,找到一种很好的算法,他通过阻断冗余链路将一个有回路的桥接网络修剪成一个无回路的树型拓扑结构,这样既解决了问题,又能在某条活动(active)的链路断开时,通过激活被阻断的冗余链路重新修剪拓扑结构以恢复网络的联通。
上图给出了一个应用生成树的桥接网络的例子,其中字符ROOT所标示的网桥是生成树的树根,实线是活动的链路,也就是生成树的枝条,虚线则是被阻断的冗余链路,只有在活动链路断开时才会被激活。
2、STP(Spanning Tree Protocol)生成树协议
(1)生成树协议的基本原理
基本思想:在网桥之间传递特殊的消息(配置信息),包含足够的信息做以下工作:
- 从网络中的所有网桥中,选出一个作为根网桥(Root)
- 计算本网桥到根网桥的最短路径
- 对每个LAN,选出离根桥最近的那个网桥作为指定网桥,负责所在LAN上的数据转发
- 网桥选择一个根端口,该端口给出的路径是此网桥到根桥的最佳路径
- 选择除根端口之外的包含于生成树上的端口(指定端口)
生成树算法的基本原理很简单,网桥之间彼此传递一种特殊的配置消息,802.1D协议将这种配置消息称为“配置桥协议数据单元”或者“配置BPDU”。交换机会根据BPDU消息完成如下工作:
1)在桥接网络的所有参与生成树计算的网桥中,选出一个作为树根(Root Bridge)
2)计算出其他网桥到这个根网桥的最短路径;
3)为每一个LAN选出一个指定网桥,该网桥必须是离根网桥最近的,指定网桥负责将这个LAN上的包转发给根桥;
4)为每个网桥选择一个根端口,该端口给出的路径是本网桥到根网桥的最短路径;
5)选择包含在生成树上的端口,由根端口和LAN连接其指定网桥的那些端口(指定端口)组成。
(2)配置消息介绍
配置消息也被称为桥协议数据单元(BPDU),它主要包括以下内容:即桥接网络中的根桥ID,从指定网桥到根网桥的最小路径开销,指定网桥ID和指定端口ID四项内容。网桥之间通过传递这些内容就足以能够完成生成树的计算,为了叙述方便,可以用矢量形式(RootID,RootPathCost,DesignatedBridgeID,DesignatedPortID)来描述某个网桥所发出的BPDU内容。
最初,所有的网桥都发送以自己为根桥的配置消息,比如网桥B发送的配置消息为(B,0,B,PortID);网桥将接收到的配置消息和自己的配置消息进行优先级比较,保留优先级较高的配置消息,并据此完成生成树的计算。
桥接网络中,每个网桥都有一个用来标识自己的唯一的48位地址,生成树协议中,使用网桥优先级和该48位地址的组合作为网桥的ID在配置消息的数据部分中来表示这个网桥。对每个网桥来说,这个网桥的所有端口可以使用端口优先级和端口索引值作为ID来表示,生成树协议使用这个ID在配置消息中唯一的表示网桥中的某个特定端口。
配置消息格式:
BPDU配置消息是以以太网数据帧的格式进行传递的,它采用一个周知的多播MAC地址01-80-C2-00-00-00作为目的MAC地址,网络中所有的网桥接收到改地址后都能够判断出该报文是生成树协议的协议报文,源MAC地址域中填的是本网桥的MAC地址。数据链路层报头中的SAP值是0 1 0 0 0 0 1 0(0x42)。
在报文的数据域中携带了用于生成树计算的所有数据,他除了上面说提到的根桥ID,到根桥的最小路径费用,指定桥ID和指定端口ID外,还包含一些辅助信息的值。
(3)生成树比较
配置消息的处理
将各个端口收到的配置消息和自己的配置消息作比较,得出优先级最高的配置消息更新本身的配置消息,主要工作有:
- 选择根网桥RootID,最优配置消息的RootID
- 计算到根桥的最短路径开销RootPathCost:如果自己是根桥,则对端路径开销为0,否则为它所收到的最优配置消息的RootPathCost与收到该配置消息的端口开销之和
- 选择根端口RootPort,如果自己是根桥,则根端口为0,否则根端口为收到最优配置消息的那个端口
- 择指定端口,包括在生成树上处于转发状态的其他端口
从指定端口发送新的配置消息
如何根据优先级比较的结果计算生成树呢?主要分成如下的几个步骤:
1)首先,配置消息中最小的那个根网桥ID将成为生成树的根;
2)如果自己就是根网桥,则最短路径开销为0;否则将最有配置消息中的路径开销加上接收端口对应链路的路径开销就是本网桥到根的最短路径开销;
3)然后选择根端口,一般来说对应最短路径开销的那个端口就是根端口,但是如果对应对端路径开销的端口不止一个,则ID号最小的端口将成为根端口;
4)确定根和最短路径之后,网桥得到自己的配置消息,并将自己作为接收到的配置消息比之劣的那些端口的指定网桥,而这些端口就是指定端口。
5)最后,网桥从指定端口将自己的配置消息发送出去。
如何确定最优的配置消息
配置消息的优先级比较原则:
假定有两条配置消息C1和C2,则:
- 如果C1的RootId小于C2的RootID,则C1优于C2
- 如果C1和C2的RootID相同,但C1的RootPathCost小于C2,则C1优于C2
- 如果C1和C2的RootID和RootPathCost相同,但C1的transmitID小于C2,则C1优于C2
- 如果C1和C2的RootID、RootPathCost和TransimitID相同,但C1的PortID小于C2,则C1优于C2
配置消息优先级比较明原则是:
● 先比较根网桥的ID,数值较小的那个优先级较高;
● 如果根网桥ID相同,则比较发送网桥到根桥的最短路径,数值较小的优先级较高;
● 如果前两者都相同,则比较发送网桥的ID,数值较小的优先级较高
● 最后如果前三者都相同,则比较发送端口ID(即配置消息中的指定端口的ID),同样是数值较小的优先级较高。
需要说明的是,如果前三者都相同,表明发送网桥的两个端口连接到一个物理
(4)配置消息举例
一个接受并处理配置消息的例子
下面我们举个例子来说明这个过程。图中网桥B81总共有五个端口,分别接收到这样的配置消息:
Port1:(32,0,32)
Port2:(23,18,123)
Port3:(23,1 4,321)
Port4:(23, 14, 100)
Port5:(23,15,80)
注意:在计算过程中,指定端口ID不影响根桥的选择,但会影响根端口的选择。在此,我们为简化起见,暂且不考虑指定端口ID。表示BPDU消息的优先级矢量用(RootID,RootPathCost,DesignatedBridgeID)来表示。
经过优先级比较,可以确定最好的根桥是23;而且本网桥到根桥的最短路径是14+1=15;网桥还必须从端口3和瑞口4中选出一个作为根端口,由于端口4的配置消息的发送桥ID为100,比端口3的321较小,所以端口4为根端口。
网桥81将发送(23,15,81)的配置消息,该配置消息优于端口1和2收到的配置消息,因此网桥81为端口1和2所连接的网段的指定网桥,并把自己的配置消息从端口1、2发送出去。这样就确定了,阻塞端口3和端口5,端口4是根端口,端口1和端口2是指定端口。阻塞的端口不参与数据的转发,根端口或指定端口收到的需要转发的数据只能从其他的根端口或指定端口转发出去。从整个网络来看,就等于阻塞了某些链路,而其它的链路组成一个无回路的树型拓扑结构。
3、链路故障处理
Hello Time :网桥从指定端口以Hello Time为周期定时发送配置消息
Message Age和Max Age:端口保存的配置消息有一个生存期Message Age字段,并按时间递增,每当收到一个生存期更小的配置消息,则更新自己的配置消息,当一段时间未收到任何配置消息,生存期达到Max Age时,网桥则认为该端口连接的链路发生故障,进行故障的处理。
如果活动的链路发生故障怎么办呢?生成树算法提供了一种定时器策略,配置消息中携带了一个生存期的域值,根网桥从它的所有端口周期性的发送生存期为0的配置消息,收到配置消息的网桥也同样从自己的指定端口发送自己的生存期为0的配置消息。如果生成树的枝条出现故障,则这条链路下游的端口将不会收到新鲜的配置消息,自己的配置消息的生存期值不断增长,直至到达一个极限。该网桥将抛弃这个过时的配置消息,重新开始生成树计算。
其中,定时发送的周期为hello time;配置消息的生存期为message age;最大生存期为max age。
链路故障处理一:
假设网桥81的端口4上的配置消息过时了,则网桥81抛弃掉(23, 14, 100)这条配置消息,重新选择端口3为新的根端口,仍然阻塞端口5,将端口1、端口2和端口4作为指定端口,自己的配置消息也没有变化,从端口1、端口2和端口4发送(23,15,81)的配置消息。
链路故障处理二:
假设端口3的配置消息也过时了,则(23,14,321)这条配置消息也被丢弃,重新选择端口5为新的根端口,将端口1、2、3、4都作为指定端口,自己的配置消息变为(23,16,81),并从四个指定端口发送出去。
链路故障处理三:
如果端口5的配置消息也过时了,则配置消息(23,15,80)丢掉,网桥以自己为根发送(81,0,81)的配置消息,直到收到更好的配置消息,重新计算生成树。
4、临时回路的处理
当链路发生故障,网络的拓扑发生改变,新的配置消息总要经过一定的时延才能传遍整个网络。那么在其它网桥没有发现拓扑改变之前会发生什么事情呢?有这样两种可能性存在:
● 一种可能是:在旧的拓扑中处于转发状态的端口在新的拓扑中应该被阻塞,可是它自己并没有意识到这一点,造成临时的路径回环;
● 另一种可能是:在旧的拓扑中被阻塞的端口应该在新的拓扑中参与数据转发,如果它自己不知道,则会造成网络暂时失去连通性。
第二种可能没有太大关系,最多丢掉几个包。而第一种可能的危害前面已经说的很多。生成树算法的定时器策略提供了一种很好的解决方案。
如何避免临时回路:
当一个被阻塞的端口要变成转发状态时,需要经历一定的延时。这个时延最起码必须是新的配置消息传播到整个网络所须时间的两倍。假设forward delay是配置消息传遍整个网络的时间,我们可以设计一个中间状态,处于中间状态的端口只能够学习站点的地址信息,而不能参与数据转发。端口从阻塞状态经过forward delay的延时后进入中间状,再经过forward delay延时后,才能开始转发数据。
端口的几种状态:
为解决临时回路的问题,生成树协议引入了若干中间状态。在802. 1D的协议中,端口有这样几种状态:
● Disabled:表示该端口不可用,不接收和发送任何报文。这种状态可以是由于端口的物理状态导致的,也可能是管理者手工配置的。
● Blocking:处于这个状态的端口不能够参与转发数据报文,但是可以接收配置消息,并交给CPU进行处理。不过不能发送配置消息,也不进行地址学习。
● Listening:处于这个状态的端口也不参与数据转发,不进行地址学习;但是可以接收并发送配置消息。
● learning:处于这个状态的端口同样不能转发数据,但是开始地址学习,并可以接收、处理和发送配置消息。
● forwarding:一旦端口进人该状态,就可以转发任何数据了,同时也进行地址学习和配置消息的接收、处理和发送。
端口的状态迁移
上图显示了端口的五种状态的迁移关系:
从图中我们可以看出来,当一个端口被选为根端口或指定端口,就会从blocking状态迁移到一个中间状态listening状态;经历forward delay的延时,迁移到下一个中间状态leaming状态;再经历一个forward delay延时,迁移到forwarding状态。
当一个端口由于拓扑发生改变不再是根端口或指定端口了,就会立刻迁移到blocking状态。并且,处于任何状态的端口都可能因为端口可用或者不可用变成disabled状态。
从listening迁移到leaming,或者从leaming迁移到forwarding状态,都需要经过forward delay延时,通过这种延时迁移的方式,能够保证网络中需要迁移到discarding状态(即为胶片中的Blocking状态)的端口已经完成了迁移,因此能够有效的避免临时环路的形成。
5、拓扑改变时处理
MAC地址信息的生存期
拓扑结构改变会使站点在生成树中的相对位置发生移动,那么网桥原来学习到的MAC地址信息就可能变得不正确,所以学习的MAC地址信息也要有生存期,如果该时间内没有证明地址的正确,则抛弃这条地址信息。
在生成树协议中有两个生存期:- 拓扑稳定的时候用较长的生存期 - 拓扑改变的时候用较短的生存期
网络拓扑发生改变的时候,并不是所有的网桥都能够发现这一变化,所以需要把拓扑改变的信息通知到整个网络。
网桥通过“学习”了解站点信息,并把它保持在地址表中。由于站点可以被移动,因而网桥应该能够将某些站点老化,除非这个站点能够不断被证明仍然存在。站点信息的老化是通过站点信息在一段时间内没有重新确认而导致超时来实现的。
如果站点位置的改变是由于站点物理上被移动了,则我们可以将站点信息老化时间以分钟为数量级,这是因为拔下某个站点的插头,再移动这个站点(物理上移动),然后再插上插头到站点可以开始工作,很可能花掉十几分钟时间。而且被移动的站点可以通过某种策略,以尽快开始工作。例如,它们可以向广播地址发送包。当所有的网桥看到从源S发来的包后,它们将修正到S的条目。基于上面考虑,一般将站点信息的老化时间设为15分钟。
然而,重新生成一棵生成树会改变多个站点的位置。而且这种逻辑上的位置改变站点本身是无法主动觉察到的,因此也就不能通过某种特殊机制(如发广播包)来修正站点的地址信息。让很多站点在拓扑结构改变了1 5分钟之后都不能被访问是不大现实的。
因此,如果地址表的老化时间值大于生成树重新计算所需的时间,我们认为需要有两个缓冲区超时值:
1) -般情况下使用的较长值(较大值)。
2)生成树重新计算后使用的较短的缓冲区起时值
当站点的物理位置发生变化,网桥学习到的地址信息可能就不正确了,所以每条学习到的地址信息有一个生存期,如果在生存期内没有报文来确认这条地址是正确的,就丢弃它。大家可以想象到,如果站点的物理位置变化,比如把一台终端设备从一个接入端口拔下来,再插到另一个端口上,肯定会花费比较长的时间,那么这段时间就不会发送任何报文,它的地址信息就会因此而从网桥的地址表中删除掉。所以这种情况中的地址信息生存期可以是一个比较长的值。
但是当生成树的拓扑发生变化,站点的相对位置也可能会相应的变化。比如图中,LANC上的站点对于根网桥来说,本来是端口1所在网段的;后来LANA的链路出现故障,导致生成树重新计算并为网桥B2选择了一条新的通往根桥的路径,这个时候LANC上的站点对于根网桥来说就转移到了端口2所在网段上。
如果在很长一段时间内根网桥没有发现这个变化,就会将给LANC的报文从端口1转发出去,而真正的目的地可能会收不到这些报文。怎么办呢?我们的解决办法是给每条学习到的地址信息加上一个较短的生存期。在网桥发现拓扑变化期间,站点的相对位置变化的可能性最大,所以用这个较短的生存期来限制地址表项。这时您可能会问,为什么不担心站点的物理位置变化会导致很长时间收不到报文呢?很简单,因为站点物理位置变化期间是不需要收到任何报文的。
但是问题又来了,并不是桥接网络中的所有网桥都会发现拓扑已经改变了的。比如上一页图中,B2的局部变化对网络的其他部分没有什么影响,网桥B1、B3和B4可能根本就没有意识到生成树已经和从前不同了,因为对这些网桥来说,各个端口的状态没有任何变化,链路也是正常畅通的。不同的只是LANC的相对位置,可是这一点只有LANC上的站点发送报文的时候才能被发现,而没有发送之前这些网桥都错误地用旧地址转发表项来转发到LANC的数据,所以有必要让网络中的所有网桥都意识到:网络拓扑已经变化了!地址转发表项可能已经出现异常了!必须给那些学习到的地址表项设置较短的生存期!
这就是生成树协议中拓扑改变报文的用途。拓扑改变报文有三种:拓扑改变通知消息,拓扑改变应答消息,拓扑改变消息。下面分别来介绍一下三种报文的含义:
1)拓扑改变通知消息:发现拓扑改变的网桥从根端口以hello time为周期定时向根网桥的方向发送拓扑改变通知消息,每一个收到这个通知消息的非根网桥也同样要向根桥的方向发迭这个消息。这个消息是一个格式比较特殊的报文,它没有数据项,只需要让根知道拓扑改变即可。
2)拓扑改变应答消息:收到拓扑改变通知消息的网桥如果不是根网桥需要响应一个拓扑改变应答消息,收到应答消息的网桥就知道了:哦,你已经收到我的通知消息,那我就停止发送通知消息吧。这个消息是携带在该网桥发送的下一个配置消息中,用一个拓扑改变应答标志位来标识。
3)拓扑改变消息:根网桥收到拓扑改变通知消息,或者自己发现拓扑改变之后,则在一个时间段内,在以hello time为周期定时向其他网桥发送的配置消息中,携带一个拓扑改变的标志位。收到这个消息的网桥将会应用那个较短的地址表项生存期,直到收到的配置消息中不再有这个标志。
上图中显示了拓扑改变通知的全过程
6、生成树协议不足
在前面介绍的有关生成树协议的一些特性,在实际的应用中,生成树协议也有很多美中不足的地方,最主要的缺点是端口从阻塞状态到转发状态需要两倍的forward delay时延,导致网络的连通性至少要几十秒的事件后才能恢复。如果网络中的拓扑结构变化频繁,网络会频繁的失去连通性。为了尽量避免网络失去连通性,交换机应用了一种“快速生成树”算法。
快速生成树协议(RSTP)
(1)快速生成树协议介绍
RSTP是从生成树算法的基础上发展而来,承袭了它的基本思想,即也是通过配置消息来传递生成树信息,并通过优先级比较来进行计算。
快速生成树能够完成生成树的所有功能,不同之处就在于:快速生成树在不会造成临时环路的前提下,减小了端口从阻塞到转发的时延,尽可能快的恢复网络的连通性,提供更好的用户服务。
(2)快速生成树协议改进
快速生成树从三个方面实现“快速”功能:
1)一个新的根端口从阻塞到转发:如果旧的根端口已经知道自己不再是根端口了,并进入阻塞状态,且此时新的根端口连接的网段的指定端口正处于转发状态,那么这个新的根端口就可以无延时的进入转发状态。
图中所示的情况就是一种典型的根端口快速状态迁移的例子。
2))一个非边缘指定端口从阻塞到转发: “非边缘”的意思是这个端口连接着其他的网桥,而不是只连接到终端设备。等待进入转发状态的指定端口向下游发送一个握手请求报文,如果下游的网桥响应了一个赞同报文,则这个指定端口就可以无延时的进入转发状态。
握手请求报文是在该端口发送的下一个配置消息中,用一个握手标志位来标识;握手响应报文也是携带在端口发送的下一个配置消息中,用一个赞同标志位来标识。
图中所示的情况是一个典型的非边缘指定端口快速状态迁移的例子。
不过这种快速状态迁移需要一个前提条件:发起握手的端口与响应握手的端口之间是一条点对点链路!如果这个条件不满足,握手将不会被响应。那么这个指定端口只好等待两倍的forward delay时延了。
可见点对点链路对快速生成树的性能有很大的影响,下面列举了点对点链路的几种情况:
. 该端口是一个链路聚合端口,与聚合链路绑定; (请参考端口聚合部分的内容)
. 该端口支持自协商功能,并通过协商工作在全双工模式;(请参考相关章节 的描述)
. 管理者将该端口配置为一个全双工模式的端口。
其他的情况下,端口连接的链路都不能认是点对点链路。
还有一点需要注意的,响应握手的网桥只有在把自己的非边缘指定端口迁移到阻塞blocking状态之后,才会响应一个赞同报文。那么响应握手的网桥的非边缘指定端口也需要向下游发起握手了。也就是说,握手会不断扩散直到网络的边缘,
如上图所示。
3)边缘端口从阻塞到转发:这一点很好理解,所谓“边缘端口’’是指那些直接和终端设备相连,不再连接任何网桥的端口。这些端口的状态并不影响整个网络的连通,也不会造成任何的环路。所以网桥启动以后,这些端口可以无时延的快速进入转发状态。
快速生成树改进后的性能归纳如下:
1)如果网络的拓扑变化是根端口的改变引起的,并且有一个备用的端口可以成为新的根端口的话,那么故障恢复的时间就是根端口的切换时间,无需延时,无需传递配置消息,只是一个处理的延时。如果CPU足够快的话,这个恢复时间你可能根本就没觉察到。
2)如果网络的拓扑变化是指定端口的变化引起的,并且也有一个备用端口可以成为新的指定端口的话,那么故障恢复的时间就是一次握手的时间。而一次握手的时间就是发起握手和响应握手的端口各发送一次配置消息的时间,即两倍的hello time。不过握手的扩散往往使情况糟糕一点,最坏的情况是:握手从网络的一边开始,扩散到网络的另一边,比如网络直径为7的情况,最多要经过六次握手,网络的连通性才能被恢复。
3)如果网络的拓扑变化是边缘端口的变化引起的,无需延时。网络的连通性根本不受影响。
(3)生成树和快速生成树的比较
除了端口状态迁移方面的改进,快速生成树协议与生成树协议的区别还有很多。总结一下:
1)协议版本不同:在发送配置消息中有一个域携带了协议版本号。
2)端口状态迁移方式不同;
3)配置消息的格式不同;
4)拓扑改变消息的传播方式不同。
这些改进都是为了配合“快速”的需求。
另外需要说明的是,快速生成树改进的只是生成树的收敛时间。并没有解决在整个桥接网络只应用一个单生成树实例的不足。因此建议在实际组网中不要使网络直径超过7。
7、生成树协议配置
首先我们来介绍一下在华为的中低端交换机上是如何配置生成树的:
交换机的生成树功能在缺省情况下是处于关闭状态的。如果组网中需要通过环路设计来提供网络的冗余容错的能力,而同时又需要防止路径回环的产生,就需要用到生成树的概念。我们可以在系统视图模式下,通过一条系统视图命令来开启生成树功能:
[Quidway] stp enable
在这里需要强调的是,如果用户在系统视图下打开了生成树开关,那么所有端口都默认参与生成树计算。如果用户可以确定某些端口连接的部分不存在回路,则可以通过一条在端口视图模式下的命令关闭特定端口上的生成树功能:
[Quidway-Ethernet0/1】stp disable
以此类摊,用户还可以根据具体的需求来关闭交换机的生成树功能或者在已经关闭生成树功能的端口上重新开启生成树。(具体命令格式请参见Quidway系列交换机命令手册
生成树的可配参数:
启动生成树以后,可以通过配置相关参数来指定根桥、每个网桥的根端口以及为每个LAN指定指定网桥。
生成树的可配置参数主要有:
1)网桥的优先级:Bridge Priority
2)端口的优先级:Port Priority
3)端口连接的链路的路径开销:Port Path Cost
4)三个定时器的初值:hello time,max age,forward delay
5)整个交换网络的直径:Bridge Diameter
在系统视图配置模式下配置的参数是整个交换机必须遵从的参数,而在接口配置模式下配置的参数则是该接口需要遵从的参数。
上表中所描述的缺省值是指系统启动时所采用的参数值,如果用户不对其进行任何修改,则系统会始终采用这个值。
根网桥的选定对网络性能的影响是比较重要的。因为根桥是根据桥ID的数值大小来确定,桥的ID号是由两部分组成:优先级+桥的MAC地址。只有优先级相等的情况下,才会用MAC地址来进行比较。比如缺省情况下,所有交换机的优先级都是同一个值,那么就根据MAC地址选出了根桥,但实际情况并不一定这个MAC地址最小的网桥就是最佳的根。所以我们可以通过配置网桥的优先级来指定根桥。优先级越小,该网桥就越有可能成为根。配置命令为:
[Quidway] stp priority bridge-priority
每个端口对应的路径开销决定了本网桥到根的路径开销。一般说来,端口对应的路径开销取决于端口对应的链路速率。上面的表格中列出了路径开销和链路速率
的对应关系。用户可以参照这张表进行配置。
另外,一般端口的路径开销越大,该端口连接的LAN就越接近生成树的末梢,那么这个端口的流量就较少。如果某个LAN的带宽较小或者用户希望减少某个LAN的流量,就可以将该端口对应的路径开销配置一个较大的值。配置命令为:
[Quidway-Ethernet0/1】stp cost cost
在配置消息进行优先级比较的时候,有两种情况会用到端口ID的比较:
1)网桥收到N条根桥ID相同,根路径开销相同,发送桥ID也相同的配置消息,也就是说发送网桥的多个端口连接到了一个LAN上形成回路,或者两个网桥之间存在平行链路;
2)网桥的不同端口收到完全相同的配置消息,也就是说该网桥的多个端口连接到了一个LAN上形成回路。
解决上述两种情况的办法是给每个端口分配一个本地唯一的标识号,也就是端口ID。端口ID由两部分组成:端口优先级+端口号。端口的优先级可以由用户根据实际情况来配置,从而能够人为的控制在上述两种情况中选择参与生成树的端口。配置命令为:
[Quidway-Ethernet0/1】stp port priority port-priority
配置端口的Hello Time
配置hello time需要注意的是:较长的hello time可以降低生成树计算的消耗,因为网桥可以不那么频繁的发送配置消息;较短的hello time可以在丢包率较高的时候,增强生成树的健壮性,避免因为丢包而误认为链路故障。但凡事过犹不及。过长的hello time会导致因为链路丢包而使网桥认为链路故障,开始生成树重新计算;过短的hello time会导致网桥频繁发送配置消息,增加网络负担和CPU负担。所以建议用户根据网络的具体情况进行配置。配置命令为:
[Quidway] stp timer hello centiseconds
配置端口的Max Age
max age是用来判断配置消息是否“超时”的参数,如果这个值太小,生成树计算就会比较频繁,而且很可能仅仅是网络拥塞导致的,而不是我们想象的链路故障。如果这个值太大,真正的链路故障可能就不能被及时的发现,降低网络自适应能力。因为max age与网络的传播延时有关,可以根据网络直径计算得到一个比较可靠的数值,所以推荐通过配置网络直径间接改变这个参数,而不是想当然的直接配置。配置命令为:
[Quidway] stp timer max-age centiseconds
配置端口的Forward Delay
forward delay是用来防止端口在拓扑改变消息传遍整个网络之前就进入转发状态。如果这个值太小,可能就避免不了临时回路;但如果这个值太大,网络就会较长时间不能恢复连通。这个参数也是和网络的传播延时有关,所以推荐通过配置网络直径间接改变这个参数。配置命令为:
[Quidway] stp timer forward-delay centiseconds
配置网络直径
网络直径的定义为:任意两台终端设备之间通过的交换机数目的最大值;改变网络直径会间接影响到Max Age和Forward Delay这两个参数的值,而且这种影响比直接手工配置两个参数较为客观;所以当网络中加入交换机可以通过改变网络直径参数来达到适应网络状况的目的。
bridge diameter对生成树的性能影响比较大。因为它可以间接的改变max age和forward delay参数,用户需要根据实际情况进行配置。而且在只应用单生成树实例的网络中,网络直径最好不要超过7,配置命令为:
[Quidway] stp bridge-diameter bridgenum
8、配置举例
图中为一实际应用的组网图,三层交换机B1的端口4上连接有一文件服务器,端口3连接到公网上,B2也为三层交换机,同通过两条并行链路与B1相连以作为B1的备份。二层交换机B3到B6分别与B1和B2的端口相连,并向用户提供访问端口。所有交换机的MAC地址是随机分配的。很显然,为了提高网络的性能,应该使交换机B1位于网络的中心位置(即生成树的根)。
我们可以通过下面几条命令来配置并启动生成树协议,使网络结构能够满足我们的设计需求。
第一步:在所有的交换机上启动生成树协议,命令如下:
[Quidway] stp enable
第二步:配置B1的优先级为4096(缺省值为32768),使其作为整个桥接网络的根桥,命令如下:
[Quidway] stp priority 4096
第三步:设置B1的端口1的优先级为64,以在两条平行链路中选择一条作为B1和B2之间的转发链路,命令如下:
[Quidway-Ethernet0/1】stp port priority 64
注意:此处两条并行链路的路径费用值相同。
监控与维护
通过display stp命令我们可以察看生成树的统计和状态信息,以确定当前生成树的结构。如在上节所提到的组网图中,我们在交换机B2上运行命令:
<Quidway> display stp interface ethernet0/2
Protocol mode: IEEE RSTP
The bridge ID (Pri.-MAC): 32768-OOeO.fc06.a075
The bridge times: Hello Time 2 sec, Max Age 20 sec, Forward Delay 15 sec
Root bridge ID (Pri.-MAC): 32768-OOe0. fc06.a075
Root path cost: 0
Bridge bpdu-protection: disabled
Port 1 (Ethernet0/2) of bridge is Forwarding
Port spanning tree protocol: enabled
Port role: DesignatedPort
Port path cost: 200
priority: 128
Designated bridge ID (Pri. -MAC): 32768-OOe0.fc06.a075
The Port is a non-edged port
Connected to a point-to-point LAN segment
Maximum transmission limit is 3 BPDUs per hello time
Times: Hello Time 2 sec, Max Age 20 sec
Forward Delay 15 sec, Message Age 0
BPDU sent: 35
TCN: O, RST: 35, Config BPDU: 0
BPDU received: 0
TCN: 0, RST: 0, Config BPDU: 0
以上信息表明:当前运行的是IEEE的快速生成树协议;交换机的优先级为61440;交换机的Hello Time时间配置为2秒;Max Age时间为20秒;Forward Delay时间为15秒;根桥优先级为0,根桥MAC地址为OOea.fc00.0011;本交换机到根桥的路径开销为200;交换机端口1(以太网端口Ethernet0/2)已开启了生成树协议;端口为非边缘端口;端口的路径开销为2000;端口的优先级为128;配置消息发送周期为2秒;配置消息的最大生存期为20秒;端口状态迁移延时为15秒;配置消息的生存期为0秒。通过reset stp俞令可以清除这些统计信息,如清除以太网端口2上的统计信息,可以采用下面命令:
<Quidway> reset stp interface ethernet0/2