88440559_p0 1080.jpg

1. Spanning Tree Protocol(生成树协议 802.1D)特征


  • 在冗余链路上解决二层环路,实现链路备份(当活动链路故障时激活阻塞链路,恢复网络连通性)
  • 让某些接口处于逻辑拥塞状态(不能转发数据),避免[环路风险]
    • 广播风暴(收到广播包或未知单播,会进行泛洪)
    • MAC 地址表震荡/飘逸
    • 重复帧拷贝
  • STP 依靠时间进行计算
  • STP 有两种报文
    • BPDU:配置BPDU报文
    • TCN:拓扑改变通知
  • 华为 STP 借鉴了 RSTP ,有备份端口角色
  • 在华为设备上,因为借鉴了 RSTP 的机制,所以存在一个 BP、EP 接口

    2. Port Role 和选举原则


1)概述

  • 通过 BPDU(桥协议数据单元)完成生成树的计算
  • 整个交换网络只有一个根桥
  • 每个非根交换机选举一个根端口,设备级(转发状态)
  • 每个链路上选举一个指定端口,链路级(转发状态)
  • 既不是根端口也不是指定端口被拥塞(丢弃状态)

    2)计算度量依据

  • Root ID(根桥ID):是根桥设备 ID,由协议优先级 + 扩展系统 ID(VLAN 号,华为系统 ID 为 0)+ 背板 MAC 组成[优先级默认 32768 ,以 4096 为步长递增,0 最优]

  • Bridge ID(桥ID):是转发 BPDU 报文的设备 ID
  • Port ID(端口ID):由端口优先级 + 接口序号组成[端口优先级默认 128 ,以 16 为步长递增,0 最优]
  • RPC(根路径开销):到达根桥的链路 Cost ,累加入 自己接口的Cost值[Cost 数值的大小由 RFC 决定]

    3)根桥(Root)

    整个交换网络只有一个根桥

  • 设备启动时每台设备都认为自己是根桥,向外发送自身的 BPDU。计算后(网络收敛),只有根桥向外发送 BPDU,其他设备对此 BPDU 进行转发

  • 选举原则

    1. 优先级值小的优选
    2. MAC地址小的优选

      4)根端口(RP)

      每个非根交换机选举一个根端口,设备级(转发状态)

  • 非根设备只有一个唯一的根端口(离根桥最近的接口),用于接收根桥发来的 BPDU

  • 选举原则
    1. RPC ,到根桥的开销
    2. 发送端的 BID 小的优选
    3. 发送端的 PID 小的优选
    4. 接收端的 PID 小的优选
  • 控制根端口选举

    1. 调整接收端的端口 Cost 值
    2. 调整发送端的端口优先级
    3. 调整转发者的桥 ID

      5)指定端口(DP)

      每个链路上选举一个指定端口,链路级(转发状态)

  • 根桥一般情况下所有接口都是指定端口(但不一定都为 DP),用于转发根桥的 BPDU

  • 一般情况下 RP 的对端就是 DP
  • DP 端口也有情况会是 Disabled 状态
    • 下行设备是个傻瓜交换机(没有 STP),傻瓜交换机自环,会导致上联设备 DP 端口收到自己转发的 BPDU,导致成为 Disabled 状态
    • 配置了 BPDU 保护,也会成为Disabled状态
  • 选举原则

    1. RPC ,到根桥的开销
    2. 发送端的 BID 小的优选
    3. 发送端的 PID 小的优选

      6)非指定端口(AP)

      既不是根端口也不是指定端口被拥塞(丢弃状态Blocking)

  • 接收 BPDU 但不转发数据

    3. 端口状态变迁(STP 状态机)


1)时间戳

  • Hello Time:BPDU 的发送间隔,「2s」发送一次(由根桥发送)。用于设备检测链路是否存在故障
  • Max Age:最大生存时间「20s」
    • 报文中 Message Age ≤ Max Age,则该非根桥设备继续转发配置 BPDU 报文
    • 报文中 Message Age > Max Age,则该配置 BPDU 报文将被老化,非根桥设备直接丢弃该配置 BPDU
  • Forward Delay:转发时延「15s」

    2)端口状态

  • Disabled(禁用状态):不接收、不转发数据帧;不学习MAC地址;不接收BPDU

  • Blocking(Discarding、阻塞状态):不接收、不转发数据帧;不学习MAC地址;接收但不转发BPDU
  • Listening(侦听状态):不接收、不转发数据帧;不学习MAC地址;接收并转发BPDU(选举端口角色)
  • Learning(学习状态):不接收、不转发数据帧;学习MAC地址;接收并转发BPDU(因为 CAM 表中是空的,如果直接转发会导致全是泛洪报文)
  • Forwarding(转发状态):接收、转发数据帧;学习MAC地址;接收并转发BPDU

    3)状态变迁

    image.png

  • 华为缺省情况处于 MSTP 模式,当从 MSTP 模式切换到 STP 模式,运行 STP 协议的设备端口支持的端口状态仍然保持和 MSTP 支持的端口状态一致,支持的状态仅包括 Forwarding、Learning 和 Discarding

    • Listening到Learning需要一个转发时延
    • Learning到Forwarding需要一个转发时延
    • 端口被选为指定端口或根端口后,需要经过两个转发时延「30s」才能转发数据包

      4. STP Message


