生成树协议( stp)
理解 STP的工作原理
会配置 PVST+实现交换网络负载分担
了解 BPDU(桥协议数据单元)
简介
在实际的网络环境中,物理环路可以提高网络的可靠性,当一条线路断掉的时候,另一条链路仍然可以传输数据。但是,在交换网络中,当交换机接收到一个未知目的地址的数据帧时,交换机的操作是将这个数据帧广播出去,这样,在存在物理的交换网络中,就会产生一个双向的广播环,甚至产生广播风暴,导致交换机死机。
 这就产生一个矛盾,需要物理环路来提高网络可靠性,而环路又可能产生广播风暴,如何才能两全其美呢?
 本章将要讲述的 STP,就是用来解决这个矛盾的。STP协议在逻辑上断开网络的环路,防止广播风暴的产生,而一旦正在用的线路出现故障,逻辑上被断开的线路又被连通,继续传输数据。
 本章重点:
STP的工作原理
配置 PVST+以实现交换网络的负载分担
本章难点:
STP的工作原理
4 .1STP概述
4.1 .1交换网络环路的产生
 

               图 4.1物理拓扑
如图4 .1所示,PC1和PC2通过交换机相连。网络初始状态时,PC1与PC2通信过程如下。
(1)      在网络通信最初, PC1的ARP条目中没有PC2的MAC地址,根据ARP原理PC1首先会发送一个ARP广播请求(请求PC2的MAC地址)给交换机SW1.
(2)      当 SW1收到ARP的广播请求时,根据交换机转发原理,SW1交换机会将广播帧从除接收端口之外的所有端口转发出去(即该广播会从F0/1和F0/2分别转发给SW2和SW3)。
(3)      SW2收到广播帧后,同样根据交换机转发原理,将广播帧从 F0/2和连接PC2的端口转发,同样,SW3收到广播帧后,将其从F0/2端口转发。
(4)      SW2从 F0/2端口收到从SW3发送的广播帧后,将其从F0/2和连接PC2的端口转发;同样,SW3收到从SW2发送的广播帧后。将其从F0/1端口转发。
(5)      SW1分别从 SW2、SW3收到广播帧。然后将从SW2收到的广播帧转发给SW3,而将从SW3收到的广播帧发给SW2.
SW1、 SW2和SW3会将广播帧相互转发,这时网络就形成了一个环路。而交换
机之间并不知道,这将导致广播帧在这个环路中永远循环下去(如图4 .2所示)
 

   
              4 .2广播风暴的产生
在实际网络环境中情况要复杂的多,当广播帧经过交换机时,交换机就以指数的形式生成广播帧(交换机从除收到该广播帧之外的所有端口转发广播帧)。这种广播帧会越来越多,最终形成广播风暴,导致网络瘫痪。
        这种广播风暴只有在物理环路消失时才可能停止。
   但是环状的物理链路能够的网络提供备份线路,增强网络的可靠性。这在网络设计中是必要的,因此,这就需要一种解决方法,一方面保证网络的可靠性,另一方面还要防止广播风暴的产生。
      STP协议就是用来解决这个问题。 STP协议并不是断掉物理环路,而是在逻辑上断开环路,防止广播风暴的产生。
4 .1.2STP简介
     STP就是把一个环形的结构改变成一个树形的结构。STP协议就是用来将物理上存在环路的网络,通过一种算法,在逻辑上阻塞一些端口,来生成一个逻辑上树形结构。如图4.3所示,对于三台交换机构成环路的网络,在使用STP协议后,交换机SW2与SW3连接链路的一个端口被协议从逻辑上阻塞,这条线路也就不能再传输数据了,也就是从逻辑上打破了环路。当正常通信的链路发生故障时,被逻辑上阻塞的链路被重新激活,使数据能从这条链路正常传输
 

          图4 .3三台交换机STP功能示意1
 

 
         图4 .4三台交换机STP功能示意2
那么 STP协议如何实现将环形结构的拓扑变成树形结构呢?STP协议如何知道哪些接口应该阻止,哪些接口应该用来传输数据呢?它依据的算法是什么样的?下面将详细讲解IEEE802.1d STP的工作原理。
 
4 .2STP工作原理
4 .2.1生成树算法及验证( STP选举过程)
   1 .生成树算法
       生成树协议运行生成树算法( STA)。生成树算法很复杂,但是其过程可以归纳为以下三个步骤。
(1)      选择根网桥( ROOT BRIDGE)
(2)      选择根端口( ROOT PORTS)
(3)      选择指定端口( DESIGNATED PORTS)
 *******************************************************************************
