Cyber_Security_Notes/A. 第一阶段/13_STP生成树协议.md
2024-08-29 08:54:54 +08:00

409 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STP 生成树协议
### 一、为什么需要STP协议
1. 局域网中容易出现的问题
- 单点故障和单链路故障,即:当某一条链路故障或某一台设备故障导致大面积主机网络中断
2. 如何预防单点故障和单链路故障
- 增加冗余/备份设备:预防单点故障
- 增加冗余/备份链路:预防单链路故障
3. 增加冗余/备份链路后,引发的新的问题
- 交换机与交换机之间增加备份链路后:极有可能形成环状网络,形成二层环路
二层环路:极有可能会引发广播风暴
广播风暴一旦形成:会造成网络拥塞,设备宕机,网络不可用
4. 如何解决因二层环路所导致的广播风暴?
- STP协议可以解决二层环路STP会形成一个物理有环逻辑无环的网络
### 二、STP协议
1. **STP是什么**
> STPSpanning Tree Protocol 生成树协议
2. **STP的作用如何实现逻辑无环如何防止广播风暴**
> 所有交换机物理互相连接
>
> 所有交换机启动后,都运行生成树协议
>
> 通过生成树协议,逻辑上阻塞端口,从而形成一个逻辑无环拓扑,避免广播风暴。
>
> 当现在链路出现问题,被阻塞的链路可以重新启用,从而形成新逻辑无环拓扑,起到了链路备份的作用
3. **STP的工作原理**
- 步骤1选举根网桥Root Bridge作为整个网络的根
- 步骤2确定根端口(Root Port RP)在每个非根交换机上选举1个根端口-RP-根端口)
- 步骤3确定指端口(Designated Port DP)在每条链路每个网段上选举1个指定端口-DP-指定端口)
- 步骤4阻塞备用端口(Alternate Port AP),阻塞非根、非指定端
4. **步骤1选举根网桥**
- 比较网桥ID(BID),选择网桥ID值最小的交换机为根网桥
- BID:优先级+MAC总长度8字节
- 优先级默认32768
- 理论范围 0-65535
- 实际范围 0-61440 -步长值 4096
5. **步骤2确定根端口(Root Port RP)**
1. 每个非根交换机上选举1个根端口-RP-根端口)
- 非根交换机到根交换机的根路径开销值最小的端口(根路径成本最小)
- 链路带宽 带宽越高 成本值越小
- 开销 cost (到达根交换机的路径成本)
- 默认值
100Mbit端口【200000】
1000Mbit1G端口【20000】
10000Mbit10G端口【2000】
2. BID:优先级+MAC对端设备的
3. PID端口ID:优先级+端口号 (对端设备的)
> 端口优先级默认值128 范围0-240 步长值16
6. **步骤3确定指端口(Designated Port DP)**
1. 在每条链路每个网段上选举1个指定端口-DP-指定端口)
- 一条链路上到根交换机的根路径开销值最小的端口(根路径成本最小)
> 根桥上的接口都是指定端口
2. 如果根路径成本相同则对比端口所在交换机的网桥ID网桥ID小的端口为指定端端口自己所在的网桥ID
3. PID端口ID:优先级+端口号(自己的)
> 端口优先级默认值128 范围0-240 步长值16
7. **STP基础配置**
```
[SW1]display stp //查看生成树状态信息
[SW1]display bridge mac-address //查看交换机自己的MAC
[SW1]display stp brief //查看接口STP简要信息
[SW1]stp priority 4096 //修改BID中的优先级
```
8. **BPDU报文**
1. BPDU桥协议数据单元
- 作用交换机之间通过周期性发送BPDU报文来实现STP功能
2. BPDU的四个重要字段
- 根网桥ID根交换机的BID
- 根路径开销本端口累计到根桥的开销值cost值
- 发送网桥ID本交换机的BID
- 端口ID发送该BPDU报文的端口的ID
3. BPDU 类型
- 配置 BPDU 和拓扑变更 BPDU。
9. **STP端口的5种状态**
- 禁用disabled) 强制关闭没有启动STP协议
- 阻塞blocking)只接收BPDU报文不发送BPDU报文
- 侦听Listening)比较BPDU报文确定交换机角色和端口角色
- 学习Learning)基于端口上收到的数据帧学习MAC地址表
- 转发forwardding):端口最终的状态,能够发送和接收用户数据
10. **STP 3种的计时器**
1. hello 时间端口发送的BPDU报文的时间间隔默认是2秒
2. 转发延迟forward delay侦听—学习15秒 、学习—转发15秒
3. 最大老化时间Max Age)一个端口最大的“没有接收BPDU”的时间间隔20秒
> 50秒的转发延迟
### 三、RSTP快速生成树协议
1. **RSTP快速生成树在STP的基础上优化而来**
- 作用:实现网络的快速收敛,降低网络故障时间,提高数据转发的效率
2. **RSTP对STP的改进**
- 引入了P/A 机制(让指定端口尽快进入转发状态)
- 增加了2种端口角色BP和AP
- Backup Port备份端口是指定端口的备份端口。
- Alternate Port备用端口是根端口的替换端口。
- 减少了3种端口状态禁用、阻塞、侦听三种状态合为一种
### 四、MSTP多生成树协议
1. **MSTP概述**
1. MSTP作用
- 默认生成树协议只形成一个网络拓扑,不能有效利用所有网络带宽
- 为了实现网络的负载均衡需要让网络形成多个无环拓扑让不同vlan的主机选择不同的拓扑来传数据
2. 端口状态
- Discarding (丢弃)相当于STP中的禁用、侦听、阻塞不转发用户数据
- Learning(学习)和STP 中的学习状态相同
- Forwarding(转发)和STP中的转发状态相同
3. MSTP配置
- 每个交机创建vlan,交换相连的接口配置为trunk
- 配置STP模式为MSTP
```
[SW1]stp mode mstp //修改mstp模式华为设备默认模式MSTP
```
> 交换机创建MSTP域、定义域名实例和vlan的对应关系
>
> 交换机上激活MSTP区域配置
2. **配置MSTP由SW1为vlan10的根SW2为vlan20的根**
- 配置步骤
1. 在所有的交换机中都创建vlan10和vlan20
2. 交换机连接PC的接口设置为access模式并加入指定的vlan
3. 交换机和交换机互联的接口设置trunk模式并允许vlan10和vlan20 通过
4. 在所有的交换机中配置MSTP所有交换机中的MSTP配置都要完全相同
5. 指定SW1为vlan10的主根
6. 指定SW2为vlan20的主根
- 配置命令
- S1、S2、S3创建vlan并配置连接交换机的端口为trunk
```
[S1]vlan batch 10 20
[S1]port-group 1
[S1-port-group-1]group-member g0/0/5 g0/0/6
[S1-port-group-1]port link-type trunk
[S1-port-group-1]port trunk allow-pass vlan 10 20
```
```
[S2]vlan batch 10 20
[S2]port-group 1
[S2-port-group-1]group-member g0/0/5 g0/0/6
[S2-port-group-1]port link-type trunk
[S2-port-group-1]port trunk allow-pass vlan 10 20
```
```
[S3]vlan batch 10 20
[S3]port-group 1
[S3-port-group-1]group-member g0/0/5 g0/0/6
[S3-port-group-1]port link-type trunk
[S3-port-group-1]port trunk allow-pass vlan 10 20
```
- 配置PC1加入vlan10、PC2加入vlan20
```
[S3]interface GigabitEthernet 0/0/1
[S3-GigabitEthernet0/0/1]port link-type access
[S3-GigabitEthernet0/0/1]port default vlan 10
[S3]interface GigabitEthernet 0/0/2
[S3-GigabitEthernet0/0/2]port link-type access
[S3-GigabitEthernet0/0/2]port default vlan 20
```
- S1、S2、S3配置MSTP区域并激活
```
[S1]stp mode mstp 启用MSTP协议
[S1]stp region-configuration 创建MSTP区域
[S1-mst-region]region-name ntd定义区域名为ntd
[S1-mst-region]instance 1 vlan 10指定实例与vlan的对应关系
[S1-mst-region]instance 2 vlan 20
[S1-mst-region]active region-configuration激活区域配置
```
```
[S2]stp mode mstp 启用MSTP协议
[S2]stp region-configuration 创建MSTP区域
[S2-mst-region]region-name ntd定义区域名为ntd
[S2-mst-region]instance 1 vlan 10指定实例与vlan的对应关系
[S2-mst-region]instance 2 vlan 20
[S2-mst-region]active region-configuration激活区域配置
```
```
[S3]stp mode mstp 启用MSTP协议
[S3]stp region-configuration 创建MSTP区域
[S3-mst-region]region-name ntd定义区域名为ntd
[S3-mst-region]instance 1 vlan 10指定实例与vlan的对应关系
[S3-mst-region]instance 2 vlan 20
[S3-mst-region]active region-configuration激活区域配置
```
- 配置SW1为vlan10的根、SW2为vlan20的根
```
[S1]stp instance 1 priority 4096
[S2]stp instance 2 priority 4096
```
- 查看验证
```
<S1>display stp instance 1 brief
查看S1的instance 1 g0/0/5 g0/0/6都是指定接口
```
```
<S2>display stp instance 2 brief
查看S2的instance 2 g0/0/5 g0/0/6都是指定接口
```
3. 实验MSTP负载均衡
![image-20240828193446020](https://picgo-noriu.oss-cn-beijing.aliyuncs.com/Images/image-20240828193446020.png)
- 需求
- PC1属于 vlan 10 IP地址为 192.168.10.1/24网关为 192.168.10.254
- PC2属于 vlan 20 IP地址为 192.168.20.1/24网关为 192.168.20.254
- 确保PC1与PC2互通
- 配置 MSTP SW1为 vlan10的主根、vlan20的次根SW2为vlan10的主根、vlan10的次根
- 配置步骤
1. 配置PC的IP地址
2. 在所有的交换机中都创建vlan10和vlan20
3. 交换机连接PC的接口设置为access模式并加入指定的vlan
4. 交换机和交换机互联的接口设置trunk模式并允许vlan10和vlan20 通过
5. 在所有的交换机中配置MSTP所有交换机中的MSTP配置都要完全相同
6. 指定SW1为vlan10的主根 vlan20的备根
7. 指定SW2为vlan20的主根 vlan10的备根
8. 配置路由器接口的IP地址
- 配置命令
- S1、S2、S3创建vlan并配置连接交换机的端口为trunk
```
[S1]VLAN batch 10 20
[S1]port-group 1
[S1-port-group-1]group-member G0/0/5 G0/0/6
[S1-port-group-1]port link-type trunk
[S1-GigabitEthernet0/0/5]port trunk allow-pass vlan ALL
```
```
[S2]VLAN batch 10 20
[S2]port-group 1
[S2-port-group-1]group-member G0/0/5 G0/0/6
[S2-port-group-1]port link-type trunk
[S2-GigabitEthernet0/0/5]port trunk allow-pass vlan ALL
```
```
[S3]VLAN batch 10 20
[S3]port-group 1
[S3-port-group-1]group-member G0/0/5 G0/0/6
[S3-port-group-1]port link-type trunk
[S3-GigabitEthernet0/0/5]port trunk allow-pass vlan ALL
```
- S1、S2、S3配置MSTP区域并激活
```
[S1]stp mode mstp 启用MSTP协议
[S1]stp region-configuration 创建区域
[S1-mst-region]region-name ntd 定义区域名为ntd
[S1-mst-region]instance 1 vlan 10 指定vlan与实例的对应关系
[S1-mst-region]instance 2 vlan 20
[S1-mst-region]active region-configuration 激活区域配置
```
```
[S2]stp mode mstp 启用MSTP协议
[S2]stp region-configuration 创建区域
[S2-mst-region]region-name ntd 定义区域名为ntd
[S2-mst-region]instance 1 vlan 10 指定vlan与实例的对应关系
[S2-mst-region]instance 2 vlan 20
[S2-mst-region]active region-configuration 激活区域配置
```
```
[S3]stp mode mstp 启用MSTP协议
[S3]stp region-configuration 创建区域
[S3-mst-region]region-name ntd 定义区域名为ntd
[S3-mst-region]instance 1 vlan 10 指定vlan与实例的对应关系
[S3-mst-region]instance 2 vlan 20
[S3-mst-region]active region-configuration 激活区域配置
```
- 配置S1为vlan10的主根、vlan20的次根网桥并查看配置
```
[S1]stp instance 1 priority 0
[S1]stp instance 2 priority 4096
```
- 配置S2为vlan20的主根、vlan10的次根根网桥并查看配置
```
[S2]stp instance 2 priority 0
[S2]stp instance 1 priority 4096
```
- 配置PC1加入vlan10、PC2加入vlan20
```
[S3]interface GigabitEthernet 0/0/1
[S3-GigabitEthernet0/0/1]port link-type access
[S3-GigabitEthernet0/0/1]port default vlan 10
[S3]interface GigabitEthernet 0/0/2
[S3-GigabitEthernet0/0/2]port link-type access
[S3-GigabitEthernet0/0/2]port default vlan 20
```
- 配置S1与路由相连的接口加入vlan10
```
[S1]interface GigabitEthernet 0/0/1
[S1-GigabitEthernet0/0/1]port link-type access
[S1-GigabitEthernet0/0/1]port default vlan 10
```
- 配置S2与路由相连的接口加入 vlan20
```
[S2]interface GigabitEthernet 0/0/2
[S2-GigabitEthernet0/0/2]port link-type access
[S2-GigabitEthernet0/0/2]port default vlan 20
```
- 配置路由器接口IP
```
[R1]interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1]ip address 192.168.10.254 24
[R1]interface GigabitEthernet 0/0/2
[R1-GigabitEthernet0/0/2]ip address 192.168.20.254 24
```
- 测试与验证
```
pc1 ping pc2 通
```
- 查看验证
```
<S1>display stp instance 1 brief
查看S1的instance 1 g0/0/5 g0/0/6都是指定接口
```
```
<S2>display stp instance 2 brief
查看S2的instance 2 g0/0/5 g0/0/6都是指定接口
```