[数通]STP、RSTP、MSTP原理及配置(未完善)
[数通]STP、RSTP、MSTP原理及配置
STP
STP - 作用
- 消除交换机环路
- 解决MAC地址表震荡和广播风暴的问题
补充:STP是数据链路层的协议
STP - 概念
根桥(Root Bridge)
- 桥ID最小的网桥,由优先级和MAC地址组成。
根端口(Root Port)
- 去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据。
- 在一个运行STP协议的设备上,根端口有且只有一个,根桥上没有根端口。
指定桥(Designated Bridge)
- 指定桥通过指定端口负责向本网段转发流量和发送配置信息。
指定端口(Designated Port)
- 每个网段选择到根桥最近的网桥作为指定桥,该桥到这个网段的端口为指定端口。
一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。
在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根非指定端口都处于阻塞(Blocking)状态,它们只接受STP协议报文而不转发用户流量。
STP - 配置BPDU
配置BPDU
- 传递根桥ID、累计根路径开销、发送设备BID、发送端口PID等参数
- 由根桥周期(hello time)发送
- 发送目的地址为组播MAC地址
- 老化时间为Max Age
BPDU消息字段 | BPDU消息说明 |
---|---|
Protocol Identifier | 总是为0 |
Protocol Version Identifier | 总是为0 |
BPDU Type | BPDU类型 |
Flags | 标识位 |
Root Identifier | 当前根桥的BID |
Root Path Cost | 根路径开销 |
Bridge Identifier | 本交换设备的BID |
Port Identifier | 发送该BPDU的端口ID |
Message Age | 该BPDU的消息年龄 |
Max Age | 消息老化年龄 |
Hello Time | 发送两个相邻BPDU的时间间隔 |
Forward Delay | 控制Listening和Learning状态的持续时间 |
配置BPDU在以下三种情况下会产生
-
只要端口使能STP,则配置BPDU就会按照Hello Time时间间隔从指定端口发出。
-
当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
-
当指定端口收到比自己差的配置BPDU时,会立即向下游设备发送自己的BPDU
根桥ID(Root Identifier)
- Root Identifier由根桥优先级和根桥MAC地址组成,默认优先级为32768
根路径开销(Root Path Cost)
- 从发送该BPDU的网桥到根桥的最小路径开销,即到根桥的最短路径上所有链路开销的和。
桥ID(Bridge Identifier)
- 发送BPDU的桥ID,对于LAN来说,就是指定桥ID(Designated Bridge ID)
发送端口ID(Port Identifier)
- 发送BPDU的端口ID,端口ID由端口优先级和端口号组成。对于LAN来说,就是指定端口ID(DesignatedPortID)。
Hello Time
- 发送BPDU的时间间隔,用于检测链路是否存在故障。
- 当网络拓扑稳定后,该计时器只能在根桥上进行修改才有效。
- 当拓扑发生变化时,变更消息不受Hello Time影响。
- 默认发送间隔为2秒。
Max Age
- 非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:
- Message Age <= Max Age,非根桥设备继续转发配置BPDU报文
- Message Age > Max Age,则该配置BPDU报文将被老化,丢弃报文
- 实际中,配置BPDU报文经过一个桥,Message Age增加1。
- 默认为20秒。
Forward Delay
- 配置BPDU传播到全网的最大延迟,默认为15秒。
STP - 根桥选举
-
使能STP后,网络中的每台设备都认为自己是根桥。此时,每台设备仅仅收发配置BPDU,而不转发用户流量,所有端口都处于Listening状态。所有设备通过交换配置BPDU后,进行选举工作,选出根桥、根端口和指定端口。
-
网络初始化时,网络中所有STP设备都认为自己是根桥,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。(先比较优先级,然后比较MAC地址大小)
-
交换机优先级是可配置的,取值范围0~65535,默认为32768。
STP - 最优配置BPDU
最优配置BPDU处理方法:
- 每个端口将收到的配置消息与自己的配置消息进行比较。
- 收到的优先级<自己的优先级,直接丢弃,对自己的配置信息不做任何处理。
- 收到的优先级>自己的优先级,则用该配置消息将自己的配置消息替换掉。
- 设备将所有端口的配置消息进行比较。
- 根桥ID较小的配置消息优先级高。
- 若根桥ID相同,则比较根路径开销,比较方法:
- 假设S=根路径开销+本端口对应路径开销,S较小的配置消息优先级高。
- 若根路径开销也相同,则依次比较:
- 指定桥ID
- 指定端口ID
- 接口配置消息的端口ID
- 上述均比小,较小者胜出
- 选出最优的配置信息
STP - 选举根端口和指定端口
选举根端口和指定端口过程:
-
非根桥设备将接受最优配置消息的那个端口定位根端口。
-
设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:根桥ID替换为根端口的配置消息的根桥ID。
- 根路径开销替换为根端口配置消息的根路径开销加上根端口对应的根路径开销;
- 发送者BID替换为自身设备的ID;
- 发送端口PID替换为自身端口ID。
-
设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:
-
如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
-
如果该端口本身的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接受不发送配置消息。
-
STP - 标准端口状态描述
端口状态 | 发送/接收配置BPDU | MAC地址学习 | 转发数据 | 作用说明 |
---|---|---|---|---|
Disable | 否/否 | 否 | 否 | 端口状态为down |
Blocking | 否/是 | 否 | 否 | 阻塞端口的最终状态 |
Listening | 是/是 | 否 | 否 | 过渡状态,选举根桥、确定端口角色 |
Learning | 是/是 | 是 | 否 | 过渡状态,构建MAC地址表 |
Forwarding | 是/是 | 是 | 是 | 只有根端口和指定端口才能进入Forwarding状态 |
Forwarding Delay
- 端口在过渡状态的停留时间为15秒。
端口状态描述:
- 端口正常启用后,端口首先进入Listening状态,开始生成树的计算过程。
- 如果经过计算,端口角色需要设置为预备端口(Alternate Port),则端口状态立即进入Blocking。
- 如果经过计算,端口角色需要设置为根端口(Root Port)或指定端口(Designated Port),则端口状态在等待Forward Delay之后从Listening状态进入Learning状态,然后继续等待Forward Delay之后,从Learning状态进入Forwading状态,正常转发数据帧。
STP - 华为端口状态描述
端口状态 | 说明 |
---|---|
Discarding | Discarding状态的端口只接收BPDU报文 |
Learning | 处理BPDU,构建MAC地址表,不转发用户流量 |
Forwarding | 既转发用户流量又处理BPDU报文 |
- 华为设备默认为MSTP模式,当从MSTP模式切换到STP模式,运行STP协议的设备上端口支持的端口状态仍然保持和MSTP支持的端口状态一样,支持的状态仅包括Forwading、Learning和Discarding
STP - 设计缺陷
- 没有对端口状态和端口角色进行细致区分
- 算法被动,收敛速度过慢
- 极不适应拓扑频繁变化的网络