STP
技术背景
-
单点故障
上连链路故障就断网,网络可靠性差
-
二层冗余
S3使用双链路联到两台汇聚设备构成物理链路冗余的二层环境
-
二层环路问题
-
MAC地址漂移
环路中拷贝帧会不停止的顺/逆时针旋转,每次从不同的口中进入交换机时会将MAC地址表项修改,无休止,快速的变来变去
-
广播风暴
交换机不停地接收拷贝帧,并且执行泛洪操作
-
多帧复制
交换机从多个不同的接口收到相同帧的拷贝
-
基本概念
-
桥:交换机
-
桥MAC地址:转发端口的MAC地址
-
桥ID:默认32768
-
端口ID:
-
BPDU:网桥协议数据单元,STP协议帧的载荷数据
比较次序 RID->RPC->BID->PID 值越小越优
-
RPC:根路径开销,从端口到根桥所有链路的路径开销和,端口速率越大开销越小
-
根桥:交换网络的逻辑中心
-
根端口:非根桥上选出的,作为与根桥之间进行报文交互的端口,非根桥上最多只有一个;保证了交换机与网桥之间的工作路径唯一且最优;
-
指定端口:网段有多条路径通往根桥时,确定出唯一的指定端口
-
备用端口:交换机上所有剩余的端口,STP会对这些设备进行逻辑阻塞-->不能转发由终端计算机产生发送的用户数据帧;可以处理STP协议帧;
STP运行
①最小的根桥ID->②最小的根路径开销->③最小的桥ID->④最小的端口ID
-
交换网络中选举一个根桥
-
-
初始启动都认为自己是根桥,并在发送给别的交换机PBDU时宣告自己是根桥
-
首先比较优先级,小的胜出
-
优先级相等,比较MAC地址,小的胜出
-
-
-
-
每个非根桥上选举的一个根端口
-
-
比较根路径开销--越小越优
-
开销相同-->比较上行设备的BID--越小越优
-
BID相同-->比较上行设备的PID--越小越优
-
-
-
为每个段(链路)选举一个指定端口
-
-
比较根路径开销-->越小越优
-
开销相同-->比较交换机BID--越小越优
-
BID相同-->比较PID--越小越优
-
-
-
阻塞非其他端口
除了根端口和指定端口外剩余的端口
STP报文
-
STP交换机通过交换STP协议帧来建立和维护STP树,在网络变化时建立新的STP树;
-
IEEE 802.3封装格式 -- 载荷数据PBDU -- 组播帧01-80-c2-00-00-00
-
配置BPDU:
用来进行生成树计算和维护生成树拓扑的报文
配置BPDU的信息:
-
BPDU对自身的标识
-
协议标识,版本号,BPDU类型,flags
-
-
进行STP计算的参数
-
发送交换机的BID,根桥BID,发送端口PID,发送端口RPC
-
-
时间参数
-
Hello timer,Forward Delay timer,Max Age timer
-
1. 初始形成STP树的过程中,STP交换机周期性(2s)地产生并发送配置BPDU 2. -->STP树成型后的稳定期,只有根桥才会周期性(2s)地产生并发送配置BPDU 3. -->非根桥会从自己的根端口周期性的接收配置BPDU 4. -->并立即触发而产生自己的配置BPDU,从自己的接口发送出去(看起来像根桥发出的配置BPDU逐跳经过了其他交换机)
-
-
TCN BPDU
当拓扑结构发生变化时,用来通知相关网络拓扑结构发生变化的报文
TCN BPDU信息:
-
协议标识,版本号,类型(0x80)
-
网络中链路发生故障-->故障交换机可以通过端口直接感知变化-->周期(hello time)通过根端口不断向上游交换机发送TCN BPDU-->直到接收从上游交换机发来的TCA标志1的配置BPDU 上游交换机收到TCN BPDU后--> 一方面通过其指定端口回复TCA标志1的配置BPDU; 另一方面以hello time为周期通过其根端口不断向上游交换机发送TCN BPDU,直到根交换机收到TCN BPDU; 根桥交换机收到TCN BPDU后发送TC标志置1的配置BPDU,通告所有交换机网络拓扑发生了变化 交换机收到TC标志置1的配置BPDU后意识到拓扑发送了变化-->将自己的MAC地址老化周期(300s)缩短为forward delay时间长度(15s)加快老化原来的地址表项;
STP计时器
-
Hello timer
根桥发送配置BPDU的周期,相应的成为了其他交换机发送配置BPDU的周期(默认2s)-->只能在根桥上改
-
Forward Delay timer
端口状态迁移的延迟时间;STP树生成过程中端口的变化不是同步的;-->为了避免环路,新选出的根端口和指定端口需要经过2倍的延迟才能进入转发
-
Max Age timer
配置BPDU的最大生命周期(默认20s)由根桥指定,交换机收到配置BPDU对message age和max age比较,如果message age小于等于max age则该配置BPDU会触发该交换机产生并发送新的配置BPDU,否则丢弃不会触发;
-
Message age:根桥发出某个配置BPDU,直到这个BPDU传到当前交换机所需要的总的时间,包括传输延迟;现实中每经过一桥加1,从根桥发出为0
STP端口状态
-
去能Disable:无法接收和发出任何帧,处于down状态
-
阻塞Blocking:只能接收STP协议帧,不能发送STP协议帧,也不能转发用户数据帧
-
侦听Listening:可以接收并且发送STP协议帧,但是不能进行MAC地址学习,也不能转发用户数据
-
学习Learning:可以接收并且发送STP协议帧,可以进行MAC地址学习,但不能转发用户数据帧;
-
转发Forwarding:可以接收并且发送STP协议帧,可以进行MAC地址学习,可以转发用户数据帧;
- STP交换机初始启动端口从Disabled-->Blocking状态 - 如果端口被选举为根端口或者指定端口进入Listening状态,持续一个Forward Delay时间长度(15s) - 如果没有因为情况而回到Blocking状态则进入Learning状态,持续一个Forward Delay;开始构建MAC地址表为转发用户数据做准备 - 最后进入到Forwarding状态,开始用户数据帧的转发 - 整个过程中端口一旦被关闭或者链路故障-->进入去能状态 - 端口状态迁移的过程中,如果端口角色被判定位非根端口或者非指定端口端口状态会立即退回Blocking - 端口状态迁移的过程中,如果端口角色被判定位非根端口或者非指定端口端口状态会立即退回Blocking
-
示例:
1. S1/S2/S3大概在同意时刻启动-->各个端口从Disabled进入Blocking状态;只能接收而不能发送BPDU,所有端口都收不到BPDU; 2. 等Max age(20s)后,每台交换机认为自己根桥;所有端口都为指定端口,端口状态为Listening,开始发送自己产生的配置BPDU,同时接收其他交换机发送的配置BPDU 1. 假定S2最先发送->S3从自己g0/0/2端口收到S2发送的配置BPDU后认为S2才是根桥(S2的BID<S3的BID)-->S3把g0/0/2端口由指定端口变为根端口-->将自己重新产生的(根桥设置为S2)的配置PBUD从自己的g0/0/1发送出去 2. S2和S3收到发送的配置BPDU后,确认S1根桥,S2的g0/0/1和S3的g0/0/1端口成为根端口,S2/S3从各自的g0/0/2端口发送新的配置BPDU,S3的g0/0/2端口成为备用端口进入blocking状态,S2仍然为指定端口 (过程并不唯一,结果唯一) 端口在Listening状态持续Forward Delay(15s)后开始进入learning状态 3. 各个端口(S3的g0/0/2除外)相继进入Learning状态持续Forward Delay(15s);期间内交换机可以开始学习MAC地址与这些端口映射关系; 4. 然后,相继进入Forwarding状态,开始用户数据帧的转发
特性及优化
STP及BPDU取消使能
-
当交换机接口连接着路由接口或者不可能产生二层环路的设备时,在交换机的这个接口运行STP是没有意义的,可以考虑将该接口的STP关闭;
边缘端口
-
一个端口在UP之后,需要经过Listening,learning两个状态才能够最终进入Forwarding状态开始转发数据帧,耗费了两个15s的延迟时间-->非常低效
-
交换机连接终端设备的端口一般不会产生二层环路,可以直接进入转发状态提高工作效率;
-
边缘端口不参与生成树的计算,可以在UP之后立即进入转发状态,边缘端口的UP/DOWN不会触发STP拓扑变更而发送TC报文
-
在没有配置BPDU保护的情况下,边缘端口一旦收到BPDU就丧失了边缘端口属性,变成了普通STP端口
BPDU保护
-
边缘端口正常不会收到BPDU报文(连接终端);但是如果伪造BPDU被恶意攻击就会存在安全隐患产生环路;当边缘端口接收到BPDU后,设备会自动将边缘端口设置为非边缘端口,重新进行生成树计算,可能引起网络震荡
-
使能BPDU保护,如果边缘收到BPDU报文,设备将关闭这些端口同时通知网管系统
根保护
-
S1的G0/0/24端口不是跟保护后,当收到更优的BPDU后,SW1将这个端口切换到Discarding状态,如此以来SW1的根桥就会稳当
-
根保护是指端端口上的特性,端口角色为指定端口时根保护功能才会生效;
环路保护
-
SW1为STP根桥,SW3的g0/0/23由于被选举为非指定端口因此处于Discarding状态,该接口处于Discarding,但是仍然会持续侦听SW2发来的BPDU报文;
现在SW2和SW3之间的链路发生了单向链路故障,SW2的报文无法到达SW3,导致G0/0/23口无法接收BPDU,因此认为SW2发生了故障,重新进行STP计算-->G0/0/23角色切换为指定端口,变为转发状态-->环路(SW3-SW2的单向链路仍然在工作)
-
从根端口上启用了环路保护后,如果端口角色发生变化那么该端口会被阻塞进入Disacrding状态,直到再次接收到BPDU;在阻塞端口上启用了环路保护后,端口将一直处于Disacrding状态;
-
此功能只能配置在根端口,替代端口,备份端口上
TC Protection
-
设备在收到TC-BPDU后会执行MAC地址表及ARP表项的删除操作,如果有攻击者伪造大量TC-BPDU报文对交换机进行攻击,交换机将频繁进行删除和刷新操作,给网络带来很大隐患
-
在交换机上开启TC-Protection后,交换机会在收到TC-BPDU后删除表项同时启动周期为10s的定时器;在期间内如果再次收到TC-BPDU报文,则最多可以进行1次删除表项的操作,从而实现交换机的保护