HCIP-ICT实战进阶09-RSTP&MSTP原理与配置

发布时间 2023-03-22 21:16:37作者: Qurare

HCIP-ICT实战进阶09-RSTP&MSTP原理与配置

最近在跟国科的系统集成, 发现前几章都是大三上Linux课程教过的东西, 于是想起来抽时间把之前HCIP的博客补一补, 包括这篇还剩三篇, 你完全可以相信我的毅力(

0 回顾生成树协议

生成树工作过程

  1. 选举根桥(root bridge)

    生成树的报文(BPDU)携带桥ID(BID)信息, 2s发送一次, 该信息主要是16bit优先级+48bitMAC地址, 优先级和mac地址都是越小越优先, 优先级为4096的倍数, 默认为32768.

  2. 选举根接口

    根接口: 去往根桥的最优接口;

    选举顺序(依次选小的): 根桥ID->RPC(开销)->网桥ID->接口ID.

  3. 指定接口

    前提: 根桥ID需要一致, 不一致需要重新选举根桥;

    每一条链路需要指定一个指定接口.

    选举顺序(): 根路径开销值->桥ID->端口ID.

  4. 阻塞剩下的端口

传统STP的端口状态

状态 BPDU MAC 数据
Forwarding(转发状态) 收发 学习 收发
Learning(学习状态) 收发 学习 不收发
Listening(侦听状态) 收发 不学习 不收发
Blocking(阻塞状态) 不学习 不收发
Disable(未使能状态) / / /

工作流程

image-20221126101802816

  • 一开始是disable, 因为两台设备接口相连, 接口会有disable->短暂blocking->listening;

  • 之后进入listening的设备会和相邻设备交互BPDU, 选举根桥, 该状态会存在一个forward delay转发时延, listening会停留15s, 在这15s内基本能选举完根桥、端口角色, 之后迁移到learning;

  • 进入learning的设备需要学习mac地址,该状态会存在15s的forward delay, 之后迁移到forward;

即两台交换机从没连线到连接线缆到最后能转发数据, 需要进过30s的等待时间.

如果出现一个端口本身就是被阻塞的, 阻塞端口如果希望恢复正常转发, 则一定是本来的网络中出现了链路故障.

此外, 传统STP在拓扑稳定后只有根桥会周期性(2s)发送配置BPDU, 其他交换机在收到上游(根端口方向)传来的配置BPDU后, 才会发送自己的配置BPDU.

少爷小姐有需要更详细的STP回顾这边请?HCIA-ICT实战基础-传统生成树

1 RSTP

随着局域网规模不断扩大, STP拓扑收敛速度慢的问题逐渐凸显, 因此出现了改进的RSTP(Rapid Spaning Tree Protocol, 快速生成树协议).

  • STP没有细致区分端口状态和端口角色, 其实不利于初学者学习和部署.

  • 从用户角度来说: Listening、Learning、Blocking状态都没有区别, 同样不转发用户数据流量;

  • 从配置角度来说, 端口最本质之间的区别不在于端口状态, 而在于端口扮演的角色;

  • 依赖定时器等待的方式判断收敛速度慢(30~50s).

1.1 RSTP对传统STP的改进

1.1.1 端口角色

主要是针对阻塞端口进行细分

  • 传统STP: RP(根端口)、DP(指定端口)、BP(Blocking, 阻塞端口);

  • RSTP: RP、DP、BP(Backup, 备份端口)、AP(Alternate, 替代端口)、EP(edge-port, 边缘端口);

RSTP将传统的STP的BP端口(Blocking)细分为两种阻塞端口(AP、BP), 并且新增了一个EP端口.

  • AP(替代端口)就是用来给RP(根端口)做备份的, 是收到其他交换机发送的配置BPDU报文而阻塞的端口, 如果RP出现故障, AP可以立刻转换成RP进行工作.

  • BP(备份端口)就是用来给自己的的DP端口(指定端口)做备份的, 是收到自己发送的BPDU而阻塞的端口, 如果DP出现故障, BP能立刻转换为DP做备份

  • EP(边缘端口)是交换机连接终端方向的接口, 用于使得终端接入二层交换机的时候不需要等待两个转发时延, 之间进入转发状态. 即EP端口不需要参与RSTP计算, 直接从discarding切换到forwarding.

    此外, 如果用于连接终端的边缘端口被接入了交换机设备, 导致边缘端口收到BPDU报文时, 边缘端口则会转变为普通的STP端口并进行生成树算法计算, 从而引起网络震荡. 此举是为了防止边缘端口环路.

注: 区别传统STP的BP端口(阻塞端口)和RSTP的BP端口(备份端口).

1.1.2 端口状态

端口状态根据端口是否转发流量和学习mac地址进行重新合并, 合并之后状态之间迁移速度加快.

RSTP重新划分后的端口状态:

状态 对应角色 备注
Forwarding RP、DP 同STP
Learning RP、DP 同STP
discarding RP、DP、AP、BP、Disable 合并了disable、blocking、listening状态

1.1.3 配置BPDU-RST BPDU

RST-BPDU报文格式:

image-20230112110457822

RSTP修改了STP的版本号码, 同时对Flag字段进行重新定义, 用于明确端口角色:

  • Type: BPDU类型不再是0而是2, 运行STP的设备收到RSTP的BPDU报文会丢弃;

  • Flag: 使用了原来保留的中间6位, 这样改变的配置BPDU称为RST BPDU;

    传统STP的BPDU报文的Flag字段: 1000 0001, 只有头尾两个bit是有意义的:

    • TCA: 用于表示该报文是TCA报文(拓扑改变响应报文);
    • TC: 用于表示该报文是TC报文(拓扑改变报文);

    RSTP的BPDU的Flag字段: 1111 1111, 前后两个bit位功能同STP, 其他bit作用为:

    • Agreement: 用于RSTP的PA机制, 表示次优端口愿意和对方优先端口进行同步;
    • Forwarding: 用于表示端口状态为forwarding;
    • Learning: 用于表示端口状态为learning;
    • Port Role: 表示端口角色:
      • 00: unknown;
      • 01: AP/BP;
      • 10: RP;
      • 11: DP.
    • Proposal: 为PA机制服务, 表示当前报文为提议协商报文.

1.1.4 配置BPDU的处理

image-20221126113043703

传统设备只能由根桥设备发送BPDU, 下面的非根桥设备转发BPDU, 而在RSTP中每一台设备都是自主按照2s周期发送BPDU;

1.1.5 老化时间缩短

传统STP在blocking状态需要20s时间才能迁移到Listening, RSTP则将时间缩短, 一个端口连续三次(3*2=6s)没收到对方的BPDU报文, 则认为对方已经故障, 华为设备默认有一个时间因子, 默认为3倍, 所以真正的老化时间为: 周期x时间因子(3)=18s;

1.1.6 次优BPDU处理方式

image-20221126113540856

传统STP只有指定端口收到一个次优BPDU的时候, 会立刻回复一个本地存储的最优BPDU, 用于告知对端BPDU不是最优, 需要调整.

在RSTP任意接口收到对方发送的BPDU报文, 则和本地存储的BPDU做对比, 如果收到的BPDU更优, 则

1.1.7 PA机制

PA(Proposal/Agreement)机制, PA机制就是能够让整个网络非常快速地从discarding切换到forwarding的快速收敛机制.

这个可以耐心看看.

PA机制的过程:

  1. 双方交换机接口连线并up;

  2. 开启RSTP, 两个连接的接口都会变成指定接口(DP), 但是端口状态为discarding;

  3. 两个DP开始互相发送RST BPDU;

  4. 双方相互收到BPDU报文, 并比较BID(优先级+mac):

    • 优先的一方发送RST BPDU报文且将Flag字段中的P置位置为1, 表示当前是一个提议协商报文;
    • 另一方感觉自己要变成根端口了, 于是停止发送BPDU报文.
  5. 劣势的一方接收到了P=1的RST BPDU报文, 进入同步状态(sync状态), 其主要表现是将本地所有接口(除了边缘端口EP)置为discarding状态;

    劣势方同步完成后向收到P=1的端口发送一个Flag字段中A置位为1的RST BPDU, 并将这个端口由discarding切换为forwarding, 最后将这个端口的端口角色设为RP(根端口).

  6. 优势方收到A=1的BPDU报文, 则该接口直接进入Forwarding状态, 并且端口角色变成DP.

大致的过程图解:

image-20221126115059765

image-20221126115104240

image-20221126115205706

image-20221126115221778

假设整条链路的PA机制到了最后一个部分, 即两边的设备只需要选出一个指定端口和阻塞端口即可的时候, 这条链路会进入传统STP的选举过程, 会存在转发时延(15s), 需要等待2倍的时延后才会正常工作.

原因: 最后两台设备进行PA的时候, 此时网络中已经选出了根桥, 且不是这两台设备, 于是这两台设备之间进行PA的时候:

  • 相对优势的一方会发送P=1的RST BPDU, 相对劣势的一方收到RST BPDU后比对其他方向收到的来自根桥优先级更高的P=1的RST BPDU, 决定不和相对优势的一方进行同步, 不会回复A=1的RST BPDU, 进而相对优势的一方会在等待两倍转发时延后变成Forwarding的DP端口, 相对劣势的一方等待两倍转发时延后变成discarding的Disable.

1.1.8 拓扑变更通知方式改变

传统STP通知拓扑变更

传统STP如果发现网络发生了变动, 则发现变化的设备, 需要通过根端口向上游相邻的设备发送TCN BPDU(拓扑变化提醒, type字段采用0x80)

相邻设备收到TCN BPDU后需要回复普通的配置BPDU(TC=1, TCA=1), 用于告知下游设备上游已经收到了TCN BPDU, 请停止发送TCN BPDU, 未收到回复BPDU时下游设备会持续发送TCN BPDU.

最后重复过程逐台上报至根桥.

根桥设备收到TCN BPDU之后, 发送TC=1的配置BPDU用于告知所有设备, 清空mac地址表(但不是立刻删除).

以上传统STP的拓扑变更通知方式效率肉眼可见的低, 需要自下而上+自上而下逐台进行确认和回复.

RSTP通知拓扑变更

RSTP检测拓扑变化的标准: 任何非边缘端口迁移到Forwarding状态.

在RSTP中, 如果发现了网络变化, 发现变化的设备直接发送配置BPDU(TC=1)的报文给整个二层网络中的非边缘端口, 并启动TC WhileTime定时器, 默认4s, 在该时间内设备会持续发送配置BPDU, 通知它们清空mac地址表(除了边缘端口学习到的mac地址和收到TC报文端口学习到的mac地址), 不再需要根桥来发送.

注: 传统STP的配置BPDU type字段是0x00, RSTP的配置BPDU type字段是0x02.

1.1.9 生成树保护功能

  • BPDU保护: 主要是针对边缘端口的, 如果EP被恶意发送了BPDU报文, 会导致EP丧失边缘属性, 导致网络震荡, 所以边缘端口开启BPDU防护能在收到BPDU报文时进入Error-down状态, 相当于被shundown(可以被undo shutdown再次打开), 需要认为重新关闭打开, 当然可以配置自动将error-down恢复:

    auto recovery
    
  • 根保护: 为了防止网络中出现意外导致根桥被抢占, 导致阻塞接口变化, 开启了根保护之后, 指定端口收到一个优先级更高的BPDU报文的时候, 会进入discarding状态, 阻止报文继续转发;

    该端口进入discarding之后, 会等待两倍forwarding转发时延(15x2=30s), 如果该时间内没有收到更高优先级的报文, 则恢复forwarding, 否则继续保持discarding;

    根保护只能在指定接口配置, 推荐在根桥的指定端口配置, 现实网络中使用的比较少;

  • 环路保护: RSTP或者STP中, 阻塞端口是需要对端持续发送BPDU报文用于维持当前端口的阻塞状态. 如果收不到对端的报文, 则认为网络发生故障, 需要恢复该接口转发数据.

    环路保护只能在根端口和AP端口上配置.

  • TC保护: TC报文是用于跟更新网络中的mac地址表的, TC保护就是为了防止用户恶意发送大量TC报文导致设备一直无法学习到稳定的mac地址, 开启TC保护之后, 在单位时间内设备可以处理的TC报文次数被限制, 默认情况下为1次/2s, 超出限制的其他TC报文则等待单位时间后统一处理一次.

1.2 RSTP的工作过程

其实就是PA机制, 都说了要耐心看完.

1.3 RSTP基本配置命令

  • 开启rstp:

    stp mode rstp
    
  • 边缘端口开启命令:

    interface g0/0/0 //指定该端口为边缘端口
    	stp edge-port enable
    	quit
    stp bpdu-protection	//表示直接对所有的边缘端口开启保护
    

    其他命令不重要, 实战更多的是MSTP, 大多配置命令都会在MSTP里讲解

2 MSTP

MSTP(多生成树协议)继承了RSTP的所有改进, 在RSTP上添加了实例(Instance)的概念.

RSTP和STP存在的问题: 只有一个生成树, 所有设备共用一个生成树, 用户业务无法区分, 流量无法实现负载分担, 出现带宽浪费. 如果网关在两台不同的汇聚上配置, 则同一个生成树给所有Vlan服务.

MSTP可以将一个或多个Vlan映射到一个实例上, 通过控制多个实例, 然后基于不同实例生成不同的生成树, 实例之间的生成树计算互不影响.

2.1 MSTI

MSTI(Multtiple Spanning Tree Instance, 多生成树实例):

  • 一个MST域内可以生成多颗生成树, 生成树都生成为一个MSTI.

  • MSTI使用instance ID标识, 华为设备取值为0-4094.LAN映射表:

  • MST域的属性, 描述VLAN和MSTI之间的映射关系.

  • 如图所示MST Region 4的VLAN映射有:

    • VLAN映射到MSTI 1;
    • VLAN映射到MSTI 2;
    • 其余VLAN映射到MSTI 3;

image-20230322163754166

2.2 MSTP基本概念

端口角色

在RSTP的基础上添加了Master端口和域边缘端口.

MSTP在工作过程中, 会将二层网络划分成不同的域, 不同的域通过不同的域名标识, 一个域可以写成MST域.

同一个域内需要注意:

  • 域名需要一致;
  • 实例绑定关系需要一致.

不同域之间的实例关系可能不一样, 但大部分情况下只会接触到一个域.

MSTP报文

MSTP使用MST BPDU(Multiple Spanning Tree Bridge Protocol Data Unit, 多生成树桥协议数据单元)作为生成树计算的依据.

MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录.

image-20230322164032710

2.3 MSTP配置

  • 在现实网络中常用的还是MSTP, 使用设备默认是开启的MSTP

    stp mode mstp	//开启mstp
    stp enable
    
  • 进入MSTP视图, 创建MSTP域和实例并绑定VLAN,

    stp region-config	//进入mstp配置界面
    	region-name goktech	//所属域的域名为goktech
    	instance 1 vlan 10 20 30	//创建实例1绑定vlan10 20 30
    	instance 2 vlan 40 50 60	
    	revision-level 2	//该命令表示修改MSTP的修订版本, 在华为设备上无意义, 但是其他厂商需要一致.
    	active region-config	//表示上述配置的域名、实例绑定关系、修订版本激活生效.
    	qu
    
    1. 如果不配置active则上面的配置都不会生效.
    2. 默认情况下所有vlan都属于实例0, 不建议对实例0操作
  • 设置实例的主根桥/备份根桥, 设备优先级

    stp instance 1 root primary	//表示配置当前设备是MSTP实例1的主根桥,优先级自动设置为0
    stp instance 2 root secondary	//表示配置当前设备是MSTP实例2的备份根桥,优先级自动设置为4096
    stp instance 1 priority 4096	//表示配置当前设备的MSTP实例1的优先级为4096
    

    一般情况下,希望数据走哪一边,则那边的上层设备配置为root primary, 另外一边建议配置成root secondary.

    3 总结

    总结一下, 这章博客看下来你应该要学到:

    1. RSTP相较于传统STP的改变;
    2. MSTP相较于RSTP的多实例处理;
    3. MSTP的配置.

    这篇博客其实在我学习当天就已经起草了, 但是碍于临近上学期的期末, 各种杂七杂八的事情都压了上来, 像我这种闲人都有点难顶, 总之还是把HCIP剩下的坑填了, 一些实验内容和实验报告我也会陆续跟进的.