名词解释: 网桥的交换机的前身,由于 STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用网桥这一术语。
******************************************************************************
 下面以一个例子来讲解这几个步骤的选择过程,它采用如图4 .5所示的网络拓扑。
 

 
 
 
 
 
             图4 .5STP收敛过程示例拓扑图
       要将图所示的网络结构变成一个无环的拓扑,首先, STP要选择根网桥,前面讲过,STP是将一个环形的拓扑变成一个树状的拓扑结构,因此选择根网桥实现上就是为网络选出一个树根,那么选择根网桥的依据是什么呢?
1) 选择根网桥
 

 

 

   
   选择根网桥的依据是网桥 ID,网桥ID是一个八字节的字段,其组成结构如图4.6所示,前面两个字节的十进制数称为网桥优先级,后六个字节是网桥的MAC地址。 
网桥优先级是用于衡量网桥在生成树算法中优生级的十进制数,取值范围为0 ~65535,默认值是32768.
   网桥 ID中的MAC地址是交换机自身的MAC地址,可以使用命令 show version 在交换版本信息中查看交换机自身的MAC地址,显示如下:
     Base Ethernet MAC address :    00:0D:28:00:B1:00
      按照生成树算法的定义,当比较那个 STP参数的两个取值时,值小的优先级高。因此,在选择根网桥的时候,比较的方法是看哪台交换机的网桥ID的值最小,优先级小的被选择为根网桥,在优先级相同的情况下,MAC地址小的为根网桥。
   在如图4 .5所示的拓扑中,SW2的优先级为4096,SW1与SW3的优先级为默认值32768,因此,SW2被选为根网桥,如图4.7所示。
 
              图4 .7收敛过程选择根网桥
    如果 SW2的优先级也是32768时,三台交换机的优先级相同。比较三台交换机的MAC地址,SW2的MAC地址最小,所以SW2被选为根网桥。
2) 选择根端口
选出了根网桥之后,网络中的每台交换机必须和根网桥建立关联,因此, STP将开始选择根端口的过程。根端口存在每个非根网桥上,需要在每个非根网桥上选择一个根端口。
选择根端口的依据按照顺序依次如下。
到根网桥最低的根路径成本。
直连的网桥 ID最小
端口 ID最小
根路径成本是两个网桥间的路径上所有链路的成本之和,也就是一个网桥到达根网桥的中间所有链路的路径成本之和,如图 4.8所示
 

 
                       图 4.8根路径成本与路径成本
路径成本用来代表一条链路带宽的大小,见表 4-1,一条链路的带宽越大,它的传输数据的成本也就越低。
 

4-1 带宽与路径成本的关系
端口 ID是一个二字节的STP参数,由一个字节的端口优先级和一个字节的端口编号组成,如图4.9所示。
 

端口优先级是一个可配置的 STP参数,在基于IOS的交换机上,端口优先级的十进制取值范围是0~255,默认值是128。
端口编号是 catalyst用于列举各个端口的数字标识符。在基于IOS的交换机上,可以支256个端口。端口编号不是端口号,但是端口号低的端口,端口编号值也较小。
在 STP选择根端口的时候,首先比较交换机端口的根路径成本,根路径成本低的为根端口,当根路径成本相同的时候,比较连接的交换机的网桥ID值,选择网桥ID值小的作为根端口;当网桥ID相同的时候,比较端口ID值,选择较小的作为根端口。
 
 
*******************************************************************************
注意啦:在比较端口 ID时,比较的是接收到的对端的端口ID值
****************************************************************************
在如图 4.10所示的拓扑中,已经选出了根网桥,那么下一步就需要在SW1和SW3上各选择一个根端口,在本例中,所有的链路都是100MB/S的,那么下一步就需要在SW1和SW3上直接与SW2相连的接口的根路径成本是19,而SW1 与SW3之间连接的端口,其根路径成本应该是19+19=38;因此,在SW1与SW3上,直连SW2的端口被选为根端口,如图4.10
 
 

 
              图 4.10 STP收敛过程选择根端口
3) 选择指定端口
         选择完根网桥和每台交换机的根端口后, 一个树形结构已初步形成,但是,所有链路仍连接在一起,并可以都处于活动状态,最后导致形成环路。
       为了消除环路形成的可能, STP进行最后的计算,在每一个网段上选择一个指定端口,选择指定端口的依据有三个。
       根路径成本较低
       所在的交换机的网桥 ID值较小
       端口 ID较小
   在 STP选择指定端口的时候,首先比较同一网段上端口中根路径成本最低的,也就是将到达根网桥最近的端口作为指定端口;当根路径成本相同的时候,比较这个端口所在的交换机的网桥ID值,选择一个网桥ID值小的交换机上的端口作为指定端口;当网桥ID相同的时候,也就是说,有几个位于同一交换机上的端口时,比较端口ID值,选择较小的作为指定端口。
另外,根网桥上的接口都是指定端口,因为根网桥上端口的根路径成本为 0
 如图 4.11所示的拓朴中,首先,作为根网桥的SW2上的端口都是指定端口。那么在SW1 与SW3连接的网段上需要在两个端口之间选出一个指定端口来。
 首先比较两个端口的根路径成本,这两个端口的根路径成本的值都是 38 (19+19),那么只能比较网桥的ID 了,现在SW1与SW3的网桥优先级相同,SW3的MAC地址小于SW1的MAC地址,因此,SW3的网桥ID小,所以SW3上的端口选作指定端口(如图4.11所示)。
   STP的计算过程结束,这时,只有在 SW1上连接到SW3的端口既不是根端口,也不是指定端口,那么这个端口被阻塞(BLOCK)。被阻塞的端口不能传输数据。
 
      由于 SW1上连接SW3的接口被阻塞,所以图4.11所示的拓朴可以等价为图4.12 SW1和SW3之间的链路成为备份链路。
 
2.生成树算法验证
在了解了生成树协议的选举过程后,下在分别以两台和三台交换机为例,验证生成树选举算法。
两台交换机的生成树协议选举过程
   通过两条速率不等的链路连接的两台交换机的 STP选举过程。
 按照图 4.13所示连接网络(如果没有ethernet端口,可以将fastethernet端口速率改为10Mb/s),其中的交换机设备都有为默认配置,SW1的MAC为001f.caff.1000,SW2的MAC为0021.1ba5.6980.
 

图 4.13两台交换机通过两台链路连接,且两条链路速率不等
按照 STP的工作原理来选择根网桥、根端口和指定端口。
      首先,根据网桥 ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,在这种情况下选择,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,链路为 10M的COST为100,而100M的   COST为19,所以SW2的F0/24端口为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。所以 SW1的F0/23的F0/24成为指定端口,SW2的F0/23端口阻塞。
在交换机上可以使用命令 show spanning-tree查看生成树。   
三台交换机的生成树协议选举过程
   按照图 4.15所示连接网络,链均为100M链路,其中的交换机设备都为默认配置,
SW1的 MAC为001fcaff.1000,SW2的MAC为0021.1ba5.6980,SW3的MAC为0021.d780.7400.
 

首先,根网桥 ID选择根网桥。由于交换机为默认配置,所以优先级相同,都为32768,MAC地址最小的交换机为根网桥,所以SW1成为根网桥。
然后,根据根路径成本在非根网桥上选择根端口,交换机 SW2和SW3直接与SW1相连的接口根路径成本最低,所以SW2的F0/24端口为根端口,SW3的F0/23为根端口。
最后,在每个网络上选择指定端口,由于根网桥交换机的端口都为指定端。在 SW2和SW3相连的网络上包含两面三刀个端口,这两个端口的根路径成本都是38,因此根据网桥ID选择指定端口,所以SW2的F0/23成为指定端口,SW3的F0/24端口阻塞。
在交换机上可以使用命令 show spanning-tree查看生成树。
4.2.2 BPDU( bridge protocol data unit ,桥协议数据单元)
   交换机之间根据网桥 ID选择根网桥,根据根路径成本等选择根端口,那么交换机如何获知网络中其他交换机的网桥ID呢?,根路径成要又是怎样计算出来的?
生成树协议(STP)在交换机互相通信时进行操作,数据报文以桥协议数据单元(BPDU)的形式进行交换。
    每隔2秒,BPDU报文便向所有的交换机端口发送一次,以便交换机(或网桥)能交换当前最新的拓扑信息,并迅速识别和检测其中的环路。
 
 BPDU的两种类型
正常情况下,交换机只会从它的 Root Port上接收configuration BPDU包,但是绝不会主动发送configuration BPDU包给root bridge。
 
这里就需要提到第二种类型的 BPDU包了,也就是Topology Change Notification(TCN) BPDU。
 
