上篇博客给出了生成树协议STP(Spanning Tree Protocol)产生的目的以及与其相关的重要名词,但是详细的来说,交换机是如何通过发送桥接协议数据单元(BPDU)来选择阻塞端口的呢?

 

生成树端口状态:采用生成树协议的交换机上的每个第二层接口,它均会处于一下物种状态之一:

  阻塞(blocking):在阻塞状态,第二层的接口不参与SPDU帧的转发,但是却能够监听流入的BPDU。此时端口不能学习接受帧的mac地址。

  监听(listening):在监听状态中,交换机能够决定根,并且可以选择根端口(Root Port)、指定端口(Designated Port)和非指定端口(Nondesignated Port)。在监听状态的过程中端口不能学习任何接受帧的单播地址。

  学习(learning):在学习状态中,第二层接口准备参与帧转发。端口能够在这个状态中学习流入帧的mac地址,但却不能转发帧。

  转发(forwarding):在转发状态中,第二层接口能够转发帧。端口学习到接受帧的源mac地址,并且可以根据目标mac地址而将他们进行恰当转发。

  禁用(disable):在禁用状态中,第二层接口不参与生成树,并且不能转发数据帧。

 

对于BPDU帧所承载的三种计时器,他们能够影响到STP性能和状态变更:

  Hello时间:由根网桥端口发出,其他网桥转发的BPDU,每相邻的BPDU之间的时间就是hello时间。默认为2s,修改范围1~10s。

  转发延迟:在监听状态和学习状态停留的时间。默认为15s,修改范围4~30s。

  最大寿命:网桥端口保存配置BPDU信息的最大时间长度。默认为20s,修改范围6~40s。

  应该注意的是,网络的生成树拓扑依附于根网桥的计时器。根网桥将BPDU中的计时器传递给第二层拓扑中的所有交换机。

  当交换机接终端用户时,那么在这条链路上的转发便不会产生STP环路,该接口不用监听和学习,所以可以直接将其划为PortFast,以跳过监听和学习的状态,直接进入转发状态。强烈建议将所有的接终端用户的接口设置上PortFast属性,以节省了接口有down到forwarding的时间。

  配置命令为:

 

Switch(config-if)#spanning-tree portfast 
%Warning: portfast should only be enabled on ports connected to a single host. Connecting hubs, concentrators, switches, bridges, etc... to this interface  when portfast is enabled, can cause temporary bridging loops.
Use with CAUTION
%Portfast has been configured on FastEthernet2/1 but will only have effect when the interface is in a non-trunking mode.

 

STP操作:

  在创建无环路生成树的过程中,要经过以下几个步骤的操作。

  1、选举一个根网桥(RootBridge)

    由前文可知,网桥IP就是在优先级(2个字节)的后面接上mac地址(6个字节)每个交换机接口的这个8字节的网桥ID,通过与其他交换机交换的BPDU信息,来判断最小的网桥ID,此ID就被选举为根ID,该接口所在的交换机就是根网桥RB。

    注意:在给定的网络中,每个vlan中只能有一个网桥担当根网桥RB。

    注意:Cisco的交换机的mac地址就是vlan1的mac地址,并且Cisco交换机的每个接口都有mac地址。其他厂商的设备的vlan1的mac地址不一定是交换机的mac地址,接口也不一定有mac地址。

  2、选择所有非根网桥的根端口

    STP协议规定在每一个非根网桥上建立1个根端口,该根端口必须是非根网桥到根网桥的最低开销路径(与链路带宽决定)。当有多条等价最低开销路径时,那么非根网桥选择具有最低端口ID(仅仅对该交换机有效)的端口。

  3、选择各个网段的指定端口

    在每个网段中,选择到达根网桥的路径开销最低的端口为指定端口(根网桥上的端口均为指定端口)。当路径开销相等的情况下,则比较网桥ID,选择较小的网桥上的端口作为指定端口。

 

 

交换机制定决策过程中依次使用如下5种标准:

  1、  最低的根网桥ID;

  2、  最低的到达根网桥的路径开销;

  3、  最低的发送方网桥ID;

  4、  最低的端口优先级;

  5、  最低的端口ID;