转载至华为官方技术文档,只做笔记参考,不作它用。
定义
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出生成树协议STP(Spanning Tree Protocol)。与众多协议的发展过程一样,生成树协议也是随着网络的发展而不断更新的,从最初的IEEE 802.1D中定义的STP到IEEE 802.1w中定义的快速生成树协议RSTP(RapidSpanning Tree Protocol),再到最新的IEEE 802.1s中定义的多生成树协议MSTP(Multiple Spanning Tree Protocol)。生成树协议中,MSTP兼容RSTP、STP,RSTP兼容STP。三种生成树协议的比较如下
生成树协议 | 英文对照 | 特点 | 应用场景 | 备注 |
STP | Spanning Tree Protocol 生成树协议 | l 形成一棵无环路的树,解决广 播风暴并实现冗余备份。 l 收敛速度较慢。 | 无需区分用户或业务流量,所有 VLAN共享一棵生成树。 | 基本已经不用 |
RSTP | RapidSpanning Tree Protocol 快速生成树协议 | l 形成一棵无环路的树,解决广 播风暴并实现冗余备份。 l 收敛速度快。 | 主流 | |
MSTP | Multiple Spanning Tree Protocol 多生成树协议 | l 形成一棵无环路的树,解决广 播风暴并实现冗余备份。 l 收敛速度快。 l 多棵生成树在VLAN间实现负 载均衡,不同VLAN的流量按 照不同的路径转发。 | 需要区分用户或业务流量,并实现负载分担。 不同的VLAN通过不同的生成树转发流量,每棵生成树之间相互独立。 | 主流 |
目的
在以太网交换网中部署生成树协议后,如果网络中出现环路,生成树协议通过拓扑计算,可实现:
l 消除环路:通过阻塞冗余链路消除网络中可能存在的网络通信环路。
l 链路备份:当前活动的路径发生故障时,激活冗余备份链路,恢复网络连通性。
STP 基本概念
一个根桥
树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念。
对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物
理中心。根桥会根据网络拓扑的变化而动态变化。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该
报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。
两种度量
生成树的生成计算有两大基本度量依据:ID和路径开销。
l ID
ID又分为:BID(Bridge ID)和PID(Port ID)。
– BID:桥ID
IEEE 802.1D标准中规定BID是由16位的桥优先级(Bridge Priority)与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。在STP网络中,桥ID最小的设备会被选举为根桥。
– PID:端口ID
PID由两部分构成的,高4位是端口优先级,低12位是端口号。PID只在某些情况下对选择指定端口有作用。
路径开销
路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。在一个STP网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。
三要素选举
l 根桥RB(Root Bridge)
根桥就是网桥ID最小的桥,通过交互配置BPDU协议报文选出最小的BID。
l 根端口RP(Root Port)
所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
l 指定端口DP(Designated Port)
指定桥与指定端口的描述见表
分类 | 指定桥 | 指定端口 |
对于一台设备而言 | 与本机直接相连并且负责向本机转发配置消息的设备 | 指定桥向本机转发配置消息的端口 |
对于一个局域网而言 | 负责向本网段转发配置消息的设备 | 指定桥向本网段转发配置消息的端口 |
四个比较原则
字段内容 | 简要说明 |
根桥ID | 每个STP网络中有且仅有一个根。 |
累计根路径开销 | 发送配置BPDU的端口到根桥的距离,决定了到根 桥的路径开销。 |
发送设备BID | 发送配置BPDU的设备的BID。 |
发送端口PID | 发出配置BPDU的端口的PID。 |
五种端口状态
端口状态 | 目的 | 说明 |
Forwarding | 端口既转发用户流量也处理BPDU报文。 | 只有根端口或指定端口才能进入Forwarding状态。 |
Learning | 设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。 | 过渡状态,增加Learning状态防止临时环路。 |
Listening | 确定端口角色,将选举出根桥、根端口和指定端口。 | 过渡状态。 |
Blocking | 端口仅仅接收并处理BPDU,不转发用户流量。 | 阻塞端口的最终状态。 |
Disabled | Disabled 端口不仅不处理BPDU报文,也不转发用户流量。 | 端口状态为Down。 |
MSTP 端口状态
端口状态 | 说明 |
Forwarding | 在这种状态下,端口既转发用户流量又处理BPDU报文。 |
Learning | 这是一种过渡状态。在Learning下,交换设备会根据收到的用户流量,构建MAC地址表,但不转发用户流量,所以叫做学习状态。Learning状态的端口处理BPDU报文。 |
Discarding | Discarding状态的端口只接收BPDU报文。 |
MSTP原理描述
MSTP 出现的背景
RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,造成带宽浪费,还有可能造成部分VLAN的报文无法转发。
为了弥补STP和RSTP的缺陷,IEEE于2002年发布的802.1s标准定义了MSTP。MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。通过MSTP把一个交换网络划分成多个域,每个内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(Multiple Spanning Tree Instance),每个域叫做一个MST域(MST Region:Multiple Spanning Tree Region)。