生成树协议原理

本文首次发布于 Mlin Blog简书CSDN,作者 @木林(Mlin) ,转载请保留原文链接。

文章目录

前言

正文

一、STP

为了提高网络可靠性,交换网络中通常会使用一些冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。

1 STP出现背景

1.1 广播风暴
  • 环路会引起广播风暴。
  • 网络中的主机会收到重复数据帧。

  • 根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。
  • 主机A向外发送了一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB接收到此帧后,将其转发到SWA和SWC,SWA和SWC也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SWB,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。
1.2 MAC地址表震荡
  • 环路会引起MAC地址表震荡。

  • 交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
  • 主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-01-02-03-04-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。此例仅以SWB从G0/0/1端口转发此帧为例进行说明。
  • SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。
  • SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。
  • SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,00-01-02-03-04-AA,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。

2 STP的基本概念

2.1 一般概念
  • 遵循标准
    • STP遵循IEEE std 802.1D标准
  • 基本思想
    • STP根据拓扑结构构建无环网络
  • 实现方法
    • STP通过阻塞适当的端口来避免环路
  • STP可以消除网络中的环路。其基本理论依据是根据网络拓扑构建(生成)无回路的连通图(就是树),从而保证数据传输路径的唯一性,避免出现环路导致报文流量的增加和循环。STP是工作在OSI第二层(Data Link Layer)的协议。
  • STP协议通过在交换机之间传递特殊的消息并进行分布式的计算,来决定在一个有环路的网络中,某台交换机的某个端口应该被阻塞,用这种方法来避免掉环路
2.2 重要概念
  • 根桥RB(Root Bridge)
    • 根桥就是网桥ID最小的桥,由优先级和MAC地址组成。
  • 根端口RP(Root Port)
    • 所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
  • 指定端口(DP)和指定桥
    • 每一个网段选择到根桥最近的网桥作为指定桥,该网桥到这个网段的端口为指定端口。
    • 指定桥通过指定端口负责向本网段转发流量和发送配置消息。
  • 替代端口AP(Alternate Port)
    • 既不是根端口,又不是指定端口

2.3 配置BPDU
  • 配置BPDU

    • 传递根桥ID,累计根路径开销,发送设备BID,发送端口PID等参数
    • 由根桥周期(hello time)发送
    • 发送目的为组播MAC地址01-80-C2-00-00-00
    • 老化时间为Max Age
  • 配置BPDU在以下3种情况下会产生

    • 只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
    • 当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
    • 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。
2.4 STP的作用
  • 消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
  • 链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。

3 STP报文格式

字段内容 含义
Protocol Identifier 协议ID=“0”
Protocol Version Identifier 协议版本标识符,STP为0,RSTP为2,MSTP为3。
BPDU Type BPDU类型,MSTP为0x02。 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU(Topology Change Notification BPDU) 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)
Flags 标识位,对于“标记域”(Flags),第一个bit(左边、高位bit)表示“TCA(拓扑改变响应)”,最后一个bit(右边、低位bit)表示“TC(拓扑改变)”。
Root Identifier 根桥BID,网桥ID都是8个字节——前两个字节是网桥优先级,后6个字节是网桥MAC地址。
Root Path Cost 根路径开销,本端口累计到根桥的开销。
Bridge Identifier 发送者BID,本交换机的BID。
Port Identifier 发送端口PID,发送该BPDU的端口ID。
Message Age 该BPDU的消息年龄。
Max Age 消息老化年龄。
Hello Time 发送两个相邻BPDU间的时间间隔。
Forward Delay 控制Listening和Learning状态的持续时间。
  • 根路径开销(Root Path Cost)
    • 从发送该BPDU的网桥到根桥的最小路径开销,即到根桥的最短路径上所有链路开销的和。
  • 桥ID(Bridge Identifier)
    • 发送BPDU的桥ID,对于LAN来说,就是指定桥ID(DesignatedBridgeID)。
  • 发送端口ID(Port Identifier)
    • 发送BPDU的端口ID,端口ID由端口优先级和端口号组成。对于LAN来说,就是指定端口ID(DesignatedPortID)
  • Hello Time
    • 运行STP协议的设备发送配置消息BPDU的时间间隔,用于检测链路是否存在故障。
    • 当网络拓扑稳定之后,该计时器只有在根桥上进行修改才有效。
    • 当拓扑发生变化时,变更消息不受Hello time影响。
    • 缺省为2秒。
  • Max Age
    • 运行STP协议的网络中非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:
      • 如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文。
      • 如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。
    • 实际实现中,配置BPDU报文经过一个桥,Message Age增加1。
    • 缺省为20。
  • Forward Delay
    • 配置BPDU传播到全网的最大延迟,默认为15秒。

