前言
为了提高网络可靠性,交换网络中通常会使用冗余链路,然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树STP(Spanning Tree Protocol ) 可以在提高可靠性的同时又能避免环路带来的各种问题。
二层网络设计需求和问题:
-
为了提高可靠性,交换机之间会通过多条链路相连,从而避免单点故障
-
但同时会带来一些灾难性的环路问题。
环路问题:
广播风暴
MAC地址表产生震荡
在广播风暴的同时,MAC地址表也一直在变换,
如下图的信息提示,MAC地址对应的接口发生了震荡,从2口变到了1口。
STP
STP: Spanning Tree Protocol, 生成树协议,提供两大功能:
- 消除环路:通过阻断冗余链路来消除网络中可能存在的环路,就可以消除刚刚上面碰到的问题
- 链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。
STP 操作
:通过构造一棵树来消除网络中的环路。( STP发明于80年代,那时候的网桥就是现在的交换机)
STP选举
STP选举是以各自发送BPDU数据包中的字段来相互比较来决定谁是根桥。
BPDU:Bridge Protocol Data Unit – 桥协议数据单元(STP工作协议)
-
使用组播: 01-80-C2-00-00-00 ( 可以记忆一下,面试小细节)
-
BPDU包含桥ID,路径开销,端口ID,计时器等参数。
BPDU类型:
-
配置BPDU:
- 选举根交换机以及确定每个交换机端口的角色和状态
- 在初始化过程中,每个桥都主动发送配置BPDU。
- 在网络拓扑稳定以后,只有根桥主动发送BPDU,其它交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
- 发送周期为Hello time
- 老化时间为MAX-Age
ensp 默认开启 MSTP
- 拓扑变更通告BPDU-TCN BPDU
- 下游交换机感知到拓扑发生变化时向上游发送的拓扑变换通知
Topology Change 拓扑变化
BPDU字段详解
字段中重要且用于根桥选举的4个字段:
-
桥ID: BID - Bridge ID
- 用于在STP中唯一标识一个交换机,由两部分组成:
- 桥优先级:高16位
- 桥MAC地址:低48位
- 用于在STP中唯一标识一个交换机,由两部分组成:
-
端口ID : PID - port ID
-
用于在STP中唯一标识一个交换机上的端口,由两部分组成:
- 端口优先级:高8位
- 端口编号:低8位
-
-
路径开销:Path Cost
- 路径开销用于衡量桥与桥之间路径的优劣,越低越好
- STP中每条链路都具有开销值
两个标准下的开销值:(802.1D-1998 标准是 98年的标准,所以它的开销是较小的,随着技术的跟进,带宽逐渐增大,所以 标准 也会与时俱进的)
- 根路径开销:Root Path Cost
- 确定到达根桥的最短路径,并生成无环树状网络
- 到根桥的路径上所有的路径开销之和
STP中端口的角色
-
根端口:去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据。在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
根端口保证了交换机与根桥之间工作路径的唯一性和最优性。
-
指定端口:
向下行网桥转发BPDU的端口。
根桥上的所有端口均为指定端口。
-
阻塞端口:非根端口和非指定端口的其余端口被会进行逻辑上的阻塞,只能接受根桥发送来的STP协议数据帧。
STP选举过程
根桥选举
-
每一台交换机启动STP后,都认为自己是根桥
-
BID 最小的成为根桥(先比较优先级,再比较MAC)
根端口选举
-
是在一个非根交换机上选根端口 注意是 在一个(它自己)!!!!!
-
非根交换机在选择根端口时分别根据该端口的
- 根路径开销 | 比
- 对端BID | 较
- 对端PID | 方
- 本端PID V 向
以刚刚的拓扑为例:我们已经知道LSW3是根桥,先根据规则来判断选举出哪些口是根端口。
-
根桥上(LSW3) 上的端口都为指定端口
-
先看LSW1 , 交换机上有两个口,一个是G0/0/1,一个是G0/0/2,在它们之中选出根端口
-
首先比较它们端口的根路径:
-
同理算出LSW2的G0/0/3口 也为根端口,验证查看
指定端口选举
-
非根交换机在选择指定端口时分别根据该端口的
-
根路径开销 | 比较
-
本端BID | 方
-
本端PID V 向
-
- 指定端口的责任是向下行路由器发送BPDU
- 现在要从LSW2和LSW1中的G0/0/2 、G0/0/1 选出 指定端口
- 查看这两个口的根路径开销都为20000,
- 往下,比较 本端BID
-
验证
预备端口
未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。
所以根据规则,LSW1的G0/0/1就为预备端口并给予堵塞。
STP 端口状态 & 计时器
STP 端口状态
-
disabled port: 端口没有接线
-
blocking: 阻塞
-
Listening: 监听
STP的计时器
Max Age :
- 最长未接受BPDU时间
- 所连的交换机不能超过20台。
所以不建议在二层网络中连续的接多个交换机,一是不利于STP协议的计算降低效率,二是大于20台时,非根桥会丢弃BPDU。
链路中根桥会一直发送BPDU,如果被阻塞端口的交换机超过 Max Age 时间没有收到,则会认为自己就是根桥,端口就不会被堵塞了,然后如下图改变状态。(这也是刚开始启动交换机时,各个端口的状态变化)
15s 监听 – > 15s 学习 – > 转发
STP拓扑变化
根桥故障
交换机出现故障时,当前二层网络下的设备恢复网络一共需要50 S 。
直连链路故障
我们测试一下:
- 查看LSW3的端口
-
关闭 G0/0/1 口, 查看 状态变化。
时间是 STP 的缺点之一
非直连链路故障
同样测试一下;
- 开始时
- 关闭LSW2的g0/0/1的端口后
-
根据Message的大小(经过一台交换机加1) 证明 BUPD是从LSW3那边发过来的
拓扑改变导致MAC地址表错误
拓扑如下:
STP正常运行,PC1 ping PC2 通过ARP询问MAC地址后正常通信,LSW1也记下了所对应的MAC地址。
–> 所以有了 TCN
- 检测到拓扑改变的交换机通过根端口向根桥发送TCN,上游交换机收到TCN后回应TCA,让后下游交换机停止发送TCN,再通过根端口发送TCN直到根桥收到,根桥通过制定端口发送TC通知所有下游交换机把MAC地址表记录老化时间从300s变为15s
如:
关掉后: