生成树协议STP、RSTP和MSTP原理的理解(上)

STP(802.1D,Spanning Tree Protocol,生成树协议)

基本思想

将网络的拓扑修剪为树形拓扑,拓扑图形状与一棵树相似,这样就不会产生环路了。

原理

在每个运行STP协议的设备上依据一定的准则选举出一个树根节点作为网络中的根桥,其他节点为非树根节点。

每一个非树根节点,会选择最优的路径和根桥相连,每个非树根节点上位于最优路径的端口,为该非树根节点的根端口。

如果非树根节点存在冗余链路,则会对相应端口进行阻塞

基本概念介绍

根桥(Root Bridge):是整个生成树的根节点,所有网桥中优先级最高的桥。

指定桥(Designate Bridge):负责一个物理段(相对于两个网桥而言是一个物理段)上数据转发任务的桥。

根端口(Root Port):指一个网桥上距离跟桥最近的端口。根桥上没有根端口,只有非根桥上有且仅有一个根端口。

指定端口(Designate Port):指定桥上的端口,就是用于转发生成树信息报文的端口。根桥上全是指定端口。

候补端口(Alternate Port):用来为根端口或指定端口做备份的端口,即为最终需要阻塞的端口。

桥ID(Bridge ID):每一个运行STP协议的网桥都会有一个桥ID,用于在网络中唯一标识一个桥,由桥优先级和桥MAC地址组成,桥优先级占2字节,桥MAC地址占6个字节。桥优先级只能是4096的整数倍,最大为61440,默认为32768。

路径开销(Path Cost):STP中每条链路都具有开销值,默认的开销值取决于链路的带宽,带宽越大,开销越小。例如IEEE标准的开销,链路速度为10Gbps开销为2,速度为100Mbps时开销为19,速度为10Mbps时候开销为100。

BPDU(Bridge Protocol Data Unit,桥协议数据单元):用于网桥之间传递BPDU来交互协议信息。BPDU分为配置BPDU和TCN BPDU。配置BPDU用来进行生成树的计算和维护生成树拓扑的报文。TCN BPDU是当拓扑结构改变时候,用来通知相关桥设备网络拓扑结构发生变化的报文。


生成树协议STP、RSTP和MSTP原理的理解(上)


BPDU报文分析


生成树协议STP、RSTP和MSTP原理的理解(上)

Protocol Identifier:固定为0x0000,表示是生成树协议

Protocol Version Identifier:协议版本号,STP版本号为0x00

BPDU Type:配置BPDU类型为0x00,TCN BPDU类型为0x80

Flags:由8位组成,最低位为TC标志位,最高位为TCA标志位,其他6位保留。当拓扑结构变化时候,下游网桥将会从根端口发送TCN BPDU报文,TC标志位置为1,上游网桥收到后进行相应处理,回复配置BPDU报文,TCA标志位置为1.

Root Identifier:根桥ID,包含优先级和MAC地址,标识网络中的根桥。

Root Path Cost:根路径开销,指从发送该配置BPDU的网桥到根网桥的最小路径开销,是所有链路开销的代数和。

Bridge Identifier:发送该配置BPDU的网桥ID,即该指定桥的ID。

Port Identifier:发送该配置BPDU的网桥的发送端口ID。

Message Age:从根桥生成配置BPDU开始,到当前时间为止配置BPDU的存活时间。

Max Age:配置BPDU存活的最大时间。

Hello Time:根桥生成并发送配置BPDU的周期,默认为2s

Forward Delay:配置BPDU传播到全网的最大时延,默认为15s

接口状态:

<code>接口状态:
禁用(Disable)

不能收发BPDU,也不能收发数据帧

阻塞(Blocking)

该接口被STP阻塞。不能发送BPDU,但是会持续侦听BPDU。不能收发数据帧

侦听(Listening)

表明STP初步认定该接口为根接口或指定接口,但STP还在计算过程中,可以收发BPDU,但不能收发数据帧,也不能进行MAC地址学习

学习(Learning)

会侦听业务数据帧,但不能转发数据帧,并可以学习MAC

转发(Forwarding)

正常收发数据帧,也会进行BPDU处理,只有根端口或指定端口才能进行转发态
/<code>


当交换机的一个接口被激活后,该接口会从禁用状态自动进入阻塞状态。阻塞状态的接口如果被选举为根接口或者指定接口,那么它将从阻塞状态进入侦听状态,并在侦听状态停留15s(转发延迟时间),为了让STP完成整个网络的计算。15s后如果还是根接口或者是指定接口,就会进入学习状态,因为此时交换机没有学习到任何MAC地址,这个状态也要停留15秒,之后才会变成转发态。

计算过程

确定跟桥

每一个交换机启动stp服务,都会认为自己是跟桥,并向外发送以自己为根桥的配置BPDU报文。

交换机接收到BPDU报文,会和自己的桥ID对比,桥ID由优先级和mac地址组成,先比较优先级,优先级相同,再比较mac地址,值越小就会认为更优。比如接收到BPDU报文的root id为8192-0000.0000.0001,自己的桥id为32768-0000.0000.0002,因为先比较优先级,优先级8192优于32768,则认为自己不是根桥,就不发送认为自己是根桥的BPDU了,并通过接收到的BPDU报文更新自身的配置BPDU。直到网络中所有的交换机都达成一致,认为某一个交换机为根桥,根桥的选举结束,从而确认唯一根桥。

确定端口角色

当确认自己本身不是根桥的同时就开始确认端口角色了。

确定根端口

当一个交换机多个接口同时接收到了根桥发来的配置BPDU报文,会获取Root Path Cost,也就是根路径开销,与接收端口的链路开销相加,得到此端口到根桥的根路径开销,对比,根路径开销值最小的作为根端口。

如果根路径开销相同,对比BPDU报文中的Bridge Identifier,也就是发送该BPDU报文指定桥的ID,ID小的作为根端口。

如果指定桥ID也相同,则对比Port Identifier,发送口的端口ID,ID小的作为根端口

确定指定端口和Alternate备份端口

当确定根端口后,会将通过自己从根端口收到的BPDU报文计算生成的配置BPDU报文与非根端口接收到的配置BPDU进行比较,依次对比根路径开销、指定桥和端口id,自己计算产生的BPDU优于接收到的,则将此接收到的端口设置为指定端口,否则设置为Alternate端口(即阻塞起来)。

拓扑结构发生改变时

当有端口断开或新网桥加入时,拓扑发生了改变,就会使用到TCN BPDU报文,目的是让STP能快速的收敛。

产生BPDU报文的条件:

网桥上有端口转变为Forwarding转发状态,且该网桥至少包含一个指定端口。

网桥上有端口从Forwarding状态或Learning状态转变为Blocking状态。

拓扑改变时候STP处理步骤:

会从该发生变化的交换机的根端口发送TCN BPDU报文,报文中flags的TC位置1

上游交换机收到TCN BPDU报文,会将下一个配置BPDU报文中的TCA置为1,发送给下游交换机

重复1,2步骤,直到根桥交换机收到TCN BPDU报文,并将下一个配置BPDU报文中的TCA置为1,发送给下游所有的交换机,各网桥收到TCA置为1的配置BPDU报文后,会将MAC地址老化时间缩短为15秒

STP的不足

为避免环路,每一个端口在确认为根端口或指定端口后仍需要等待30s才能进入转发状态。

对于网络中有大量主机时候,频繁上下线会导致频繁发送TCN BPDU报文,导致网桥MAC地址老化时间长期为15s。


分享到:


相關文章: