生成树技术
一、生成树协议简介
为了提高网络可靠性,交换网络中通常会使用冗余链路来解决单点故障问题,但冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。生成树协议主要作用有:
- 消除环路
通过阻断冗余链路来消除网络中可能存在的环路- 链路备份
当活动路径发生故障时,激活备份链路,及时恢复网络连通性
生成树协议主要有STP(801.1d)、RSTP(802.1w)和MSTP(802.1s)三种协议。
二、STP
1. STP 基本概念
STP通过运行STA算法在交换网络中构造一棵树(无环)来消除交换网络中的环路。每个STP网络中,都存在一个根桥,其他交换机为非根桥,根桥位于整个逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备。当现有根桥发生故障时,非根桥之间会交互BPDU并重新选举根桥。
- 端口状态
端口状态 | 描述 |
---|---|
Disable | 不参与STP,不转发任何数据和BPDU |
Blocking | 不转发数据,可接收BPDU,不发送BPDU,不学习MAC地址 |
Listening | 不转发数据,可接收BPDU,可发送BPDU,不学习MAC地址 |
Learning | 不转发数据,可接收BPDU,可发送BPDU,学习MAC地址 |
Forwarding | 转发数据,可接收BPDU,可发送BPDU,学习MAC地址 |
- 端口角色
端口角色 | 描述 |
---|---|
根端口RP | 能够转发数据,接收BPDU(存储最优的BPDU),通常不发BPDU |
指定端口DP | 能够转发数据,接收BPDU(发送RP收到的最优BPDU),通常不收BPDU |
阻塞端口Block | 不能转发数据,接收BPDU(存储RP以外的次级BPDU),不发BPDU |
Disable | 不参与STP,不转发任何数据和BPDU |
说明:
- 只有DP和RP最终进入到Forwarding状态,参与数据帧的转发,但是一旦成为RP/DP并不能直接进入Forwarding,而必须经历30s的转发延迟(Listening、Learning),防止网络中临时环路的产生。
- 端口由Block/Disable 变为RP/DP,在进入Forwarding状态前延时30s
- 端口由RP/DP变为Block,那么直接进入Blocking状态
- 端口由RP变为DP或DP变为RP,forwarding状态不变
2. BPDU
桥协议数据单元BPDU(Bridge Protocol Date Unit)用于在交换机直接交换相关信息完成生成树的选举。BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00。
BPDU有两类:配置BPDU和TCN BPDU
- 配置BPDU包含BID、RPC、PID、Timer等信息,在初始化工程中,桥设备主动发送配置BPDU;拓扑稳定后,从桥设备中的指定端口发送配置BPDU。
- TCN BPDU是指网络拓扑变化时下游交换机向上游交换机发送拓扑变化通知。 TCN BPDU报文只有配置 BPDU报文的前三个字段,共4个字节。
说明:
- 配置BPDU中Timer包括Message Age、Max Age、Hello Time、ForwardDelay。
- 如果配置BPDU是从根桥发出 ,Message Age为0;配置BPDU每经过一个桥Message Age增加1
- Max Age表示报文老化时间,默认为20s
- Hello Time表示发送2个相邻的BPDU的时间间隔。默认为2s
- Forward Delay表示控制Listening和Learning状态的持续时间。默认为15s。
3. STP 选举过程
-
step 1 :选举根桥
交换机启动后就自动开始进行生成树收敛计算。默认情况下,所有交换机启动时都认为自己是根桥(即RootBID=BID),自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。对端交换机收到BPDU报文后,会比较BPDU中的RootBID和自己的BID,如果收到的BPDU报文中的RootBID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机;如果收到的BPDU报文中的RootBID优先级高则交换机会修改自己的BPDU报文的RootBID字段宣告新的根桥,直到网络中所有交换机对根桥的认识一致。BID由两部分组成:Priority+MAC。BID比较方法:先比较Priority值大小再比较MAC地址大小。Priority越小越优先,MAC越小越优先。
-
step 2 :选举根端口
每个非根桥都要选举一个根端口。根端口是一个非根桥交换机距离根桥"最近"的端口。即累计根路径开销最小的端口。端口收到BPDU报文后,读取累计根开销字段(RPC)加上该端口本身的路径开销即为累计根路径开销。根端口选举依据:根路径开销、发送者BID、发送端口PID。
-
step 3 :选举指定端口
每个网段选举出一个指定端口DP。在网段上抑制其他端口发送BPDU报文的端口。根桥的所有端口都是指定端口。指定端口选举依据:根路径开销、发送者BID、发送端口PID
说明:
连接终端的接口也会参与STP选举,最终成为DP
每个网段必须存在一个DP,DP端口对端不是RP就是block端口 - step 4 :选举阻塞端口
其它端口作为阻塞端口
4. 实验
实验拓扑
配置步骤
1)配置生成树协议为stp
stp mode stp
2)配置根桥
stp root primary
或者修改桥ID优先级,默认是32768,如修改桥ID优先级为4096
stp priority 4096
3)配置根端口
查看默认情况下SW2的g0/0/1和g0/0/2接口STP信息
恢复SW2的g0/0/2接口COST,修改SW1的g0/0/2的PORT PRIORITY
三、RSTP
1. RSTP 基本概念
STP虽然可以解决环路问题,但网络收敛时间长,当链路发生故障时,需要等待50s后才能对网络重收敛。(50s=20s+15s*2。即报文老化时间加上2倍转发延迟)
- 端口状态
端口状态 | 描述 |
---|---|
Discarding | 不参与 STP ,不转发任何数据和 BPDU |
Learning | 不转发数据,可接收 BPDU ,可发送BPDU ,学习 MAC地址 |
Forwarding | 转发数据,可接收 BPDU ,可发送BPDU ,学习 MAC地址 |
- 端口角色
端口角色 | 描述 |
---|---|
根端口 RP | 能够转发数据,接收 BPDU (存储最优的 BPDU) |
指定端口 DP | 能够转发数据,接收 BPDU (发送RP 收到的最优 BPDU ) |
替代端口 AP | RP 备份,当RP 发生故障时, AP 成为新的RP 并进入 Forwarding状态。学习到其他网桥发送的配置 BPDU 报文而阻塞的端口 |
备份端口 BP | DP 备份,提供另一条从本设备到达根桥的路径。学习到自己发送的配置 BPDU 报文而阻塞的端口 |
- 边缘端口
配置边缘端口的端口在 UP 的时候,可以直接将端口的状态转变为 forwarding 状态, 不需要经历转发延时就可以为连接到边缘端口的设备转发流量。
边缘端口转变为 forwarding 状态不算拓扑变化,可以避免 MAC 表刷新。
2. P/A 机制
如上图所示,根桥 S1 和 S2 之间新添加了一条链路。当前状态下,S2 的p2 是 Alternate端口,p3 是指定端口且处于 Forwarding 状态,p4 是边缘端口。新链路连接成功后,P/A 机制协商过程如下:
(1) p0 和 p1 两个端口马上都先成为指定端口,发送 RST BPDU
(2) S2 的 p1 口收到更优的 RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送 RST BPDU;S1 的 p0 进入 Discarding 状态,于是发送的 RST BPDU 中把 proposal 置 1。
(3) S2 收到根桥发送来的携带 proposal 置位 的 RST BPDU,开始将自己的所有端口进入 sync 变量置位。p2 已经阻塞,状态不变;p4 是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口 p3。
(4) p2、 p3、 p4 都进入 Discarding 状态之后,各端口的 synced 变量置位,根端口 p1 的 synced 也置位,于是 S1 unblock P1 端口,并向 S1 返回 Agreement 位置位的回应 RST BPDU。该 RST BPDU 携带和刚才根桥发过来的 BPDU 一样的信息,除了 Agreement 位置位之外(Proposal 位清零)。当 S1 判断出这是对刚刚发出的 Proposal 的回应,于是端口 p0 马上进入 Forwarding 状态。
3. 保护功能
-
BPDU保护
启动了BPDU保护功能后,如果边缘端口收到BPDU报文,边缘端口将被error-down,防止BPDU报文***
-
根保护
若网络中存在更高优先级的BPDU 报文引起网络拓扑变化。启用根保护功能的指定端口,端口角色只能保持为指定端口。一旦启用根保护功能的指定端口收到优先级更高的BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间(通常为两倍的Forward Delay),如果端口一直没有再收到优先级较高的BPDU,端口会自动恢复到正常的Forwarding状态。
-
环路保护
当由于链路拥塞或者单向链路故障导致这些端口收不到来自上游交换设备的RST BPDU时,此时交换设备会重新选择根端口。原先的根端口会转变为指定端口,而原先的阻塞端口会迁移到转发状态,从而造成交换网络中可能产生环路。
在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,角色切换为指定端口),而Alternate端口则会一直保持在阻塞状态(角色也会切换为指定端口),不转发报文,从而不会在网络中形成环路。直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。 - 防TC-BPDU***
启用防TC-BPDU报文***功能后,在单位时间内,交换设备处理TC BPDU报文的次数可配置。如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的TC BPDU报文,定时器到期后设备只对其统一处理一次。
4. 实验
实验拓扑
配置步骤
1)配置生成树协议为rstp
stp mode rstp
2)配置BPDU保护
配置边缘端口
interface GigabitEthernet0/0/24
stp edged-port enable
全局启用BPDU保护功能stp bpdu-protection
3)配置根保护
在根桥的指定端口配置
interface GigabitEthernet0/0/1
stp root-protection
interface GigabitEthernet0/0/2
stp root-protection
interface GigabitEthernet0/0/3
stp root-protection
4)配置环路保护
在根端口和Alternate端口配置环路保护
interface GigabitEthernet0/0/1
stp loop-protection
5)配置防TC-BPDU***
全局配置防TC-BPDU***
stp tc-protection
三、MSTP
1. MSTP简介
在RSTP和STP生成树中所有的VLAN共享一棵生成树,无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发。
MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(Multiple Spanning Tree Instance),每个域叫做一个MST域(MST Region:Multiple Spanning Tree Region)。
-
MST 域
MST域由交换网络中的多台交换设备以及互联网段所构成。同一MST域内设备具有相同的域名、VLAN映射表和修订级别
-
VLAN映射表
VLAN映射表是MST域的属性,它描述了VLAN和MSTI之间的映射关系
-
CST
公共生成树CST(Common Spanning Tree)是连接交换网络内所有MST域的一棵生成树
-
IST
内部生成树IST(Internal Spanning Tree)是各MST域内的一棵生成树。IST是一个特殊的MSTI,MSTI的ID为0,通常称为MSTI0。IST是CIST在MST域中的一个片段。
-
CIST
公共和内部生成树CIST(Common and Internal Spanning Tree)是通过STP或RSTP协议计算生成的,连接一个交换网络内所有交换设备的单生成树。
-
端口角色
MSTP 中端口角色在RSPT基础上新增Master端口和域边缘端口
1)Master端口是MST域和总根相连的所有路径中最短路径上的端口,它是交换设备上连接MST域到总根的端口。Master端口是域中的报文去往总根的必经之路。Master端口是特殊域边缘端口,Master端口在CIST上的角色是Root Port,在其它各实例上的角色都是Master端口。
2)域边缘端口是指位于MST域的边缘并连接其它MST域或SST的端口 - 端口状态
MSTP 中端口角色同RSTP 中端口角色
2. MSTP快速收敛机制
MSTP支持普通方式和增强方式两种P/A机制
1)协商开始时,每一台设备都认为自己是根桥,根桥上的端口是指定端口,端口状态为Discarding,端口的synced变量置位,触发Proposal和Agreement同时置位。上游设备发送Proposal报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
2)上游设备继续发送Agreement报文。下游设备接收到后,根端口转为Forwarding状态。
3)下游设备回应Agreement报文。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。
3. 实验
实验拓扑
实验步骤
1)创建VLAN
vlan batch 10 20 30 40 50 60 70 80 90 100
2)配置生成树协议
stp mode mstp
3)配置MST域
stp region-configuration
region-name HW
revision-level 1
instance 1 vlan 10 30 50 70 90
instance 2 vlan 20 40 60 80 100
active region-configuration
4)配置根桥
SW1是实例1的根桥,实例2的备份根桥
stp instance 1 root primary
stp instance 2 root secondary
SW2是实例2的根桥,实例1的备份根桥
stp instance 1 root secondary
stp instance 2 root primary
注:参考华为产品手册