STP

1.定位:STP(Spanning Tree Protocol)是生成树协议的英文缩写。STP在IEEE802.1D文档中定义,该协议的原理是按照树的结构来构造网络拓扑,消除网络中的环路,避免由于环路的存在而造成广播风暴问题。

  生成树协议适合所有厂商的网络设备,在配置上和体现功能强度上有所差别,但是在原理和应用效果是一致的。

  二层网络环路将导致广播风暴(没有三层网络的TTL机制)和MAC地址学习错误。

  STP可以增强网络健壮性,避免单点故障,单链路故障。

2.STP的基本原理

  1)冗余链路会产生的问题:

    1.广播风暴

    2.帧的多重复制

    3.MAC地址表不稳定

    4.多个回路

  解决办法是选择生成树协议,阻塞多余的冗余端口。

  生成树协议的目的是维持一个无回路的网络。

  如果一个设备在拓扑中发现一个回路,它将阻塞一个或多个冗余的端口。当网络拓扑发生变化时,生成树协议将重新配置交换机的各个端口以避免链接丢失或者出现新的回路。

  开启了生成树协议后,路由器会发送高优先级的BPDU报文,这是一种二层数据链路报文。被选为根桥的节点会从每个端口发送。收到BPDU报文的节点会转发给其他节点,跳数加1,而如果一个节点发现自己从两个或以上的端口收到BPDU报文,

  那就证明自己有两条或更多条通路连接到根桥,即产生了环路,那么它就会保留一个端口,关闭其他所有收到BPDU报文的端口,所有路由器逐级做同样的操作,整个网络的风暴环路就被关闭了。

  2)生成树协议的基本规则:

    1.选择一个根桥:一个网段(物理网段)只能有一个根桥,根桥上的所有端口都是"指定端口",可以转发数据。

    2.非根桥只有"根端口"可以转发数据,用来和根桥相连的"根端口"只能有一个。其余端口不是"根端口",将被阻塞。

    只有"指定端口"和"根端口"可以转发数据。

  3)根桥的选择方法:

  采用生成树算法的交换机通过"网桥协议数据单元"(BPDU)的数据包定期交换配置信息,其中包括桥ID(Bridge ID)信息。 [桥ID=优先级+交换机MAC] 桥ID小的交换机将成为根桥。优先级可以指定,默认为32768.

  非根桥上的根端口选择方法:

  非根桥到达根桥只需要一个端口(根端口),选择的时候会选择到达根桥路径代价最低的端口,这个端口就叫做根端口。如果到达根桥的路径代价相等则比较端口的MAC,最低的选择为"根端口".

  到达路径的代价一般以带宽为依据,IEEE802.1d规定的路径的代价既开销(cost)如下:

  10Gbps=2       1Gbps=4       100Mbps=19  10Mbps=100

  开销小的将被选择为根端口。

  非根桥上的非根端口在阻塞状态下也能够监听BPDU数据包,如果20秒收不到根桥的信息则开始转换自己的状态:

  blocking(阻塞/只能接收BPDU)——20秒——>listening(监听/接收并发送BPDU)——15秒——>learning(学习/接收、发送BPDU并学习MAC地)——15秒——>forwarding(转发)

  这样大约50秒的时间非根端口转变成为"根端口"或者变为"指定端口"开始转发数据。

    4)端口状态

  Blocking(阻塞状态):此时,二层端口为非指定端口,也不会参与数据帧的转发。该端口通过接收BPDU来判断根交换机的位置和根ID,以及在STP拓扑收敛结束之后,各交换机端口应该处于什么状态,在默认情况下,端口会在这种状态下停留20秒钟时间。

    被阻塞的端口将不能转发帧,它只监听BPDU。设置阻塞状态的意图是防止使用有环路的路径。当交换机加电时,默认情况下所有的端口都处于阻塞状态。

    尽管阻塞端口不能转发帧,但它仍然可以接收帧,包括BPDU。

  Listening(侦听状态):生成树此时已经根据交换机所接收到的BPDU而判断出了这个端口应该参与数据帧的转发。于是交换机端口就将不再满足于接收BPDU,而同时也开始发送自己的BPDU,并以此通告邻接的交换机该端口会在活动拓扑中

    参与转发数据帧的工作。在默认情况下,该端口会在这种状态下停留15秒钟的时间。

    端口都侦听BPDU,以确信在传送数据帧之前,在网络上没有环路产生。处在侦听状态的端口,在没有形成MAC地址表时,就准备转发数据帧。

  Learning(学习状态):这个二层端口准备参与数据帧的转发,并开始填写MAC表。在默认情况下,端口会在这种状态下停留15秒钟时间。

    交换机端口侦听BPDU,并学习交换式网络中的所有路径。处在学习状态的端口形成了MAC地址表,但不能转发数据帧。转发延迟意味着将端口从侦听状态转换到学习状态所花费的时间,默认时设置为15秒,可以用命令show spanning-tree显示出来。

  Forwarding(转发状态):这个二层端口已经成为了活动拓扑的一个组成部分,它会转发数据帧,并同时收发BPDU。

    在桥接的端口上,处在转发状态的端口发送并接收所有的数据帧。 如果在学习状态结束时,端口仍然是指定端口或根端口,它就进入转发状态。

  Disabled(禁用状态):此二层端口不会参与生成树,也不会转发数据帧。

    从管理上讲,处于禁用状态的端口不能参与帧的转发或形成STP。处于禁用状态下,端口实质上是不工作的。

  注:只有在学习状态或转发状态下,交换机才能填写MAC地址表。

  当首次将交换机的端口连接在一起时,链路灯是橙色的,然后变绿,表示操作正常了。这就是生成树的收敛。在没有启用生成树扩展时,这个过程需要50秒。当连接到交换机端口时,如果交换机端口的LED在绿色和琥珀色之间交替变化,就说明端口不正常。

  如果出现了这种情况,可以检查一下网卡(NIC)或电缆。

  5)如果有冗余链路的存在并且关闭了交换机上的生存树协议的话网络将很容易瘫痪。

  生成树协议是通过在网络中选举根交换机,并在其他非根交换机上指定接收BPDU的端口来避免广播风暴的产生的。

  6)收敛:当网桥或交换机上的所有端口都转变到转发或阻塞状态时,就产生了收敛。在收敛完成之前,交换机不能转发任何数据。在重新转发数据之前,所有的设备都必须更新。是的,STP正在收敛时,所有主机的数据都会停止发送!

  因此,如果你想让网络中的用户能够继续发送数据(或者保持他们在任何时候都有可用链路),就必须保证交换式网络的实际设计确实很好,以便STP能够快速收敛。

  从阻塞状态转变到转发状态通常要花50秒,建议不要改变默认的STP定时器时间(但如果需要的话,可以调整这些定时器)。     在交换机端口上,生成树拓扑从阻塞到转发的典型收敛时间为50秒,在服务器或主机上,这会引起超时问题—比如当你重新引导

  它们时。要解决这个问题,可以使用端口加速(PortFast)在某个端口上禁用生成树。

2.工作过程:运行生成树算法(STA)的交换机定期发送BPDU;选取唯一一个根网桥;在每个非根网桥选取唯一一个根端口;在每网段选取唯一一个标志端口。

  1)选取唯一一个根网桥:BPDU中包含Bridge ID;Bridge ID(8B)=优先级(2B)+交换机MAC地址(6B);一些交换机的优先级默认为32768,可以修改;优先级值最小的成为根网桥;优先级值相同,MAC地址最小的成为根网桥;

    Bridge ID值最小的成为根网桥;根网桥默认每2秒发送一次BPDU;

  2)在每个非根网桥选取唯一一个根端口:根网桥上没有根端口;端口代价最小的成为根端口;端口代价相同,Port ID最小端口的成为端口;Port ID通常为端口的MAC地址;MAC地址最小的端口成为根端口;

    所谓的根端口即用来向根桥发送数据的端口。

  3)在每网段选取唯一一个标志端口:端口代价最小的成为标识端口;根网桥端口到各网段的代价最小;通常只有根网桥端口成为标识端口;被选定为根端口和标识端口的进行转发状态;落选端口进入阻塞状态,只侦听BPDU;

  4)阻塞端口在指定的时间间隔(默认20秒)收不到BPDU时,会重新运行生成树算法进行选举;缺点:在运行生成树算法的过程中,网络处理阻断状态,所有端口都不进行转发。计算过程默认为50秒。

  交换网络里根端口和指定端口以外称为非指定端口,非指定端口在网络里面被生成树协议设为阻塞状态。每个交换机只能有一个根端口,一个物理网段只能有一个指定端口,一个交换网络里面只能有一个根交换机。

    建议把大楼的汇聚层的交换机作为大楼里面的根交换机。