在 STP 中:

  • Protocol Identifier、 Protocol Version Identifier、 BPDU Type、 Flags 四部分设置为全 0
  • Root Identifier、Root Path Cost、Bridge Identifier、Port Identifier 四部分用于检测最优的配置 BPDU,进行生成树计算

image.png

STP Message 格式解析

  • Protocol Identifier:协议标识
  • Protocol Version Identifier:协议版本标识
    • STP = 0
    • RSTP = 2
    • MSTP = 3
  • BPDU Type:BPDU 类型
    • 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:标志位。在 STP 中,只用到了 0位和 7位
    • 0位(最低位)= TC(拓扑变更)
    • 7位(最高位)= TCA(拓扑变更收到确认)
  • Root Identifier:网桥 ID。发送此配置 BPDU 的交换机所认为的根交换机的标识
  • Root Path Cost:根路径开销。到达根桥的最短路径开销
  • Bridge Identifier:发送者的 BID。转发该 BPDU 报文的桥 ID
  • Port Identifier:发送者端口的 PID。转发该 BPDU 报文的端口 ID
  • Message Age(消息年龄):每经过一个设备会增加 1
  • Max Age(最大消息年龄、老化时间):默认为 20s。如果 Message Age 到达 Max Age,则此配置 BPDU 被认为已经过期
    • RP 没有收到 Root 发来的 BPDU,需要等待 20s 才会进行端口状态切换
  • Hello Time:默认为 2秒,在指定端口上,配置 BPDU 每隔两秒发送一次
  • Forward Delay(转发时延):默认为 15s

    1)配置 BPDU(桥协议数据单元)

    image.png

  • 配置 BPDU 只用于计算生成树,不用于传递拓扑改变信息

  • 上游设备向下游设备发送 BPDU 报文
  • 使用标准 LLC 格式封装在以太网数据帧中
  • 通过组播目的 MAC 地址传递「0180-C200-0000」:标识所有的交换机,只在本地链路有效
  • LLC Header 中源目地访问服务点都为[01000010],Control 值为[3]

    2)TCN

    image.pngimage.png

  • 只要交换机的端口有动作(Up/Down)就会触发 TCN 报文

    • TCN BPDU 报文主要用来向上游设备乃至根桥通知拓扑变化
    • 下游交换机只有向上游交换机发送 TCN 报文,上游交换机才会向下游交换机发送 TCN BPDU 报文(只有 Root 交换机才有资格发送 TC 变更的 BPDU 报文)
  • 拓扑变更通知 BPDU(Topology Change Notification BPDU)
    • 用于非根交换机在根端口上向上游交换机通告拓扑改变信息,并且每隔 Hello Time 2 秒发送一次,直到收到上游交换机的拓扑变更确认配置 BPDU 或者拓扑变更配置 BPDU
  • 拓扑改变确认配置 BPDU(Topology Change Acknowledgment Configuration BPDU)
    • BPDU 中 TCA=1 主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送 TCN BPDU 报文
    • 配置 BPDU 的一种,比普通配置 BPDU 多设置了一个 Flags 位(TCA = 1)。用于非根交换机在接收到拓扑改变通知 BPDU 后,在指定接口上向下游交换机发送拓扑改变通知的确认信息
  • 拓扑改变配置BPDU (Topology Change Configuration BPDU)
    • 主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥 MAC 地址表项,从而达到快速收敛的目的
    • 该配置 BPDU 设置了另外一个 Flag 位(TC = 1)。用于根交换机向整网泛洪拓扑改变信息,所有交换机都在自己所有的指定端口上泛洪该 BPDU

image.png

  1. 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送 TCN BPDU 报文
  2. 上游设备收到下游设备发来的 TCN BPDU 报文后,只有指定端口处理 TCN BPDU 报文。其它端口也有可能收到 TCN BPDU 报文,但不会处理
  3. 上游设备会把配置 BPDU 报文中的 Flags TCA =1,然后发送给下游设备,告知下游设备停止发送 TCN BPDU 报文
  4. 上游设备复制一份 TCN BPDU 报文,向根桥方向发送
  5. 根桥把配置 BPDU 报文中的 Flags TC = 1 和 TCA = 1 后每隔 2s 发送,通知下游设备直接删除(将 MAC 地址老化时间设置为 15s)桥 MAC 地址表项(快速收敛)。后续的 BPDU 报文只有 TC = 1,连续发送 Max Age + Forwarding 时间的 BPDU 报文