STP 是一个用于局域网中消除环路的协议, 它的标准是 IEEE 802.1D. 运行该协议的设备通过彼此交互信息而发现网络中的环路, STP 将部分冗余链路强制为阻塞状态, 其他链路处于转发状态. 当处于转发状态的链路不可用时, STP 重新配置网络, 并激活合适的备用链路状态.
由于局域网规模的不断增长, 生成树协议已经成为当前最重要的局域网协议之一.
三要素选举
从环形网络拓扑结构到树形结构, 总体来说有三个要素: 根桥, 根端口和指定端口.
根桥: 对于一个 STP 网络, 根桥在全网中只有一个, 它是整个网络的逻辑中心, 但不一定是物理中心. 在进行根桥的选择时, 一般会选择性能高, 网络层次高的交换设备作为根桥. 根桥会根据网络拓扑的变化而动态变化. 在配置 STP 过程中, 建议手动配置根桥和备份根桥. 请配置最核心的交换设备为根桥, 以保证 STP 二层网络的稳定性, 否则新接入设备可能会触发 STP 根切换, 从而导致业务短暂中断.
根端口: 去往根桥路径开销最小的端口, 根端口负责向根桥方向转发数据, 这个端口的选择标准是依据路径开销判定. 在一台设备上所有使能 STP 的端口中, 根路径开销最小者, 就是根端口. 很显然, 在一个运行 STP 协议的设备上根端口有且只有一个, 根桥上没有根端口.
指定端口: 指定桥向本设备转发配置消息 (BPDU 报文) 的端口或者指定桥向本网段转发配置消息的端口, 如图 1 所示:
AP1,AP2,BP1,BP2,CP1,CP2 分别表示设备 S1,S2,S3 的端口.
S1 通过端口 AP1 向 S2 转发配置消息, 则 S2 的指定桥就是 S1, 指定端口就是 S1 的端口 AP1.
与局域网 LAN 相连的有两台设备: S2 和 S3, 如果 S2 负责向 LAN 转发配置消息, 则 LAN 的指定桥就是 S2, 指定端口就是 S2 的 BP2.
图 1-1 指定桥与指定端口示意图
此外, 交换设备和端口都有 ID, 分别是桥 ID(BID)和端口 ID(PID). 端口 ID 由端口优先级和端口号组成. 桥 ID 由桥优先级和桥 Mac 两部分组成, 在 STP 网络中, 桥 ID 最小的设备会被选举为根桥.
一旦根桥, 根端口, 指定端口选举成功, 则整个树形拓扑建立完毕. 在拓扑稳定后, 只有根端口和指定端口转发流量, 其他的非根, 非指定端口都处于阻塞 (Blocking) 状态, 它们只接收 STP 协议报文而不转发用户流量.
STP 报文格式
上述桥 ID, 路径开销和端口 ID 等信息都是通过 BPDU 协议报文传输的. BPDU 报文被封装在以太网数据帧中, 目的 Mac 是组播 Mac:01-80-C2-00-00-00,Length/Type 字段为 Mac 数据长度, 后面是 LLC 头, LLC 之后是 BPDU 报文头. 以太网数据帧格式如图 2 所示.
图 1-2 以太网数据帧格式
在初始化过程中, 每个桥都主动发送配置 BPDU. 但在网络拓扑稳定以后, 只有根桥主动发送配置 BPDU, 其他桥在收到上游传来的配置 BPDU 后, 才触发发送自己的配置 BPDU. 配置 BPDU 的长度至少要 35 个字节, 包含了桥 ID, 路径开销和端口 ID 等参数, 即{根桥 ID, 累计根路径开销, 发送者 BID, 发送端口 PID}. 只有当发送者的 BID 或端口的 PID 两个字段中至少有一个和本桥接收端口不同, BPDU 报文才会被处理, 否则丢弃. 这样避免了处理和本端口信息一致的 BPDU 报文.
STP 实现过程
STP 的树形结构实现过程如下:
网络初始化时, 网络中所有的 STP 设备都认为自己是 "根桥", 根桥 ID 为自身的设备 ID. 通过交换 BPDU 消息, 设备之间比较根桥 ID, 网络中根桥 ID 最小的设备被选为根桥. 根桥上的所有端口都是转发状态.
非根桥设备将接收最优配置消息的那个端口定为根端口, 根端口也是处于转发状态.
设备根据根端口的配置消息和根端口的路径开销, 为每个端口计算一个指定端口配置消息, 然后将计算出的配置消息与角色待定端口自己的配置消息进行比较:
如果计算出的配置消息更优, 则该端口被确定为指定端口, 其配置消息也被计算出的配置消息替换, 并周期性地向外发送;
如果该端口自己的配置消息更优, 则不更新该端口的配置消息并将该端口阻塞. 该端口将不再转发数据, 且只接收不发送配置消息.
---------------------------
启动 STP
执行命令 system-view, 进入系统视图.
执行命令 stp mode stp, 配置交换设备的 STP 模式.
缺省情况下, 交换机运行 MSTP 模式, MSTP 模式兼容 STP 和 RSTP 模式.
(可选)配置根桥和备份根桥
在欲配置为根桥的设备上执行命令: stp root primary, 配置当前设备为根桥设备.
在欲配置为备份根桥的设备上执行命令: stp root secondary, 配置当前设备为备份根桥设备.
(可选)执行命令 stp priority priority, 配置交换设备在系统中的优先级.
缺省情况下, 交换设备的优先级取值为 32768. 数值越小, 优先级越高, 成为根桥的可能性越大. 对于网络中部分性能低, 网络层次低的交换设备, 不适合作为根桥设备, 一般会配置其低优先级以保证该设备不会成为根桥.
(可选)执行命令 stp pathcost-standard { dot1d-1998 | dot1t | legacy }, 配置端口路径开销计算方法.
缺省情况下, 路径开销值的计算方法为 IEEE 802.1t(dot1t)标准方法. 同一网络内所有交换设备的端口路径开销应使用相同的计算方法.
(可选)配置端口路径开销值及优先级
执行命令 interface interface-type interface-number, 进入参与生成树协议计算的接口视图.
执行命令 stp cost cost, 设置当前端口的路径开销值.
存在环路的网络环境中, 对于链路速率值相对较小的端口, 建议将其路径开销值配置相对较大, 以使其在生成树算法中被选举成为阻塞端口, 阻塞其所在链路.
执行命令 stp port priority priority, 配置端口的优先级.
缺省情况下, 交换设备端口的优先级取值是 128.
如果希望将某交换设备的端口阻塞从而破除环路, 则可将其端口优先级设置比缺省值大, 使得在选举过程中成为被阻塞的端口.
执行命令 quit, 退回系统视图.
执行命令 stp enable, 使能交换设备的 STP 功能.
执行命令 commit, 提交配置.
STP 其他配置
如果您想了解 STP 的其他配置及 RSTP 的配置, 如网络直径, 超时时间, 定时器, 边缘端口等, 请参见《CloudEngine 8800, 7800, 6800, 5800 V200R005C10 配置指南 - 以太网交换》中的 "STP/RSTP 配置".
配置 STP 示例
以下图的组网环境为例, 介绍 STP 的配置步骤, 查看配置结果.
图 1-3 配置 STP 功能组网图
在 SwitchA 上配置生成树协议为 STP 模式, 配置 SwitchA 为根桥, 路径开销计算方法为华为私有计算方法.
<SwitchA> system-view
[~SwitchA] stp mode stp
- [*SwitchA] stp root primary
- [*SwitchA] stp pathcost-standard legacy
- [*SwitchA] commit
在 SwitchB 上配置生成树协议为 STP 模式, 配置 SwitchB 为备份根桥, 路径开销计算方法为华为私有计算方法, 并关闭与 Server2 相连端口的 STP 功能.
<SwitchB> system-view
[~SwitchB] stp mode stp
- [*SwitchB] stp root secondary
- [*SwitchB] stp pathcost-standard legacy
- [*SwitchB] interface 10ge 1/0/2
- [*SwitchB-10GE1/0/2] stp disable
- [*SwitchB-10GE1/0/2] commit
在 SwitchC 上配置生成树协议为 STP 模式, 路径开销计算方法为华为私有计算方法, 接口 10GE1/0/1 的路径开销值为 20000, 并关闭与 Server1 相连端口的 STP 功能.
<SwitchC> system-view
[~SwitchC] stp mode stp
- [*SwitchC] stp pathcost-standard legacy
- [*SwitchC] interface 10ge 1/0/1
- [*SwitchC-10GE1/0/1] stp cost 20000
- [*SwitchC-10GE1/0/1] quit
- [*SwitchC] interface 10ge 1/0/2
- [*SwitchC-10GE1/0/2] stp disable
- [*SwitchC-10GE1/0/2] commit
在 SwitchD 上配置生成树协议为 STP 模式, 路径开销计算方法为华为私有计算方法.
<SwitchD> system-view
[~SwitchD] stp mode stp
- [*SwitchD] stp pathcost-standard legacy
- [*SwitchD] commit
环网中所有设备均使能 STP. 以 SwitchA 为例, 在 SwitchB,SwitchC 和 SwitchD 上执行相同的操作.
[~SwitchA] stp enable
[*SwitchA] commit
验证配置结果. 待网络稳定后, 可以执行 display stp brief 查看端口角色和端口状态等信息, 以 SwitchA 为例:
[~SwitchA] display stp brief
- MSTID Port Role STP State Protection Cost Edged
- 0 10GE1/0/1 DESI forwarding none 2 disable
- 0 10GE1/0/2 DESI forwarding none 2 disable
来源: http://www.bubuko.com/infodetail-3635688.html