目录
一、经典生成树(STP)
1.1、作用
1.2、重要参数
1.3、BPDU
1.4、STP计算过程
1.5、STP接口状态
二、快速生成树(RTSP)
2.1、端口角色的增补
2.2、端口状态简化
2.3、配置BPDU报文修改
2.4、配置BPDU的处理
2.5、快速收敛
2.6、拓扑变更机制
2.7、BPDU的保护功能
2.8、根保护
2.9、环路保护
2.10、防TC-BPDU攻击
三、MSTP(多实例生成树协议)
一、经典生成树(STP)
1.1、作用
- 破环(阻塞)
- 切换接口状态(保持冗余)
主要作用是防止网桥网络中的冗余链路形成环路工作
生成树协议是IEEE 802.1D中定议的数据链路层协议,用于解决在网络的核心层构建冗余链路里产生的网络环路问题,通过在交换机之间传递网桥协议数据单元(Bridge Protocol Data Unit,简称BPDU),通过采用STA生成树算法选举根桥、根端口和指定端口的方式,最终将网络形成一个树形结构的网络,其中,根端口、指定端口都处于转发状态,其他端口处于禁用状态。如果网络拓扑发生改变,将重新计算生成树拓扑。生成树协议的存在,既解决了核心层网络需要冗余链路的网络健壮性要求,又解决了因为冗余链路形成的物理环路导致“广播风暴”问题。
接口阻塞:逻辑上停止转发数据帧
1.2、重要参数
桥ID(BID,交换机ID)=优先级(默认32768且必须为4096的倍数)+mac(802.1D标准),如4096.1b43-ab32-cb32
桥ID最小为根网桥(优先级相同,比mac)
根网桥的BID叫根ID(Root ID)
STP的开销(与ospf计算方法不同,可手动设置)
根路径开销(RPC):从某设备到达根桥的累加开销(只算一边)
端口ID(PID):优先级(0~240,默认128且必须为16的倍数)+接口编号,如128.11
1.3、BPDU
桥协议数据单元(BPDU,bridge protocol data unit),交换机间为了协商如何破环的报文。
- 配置BPDU:协商出谁是根,哪些接口阻塞或转发(破环),周期2s
- TCN BPDU:拓扑变化通告BPDU,链路变化后打开哪些阻塞端口(保持冗余)
8482:配置BPDU中包含的主要内容,每一台交换机都需要发送并互相比较。
- 8字节RID(我认为的根网桥id)
- 4字节RPC(我到达根网桥的开销)
- 8字节BID(BPDU发送桥的桥ID)
- 2字节PID(BPDU发送桥的接口ID)
配置BPDU:以自身为根的bpdu和以实际根为根的bpdu。
STP按照如下顺序选择最优的配置BPDU:
- 最小的根桥ID
- 最小的RPC
- 最小的网桥ID
- 最小的接口ID
在这四条原则中(每条原则都对应配置BPDU中的相应字段),第一条原则主要用于在网络中
选举根桥,后面的原则主要用于选举根接口及指定接口。
1.4、STP计算过程
1、选举根桥
按照以上原则通过两两对比(输的一方就把配置BPDU中的RID改为赢的一方的RID)后找到最优的配置BPDU。
2、选举根端口(RP,接受到最优BPDU的端口,有且只有一个)
选举根网桥后,在每台非根桥上选举一个根端口(接受到最优BPDU的端口,有且只有一个,找到一条根端口距离根桥最优的路径)
3、选举指定端口(DP,发BPDU的端口,互发时BPDU优的端口)
根桥的所有端口都是BP端口
4、找到阻塞端口(BP,block port,既不是RP也不是BP)
1.5、STP接口状态
状态名称 | 状态描述 |
禁用(Disable) | 该接口不能收发BPDU,也不能收发业务数据帧,例如接口为down或物里链路中断 |
阻塞(Blocking) | 该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU 但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习 |
侦听(Listening) | 当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习,等待15s(做完所有选举,保证网络稳定) |
学习(Learning) | 当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧后进行MAC地址学习,等待15s(学mac,防止过多未知单播帧泛洪) |
转发(Forwarding) | 处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态 |
其他状态根据网络随时切换为阻塞状态或禁用状态。
根桥故障
根桥故障,其他桥收不到根桥BPDU等待20s(物理故障立即选举),非根桥互相发送配置BPDU重新选举根桥,再经过两个15s的等待,根桥故障预计回复时间需要50s左右。
直连物理链路故障
无需等待20s,立即重新选举端口,需要30s的等待。
非直连链路故障
等待20s,再重新选举端口,需要30s的等待,回复时间需要50s左右。
##使用经典stp作为选举的模式
stp mode stp
##配置交换机的优先级为0,越小越好,必须是4096的倍数。
stp priority 0
##查看接口的stp状态
dis stp ef
##查看stp的参数
dis stp
二、快速生成树(RTSP)
2.1、端口角色的增补
将阻塞端口扩展为以下两种端口:
1)替代端口(AP):阻塞
选根端口时落选的端口,根端口的替代品(学习的是其他网桥发送的bpdu)
2)备份端口(BP,backup port):下方直连设备是集线器且双路由连接导致的,阻塞
学习到自己发送的bpdu而阻塞的端口,指定端口的替代品(备份自己的指定端口,学习到自己发送的bpdu)
2.2、端口状态简化
禁用(Disable)、阻塞(Blocking)、侦听(Listening)简化为丢弃(discarding)状态
丢弃状态站在用户角度统一理解为不可用。
- discarding:不转发流量也不学习mac
- learning:不转发流量但学习mac
- forwarding:转发流量且学习mac
一般来说RSTP没有学习状态,只有丢弃状态和转发状态,只有对端设备是stp时为了向下兼容才会出现学习状态。
2.3、配置BPDU报文修改
报文中除了8482外,加了标记字段(Tag),标记字段中可以标识报文是TCN还是ACK、指明端口角色、端口状态等,尤其是添加了同意和提议两字段。
2.4、配置BPDU的处理
与STP中其他网桥需等到根网桥的bpdu再转发相比,RSTP其他网桥也可独立发送自己当前认为最优的BPDU。
超时时间由20s降低为6s。
2.5、快速收敛
1)根端口失效,AP立即成为根端口并立即进入转发状态
2)指定端口失效,BP立即成为指定端口并立即进入转发状态
主机没有生成树协议,所以不会发bpdu,所以交换机直连终端的端口需要等待30秒才能进入转发状态
3)直连终端的端口定义为边缘端口(EP),人工配置(端口视图stp edged-port enable),EP一旦打开不进行选举直接进入转发状态(因为对端是主机肯定不会产生环路,所以不用等待30s),只发bpdu不收,此外EP一旦收到bpdu证明对方是交换机立即丧失边缘端口属性成为普通端口参加选举。
边缘端口不是角色而是指定端口的一种特性。
全局视图stp edeged-port default,所有端口默认为边缘端口,端口收到bpdu后变为普通端口参加生成树选举。
4)提议机制和同意机制(P/A机制,分段收敛)
两个直连交换机刚开机都认为自己是根网桥,双方同时互发提议报文,对比同意之后,两个端口立即分别选举为RP和DP,并进入转发状态,一个BPDU即可完成。
如果发送给给对方(此时为AP口,不回复BPDU),对方不回复,那就只能按照经典生成树等待30s进入转发状态,成为DP。
为了避免P/A机制导致环路,在上游端口协商的同时,交换机将下游端口(不包含EP)同步(处于丢弃状态,暂时阻塞),上游协商完,然后下游继续P/A机制修改端口状态。
2.6、拓扑变更机制
标准:一个非边缘端口迁移到转发状态
为什么要清空MAC地址?
如根端口失效,替代端口立即变为根端口进入转发状态,此时触发拓扑变更机制,开启计时器,将上个根端口学习到的mac清空,并向对端发TCN,对端交换机收到TC后将除了对应新根端口的端口学到的mac保留外,其余全部清空,以此类推,除了明确端口角色的端口mac保留外,所有交换机端口mac清空。
如果没有mac清空机制会发生什么?
如上图,在RP未断之前mac学习情况如图,当RP中断之后,AP立即变为RP进入转发状态,如果没有进行mac清空,此时,计算机A发送至B的报文到达交换机后,交换机会通过1口转发,无法通信。
2.7、BPDU的保护功能
启动BPDU保护后,边缘端口收到BPDU,端口被error-down,需要手动开启,边缘端口属性不变,上报至网管系统。
作用:不允许对端接入交换机,不允许收BPDU,保障网络稳定性。
##配置在全局下,哪个口为EP即可启用
stp bpdu-protection
int g0/0/4
stp edged-port enable
disp stp int g0/0/4
所有端口默认状态
所有端口非EP,单独某个端口配置为EP(其他端口还是非EP),再开启BPDU保护
所有端口默认状态stp edged-port default
所有端口EP,单独将某个端口配置为非EP(stp edged-port disabled),其他端口是EP,再开启BPDU保护
2.8、根保护
可以收bpdu,收到更优的BPDU端口会变为丢弃状态,交换机无法接入进来,因此只能收更差的bpdu,确保根桥角色不改变。
在指定端口配置根保护,启动根保护的指定端口,端口角色只能保持为指定端口。
int g0/0/0
stp root-protection
2.9、环路保护
一般出现在光纤(一对收发)上,单纤故障导致的单向环路
启动环路保护后,收BPDU的端口让收bpdu(端口up)、收不到bpdu(端口discarding) 保持一致
2.10、防TC-BPDU攻击
拓扑变化后清空mac,如果有一个攻击者接入后高频发送TC-BPDU(交换机无mac表,未知单播帧通信需泛洪),同时触发P/A机制(同步端口),导致闪断。
措施:限制单位时间内处理次数(默认1次/2s)
默认开启
##全局视图,阈值每2秒3次(不配置默认1次)
stp tc-protection threshold 3
三、MSTP(多实例生成树协议)
多棵生成树
STP和RSTP不足:
如上图,流量全部汇聚到根网桥,无法负载分担。
措施:采用实例(instance)+VLAN分流:将vlan1-10划入到实例1中;将vlan11-20划入到实例2中。且在实例1中将SW1设为根桥,在实例2中将SW2设为根桥
一个vlan只能划在一个实例,一个实例可以包含多个VLAN
##在三个交换机上分别创建vlan
vlan batch 10 to 20
##透传vlan
SW1:
int g0/0/1
port link-type trunk
port trunk allow-pass vlan 10 to 20
int g0/0/3
port link-type trunk
port trunk allow-pass vlan 10 to 20
SW1:
int g0/0/1
port link-type trunk
port trunk allow-pass vlan 10 to 20
int g0/0/2
port link-type trunk
port trunk allow-pass vlan 10 to 20
SW3:
int g0/0/2
port link-type trunk
port trunk allow-pass vlan 10 to 20
int g0/0/3
port link-type trunk
port trunk allow-pass vlan 10 to 20
SW1、SW2、SW3:
##stp域配置(单域)
stp region-configuration
##域名hcip
region-name hcip
##实例1中规划vlan10到14
instance 1 vlan 10 to 14
##实例2中规划vlan15到20
instance 2 vlan 15 to 20
##激活域配置(修改完后也需要激活)
active region-configuration
##配置优先级
SW1:
##实例1优先级为0,即实例1的根桥
stp instance 1 priority 0(或者主根:stp instance 1 primary)
stp instance 2 priority 4096
SW2:
stp instance 1 priority 4096(或者次根:stp instance 1 secondary)
##实例2优先级为0,即实例2的根桥
stp instance 2 priority 0
SW3:
##实例的优先级都为默认32678
disp stp brief查看生成树的概要