3.负载均衡的生成树协议

  在生成树协议中每个vlan形成一个树。如果网络中的vlan个数比较多的话,会导致网络中的固定链路的流量很大,其余链路的流量相对较小。在生成树协议中可以采用多个vlan共用一个生成树协议的办法来实现负载均衡。假如网络中存在10个vlan的话,

  可以5个vlan共用一个生成树协议的方法把十个vlan的BPDU数据流量分散在两个固定的链路中。

  生成树的计时器(都是从根交换机上学来的):

  1. Hello time 多长时间发送一次BPDU的数据包

  2.Forward Delay 转发时延,指交换机的端口状态在过渡状态下(listening和learning)下维持一个forward delay的时间

  3.Maximum Time 最大老化时间,指一个交换机从其它交换机收到一个BPDU数据包以后,这个数据包有效期多长

4.配置及验证STP生成树协议:

  Spanning-tree vlan 200 激活生成树协议

  Spanning-tree vlan 200 priority 4096 配置优先级

  Spanning-tree cost 18 配置端口开销(对于所有VLAN起作用)

  Spanning-tree vlan 200 cost 17 (对指定VLAN起作用)

  Show spanning-tree vlan 200 查看Vlan的生成树

  Show spanning-tree bridge查看交换机的所有生成树信息

5.生成树协议运行生成树算法(STA)。生成树算法很复杂,但是其过程可以归纳为以下3个步骤:

  l  选择根网桥

  l  选择根端口

  l  选择指定端口

  1)关于选择根网桥:选择根网桥的依据是网桥ID,网桥ID由网桥优先级和网桥MAC地址组成。网桥的默认优先级是32768.使用show mac-address-table时,显示在最前面的MAC地址就是计算时所使用的MAC地址。

    网桥ID值小的为根网桥,当优先级相同时,MAC地址小的为根网桥。

  2)关于选择根端口:每个非根交换机选择一个根端口。选择顺序为:到根网桥最低的根路径成本→发送BPDU的网桥ID较小→端口ID较小的。端口ID由端口优先级与端口编号组成。默认的端口优先级为128。

  3)关于选择指定端口:每个网段上选择一个指定端口。选择顺序为:根路径成本较低→发送BPDU的交换机的网桥ID值较小→本端口的ID值较小。另外,根网桥的接口皆为指定端口,因为根网桥上端口的根路径成本为0。

6.协议不足

  1)拓扑收敛慢,当网络拓扑发生改变的时候,生成树协议需要50-52秒的时间才能完成拓扑收敛。

  2)不能提供负载均衡的功能。当网络中出现环路的时候,生成树协议简单的将环路进行Block,这样该链路就不能进行数据包的转发,浪费网络资源。

7.STP潜在故障

  1)双工不匹配:在点到点链路上,双工不匹配是一种常见的配置错误。当链路的一段采用手工的方式配置为了全双工模式,而另一侧却使用自动协商的默认配置的时候,那么就可能发生双工不匹配的情况。

  2)单向链路失效:单向链路是产生桥接环路的一个非常常见的原因。如果光纤链路存在没有检测出来的故障或收发器故障,通常导致单向链路。在启用STP来提供网络冗余的情况下,对于两个链路伙伴之间所连接的物理链路,如果由于某种原因导致

    这条链路工作在单向通信的状态下,那么就可能导致桥接环路或路由选择黑洞,进而对维护网络稳定非常有害。

  3)帧破坏:帧破坏是导致STP故障的另外一种原因。如果接口正在经受高速的物理错误,其结果有可能就会导致BPDU丢失,而这会使处于阻塞状态的接口过渡到转发状态。虽然如此,但因为STP默认参数是非常保守的,所以很少会发生上述情况。

  4)资源错误:即使在通过专门的ASIC硬件执行大部分交换功能的高端交换机中,STP仍然由CPU来执行。这就意味着:如果处于某种原因而过度使用了网桥的CPU,那么就可能导致CPU没有足够的资源来发出BPDU。通常情况下,

    STP不是一种密集调用处理器的应用,而且STP的优先级高于其他进程。因此,出现资源问题的可能性并不大。

  5)PortFast配置错误:如果管理员在端口上启用了PortFast特性,那么当链路启动的时候,端口就会绕过STP的监听和学习状态,并且直接过渡到转发状态。但是如果在错误的端口上配置了PortFast特性,那么这种快速过渡就有可能导致桥接环路。

