生成树协议
一、STP生成树的概述
1.1 交换环路的产生
如上图所示:在网络通信开始时,PC1的ARP条目中没有PC2的MAC地址,根据ARP原理,PC1会发送ARP请求给交换机SW2,SW2收到请求后会转发给SW1和SW4,然后再分别转发出去,这时网络就形成了一个环路,而交换机之间并不知道,这将导致广播帧在这个环路中永远循环下去,最终形成广播风暴,导致网络瘫痪。
交换网络环路产生的总结:
- 广播风暴的形成
- 多帧复制
- MAC地址表紊乱
1.2 STP简介
STP(Spanning Tree Protocol,生成树协议)就是用来把一个环形的结构改变成一个树形的结构。
如上图可以看出:
- STP从逻辑上断开环路,防止广播风暴的产生
- 当线路故障,阻塞接口会被激活,恢复通信,起备份线路的作用
二、STP生成树的工作原理
2.1 生成树算法及验证
2.1.1 生成树算法
STP运行生成树算法(Spanning Tree Algorithm,STA)。生成树算法的过程很复杂,归纳为下列三个步骤:
- 选择根网桥(Root Bridge),这里网桥指的就是交换机。
- 选择根端口(Root Ports)。
- 选择指定端口(Designated Ports)。
1.网桥
- 网桥ID是唯一的;
- 选择交换网络中网桥ID最小的交换机成为根网桥。
网桥优先级:是用来衡量网桥在生成树算法中优先级的十进制数,取值范围为0~65535,默认值是32768。
先比较优先级,在优先级相同的情况下,则Mac地址小的为根网桥。
2.根端口
选择根端口时,依据的顺序如下:
- 到根网桥最低的根路径成本。
- 直连的网桥ID最小。
- 端口ID最小
根路径计算成本计算过程如下图:
带宽与路径成本的关系如下图:
端口ID是一个2字节的STP参数,由1字节的端口优先级和1字节的端口编号组成,如下图:
端口优先级是一个可配置的STP参数,在基于IOS的交换机上,端口优先级十进制取值范围是0~255,默认是128.
3.选择指定端口
选择完根网桥和每台交换机的端口后,一个树形结构已经初步形成,但是所有线路仍连接在一起,并可能都处于活动状态,为了消除环路形成的可能,STP进行最后的计算,在每一个网段上选择一个指定端口。选择指定端口的依据与选择根端口相同,按顺序有以下三个步骤:
- 根路径成本最低
- 所在的交换机的网桥ID值最小
- 端口ID值较小
2.2 桥协议数据单元
交换机之间是通过BPDU(Bridge Protocol Date Unit,桥协议数据单元)来交换网桥ID、根路径成本等信息的,使用组播发送BPDU。
2.2.1 BPDU的两种类型
- 配置BPDU —— 用于生成树计算。
- 拓扑变更通告(Topology Change Notification,TCN)BPDU —— 用于通告网络拓扑变化。
2.2.2 BPDU报文字段
BPDU中包含了根网桥ID、根路径成本、发送网桥ID和端口ID;
- 根网桥ID:由一个2字节优先级和一个6字节网桥MAC地址组成,这个信息组合是已经被选定为根网桥的设备标识。
- 根路径成本:说明这个BPDU从根网桥传输了多远,成本是多少。这个字段的值决定哪些端口将进行转发,哪些端口将被阻断。
- 发送网桥ID:这是发送该BPDU的网桥信息,由网桥的优先级和网桥的MAC地址组成。
- 端口ID:由1字节的端口优先级和1字节的端口编号组成。
2.2.3 STP利用BPDU选择根网桥的过程
根网桥的选择是一个持续、反复进行的过程,它每2S触发一次,检查BPDU的根网桥ID是否发生了变化,网络中是否有网桥ID值更低的交换机加入进来。
根网桥选择过程如下:
- 当一台交换机第一次启动时,先假定自己是根网桥,在BPDU报文中的根网桥ID字段填入自己的网桥ID,并向外发送。
- 交换机比较接收到的BPDU报文中的根网桥ID与自己的网桥ID的值哪个更小,如果接收到的BPDU中的根网桥ID值小于自己的网桥值,则用接收到的根网桥ID替代现有的根网桥ID,并向外转发。这时,交换机仍然会继续监听其他交换机发来的BPDU,并进行比较,只要接收的BPDU中宣告的根网桥ID值小于目前存储的根网桥ID值,则进行替换,这样一段时间后,当所有的交换机互相接收了全部的BPDU后,则能够选择出全网公认的唯一根网桥。
- 收敛后,如果有一台网桥ID值更小的交换机加入进来,那么,它首先把自己当做一个根网桥在网络中通告,由于那台新交换机的网桥ID的确更小,所以其他交换机在比较一番后,就会把它当做新的根网桥而记录下来。
2.3 STP收敛
2.3.1 生成树端口的状态
在STP计算过程中,交换机的每一个端口都必须依次经历好几种状态。
2.3.2 生成树计时器
-
STP利用三种计时方法来确保一个网络正确的收敛:
- Hello时间:网桥发送配置BPDU报文之间的时间间隔。
- 转发延迟:一个交换机端口在侦听和学习状态所花费的时间间隔,默认值各为15s。
- 最大老化时间:交换机在丢弃BPDU报文之前存储它的最大时间。
-
生成树计时器决定的端口在各种状态下所处的时间长短:
三、STP生成树的应用
STP与VLAN的关系
案例:实现PC1和PC2互通,当sw2的e0/0/1或者sw1的e0/0/1断开时,可走备选路线通信。
- SW3配置如下:
The device is running!
//进入管理模式
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
//修改名称为SW3
[Huawei]sys SW3
//关闭信息提示
[SW3]undo info en
Info: Information center is disabled.
//批量创建VLAN10、VLAN20
[SW3]vlan batch 10 20
Info: This operation may take a few seconds. Please wait for a moment...done.
//进入接口e0/0/1
[SW3]int e0/0/1
//配置接口属性为access,因为是交换机到主机
[SW3-Ethernet0/0/1]port link-type access
//配置默认VLAN为10
[SW3-Ethernet0/0/1]port default vlan 10
//进入接口e0/0/2
[SW3-Ethernet0/0/1]int e0/0/2
//配置接口属性为access,因为是交换机到主机
[SW3-Ethernet0/0/2]port link-type access
//配置默认VLAN为20
[SW3-Ethernet0/0/2]port default vlan 20
//进入接口e0/0/3
[SW3-Ethernet0/0/2]int e0/0/3
//配置接口属性为Trunk,因为是交换机到交换机
[SW3-Ethernet0/0/3]port link-type trunk
//设置允许通过的VLAN为所有VLAN(2-4096)
[SW3-Ethernet0/0/3]port trunk allow-pass vlan all
//进入接口e0/0/4
[SW3-Ethernet0/0/3]int e0/0/4
//配置接口属性为Trunk,因为是交换机到交换机
[SW3-Ethernet0/0/4]port link-type trunk
//设置允许通过的VLAN为所有VLAN(2-4096)
[SW3-Ethernet0/0/4]port trunk allow-pass vlan all
- SW2的配置如下
The device is running!
//进入管理模式
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
//修改名称为SW2
[Huawei]sys SW2
//关闭信息提示
[SW2]undo in en
Info: Information center is disabled.
//批量创建VLAN10和VLAN20
[SW2]vlan batch 10 20
Info: This operation may take a few seconds. Please wait for a moment...done.
//进入g0/0/1接口
[SW2]int e0/0/1
//设置接口属性为trunk,因为是交换机到交换机
[SW2-Ethernet0/0/1]port link-type trunk
//设置允许通过的VLAN为所有VLAN(2-4096)
[SW2-Ethernet0/0/1]port trunk allow-pass vlan all
//进入g0/0/2接口
[SW2-Ethernet0/0/1]int e0/0/2
//设置接口属性为access,因为是交换机到路由器
[SW2-Ethernet0/0/2]port link-type access
//设置接口默认允许VLAN20通过
[SW2-Ethernet0/0/2]port default vlan 20
//进入g0/0/2接口
[SW2-Ethernet0/0/2]int e0/0/3
//设置接口属性为trunk,因为是交换机到交换机
[SW2-Ethernet0/0/3]port link-type trunk
//设置允许通过的VLAN为所有VLAN(2-4096)
[SW2-Ethernet0/0/3]port trunk allow-pass vlan all
//退出接口
[SW2-Ethernet0/0/3]q
//配置为mstp模式
[SW2]stp mode mstp
//进入配置模式
[SW2]stp region-configuration
//修改域名为HUAWEI2
[SW2-mst-region]region-name HUAWEI2
//修订级别为1
[SW2-mst-region]revision-level 1
//vlan10对应实例1
[SW2-mst-region]instance 1 vlan 10
//vlan20对应实例2
[SW2-mst-region]instance 2 vlan 20
//激活mstp
[SW2-mst-region]active region-configuration
//退出配置模式
[SW2-mst-region]q
//设置实例2为主用
[SW2]stp instance 2 root primary
//设置实例1为备用
[SW2]stp instance 1 root secondary
- SW1的配置如下
The device is running!
//进入管理模式
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
//修改名称为SW1
[Huawei]sys SW1
//关闭信息提示
[SW1]undo info en
Info: Information center is disabled.
//批量创建VLAN10和20
[SW1]vlan batch 10 20
Info: This operation may take a few seconds. Please wait for a moment...done.
//进入e0/0/1接口
[SW1]int e0/0/1
//设置接口属性为trunk,因为是交换机到交换机
[SW1-Ethernet0/0/1]port link-type trunk
//设置允许通过的VLAN为所有VLAN(2-4096)
[SW1-Ethernet0/0/1]port trunk allow-pass vlan all
//进入e0/0/2接口
[SW1-Ethernet0/0/1]int e0/0/2
设置接口属性为access,因为是交换机到路由器
[SW1-Ethernet0/0/2]port link-type access
//设置允许通过的VLAN为10
[SW1-Ethernet0/0/2]port default vlan 10
//进入e0/0/3接口
[SW1-Ethernet0/0/2]int e0/0/3
//设置接口属性为trunk,因为是交换机到交换机
[SW1-Ethernet0/0/3]port link-type trunk
//设置允许通过的VLAN为所有VLAN(2-4096)
[SW1-Ethernet0/0/3]port trunk allow-pass vlan all
//退出接口
[SW1-Ethernet0/0/3]q
//配置为mstp模式
[SW1]stp mode mstp
//进入配置模式
[SW1]stp region-configuration
//修改域名为HUAWEI1
[SW1-mst-region]region-name HUWWEI1
//修订级别为1
[SW1-mst-region]revision-level 1
//vlan10对应实例1
[SW1-mst-region]instance 1 vlan 10
//vlan20对应实例2
[SW1-mst-region]instance 2 vlan 20
//激活mstp
[SW1-mst-region]active region-configuration
//退出配置模式
[SW1-mst-region]q
//设置实例里1为主用
[SW1]stp instance 1 root primary
//设置实例里2为备用
[SW1]stp instance 2 root secondary
- 路由器R1 配置如下
The device is running!
//进入管理模式
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
//设置名称为R1
[Huawei]sys R1
//关闭信息提示
[R1]undo info en
Info: Information center is disabled.
//进入接口g0/0/0
[R1]int g0/0/0
//设置ip和子网掩码
[R1-GigabitEthernet0/0/0]ip address 192.168.10.1 24
//进入接口g0/0/1
[R1-GigabitEthernet0/0/0]int g0/0/1
//设置ip和子网掩码
[R1-GigabitEthernet0/0/1]ip address 192.168.20.1 24
//退出
[R1-GigabitEthernet0/0/1]q
//设置环回地址
[R1]int LoopBack 0
//添加ip
[R1-LoopBack0]ip add 10.0.0.1 24
- 主机配置设置如下:
- 结果如下:
断开SW2的e0/0/1后测试: