1.STP的定义        STP(Spanning Tree Protocol,生成树协议)。STP对应IEEE 802.1D标准,主要应用于存在环路(通俗一点说就是,构成了数据发送和接收的循环路径)的网络,通过一定的算法既能实现路径冗余,同时又可将环路网络修剪成无环路的树型网络,从而避免报文在环路网络中的增生和无限循环。 2.STP的由来        要正确使用STP,就必须先了解它存在的意义或者开发这种技术的目的,只有这样才能更好地理解它的工作原理。前面说了,STP的目的就是消除网络中冗余的链路(当然不是物理消除),下面就来介绍STP是如何实现这个目的的。
       二层数据网的自愈(就是指在网络出现故障时的自动修复能力)需求由来已久,早期的以太网桥采用了基于 MAC 地址在不同端口之间的转发,而每一个端口对应的是一个以太网的网段,也就是一个以太网的广播域,通过学习每个端口的 MAC 地址表的方式,以太网桥只转发不同端口间的通信。但是由于网桥依赖的是运行网络中存在的MAC 地址和端口的对应表,所以一旦收到目的地址未知的数据包,它仍将利用广播的形式来寻址,所以,这种方法使得它天生不能隔离广播包和组播包的通信,其后果就是在一个环形网络中造成数据流量以指数形式的增长,从而导致网络的瘫痪,这种现象也称为"广播风暴"。
       "广播风暴"的现象只存在于两点之间存在冗余链路的网络之中,而冗余链路却是在现实网络设计中大量存在的。如图9-5中核心层、汇聚层的交换机间都是有冗余设计的。本来这样设计的目的就是想当某一条链路失效时,另一条冗余的链路能够马上接管所有的工作。但是,在实际工作中,这些冗余连接还会带来广播风暴隐患。     
       如图1-1中的Switch 6交换机发送的数据要到达Switch 1,就可以有多条不同路径了,其中包括:Switch 6→Switch 3→Switch 1,Switch 6→Switch 3→Switch 4→Switch 1,Switch 6→Switch 3→Switch 4→Switch 5→Switch 2→Switch 1这三条。这样一来,当从Switch 6发送一个请求数据包到Switch 1时,就可能从以上三条路径中同时流出,显然这不是必要的,给网络带来了不必要的网络流量压力。本示例还只是一个很简单的结构,如果结构更复杂的话,冗余连接会更多,对应的冗余链路也就是更多,所带来的广播风暴将更大。



STP_链路



图1-1

除了广播风暴的影响外,这么多冗余链路还可能形成网络环路,造成数据发送和接收死循环。同样以图1-1为例。在以上三条路径中,如果不加修剪,从Switch 1上发送到Switch 6的数据包,可能就不会到达Switch 6,而是直接在Switch 1→Switch 3→Switch 4→Switch 1,或者Switch 1→Switch 4→Switch 3→Switch 1,或者Switch 1→Switch 2→Switch 5→Switch 4→Switch 1等多个封闭的环路上循环。
       为了解决"广播风暴"和网络死循环这两个在二层数据网络中存在的主要弊端,IEEE(电机和电子工程师学会)在基于思科的STP技术基础上颁发了IEEE 802.1D协议标准。这种两种协议的本质其实是一样的,就是消除网络拓扑中任意两点之间可能存在的冗余路径,将两点之间存在的多条路经划分为"通信链 路"和"备份链路"。并规定,数据的转发只在"通信链路"上进行,只有在发现"通信链路径"失效时,才自动地将通信切换 到"备份链路"上。

用于正常数据转发的"通信链路"往往是最短的路径,如上一示例中的"Switch 6→Switch 3→Switch 1"这条路径。但是,STP并不是全部禁用这些冗余链路,而只是在正常工作中让它们处于block状态,当活跃链路失效时才接替活跃链路的工作。这样就可以达到既不会因为冗余链路而形成广播风暴,也不会因为没有冗余链路而造成网络循环,降低网络的可用性。

现在的二层以太网交换机和三层以太网交换机采用了硬件电路的设计,保证了每个端口的独享带宽。这样一来,每个交换机都可以看成是一个多个拥有独立带宽端口 的网桥,用户可以将它的每一个端口看作是一个独立的网桥端口,其二层的工作原理与网桥类似。为了实现在用户接入层、汇聚层甚至骨干层范围内的高可靠性,网 络中关键的拓扑设计往往采用冗余链路的设计(参见图1-1),虽然也有其他的技术可以实现高效的网络收敛,但是大多数网络设计者还是采用了IEEE 802.1D 的方法,原因是生成树协议是一项简单而又成熟的网络自愈技术。

3.STP的基本功能和工作原理

在网桥和交换机上部署STP的目的就是在你既想要有冗余链路,又要阻止环路的情形下阻止在网络中出现环路,最终达到降低广播风暴产生的可能(只能是可能,因为广播风暴不仅只有网络环路才能发生,还可能是因为专门的广播包引起的),消除网络循环。有时,在网络设计中,特别是一些比较大型,同时可用性要求高的网络系统设计时,冗余的链路与网络中故障转移所需的备份同等重要。在主链路失效时,通过激活备份链路可以使得用户继续连接到网络。在网桥和交换机上不部署STP,这样的部署又可能造成网络环路出现。如果两个连接的交换机一个运行STP,另一个运行IEEE 802.1D,则它们需要不同的收敛计时器。

在如图1-2所示的网络示例中,在Switch A和Switch B之间存在一条冗余链路。但是这种部署可能会创建一个桥接环路。例如,从Station M(站点M)发出的一个到Station N(站点N)的广播或者多播包可能会在两个交换机之间循环。

STP_链路_02

图1-2 没有运行STP的案例

  

但是,如果在两个交换机上运行了STP,则网络的逻辑结构就可看成图1-3所示。这时在Switch A和Switch B之间就只有一条路径,从Station M发出的一个到Station N的广播或者多播包就不会在两个交换机之间循环了,消除了网络环路。

   

     为了提供所需的路径冗余,同时又可以避免环路发生,STP定义了一个延伸到网络中所有交换机的"树"(只是一种比喻说法,既表示了网络中各交换机的层次结 构,又暗示网络中没有环路)。STP强迫冗余数据路径处于备用的阻塞状态,而使其他路径处于转发状态。如果处于转发状态的一条链路不可用,STP重新配置 网络,并变更数据路径为备用路径。

STP_stp_03

图1-3 运行STP的案例


4.STP运作规则

在STP中,网络中所有交换机的关键就是选择根网桥。网络中的其他确定,如哪个端口置于阻塞模式,哪个端口置于转发模式,都是需要依据根网桥才能确定的。 在交换网络中,不同于桥接环境,更像多VLAN处理。一个交换网络中,在你执行根网桥时,通常是指定根网桥作为根交换机。每个VLAN必须有它自己的根网 桥,因为每个VLAN是一个独立的广播域。不同VLAN的根网桥可以都是在一台交换机上,当然也可以在不同交换机上。

【说明】为特定VLAN进行根交换机选举非常重要。你可以选择根交换机,或者可以由网络中的交换机自己决定。如果不控制根交换机选举过程,可能在你的网络中会存在不适宜的路径。

所有交换机交换用于根交换机选举和以后网络配置的信息。BPDU承载了这些信息。每个交换机会比较本机发送到邻居交换机的BPDU和从邻居中接收到的BPDU中的参数。在STP根交换机选举过程中,参数值越小越好(优先级越高)。如果Switch A通告的根ID比Switch B通告的根ID小,则来自Switch A的信息就越好。Switch B停止它的根ID通告,接受Switch A的根ID通告。

STP_数据_04

图1-4 BPDU报文格式

协议ID(2字节):当前保留没有被利用

协议版本(1字节):如果连个大小不一样的协议版本数字比较,数字越大证明版本越新

BPDU类型(1字节):用于区分BPDU的类型

标志位(1字节):用来表示拓扑的变化

根桥ID(8字节):表示当前网络里的根桥,包括:网桥优先级(2字节)和网桥的MAC地址(6字节)

根路径开销(4字节):网桥到达根网桥的路径开销

指定网桥ID(8字节):指发送BPDU的网桥,包括:网桥优先级(2字节)和网桥的MAC地址(6字节)

指定端口ID(2字节):指发送BPDU的网桥端口,包括:端口优先级和端口号

Message Age(2字节):BPDU的有效存活时间

Maxmium Age(2字节):BPDU的最大有效存活时间,默认为20秒

Hello Time(2字节):周期发送BPDU的时间间隔,默认是2秒

Forward Delay(2字节):端口转入发送状态的时延,默认为15秒


生成树(ST)的工作方式是为交换机和端口分配角色,以确保在任何时刻交换网络中点与点之间只有一条路径。它所分配的端口角色包括根网桥(Root Bridge,RB)、指定网桥(Designated Bridge,DB)、根端口(Root Port,RP)、指定端口(Designated Port,DP)和非指定端口(Nondesignated Port)。

根交换机识别每个VLAN,在根交换机识别后,交换机按照以下STP规则运作,