4 STP拓扑计算

4.1 STP操作过程

  1. 选举一个根桥。
  2. 每个非根交换机选举一个根端口。
  3. 每个网段选举一个指定端口。
  4. 阻塞非根、非指定端口。
4.2 选举根桥
  • 初始状态所有交换机所有端口处于listening状态
  • 网络中桥ID最小的网桥被选为根桥
  • STP拓扑计算
    • 网络中所有的设备使能STP协议后,每一台设备都认为自己是根桥。此时,每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于Listening状态。所有设备通过交换配置BPDU后,进行选举工作,选出根桥、根端口和指定端口。
    • 网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
    • 交换机优先级是可以配置的,取值范围是0~65535,默认值为32768。

  • STP中根桥的选举依据的是桥ID,STP中的每个交换机都会有一个桥ID(Bridge ID) 。桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
  • 交换机启动后就自动开始进行生成树收敛计算。默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID。如果收到的BPDU报文中的桥ID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机。如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。
4.3 最优配置BPDU

为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU(Bridge Protocol Data Unit)中。

  • BPDU有两种类型:配置BPDU和TCN BPDU。

    • 配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
    • TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
  • 配置BPDU中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:

    • 根桥ID:由根桥的优先级和MAC地址组成,每个STP网络中有且仅有一个根桥。
    • 根路径开销:到根桥的最短路径开销。
    • 指定桥ID:由指定桥的优先级和MAC地址组成。
    • 指定端口ID:由指定端口的优先级和端口号组成。
    • Message Age:配置BPDU在网络中传播的生存期。
    • Max Age:配置BPDU在设备中能够保存的最大生存期。
    • Hello Time:配置BPDU发送的周期。
    • Forward Delay:端口状态迁移的延时。
  • 最优配置BPDU处理方法

4.4 选举根端口和指定端口
4.4.1 根端口选举
  • 非根交换机在选举根端口时分别依据该端口的根路径开销、对端BID(Bridge ID)、对端PID(Port ID)和本端PID。

  • 交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP中的开销值。默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有接收BPDU端口的端口开销总和(即BPDU的入方向端口),称为路径开销。非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC(Root Path Cost,根路径开销),并生成无环树状网络。根桥的根路径开销是0。
  • 一般情况下,企业网络中会存在多厂商的交换设备,华为X7系列交换机支持多种STP的路径开销计算标准,提供最大程度的兼容性。缺省情况下,华为X7系列交换机使用IEEE 802.1t标准来计算路径开销。
  • 运行STP交换机的每个端口都有一个端口ID,端口ID由端口优先级和端口号构成。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。端口ID(Port ID)可以用来确定端口角色。
  • 每个非根桥都要选举一个根端口。根端口是距离根桥最近的端口,这个最近的衡量标准是靠路径开销来判定的,即路径开销最小的端口就是根端口。端口收到一个BPDU报文后,抽取该BPDU报文中根路径开销字段的值,加上该端口本身的端口开销即为本端口路径开销。如果有两个或两个以上的端口计算得到的累计路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。
  • 如果两个或两个以上的端口连接到同一台交换机上,则选择发送者PID最小的那个端口作为根端口。如果两个或两个以上的端口通过Hub连接到同一台交换机的同一个接口上,则选择本交换机的这些端口中的PID最小的作为根端口。
4.4.2 指定端口选举
  • 非根交换机在选举指定端口时分别依据根路径开销、BID、PID。
  • 未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。

  • 53
    点赞
  • 281
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值