本期引言:
在通信工程当中,从物理层面上,我们可以采用冗余链路保证网络的健壮性。冗余是指出于系统安全和可靠性等方面的考虑,人为地对一些关键部件或功能进行重复的配置。当系统发生故障时,比如某一设备发生损坏,冗余配置的部件可以作为备援,及时介入并承担故障部件的工作,由此减少系统的故障时间。那么,物理上的冗余,是否就能保证业务的顺畅?实际上,使用冗余链路会在交换网络中产生环路,并导致广播风暴、MAC地址表不稳定以及多帧复制等故障现象,从而导致用户通信质量较差。本期我们要讨论的内容就是如何解决冗余链路带来的环路问题-生成树协议STP(Spanning Tree Protocol)技术。
01 什么是STP生成树协议
STP (spanning-tree-protocol)是交换机通过某种特定算法来逻辑阻塞物理冗余网络中某些接口,以达到避免数据转发循环,生成无环路拓扑的一种二层协议。
02 生成树的基本知识
2.1 生成树协议的分类
生成树协议的分类,按照产生的时间先后顺序为STP、RSTP、MSTP。STP/RSTP是基于端口,PVST/PVST+是基于VLAN,MSTP是基于实例。
2.2 生成树协议所遵循的IEEE标准
三种生成树所遵循的IEEE标准分别为STP-IEEE 802.1d,RSTP-IEEE802.1W,MSTP-IEEE 802.1S。
2.3 STP基本思想
网桥之间彼此传递一种特殊的配置消息,802.1D协议将这种配置消息称为“配置桥协议数据单元”或者“配置BPDU”。配置消息中包含了足够的信息来保证网桥完成生成树的计算。
名词解释:网桥是交换机的前身,由于STP是在网桥基础上开发的,因此现在交换机的网络中仍然沿用网桥这一术语。
网桥利用收到的配置消息做以下动作:
-
确定最小的根网桥ID(网桥优先级+背板MAC地址)
-
确定最小路径开销cost
-
确定最小发送网桥ID
-
确定最小发送端口ID
03 STP的原理和算法-BPDU
3.1 网桥协议数据单元
配置消息也被称作桥协议数据单元(BPDU)。网桥协议数据单元(BPDU,Bridge Protocol Data Unit)生成树协议是一种桥嵌套协议,在IEEE 802.1d规范里定义,可以用来消除桥回路。
工作原理:生成树协议定义了一个数据包,叫做桥协议数据单元BPDU(Bridge Protocol Data Unit)。网桥用BPDU来相互通信,并用BPDU的相关机能来动态选择根桥和备份桥。但是因为从中心桥到任何网段只有一个路径存在,所以桥回路被消除。
3.2 STP选举的几个概念和关键参数
3.2.1根网桥的Identifier(RootID)
根桥就是“网桥ID”最优的桥,当STP的拓扑结构稳定之后由根桥负责每2秒(Hello Time)向树中所有的网桥发送配置BPDU报文,其他网桥接收并转发。
3.2.2从指定网桥到根网桥的最小路径开销(根路径开销RPC)
根端口即去往根桥路径最近的端口,这个最近的衡量是靠Root Path Cost来判定的。有关Path Cost的计算,是每当一个端口收到一个BPDU后,会在该BPDU所指示的Path Cost上加上该端口的Port Path Cost(这是可以人为配置的)。比较累计Root Path Cost最小的端口就是根端口,如果有两条开销相同的路径,那么就选择桥BID较小的。
3.2.3指定网桥的Identifier(发送设备BID)
指定桥就是对下游来说向它转发BPDU报文的桥,一个LAN上除了根桥以外的所有网桥都是指定桥。指定桥上必定有指定端口(即使是网络边缘的网桥也有-连接到主机的端口),而指定端口就是用来转发BPDU报文的。拓扑稳定后Root Port是不发送BPDU报文的,虽然它的状态是Forwarding,它只接收BPDU。
3.2.4指定网桥的指定端口的Identifier(发送端口PID)
指定端口即在一个LAN里面负责转发BPDU的端口,根桥和指定桥上都有它,但根端口只在指定桥上有,同样block端口也只存在于指定桥上。
Block端口即被对方的指定端口抑制的端口,Block端口不转发任何报文,但他接收BPDU,监听网络变化。
3.3 STP工作步骤
将各个端口收到的配置消息和自己的配置消息做比较,得出优先级最高的配置消息更新本身的配置消息,主要工作有:
◆选择根网桥RootID:最优配置消息的RootID;
◆计算到根桥的最短路径开销RootPathCost:如果自己是根桥,则最短路径开销为0,否则为它所收到的最优配置消息的RootPathCost与收到该配置消息的端口开销之和;
◆选择根端口RootPort:如果自己是根桥,则根端口为0,否则根端口为收到最优配置消息的那个端口;
◆选择指定端口:包括在生成树上处于转发状态的其他端口;
从指定端口发送新的配置消息。
04 STP算法示例
示例:
STP拓扑结构的建立微观上说是一个全网交换机互相交互的过程,各台交换机相互之间不停的发送配置BPDU,发送和接受BPDU的是各switch的Ports,BPDU不单在不同交换机的端口之间比较,也在交换机的内部作比较。
如果发现比自己“优”的BPDU,就进行报文的更新,如果发现对方传来的BPDU不如自己的,则丢弃报文,直到再收不到比自己更优的BPDU为止。
当网络中所有的交换机都处于这种状态的时候我们可以认为拓扑结构已经建立,但根端口和指定端口还得经过2个Forward Delay Time才能进入转发状态。
所以STP拓扑结构的建立实际上可以理解为端口角色的建立,所有端口都为指定端口的交换机被选为根桥,其余的为指定桥。
4.1 STP 根桥的选择
根桥选择依据:
1. 优先级
2. MAC地址
注:根据网桥ID选择根网桥,网桥ID=两字节长度的优先级+6字节长度的MAC地址
交换机的优先级取值范围0-65536,增量为4096。优先级的值越小,优先级越高。
通常交换机优先级的默认值为32768,可以使用命令人工修改该值。
在网络中,所有的网桥都分配了一个数值,这个值称为网桥优先级,优先级最小的网桥称为根网桥。首先会比较交换机的优先级,如果优先级相同,那么MAC地址越小的即为根桥。
图:STP 根桥的选择
4.2 STP 选择根端口
根端口选择依据:
1. 根路径成本最低
2. 直连网桥的网桥ID最小
3. 直连网桥的端口ID最小
根端口存在每个非根网桥上,需要在每个非根网桥上选择一个根端口。
根端口即去往根桥路径最近的端口,这个最近的衡量是靠Root Path Cost来判定的。有关Path Cost的计算,是每当一个端口收到一个BPDU后,会在该BPDU所指示的Path Cost上加上该端口的Port Path Cost(这是可以人为配置的)。比较累计Root Path Cost最小的端口就是根端口,如果有两条开销相同的路径,那么就选择桥BID较小的。Root Path Cost不是一个可配置项,即它是由交换机根据Port Path Cost比较而累积得出的,Port Path Cost才是一个可配置的选项。
另外,一般端口的路径开销越大,该端口连接的LAN就越接近生成树的末梢,那么这个端口的流量就较少。如果某个LAN的带宽较小或者用户希望减少某个LAN的流量,就可以将该端口对应的路径开销配置一个较大的值。
图:STP 选择根端口-根据Cost值
图:STP 选择根端口-根据网桥ID
选根端口,在比较网桥ID时,比较的是端口直连发送方网桥ID值。
图:STP 选择根端口选择-根据端口ID
端口优先级,同网桥的优先级一样,端口优先级取值越小,则优先级越大。选根端口,在比较端口ID时,比较的是端口接收到的对端的端口ID值。
4.3 STP 指定端口
每个网段选择一个指定端口
1. 根桥上的端口都是指定端口
2. 非根桥上的指定端口
• 根据路径成本Cost值(网段的最低根路径)
• 端口所在的网桥ID值较小
直连网桥的端口ID值较小。
指定端口即在一个LAN里面负责转发BPDU的端口,根桥和指定桥上都有它,但根端口只在指定桥上有,同样block端口也只存在于指定桥上。
Block端口即被对方的指定端口抑制的端口,Block端口不转发任何报文,但他接收BPDU,监听网络变化。
选指定端口,在比较网桥ID和端口ID时,比较的是端口所在交换机的网桥ID值和端口ID值。
总结
本文从交换技术的概念出发,以STP生成树协议为主,简要的介绍了生成树协议的分类,生成树协议所遵循的IEEE标准,STP基本思想,以及STP算法-BPDU,并通过生成树算法示例帮助我们更好的理解STP的工作原理。
本期作者:傅先全,深信服产业教育中心教学教研副主任,深信服云计算认证专家(SCCE-C),产业教育中心资深讲师
曾任职于中国电信集团、华晟经世教育集团,分别担任云平台资深架构师、IT课程总监及名师团金牌讲师、多所高校特聘专家讲师;十余年云计算、大数据行业从业经验,在企业信息化建设、企业项目管理、云平台架构设计等方面有较强的实战经验;研究方向为云计算、大数据技术等,具有丰富的知识转换以及课程交付经验;同时,在院校学科建设、人才培养、项目科研、职业技能人才认证等方面具有丰富的产教融合体系建设与组织经验。