详细讲述STP过程【转自56cto.com】

21.2.1    STP判决和BPDU交换

Spanning-tree算法主要依靠BID,路径开

销和端口 ID,在创建一个无环路的拓扑时,

STP执行如下 4 个步骤:

1. 选取根交换机

2. 计算到根交换机的最小路径开销

3. 确定最小发送者BID

4. 确定最小的端口ID

为做出最佳判决,STP需要保证所有参与的网桥都获得正确的信息,网桥间的信息交互采用网桥协

议数据单元(BPDU)的基于 2层的frame 来传递STP信息。网桥通过如上4 步来选择每个端口上所看到的

“最佳”BPDU。当一个网桥被激活后,其所有的端口每隔2s(默认hello时间)发送一次BPDU报文 。

如果收到其它端口比自己更好的BPDU,则本地端口停止发送BPDU。如果20s (默认最大时间Max Age)

的时间没有从邻居收到更好的BPDU,则本地端口将重新发送BPDU。最大生存时间是最佳BPDU超时的

时间。

21.2.2    STP收敛步骤

生成树算法比较复杂,其收敛于一个无拓扑的初始过程包含

1. 选举根交换机(Root Bridge)

2. 选举根端口(Root Ports)

3. 选举指定端口(Designated Ports)

在网络第一次“初始”的时候,所有的网桥都会泛洪混合的 BPDU 信息。网桥开始执行前面讨论

过的STP 4个判断过程。使得网桥追踪到一组BPDU,形成整个网络(Cisco 是一个vlan一个STP实例,故

cisco的生成树范围定义在一个vlan中)。

A。选举根交换机

STP要求每个网桥分配一个唯一的标识(BID), BID通常由优先级(2bytes)和网桥MAC地址(6bytes)

构成。根据 IEEE802.1d 规定,优先级值为 0-65535,缺省的优先级为 32768(0x8000)。当交换机最初

启动时,它假定自己就是根交换机,并发送次优的 BPDU,当交换机接收到一个更低的 BID 时,它会把

自己正在发送的BPDU的根BDI替换为这个最低的根BID,所有的网桥都会接收到这些BPDU,并且判定

具有最小BID 值的网桥作为根网桥。如下图所示,假定 A,B的优先级均为32,768 C 的优先级为40,000

根据选举规则, 选择较小的优先级的交换机,则选择出Cat-A和Cat-B。 在A , B优先级相同的时候,

查找最小的MAC地址AA-AA-AA-AA-AA-AA.于是Cat-A被选举成为根交换机.

B。选举根端口

在选举根桥结束后,将选举根端口,一个网桥的根端口是按照路径开销最靠近根交换机的端口。   每

一个非根交换机都将选出一个根端口。 根交换机每个接口均为根端口。其选择过程如下:

1. 根交换机Cat-A发送BPDU,他们所包含的根路径开销为0,当Cat-B收到这些BPDU

后,迅速将端口 1/1 的路径开销累加到所收到 BPDU 的根路径开销。假定为

FastEthernet,则加上端口1/1的开销19,Cat-B 1/1 到根路径的开销为 19。

2. Cat-B使用内部值19 ,并从端口1/2发送一个根路径开销为19 的BPDU

3. 当Cat-C从Cat-B收到这些BPDU将计算自己到根网桥的开销为38(19+19)。

4. Cat-C也在1/1 上收到来自A 的BPDU。同时计算1/1到根网桥的开销为19。

5. 根据最靠近根桥原则,C选出根端口为1/1。

6. Cat-C将继续向下游交换机公布其到根端口的开销为19

C。选举指定端口

指定端口是定义在一个网段(Segment)上的概念。在选举根端口的同时,基于到根网桥的的根路径

成本的累加值的指定端口选择过程也在进行。包含某一网段的指定端口的网桥称为该网段的指定网桥。

根网桥的所有活动端口都成为指定端口。这条规则的例外是:当根网桥自身存在第一层物理环路的情况。

例如:根网桥的两个端口连接到了同一台集线器上,或者两个端口通过交叉线连接到了一起。指定端口

选举过程如下:



Segment 1 中,根交换机 Cat-A 上 1/1 的路径开销为 0,Cat-B 上 1/1 的开销为 19。故 Cat-A 的 1/1

为指定端口。Segment 2 中,同样 Cat-A 上的 1/2 被选举为指定端口。在 Segment 3 中。Cat-B 和 Cat-C

上的1/2口,端口路径开销均为19。 此时将根据最小发送者的BID来确定,此时确定B的端口为指定

端口,在某些情况下,例如Cisco的交换机每个vlan一个生成树实例,此时,将会出现BID 相同的情况,

则最后比较端口ID,端口ID 在同一台交换机上定义是必定不相同的,最小端口ID的端口被定义为指定

端口。

注意:接入端口在指定端口过程中不扮演任何角色,所有的指定端口选举军仅在中继端口中交互,

接入端口仅用于连接主机和路由器。

21.2.3    STP状态

在确定根端口,指定端口和非指定端口后,STP准备创建一个无环路拓扑。STP配置根端口和指定

端口来转发流量,非指定端口阻塞流量。STP一共有5种状态

A.阻塞状态( blocking )

一个端口处于阻塞状态将会有如下特征:

丢弃所有连接的网段上收到的数据帧,或者通过交换而来内部转发的帧 。

接收到的BPDU 直接传给系统模块。

没有地址数据库。

不传递从系统模块收到的BPDU

接收响应网络管理消息,但不传递他们

  

B.侦听状态( Listening )

如果一个网桥在启动或者在一定时间没有收到 BPDU 后立即认为自己是根交换机,断口进入侦听

状态,侦听状态是一种不传用户数据的STP状态,仅在端口发送和接收BPDU报文。努力确定一个活动

的拓扑,该状态有如下特征:

丢弃所有连接的网段上收到的数据帧,或者通过交换而来内部转发的帧 。

接收到的BPDU 直接传给系统模块。

没有地址数据库。

不传递从系统模块收到的BPDU

接收响应网络管理消息

选举根桥,根端口和指定端口发生在侦听状态期间。 在指定端口选举中失败的端口成为非指定端

口,并回到阻塞状态,剩下的指定端口或者根端口在 15s 后进入学习状态。


C.学习状态( Learning )

学习状态是网桥不传递用户数据帧但构建桥街表并收集诸如数据帧源vlan等信息的一种STP状态。

当网桥收到一个帧, 他将源 MAC 地址和端口放入桥接表, 当数据转发开始后学习状态减少了所需的

泛洪次数需求。徐锡状态的生存时间同样受转发延迟定时器的控制,默认为 15s

一个处于学习状态的端口特性:

丢弃所有连接的网段上收到的数据帧。

丢弃从其它端口交换来的需要转发的帧

接收到的BPDU 直接传给系统模块。

接收,处理传递从系统模块收到的BPDU

接收响应网络管理消息

D.转发状态( Forwarding )

处于一个学习状态端口在转发延迟定时器超时后仍然是根端口或者指定端口,则将进入转发状态,

转发状态特性如下

转发所有连接的网段上收到的数据帧。

转发从其它端口交换来的需要转发的帧

将位置状态信息包含进自己的地址数据库

接收到的BPDU 直接传给系统模块。

处理从系统模块收到的BPDU

接收响应网络管理消息

21.2.4    STP定时器

STP运作受 3个定时器控制

HELLO时间(根网桥发送配置BPDU的时间间隔) 缺省2s

这个值实际上只控制配置BPDU在根网桥上生成的时间,其他网桥则把它们从根网桥接

收到的BPDU向外通告。换言之,如果在2-20秒内由于网络故障而没有收到新的BPDU,非

根网桥在这段时间内就停止发送周期BPDU。如果这种情况持续超过20s,也就是超过最大存

活期,非根网桥就使原来存储的BPDU无效,并开始寻找新的根端口。

转发延迟(侦听状态或学习状态的持续时间)   缺省15s

网桥在侦听状态和学习状态所花费的时间。只用转发延迟就控制了转发和学习两个状态。

15 秒这个值是假定网络的最大规模为 7 段网桥跳数;BPDU 的最大丢失个数为 3 以及 HELLO

时间间隔为2 秒的情况下得到的。这个转发延迟计时器同样可以用来控制网桥表在网络拓扑

发生变化后的生存时间。

最大存活期(存储BPDU的时间)   缺省20s

就是网桥在丢弃BPDU前用来备份存储它的时间。

21.2.5    BPDU的格式

STP BPDU帧格式随着所使用的协议类型变化。下图显示了IEEE 802.1D生成树协议的BPDU帧格式。

Cisco专有的BPDU帧格式:

帧控制域总是01

目的地址域指定了在桥街租地址表中所规定的目的地址,在IEEE STP BPDU 帧中,这个

地址为0x800143000000

原地址域指明了交换机所使用的基本MAC 地址

路由选择信息域仅在Cisco STP BPDU中有,RIF必须为0x0200

逻辑链路控制域控制所有STP BPDU的帧类型,这个域被设置为0x424203

BPDU域内定义如下:

拓扑变化BPDU  

21.2.6    拓扑变化和STP

STP通过使用一组定时器来避免在网络中出现桥街环路,如果一个稳定的STP进程出现变化可能需

要30~50s 的时间才能收敛到新的拓扑。(Max Age 20s + 2次forward delay 15s)当网络在收敛过程时,那

些已经不可达的物理地址仍旧存在于交换表中。STP在拓扑变化的机制中,要求迅速清空交换表以删除不

可达的物理地址。防止交换机将一些数据帧转发到那些不可达的设备。

下图为一个拓扑变化过程:

1. 交换机D注意到拓扑变化

2. 交换机D从根端口发出一个拓扑变化通知(TCN)BPDU,最终目的地为根交换机。TCN BPDU

通过 BPDU中值为 0x80 的一个字节类型域表明。网桥持续发送 TCN BPDU知道该网段的指定

网桥响应一个TCA配置BPDU,类型TCA是通过1字节标志域中的最高比特位指明的。

3. 该网段的指定网桥(Cat-B)发送一个 TCA 配置 BPDU 到源网桥(Cat-D).交换机 B 也从根端口发送

一格目的地为根交换机的TCN BPDU

4. 当根交换机收到(上游)TCN BPDU,就发送配置BPDU通告发生了一个拓扑变化。根交换机

在配置中嵌入拓扑变化的时间等于转发延迟加最大生存时间.(15s+15s+20s)

5. 一个网桥收到(下游)从根交换机发出的拓扑变化配置消息,用转发延迟定时器(15s)使全部

地址表超时。这是的比默认设备通常需要5分钟才老化整张表快乐很多。 网桥将持续这一个

过程知道不再从根交换机收到拓扑变化配置消息

21.2.7    备份的根网桥

通常拓扑变化中,如果根桥出现问题,将会极大地影响网络的 STP 收敛时间,此时,cisco 采用了

一种备份根桥的策略。如下图:

其实质上是根据根网桥选举规则进行处理的,配置命令为:

Spaning-tree vlan vlan-id root    primay

Spaning-tree vlan vlan-id root    secondary

这2条命令的作用是修改BID中的 Priority 值,该命令仅在Catalyst 6500,4500,3750,3550,2950

上支持