PortFast (生成树端口加速)

1.在交换机上使用portfast命令,可以防止出现由于STP的收敛时间太长,导致主机的DHCP请求超时,从而使主机不能接收到DHCP地址的问题。

  确保有一台服务器或其他设备连接到交换机上时,可以保证在禁用STP时不会产生交换环路。使用端口加速意味着,当STP正在收敛时,端口不会花费通常的50秒才进入转发状态。 慎用,易出现环路!

  配置:Switch(config-if)#spanning-tree portfast ?

  disable Disable portfast for this interface

  trunk Enable portfast on the interface even in trunk mode

2.BPDU Guard

  当有人不小心使用PortFast在某个启用了PortFast配置的端口上导致环路出现时,可以使用一些护卫(safeguard)命令。

  如果在交换机端口上打开PortFast,那么,打开BPDU Guard就是一个好主意。如果启用了PortFast的交换机端口在那个端口上接收到BPDU,那么它会将端口置为错误的禁用状态。这将阻止网络管理员偶然地将另一个交换机或集线器端口连接到

  配置了PortFast的交换机端口上。

  只能在接入层的交换机上配置此命令,用户是直接连接到接入层交换机的,在核心交换机上,不能配置此命令。

3.BPDU Filter

  默认时启用了PortFast的交换机端口仍将接收BPDU,这时可以使用BPDU Filter完全阻止BPDU出入那个端口。如果接收到了BPDU,BPDU Filter过滤将立即使端口关闭PortFast,并迫使端口重新成为STP拓扑的一部分。

  BPDU Guard会将端口置为错误的禁用状态,而BPDU Filter将使端口保持打开,但不运行PortFast。

  配置BPDU Guard和BPDU Filter:

  S1(config-if-range)#spanning-tree bpduguard ?

  disable Disable BPDU guard for this interface

  enable Enable BPDU guard for this interface

  S1(config-if-range)#spanning-tree bpdufilter ?

  disable Disable BPDU filtering for this interface

  enable Enable BPDU filtering for this interface

  BPDU Guard和BPDU Filter完成的是同一件事情,只需使用其中一个或另一个命令。

4.S1(config)#spanning-tree uplinkfast

  S1(config)#spanning-tree backbonefast

  UplinkFast用来在本地交换机上检测链路失效,并且能快速修复链路失效。

  BackboneFast用来在远端交换机上检测链路失效

RSTP

1.STP协议由IEEE802.1D定义,RSTP由IEEE802.1W定义。802.1w由802.1d发展而成,这种协议在网络结构发生变化时,能更快的收敛网络。它比802.1d多了一种端口类型:备份端口(backup port)类型,用来做指定端口的备份。 

2.Rstp是从stp发展过来的,其实现基本思想一致,但它更进一步的处理了网络临时失去连通性的问题。Rstp规定在某些情况下,处于Blocking状态的端口不必经历2倍的Forward Delay时延而可以直接进入转发状态。如网络边缘端口(即直接与终端相连的端口),

  可以直接进入转发状态,不需要任何时延。或者是网桥旧的根端口已经进入Blocking状态,并且新的根端口所连接的对端网桥的指定端口仍处于Forwarding状态,那么新的根端口可以立即进入Forwarding状态。即使是非边缘的指定端口,

  也可以通过与相连的网桥进行一次握手,等待对端网桥的赞同报文而快速进入Forwarding状态。当然,这有可能导致进一步的握手,但握手次数会受到网络直径的限制。

