一、STP
STP出现的背景
根本问题:存在环路,所以会带来以下问题
①广播风暴导致网络不可用。
②MAC 地址表震荡导致 MAC 地址表项被破坏。
③多帧复制。
STP主要作用:通过阻塞端口来消除环路,并能够实现链路备份的目的 或(在保证二层物理链路冗余的前提下,逻辑上制造一个无环的拓扑)
STP基本概念
①一个根桥
②两个度量:ID和路径开销。ID分为BID(Bridge ID,桥ID)和 PID(Port ID,端口ID)
桥ID:优先级占据高16位,低48位是MAC地址。优先级默认32768,必须设置4096倍数,0x1000-0xF000
端口ID:高4位是端口优先级,低12位是端口号。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。,
路径开销:端口到根桥累计的路径开销
③三个选举要素:根桥 、根端口 、指定端口
根桥:桥ID越小,优先级越大
根端口:该端口的根路径开销,对端BID,对端PID,本端PID
指定端口:根路径开销,本端BID,本端PID。
④四个比较原则:{ 根桥 ID,累计根路径开销,发送设备 BID,发送端口 PID }
⑤五个端口状态:Forwarding、Learning、Listening、Blocking、Disabled
三个时间参数
①Hello Time:以Hello Time为周期,向周围的设备发送BPDU报文,缺省2s
②Forward Delay:当一个端口处于 Listening 和 Learning 状态的各自持续时间,缺省15s
③Max Age:如果 Message Age 小于等于 Max Age,则该非根桥设备继续转发配置 BPDU 报文;如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置 BPDU。缺省20
如果配置 BPDU 是根桥发出的,则 Message Age 为 0。否则,Message Age 是从根桥发送到当前桥接收到 BPDU 的总时间,包括传输延时等。实际实现中,配置 BPDU 报文经过一个桥,Message Age 增加 1。
STP 报文格式
BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC头,LLC之后是BPDU报文头。
BPDU分为配置BPDU和TCN BPDU
配置BPDU在这三种情况下会产生:
①只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
②当根端口收到配置BPDU时,如果优先级比自己的配置BPDU高,则会根据收到的配置BPDU中携带的信息更新自己STP端口存储的配置BPDU信息并从指定接口向下游发送,否则会丢弃该配置BPDU。
③当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。
TCN BPDU会在这三种情况下产生:
①端口状态变为Forwarding状态。
②指定端口收到TCN BPDU,复制TCN BPDU并发往根桥。
其中BPDU DATA中的flag字段的最高位和最低位取决该TCN BPDU是TCA BPDU还是TC BPDU
STP拓扑变化过程
1.在网络拓扑发生变化后,下游设备会不间断地向上游设备发送 TCN BPDU 报文。
2.上游设备收到下游设备发来的 TCN BPDU 报文后,只有指定端口处理 TCN BPDU 报文。
3.上游设备会把配置 BPDU 报文中的 Flags 的 TCA 位设置 1,然后发送给下游设备,告知下游设备停止发送 TCN BPDU 报文。
4.上游设备复制一份 TCN BPDU 报文,向根桥方向发送。
5. 重复步骤 1、2、3、4,直到根桥收到 TCN BPDU 报文。
根桥把配置 BPDU 报文中的 Flags 的 TC 位置 1 后发送,通知下游设备直接删除桥 MAC 地址表项。
拓扑收敛计算
①当链路2中断时
SW3的RP端口消失,所有端口角色重新计算,把自己当做根桥,初始端口为DP,向别的交换机通告自己的BPDU。SW2的Port4收到SW3发的次BPDU,SW2的Port4不等待Hello间隔,立即回应自己端口缓存的BPDU给SW3,SW3的Port3收到后,重新计算后成为RP端口。
所需时间=端口角色变化时间+端口状态变化时间
华为实现:若交换机有AP端口,RP端口失效时,最好的AP端口会立即成为RP端口。此时不需要计算端口变化,端口状态从Discarding变为Forwarding,所需时间为30s。
②当链路1中断时
SW2的RP端口消失,所有端口角色重新计算,把自己当做根桥,初始端口为DP,向别的交换机通告自己的BPDU。SW3的Port3端口收到SW2发来的次等BPDU,会与SW3的Port3缓存的BPDU相比较。此时AP端口的缓存BPDU更优,则SW3忽略该BPDU并保持AP端口角色。
等待AP端口的缓存BPDU超时后(T>Max Age,缺省20s),SW3的Port3重新计算角色,此时SW3的Port3角色为DP端口,状态为Discarding,向SW2通告自己的BPDU。SW2的Port4和Port5都收到SW3的Port3发出的BPDU,计算后Port4是RP,Port5时AP。
SW2 RP和SW3 DP在接下来30s,从Discarding->Forwarding的状态变迁进入转发状态
所需时间=SW3等待Max Age延时后角色变迁(20s)+SW2 RP和SW3 DP状态变迁(30s)
华为实现:接收BPDU端口收到次等BPDU,会立即重新计算端口角色(没有引入Max Age等待超时),状态由Discarding到Forwarding仍要30s的时间。
③当SW3的Port4失效时
SW2的DP端口4失效时,SW2的端口5和SW3的端口3等待20s,在各自端口缓存的BPDU超时后,重新计算端口角色。SW3端口3仍为AP端口,SW2的端口5成为DP端口,端口状态迁移需要三十秒。
所需时间=SW2的端口5和SW3的端口3等待超时(20s)+SW2 DP状态变迁(30s)
实验
SWA:
#
stp mode stp
stp instance 0 priority 4096
stp pathcost-standard legacy
SWB:
#
stp mode stp
stp pathcost-standard legacy
SWC:
#
stp mode stp
#
interface Ethernet0/0/1
stp instance 0 cost 20000
SWD:
#
stp mode stp
stp pathcost-standard legacy
[SWA]dis stp brief
MSTID Port Role STP State Protection
0 Ethernet0/0/1 DESI FORWARDING NONE
0 Ethernet0/0/2 DESI FORWARDING NONE
[SWB]dis stp brief
MSTID Port Role STP State Protection
0 Ethernet0/0/1 DESI FORWARDING NONE
0 Ethernet0/0/2 ROOT FORWARDING NONE
[SWC]dis stp brief
MSTID Port Role STP State Protection
0 Ethernet0/0/1 ALTE DISCARDING NONE
0 Ethernet0/0/2 ROOT FORWARDING NONE
[SWD]dis stp brief
MSTID Port Role STP State Protection
0 Ethernet0/0/1 ROOT FORWARDING NONE
0 Ethernet0/0/2 DESI FORWARDING NONE
SWA E0/0/2抓取STP的配置BPDU
二、RSTP
STP的不足
①没有细分端口状态和端口角色
②收敛速度慢:依赖定时器;稳定的拓扑中,根桥主动发出配置BPDU,经过其他设备,传遍整个网络
RSTP对STP的改进
①合并了两种端口状态
根据端口是否转发用户流量和学习 MAC 地址来划分端口状态:
既不转发用户流量也不学习 MAC 地址,那么端口状态就是 Discarding 状态。
不转发用户流量但是学习 MAC 地址,那么端口状态就是 Learning 状态。
既转发用户流量又学习 MAC 地址,那么端口状态就是 Forwarding 状态。
②增加了两个端口角色:Alternate 端口和 Backup 端口
从配置 BPDU 报文发送角度来看:
Alternate 端口就是由于学习到其它网桥发送的配置 BPDU 报文而阻塞的端口。
Backup 端口就是由于学习到自己发送的配置 BPDU 报文而阻塞的端口。
从用户流量角度来看:
Alternate 端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
Backup 端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。
Alternate是根端口的备份,Backup是指定端口的备份
③配置 BPDU 格式的改变,对Type字段和Flag字段进行修改
Type字段,配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
原来运行STP的type字段:0x00,TCN BPDU的Type字段:0x80
Flags 字段,原来保留的中间 6 位,使用了中间6位,这样改变的配置 BPDU 叫做 RST BPDU
④配置 BPDU 的处理发生变化
拓扑稳定后,配置 BPDU 报文的发送方式:
在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置 BPDU 报文,非根桥设备仍然按照 Hello Timer 规定的时间间隔发送配置 BPDU
更短的 BPDU 超时计时:
取消了MAX AGE,如果一个端口连续连续 3 个 Hello Time 时间内没有收到上游设备发送过来的配置 BPDU,那么该设备认为与此邻居之间的协商失败。
处理次等 BPDU:
当一个端口收到上游发来的 RST BPDU 报文时,该端口会将自身存储的 RSTBPDU 与收到的 RST BPDU 进行比较,如果该端口存储的 RST BPDU 的优先级高于收到的 RST BPDU,那么该端口会直接丢弃收到的 RST BPDU,立即回应自身存储的 RST BPDU。
在STP中需要将等待自身BPDU超时,才回复自身存储的BPDU。
由此可见,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快收敛
⑤快速收敛
Propasal/Agreement机制
当一个端口被选为指定端口时,在STP中,至少要等待一个Forward Delay才能从Learning迁移到Forwarding状态。而在RSTP中,此端口会先进入Discarding状态,再通过P/A机制快速进入Forward状态。
根端口快速切换机制
如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口。
边缘端口的引入
直接与终端设备相连的端口叫边缘端口。边缘端口一旦收到配置BPDU,就成为普通STP端口,从而引起网络震荡
⑥保护功能
BPDU保护
防止边缘端口收到配置BPDU,从而引起的网络动荡。
开启BPDU保护功能之后,如果边缘端口收到BPDU,边缘端口将被error-down,但是边缘端口属性不变,同时通知网管系统。
根保护
防止维护人员的错误配置或网络中的恶意攻击。
启用 Root 保护功能的指定端口收到优先级更高的 RST BPDU 时,端口状态将进入 Discarding 状态,不再转发报文。在经过两倍的 Forward Delay,如果端口一直没有再收到优先级较高的RST BPDU,端 口 会 自 动 恢 复 到 正 常 的Forwarding 状态。
环路保护
由于链路拥塞或者单向链路故障导致端口收不到来自上游交换设备的 RST BPDU 时,此时交换设备会重新选择根端口。原先的根端口会转变为指定端口,而原先的阻塞端口会迁移到转发状态,从而造成交换网络中可能产生环路。
启动了环路保护功能后,如果根端口或Alternate 端口长时间收不到来自上游的 RST BPDU 时,则向网管发出通知信息。而阻塞端口则会一直保持在阻塞状态,不转发报文,从而不会在网络中形成环路。
防TC-BPDU攻击
交换设备在接收到 TC BPDU 报文后,会执行 MAC 地址表项和 ARP表项的删除操作。
启用防 TC-BPDU 报文攻击功能后,在单位时间内,交换设备处理 TC BPDU 报文的次数可配置。如果在单位时间内,交换设备在收到 TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的 TCN BPDU报文,定时器到期后设备只对其统一处理一次。
RSTP技术详细细节
1、P/A过程
新链路连接成功后,P/A 机制协商过程如下:
①p0 和 p1 两个端口马上都先成为指定端口,发送 RST BPDU。
②S2 的 p1 口收到更优的 RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送 RST BPDU。
③S1 的 p0 进入 Discarding 状态,于是发送的 RST BPDU 中把 proposal 置 1。
④S2 收到根桥发送来的携带 proposal 的 RST BPDU,开始将自己的所有端口进入 sync 变量置位。
⑤p2 已经阻塞,状态不变;p4 是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口 p3。
⑥p2、p3、p4 都进入 Discarding 状态之后,各端口的 synced 变量置位,根端口 p1 的synced也置位,于是便向 S1 返回 Agreement 位置位的回应 RST BPDU。该 RST BPDU 携带和刚才根桥发过来的 BPDU 一样的信息,除了 Agreement 位置位之外(Proposal 位清零)。
⑦当 S1 判断出这是对刚刚发出的 Proposal 的回应,于是端口 p0 马上进入 Forwarding 状态。
2、拓扑变化通知机制
(1)触发条件:一个非边缘端口迁移到 Forwarding 状态
(2)拓扑变化交换机产生通知
①TC置位的BPDU向所有处于转发状态的非边缘的DP和RP端口去扩散
②为转发端口开启TC While计时器,时长是2个Heloo间隔
③清空所有接口MAC地址关联表(边缘端口除外)
(3)周边交换机扩散通知
①交换机收到TC置位的BPDU向其他DP/RP端口扩散
②清空所有接口MAC地址关联表,除了收到TC BPDU的接口
③开启TC While计时器。并且继续向所有转发状态的非边缘DP/RP继续转发
3、扩展性及优化 RSTP STP 兼容
当一个网段里既运行 STP 的交换设备 又运行 RSTP 的交换设备,把自己的端口转换到 TP 工作模式。
实验
SWA:
stp mode rstp
stp instance 0 priority 4096
stp pathcost-standard legacy
#
interface Ethernet0/0/1
stp root-protection
#
interface Ethernet0/0/2
stp root-protection
SWB:
stp mode rstp
stp pathcost-standard legacy
#
interface Ethernet0/0/3
stp bpdu-filter enable
stp edged-port enable
SWC:
stp mode rstp
stp pathcost-standard legacy
#
interface Ethernet0/0/1
stp instance 0 cost 20000
#
interface Ethernet0/0/3
stp bpdu-filter enable
stp edged-port enable
SWD:
stp mode rstp
stp pathcost-standard legacy
SWA E0/0/2抓取STP的配置BPDU
三、MSTP
MSTP基本概念
①MST 域(MST Region)
MST 域是多生成树域(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。
②VLAN 映射表
VLAN 映射表是 MST 域的属性,它描述了 VLAN 和 MSTI 之间的映射关系。
③域根
域根(Regional Root)分为 IST(Internal Spanning Tree)域根和 MSTI 域根。
IST域根如图所示,在 B0、C0 和 D0 中,IST 生成树中距离总根(CIST Root)最近的交换设备是IST域根。
一个 MST 域内可以生成多棵生成树,每棵生成树都称为一个 MSTI。MSTI 域根是每个多生成树实例的树根。
④主桥
主桥(Master Bridge)也就是 IST Master,它是域内距离总根最近的交换设备。
⑤总根
全网中BID最小为总根,其他域中,离根最近的交换机为域根。
⑥CST
公共生成树 CST(Common Spanning Tree)是连接交换网络内所有 MST 域的一棵生成树。
⑦IST
内部生成树 IST(Internal Spanning Tree)是各 MST 域内的一棵生成树。
⑧CIST
公共和内部生成树 CIST 是通过 STP 或 RSTP 协议计算生成的,连接一个交换网络内所有交换设备的单生成树。
实验
思路:配置MSTP域,配置各实例主根桥和备份根桥,配置将要被阻塞端口的开销值,使能MSTP(全局上stp enable),配置边缘端,配置保护功能,配置二层vlan
SWA:
#
vlan batch 10 20
#
stp instance 1 root primary
stp instance 2 root secondary
stp pathcost-standard legacy
#
stp region-configuration
region-name RG1
instance 1 vlan 10
instance 2 vlan 20
active region-configuration
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
SWB:
vlan batch 10 20
#
stp instance 1 root secondary
stp instance 2 root primary
stp pathcost-standard legacy
#
stp region-configuration
region-name RG1
instance 1 vlan 10
instance 2 vlan 20
active region-configuration
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
SWC:
vlan batch 10 20
#
stp pathcost-standard legacy
#
stp region-configuration
region-name RG1
instance 1 vlan 10
instance 2 vlan 20
active region-configuration
#
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
stp bpdu-filter enable
stp edged-port enable
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
stp instance 2 cost 20000
#
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 10 20
SWD:
vlan batch 10 20
#
stp pathcost-standard legacy
#
stp region-configuration
region-name RG1
instance 1 vlan 10
instance 2 vlan 20
active region-configuration
#
#
interface GigabitEthernet0/0/1
port link-type access
port default vlan 20
stp bpdu-filter enable
stp edged-port enable
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 10 20
stp instance 1 cost 20000
#
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 10 20
[SWA]dis stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ALTE DISCARDING NONE
0 GigabitEthernet0/0/2 ROOT FORWARDING NONE
1 GigabitEthernet0/0/1 DESI FORWARDING NONE
1 GigabitEthernet0/0/2 DESI FORWARDING NONE
2 GigabitEthernet0/0/1 DESI FORWARDING NONE
2 GigabitEthernet0/0/2 ROOT FORWARDING NONE
[SWB]dis stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
1 GigabitEthernet0/0/1 DESI FORWARDING NONE
1 GigabitEthernet0/0/2 ROOT FORWARDING NONE
2 GigabitEthernet0/0/1 DESI FORWARDING NONE
2 GigabitEthernet0/0/2 DESI FORWARDING NONE
[SWC]dis stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING NONE
0 GigabitEthernet0/0/2 ROOT FORWARDING NONE
0 GigabitEthernet0/0/3 DESI FORWARDING NONE
1 GigabitEthernet0/0/1 DESI FORWARDING NONE
1 GigabitEthernet0/0/2 DESI FORWARDING NONE
1 GigabitEthernet0/0/3 ROOT FORWARDING NONE
2 GigabitEthernet0/0/2 ALTE DISCARDING NONE
2 GigabitEthernet0/0/3 ROOT FORWARDING NONE
[SWD]dis stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
0 GigabitEthernet0/0/3 DESI FORWARDING NONE
1 GigabitEthernet0/0/2 ALTE DISCARDING NONE
1 GigabitEthernet0/0/3 ROOT FORWARDING NONE
2 GigabitEthernet0/0/1 DESI FORWARDING NONE
2 GigabitEthernet0/0/2 DESI FORWARDING NONE
2 GigabitEthernet0/0/3 ROOT FORWARDING NONE