这样 ,当一台交换机检测到拓扑变化后,它就可以发送TCN给root bridge,注意TCN是通过root port向root bridge方向发出的.
当交换机从它的 designate port接收到TCN类BPDU时,它必须为其做转发,从它自已的root port上发送出去TCN类型的BPDU包,这样一级一级地传到root bridge后,TCN的任务才算完成.
BPDU报文字段
ü         根网桥ID:根信息是由一个2字节优先级和一个6字节ID所组成。这个信息组合标明已经被选定为根网桥的设备标识。
ü         根路径成本:路径成本说明了这个BPDU从根网桥传输了多远,成本是多少。这个字段的值用来决定哪些端口将进行转发,哪些端口将被阻断。
ü         发送网络桥ID:这是发送该BPDU的网桥信息。由网桥的优先级和网桥ID组成。
ü         计时器:计时器用于说明生成树用多长时间完成它的每项功能。这些功能包括报文老化时间、最大老化时间、访问时间和转发延迟。
STP利用 BPDU选择根网桥的过程:
    1、当一台交换机第一次启动时,假定自己是根网桥,在BPDU报文中的根网桥字段填入自己的网桥ID,向外发送。
 

 

 

                  交换机假定自己是根网桥并发送 BPDU
    2、交换机比较接收到的 BPDU报文中根网桥ID与自己的网桥ID的值哪个更小,如果接收到的BPDU中的根网桥ID值小于自己的网桥ID,则用接收到的根网桥ID替换现有的根网桥ID,并向外转发。如此不断反复,最终能够选择出全网公认的唯一一个根网桥。
 

 

 

                       交换机用更小的根网桥 ID替换原有的根网桥
    3、收敛以后,如果又一台新的交换机加入进来,则继续比较更网桥 ID,选出新的根网桥。
   
    STP利用BPDU确定端口的跟路径成本:
    1、根网桥发送一个根路径成本为 0的BPDU报文。
 

    2、当离根网桥最近的下一级交换机收到 BPDU报文时,就把BPDU所到达的那个端口的路径成本值与根网桥的根路径成本值相加。
 

    3、邻接交换机再以这个新的累加值作为根路径成本,然后发送出包含此值的 BPDU报文。
    4、当邻接交换机下的每一台交换机都收到这个 BPDU报文时,再把随后的交换机端口路径成本与这个值相加,依次类推。
 
   生成树端口的状态:
    禁用(Disabled):强制关闭(实际并不属于端口正常的STP状态的一部分)
    阻塞(Blocking):只接收BPDU,以便能侦听到其他邻接交换机的信息。老化时间20s。
    侦听(Listening):构建“活动”拓扑,为了使该端口加入生成树的拓扑过程,允许接收或发送BPDU报文,延迟时间15s。
    学习(Learning):构建网桥表(转发BPDU报文的同时,学习新的MAC地址,并添加到交换机的地址列表中),延迟时间15s。
    转发(Forwarding):发送/接收用户数据(可以发送和接收数据帧,也可以收集MAC地址加入到它的地址表,还可以发送BPDU报文)

    IEEEE的通用生成树(CST):不考虑VLAN,以交换机为单位运行STP。
    Cisco的每VLAN生成树(PVST):为每个VLAN使用独立的一个生成树实例。
    Cisco的兼容CST的PVST(PVST+):允许CST信息传给PVST,以便与其他厂商在VLAN上运行生成树的实现方法进行互操作。

    PVST的配置
    SwA(config)#spanning-tree vlan 1 root primary
      配置VLAN 1的根网桥为SwA,并设置优先级为24576,如果配置为secondary,则优先级变成28672
    SwB(config)#spanning-tree vlan 2 priority 8192
      配置VLAN 2的根网桥为SwB,并设置优先级为8192
    以上两条命令不能保证根网桥就是它们自身(SwA或者SwB),主要查看它们的网桥ID。

    SwA(config-if)#spanning-tree vlan 1 cost 19
      修改端口的路径成本为19,即百兆带宽
    SwB(config-if)#spanning-tree vlan 2 port-priority 100
      修改端口的优先级为100

    SwC(config)#interface range f0/1 - 20
    SwC(config-if-range)#spanning-tree portfast
      将SwC的1到20端口配置为速端口
    SwC(config)#spanning-tree uplinkfast
      将SwC配置成上行速链路

    SwA#show spanning-tree vlan 1
      查看VLAN 1的生成树信息

    EthernetChannel(以太网通道)
    Switch(config)#interface range f0/1 - 2
    Switch(config)#channel-group 1 mode on
    Switch(config)#no channel-group
      配置和撤销Switch的1和2端口为通道1
    Switch#show etherchannel summary
      查看Switch的通道信息