3.STP定义了5种不同的端口状态,关闭(disable),监听(Listening),学习(Learning),阻断(Blocking)和转发(Forwarding),其端口状态表现为在网络拓扑中端口状态混合(阻断或转发),在拓扑中的角色(根端口、指定端口等等)。

  在操作上看,阻断状态和监听状态没有区别,都是丢弃数据帧而且不学习MAC地址,在转发状态下,无法知道该端口是根端口还是指定端口。

  在RSTP中只有三种端口状态,Discarding、Learning和Forwarding。802.1D中的禁止端口,监听端口,阻塞端口在802.1W中统一合并为禁止端口。
  RSTP根据端口在活动拓扑中的作用,定义了3种端口角色(STP有5种角色):禁用端口(Disabled Port)、根端口(Root Port)、指定端口(Designated Port)、为支持RSTP的快速特性规定的替代端口(Alternate Port)和备份端口(Backup Port)。

  

  配置生成树模式

  Switch(config)#spanning-tree mode { mstp | rstp | stp }

 4.改进

  1)STP没有明确区分端口状态与端口角色,收敛时主要依赖于端口状态的切换。RSTP比较明确的区分了端口状态与端口角色,且其收敛时更多的是依赖于端口角色的切换。
  2)STP端口状态的切换必须被动的等待时间的超时。而RSTP端口状态的切换却是一种主动的协商。
  3)STP中的非根网桥只能被动的中继BPDU。而RSTP中的非根网桥对BPDU的中继具有一定的主动性。
 PVST

   每个VLAN生成树(PVST)为每个在网络中配置的VLAN维护一个生成树实例。它使用ISL中继和允许一个VLAN中继当被其它VLANs的阻塞时将一些VLANs转发。尽管PVST对待每个VLAN作为一个单独的网络,它有能力(在第2层)通过一些在主干和其它在

  另一个主干中的不引起生成树循环的Vlans中的一些VLANs来负载平衡通信。

  CST成为公共生成树,在生成树收敛的时候,不考虑网络中vlan的存在,只在网络中生成和维护单个生成树;还有一个要注意的是:所有CST的BPDU作为不带标记的帧通过本地vlan进行传输。

   PVST是cisco私有的技术,per-vlan即给网络中的每个vlan都创建一颗生成树,这样可以解决CTP的问题,为不同vlan通过冗余连接进行负载平衡。但是,是cisco的私有技术,只能通过cisco的中继链路ISL中继封装发送,这样协议的兼容性就差。

 MSTP

1.概念

  MST(Multiple Spanning Tree,多生成树)是把IEEE802.1w 的快速生成树(RST)算法扩展而得到的。

  采用多生成树(MST),能够通过干道(trunks)建立多个生成树,关联VLANs到相关的生成树进程,每个生成树进程具备单独于其他进程的拓扑结构;MST提供了多个数据转发路径和负载均衡,提高了网络容错能力,因为一个进程(转发路径)的故障
  不会影响其他进程(转发路径)。
  一个生成树进程只能存在于具备一致的VLAN进程分配的桥中,必须用同样的MST配置信息来配置一组桥,这使得这些桥能参和到一组生成树进程中,具备同样的MST配置信息的互连的桥构成多生成树区(MST Region )

  将环路网络修剪成为一个无环的树型网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN 数据的负载均衡。MSTP 兼容STP 和RSTP,并且可以弥补STP 和RSTP 的缺陷。它既可以快速收敛

  也能使不同VLAN 的流量沿各自的路径分发,从而为冗余链路提供了更好的负载分担机制。

2.MSTP的特点

  1)MSTP设置VLAN映射表(即VLAN和生成树的对应关系表),把VLAN和生成树联系起来;通过增加“实例”(将多个VLAN整合到一个集合中)这个概念,将多个VLAN捆绑到一个实例中,以节省通信开销和资源占用率。

  2)MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。
  3)MSTP将环路网络修剪成为一个无环的树型网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载分担。
  4)MSTP兼容STP和RSTP

随着layer 3技术的进步,spanning-tree已经开始逐步失去自己仅存的接入网市场,更别说Metro的distribution或是core了,因而建议大家如果从研究协议本身出发,可以学习它的设计理念,但最好就不要有其它想法了。

配置实例 1

 

1.条件:如图

2.1)查看2台交换机的STP配置

Role,角色分5种:

Root Bridge: 根网桥 Root port 根端口

Designated Switch: 指定交换机   Designated port 指定端口

Alternate:替代端口,要注意替代端口和备份端口是不一样的概念。这样理解,替代端口是根端口的"后备".

Backup port 备份端口(阻塞端口)

undesignated port

prio是Priority,就是端口优先级.貌似以太端口的优先级都是128

交换机0:

   

【此交换机为根交换机,端口状态均为转发】

交换机1

 

【非根交换机,其中1、2、3端口为转发状态,3为根端口,4为替代根端口并处于阻塞状态】

2)修改Brigde ID,重新选根网桥

交换机1:

switch(config)#spanning-tree vlan 1 priority 4096

  

经过50s后:

 

交换机0:

 

交换机1:

 

3)

switch#show spanning-tree

     switch#show spanning-tree active

     switch#show spanning-tree detail

    switch#show spanning-tree interface XX

switch#show spanning-tree vlan XX

原文地址:https://www.cnblogs.com/xinghen1216/p/11133165.html