27-交换机,STP
1.STP(Spanning Tree Protocol生成树协议)的技术背景:
1)关于环路:
例如,下面三个交换机互相连接,可能会导致环路(数据包从lsw1-lsw2-lsw3-lsw1-lsw2-...,一直发停不下来)
路由器有避免环路的机制,例如ttl,最大转发16次后丢包;
但交换机没有这种机制;
STP技术就是用来避免交换机环路的;
![]()
2)二层网络设计的需求和问题:
![]()
为了提高可靠性、避免单点故障的产生,通常在设计拓扑图时,会添加一个冗余的交换机;
当其中一条链路挂掉后,另外一条还能继续使用,网络不会瘫痪;
但这样设计可能会导致环路的产生,如下图红色和蓝色的路线,数据包可能会在三个交换机之间一直传递下去;
3)环路问题的后果:
网络体验差、延迟高、丢包
极大占用链路带宽资源和设备资源,造成大量的垃圾流量
网络广播风暴
MAC地址表项不稳定
重复的帧拷贝
1】广播风暴
如下图,主机A给主机B发送消息;
首先A不知道B的mac地址,于是发送一个arp包;
如果三个交换机都关闭了stp(命令:stp disable)
将导致arp包不停在三个交换机之间循环发送;
导致的结果是:极大消耗设备的资源,导致网络体验变差;
关掉stp后抓包,可以看到一直发送的arp包;
2】mac地址表震荡
交换机总的mac地址表是从接收到的数据帧里面源mac地址来的;
如下图:
主机A的mac地址为xxxx-AA;
A给交换机B发送一条数据帧;
SWB收到后,从数据帧二层以太网头中找到源mac地址,并记录在mac地址表中;
由于是从g0/0/3口收到的数据,mac地址表中会记录下:mac地址xxxx-AA 接口g0/0/3;
如果关闭了stp导致环路后,数据帧会转发到SWC;
SWC会转发给SWB,SWB收到后也会从以太网头中找到源mac,并且在mac地址表记录:mac地址xxx-AA 接口g0/0/2;
由于一条mac地址只能对应一个接口,原来记录的主机A的mac地址表记录被删掉;
当主机A再次给SWB发送消息时,SWB中mac地址表会再次被修改,变成:mac地址xxxx-AA 接口g0/0/3;
用命令查看交换机的mac地址表:dis mac-address
可以看到,由于环路,导致mac地址表中 5489-98f6-4f43对应的接口一直变来变去;
![]()
2.STP的作用:
如图,stp通过阻断SWC的左接口来达到阻止环路的作用;
也就是说,从swb-swa-swc的消息不会再发回个swb了,因为stp机制导致swc-swb的由于接口被阻断这条线路也断了;
stp在保证阻止环路的同时并不会破坏链路的可靠性,当活动链路出现问题时,会激活备份链路;
比如正常情况下,数据走的是swb-swa-swc;
如果swa挂了,swc的左接口将不再阻塞,从swb发出来的消息会直接转发给swc;
3.STP的作用机制
STP通过构建一颗树来消除交换网络中的环路;
根桥是一台交换机;(一个树形结构有一个根节点)
根端口是非根桥交换机的一个端口;
非根桥交换机会从它的众多端口中选举出一个根端口,从根桥过来的流量就走根端口;
非根桥交换机的剩余端口将被阻塞,从而防止环路的产生;
1)BPDU:Bridge Protocol Data Unit 桥协议数据单元(桥就是交换机)
STP协议的数据包称为BPDU;
叫桥是因为当时的交换技术叫网桥,stp是哪个年代的产物于是也名字中有桥;
开启了stp的交换机会周期性的发送STP数据包;
使用组播地址:01-80-C2-00-00-00
![]()
如图:BPDU的字段,stp就是靠这些字段来完成选举的;
1】PID:STP的类型
有三种类型:STP、RSTP、MSTP
2】PVI:版本
华为交换机有三种模式:STP、RSTP、MSTP
默认开启stp,默认模式为mstp
![]()
3】BPDU Type:BPDU 的数据包类型
有两种类型:配置类型configuration、拓扑变更通告TCN(Topology Change Notification)
拓扑变更BPDU的数据包结构 :
4】Flags:标记
占一个字节8位,每一位表示不同的意思;
如果模式是STP,则只是用了最高为和最低位,用于确认TCN
![]()
如果模式是MSTP,则8位都使用;
![]()
4.BPDU中选举桥角色和端口状态的4个字段
1)桥id:Bridge identifier
告诉其它交换机我是谁;
查看桥id的命令:dis stp
![]()
桥id的结构为:数字.mac
优先级比较时:从高位比较再到低位(先比优先级,一样则比mac地址);值越小越优先。
2)端口id:Port Identifier
查看命令:dis stp
![]()
可以看到交换机lsw1的g0/0/1端口的id=128.25
端口id的结构:优先级.编号
比较优先级时:从高位比较再到低位(先比优先级,一样则比较端口编号);值越小越优先
端口编号与实际接口无关,是一个流水号
3)根路径开销:Root Path Cost
表示我到根桥有多远;
查看命令:dis stp
![]()
根路劲开销Root Path Cost是路径开销path cost累加起来的结果
链路的开销标准:
华为的交换机有三种开销标准:dot1d-1988(d标准)、dot1t(默认,t标准)、legacy(华为私有);
![]()
如下表:
按照t标准,1000Mbps口的cost=20000
如果两条1000Mbps链路聚合,则cost = 10000(链路聚合后带宽增加,开销减少)
三条1000Mbps链路聚合,cost = 6666
100Mbps口的cost=200000
(华为设备所支持的链路开销标准,使用链路聚合的开销=开销标准/链路数量)
计算根路径开销的示例:(这里使用d标准)
(从根桥发出的开销为0,在根据自己所有收到的接口到根桥的开销相加,取最小的开销值,就是根路径开销)
如上图:
sw1是根桥(根交换机),sw1发送的BPDU中,字段Root Path Cost = 0;(我到我自己是0)
BPDU数据到被sw2接收,sw2的左接口是100Mbps链路,按b标准查表得path cost=19;根路径开销Root Path Cost = 0 + 19 = 19;
sw2将BPDU的一些字段做修改,然后从另一个接口转发出去;转发出去的BPDU中根路径开销Root Path Cost = 19;
sw3的左接口是10Mbps带宽,按b标准 path cost=100;所以sw3的根路径开销 Root Path Cost = 19 + 100 =119;
Root Path Cost中记录的是当前交换机到根交换机最短的开销,如果到达指定交换机有多条路径,则选开销最小的;这关系到交换机转发时的选路;
- 为了提高可靠性,交换机之间会通过多条链路相连,从而避免单点故障。
- 但也会带来一些致命的环路问题。
功能 | 备注 |
消除环路 | 通过阻断冗余链路来消除网络中可能存在的环路 |
链路备份 | 当正常工作的链路出现问题,激活备份链路,及时恢复网络连通性 |
- 配置BPDU:configuration
- 选举根交换机以及确定每个交换机的角色和状态。(用来选举根桥)
- 在初始过程中,每个桥都主动发送配置BPDU。
- 在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。(根桥选出来后)
- 发送周期为Hello Time。(默认值为2,2秒发一次)
- 老化时间为Max Age。
- 拓扑变更通告BPDU:TCN BPDU
参数 | 描述 |
Root ldentifier | 发送此配置BPDU的交换机所认为的根交换机的标识 |
Root Path Cost | 从接收此根桥的配置BPDU的交换机到达根交换机的最短路径总开销 |
Bridge identifier | 标识自己的BID |
Port Identifier | 发送此配置BPDU的交换机端口的端口标识 |