首先,根交换机中的所有端口都必须处于转发状态。然后,网络中的其他每个交换机通过比较交换机上每个端口上接收到的BPDU信息来决定到根交换机的最佳路径。交换机使用接收到的BPDU中信息最小的端口作为到达根交换机的端口,也就相应交换机的"根端口"。在确定了根端口后,交换机进行以下规则,

根端口必须设置为转发模式。另外,每个LAN网段中交换机相互通信,以确定哪台交换机用于从该网段中转发数据到根交换机,这台交换机就称之为"指定交换机"。

在一个LAN网段中,指定交换机上连接到这个网段的端口必须处于转发状态。

所有交换机中的其他端口必须处于阻塞模式。这条规则仅适用于连接到其他交换机的端口。STP不会影响连接到工作站或者服务器的端口,这些端口必须处于转发状态。

默认情况下,在每个端口上都运行ST(生成树)。ST功能不能在交换机上基于每端口方式关闭。尽管不建议,但你仍可以在交换机上基于每VLAN,或者全局方式关闭STP。只要你禁止ST就需要特别小心,因为这可能在网络内部生成二层环路。

5.STP角色选举

个人理解网桥之间比较BPDU谁是最优,主要对比的BPDU中的根桥ID,根路径开销,指定网桥ID,指定端口ID,而根桥,根端口,指定网桥,指定端口的选择也是基于这几个值的对比。

(1)根桥的选择

----每个桥都认为自己是根桥,所以每个端口发送的BPDU报文中,根桥ID(BID)都是用自己的BID填充的

----BPDU按照Hello Time指定的时间间隔来发送,默认是2秒

----当再次发送BPDU时,BID字段填写的是“当前的我认为的BID”

----通过交互,交换机最终得到一个最好的BID,并达成一致,拥有该最好BID的网桥被称为根桥

(2)根端口的选择

确定了"根网桥"后,网络中的其他交换机就为非根网桥了。此时再为所有"非根网桥"选举"根端口"(RP)。"根端口"可以发送和接收"配置BPDU",或者接收BPDU消息包。

"根端口"是"非根网桥"到"根网桥"的最佳路径所在端口,也即最低开销的路径(当然,直接连接的路径开销最小)。在每个"非根网桥"上选举一个"根端口",也就是"根端口"是针对"非根网桥"而言的,而不是在"根网桥"上,这一点最容易引起误会。

其本质是“离根桥最近的端口”。

----此时根桥ID已定

----到根桥的路径开销最低。生成树路径成本是所有链路的带宽的路径成本总和值

----如果根桥的路径成本一样,那么“非根网桥”会比较所有和它直连的网桥(以下简称对端网桥)的BID,然后这个“非根网桥”会选择和拥有最小BID网桥相连接的端口作为根端口

----如果到根桥的路径成本相同,对端网桥的BID相同(比如一个交换机和另一个交换机有两个或者两个以上端口直接相连),那么就比较对端网桥的端口ID,端口ID越小,连接这个端口的本“非根网桥”上的端口为根端口

(3)指定端口,指定网桥的选择

----根桥ID已定

----根端口已定

----网桥上剩下的就是指定端口了

----指定端口根据自身的BID来比较,BID越小的指定端口为forwarding状态,对端网桥上和此端口连接的指定端口则为block状态(这种处于block状态的指定端口,在很多资料中也被称为“非指定端口”,在这种定义下可以理解为:STP中除了根端口和指定端口,剩下都是非指定端口,所有的非指定端口都是block状态。下文也将两者分别称为指定端口和非指定端口)

----指定端口所在网桥为指定网桥

---根桥上的端口均为指定端口

STP_stp_05

图1-5 端口示意图

6.STP端口状态

在STP中,各种类型的端口都有与其对应的工作状态的。当然端口状态在从交换机启动到正常工作过程中,可能会发生一系列的改变。STP中包括的端口状态 有:阻塞(Blocking)状态、侦听(Listening)状态、学习(Learning)状态、转发(Forwarding)状态、禁止 (Disabled)状态。通过这些不同状态的分配,就可以使得交换机(或网桥)上的各端口工作在不同状态,从而达到无网络环路的目的。

阻塞(Blocking):不接收或转发数据,接收但不发送BPDUs,不进行地址学习。

侦听(Listening):不接收或转发数据,接收并发送BPDUs,不进行地址学习。

学习(Learning):不接收或转发数据,接收并发送BPDUs,开始地址学习

转发(Forwarding):接收或转发数据,接收并发送BPDUs,进行地址学习

禁止(Disabled):不收发任何报文

以上状态的二层LAN端口在数据通信中可进行以下5个状态转变过程:

从初始化到阻塞状态

从阻塞到侦听或者禁用状态

从侦听到学习或者禁用状态

从学习到转发或者禁用状态

从转发到禁用状态

图1-6描述了一个二层LAN端口是如何进行以上这5个状态转变的。


STP_数据_06

图1-6 端口状态的转变

当你启用了STP,在设备开启电源后,每个端口和网络都要经历阻塞、侦听、学习这类的过渡状态。如果有适当的配置,每个二层LAN端口最终会稳定到转发或者禁用状态。图中的实线流程表示一个基本的状态转变过程,虚线流程表示在实际的端口状态转变过程中可能发生的状态转变过程。

当STP算法把一个二层LAN端口置于转发状态,将发生以下过程:

(1)当二层LAN端口等待协议信息时置于侦听状态,建议置于阻塞状态。

(2)二层LAN端口等待转发延时(Forward delay,此步包括由侦听状态到学习状态所需经历的等待时间)到期,转变这个二层LAN端口为学习状态,并重置转发延时计数器(Forward delay timer)。

(3)在学习状态下,这个二层LAN端口继续阻止帧转发,以便它可以从转发数据库中学习到终端位置信息。

(4)这个二层LAN端口再次等待转发延时(此步是由学习状态到转发状态所需经历的等待时间)到期,然后转变为转发状态,此时,学习和转发这两种状态是同时启用的。

从以上流程可以看出,在整个端口状态转变中,一个端口由初始的阻塞状态到转发状态是需要经过两个转发延时周期的,效率比较低。这是STP最大的不足,也就是它最终被RSTP(快速生成树协议)取代的一个重要原因。

7.STP三种模式

生成树协议有三种模式:

  STP(生成树协议): STP不能快速迁移。即使是在点对点链路或边缘端口,也必须等待2倍的Forward delay的时间延迟,端口才能迁移到转发状态。

  RSTP(快速生成树协议): RSTP可以快速收敛,但是和STP一样存在以下缺陷:局域网内所有网桥共享一棵生成树,不能按VLAN阻塞冗余链路,所有VLAN的报文都沿着一棵生成树进行转发。

  MSTP(多生成树协议): MSTP可以弥补STP和RSTP的缺陷,它既可以快速收敛,也能使不同VLAN的流量沿各自的路径分发,从而为冗余链路提供了更好的负载分担机制。MSTP设置VLAN映射表(即VLAN和生成树的对应关系表)把VLAN和生成树联系起来.同时它把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。MSTP将环路网络修剪成为一个无环的树型网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。

STP即生成树协议,它是局域网交换网络中技术性最强的主题之一,随着交换网络成为焦点,它的作用也越来越明显.

STP协议产生的原因:

1.广播环路

2.网桥表损坏

3.使用它来防止环路

STP协议运行STA算法,它强迫某些冗余链路进入备份状态,它的算法很复杂,但用于收敛出一个无环拓朴却只有三步

1.选择根网桥

2.选择根端口

3.选择指定端口

生成树算法是依据网桥ID,路径成本和端口ID这些参数来生成无环拓朴的,它总是使用4个判决过程

1.确定根网桥

   10M/100     100M/19      1000M/4  

          

                     数值越小优先级越高

STP在进行数据操作时,数据报文以桥接协议数据单元BPDU的形式进行交换,BPDU帧利用STP组播地址01-80-c2-00-00-00作为目的地址,使之能到达相邻并处于STP侦听状态的交换机

BPDU有两种类型:

一种是配置BPDU,用于生成树木计算

一种是拓朴变更通告

STP端口有五种状态

1.禁用Disabled:同管理员手工指定或网络故障导致的状态,它不是正常STP状态的一部分

2.阻塞Blocking:此时端口既不能接收也不能发送数据,也不能向它的地址表添加MAC地址,而且只允许接收BPDU报文

3.侦听Listening:如果交换机认为它一个端口可选为根端口或指定端口,那么它就把该端口由阻塞状态变成侦听状态

4.学习Learning:一个端口在侦听状态下经过一段时间后就会转成学习状态,在此状态下的交换机可以学习新MAC地址

5.转发Forwarding:在学习状态下再经过一段时间该端口即进入转发状态,至此该端口才成为一个全功能的交换机端口

STP的计时器

1.HELLO时间:交换机发送BPDU报文之间的时间间隔,默认为2s

2.转发延迟:交换机在侦听Listening到学习Learning状态所花费的时间,默认为15s(学习到转发状态也是15s)

3.最大老化时间:交换机在丢弃BPDU报文之前储存它的时间,默认为20s

CISCO现在使用的STP协议是带SCT的PVST+,可与别的生成树协议兼容,为每个VLAN使用一个独立的生成树