生成树所产生的背景
- 在局域网组网中,有单星型拓扑,单星型组网结构,优势在于组网比较简单,组网成本比较少,但是缺点在于不管是中间的核心设备或者某条链路出现故障,都可能会导致于网络的数据中断,网络变得不可用,所以为了解决这种问题,提出了双星型子网结构,双星型组网结构优势在于不管是哪一个核心设备出现问题,只要没有同时出现问题,其中的一个出现问题或者说某个交换机的上行链路出现故障,那么在这种情况下,双星型拓扑都可以通过另外的核心交换和另外的链路来实现数据的转发
-
但是双星型互连回因为拓扑的互连而形成物理环路,在网络中出现环路会造成什么样的影响???
以太网环路的危害
广播风暴
- 什么叫做广播风暴??
如图所示:pc1发送一个广播给sw1,交换机收到广播报文的处理方式是除了接收端口外从其他所有接口洪泛出去,所以sw1收到之后会将广播报文发送给sw2和sw3,但是其他的交换机收到之后同样也会洪泛出去,所以会导致于这个广播报文在这个三角的网络里面不停的进行循环,广播报文不像IP报文,没有TTL机制,所以这个广播报文会不停循环,直到我们的网络变得不可用,同理,在俩个交换机双链路中也会如此 - 广播报文在网络中无休止的循环
-
并成指数增长,造成网络中资源耗尽(链路带宽,设备的处理能力),最终导致网络不可用
多重帧复制
- 多重帧:同一个数据帧可能会收到多份
- 例:pc1想发送一个数据帧给pc2,sw1收到之后查mac地址表,没有pc2的目标mac,那么根据交换机的转发原理,会将这个数据帧发送给sw2和sw3,sw3收到之后,可以将数据发送给pc2,但是同样sw2收到之后,也会讲数据包发给sw3,sw3收到数据包会再一次发送给pc2,这个时候pc1发送一个数据包给pc2,但是pc2会收到俩个数据帧,这就叫做多重帧的复制
-
网络中的环路有可能会导致同一个数据帧会重复收到
MAC地址漂移
- 同一个设备的mac地址同一个条目在mac地址表中不停的移动,就是可能一会在这个接口学到的一会在那个接口学到的,这种情况同样的也会浪费cpu的处理资源,如果数量非常多数目非常大的话也会耗尽cpu的处理能力,导致交换机不可用
-
例:如图,swa与swb形成了以太网环路,pca发送一个数据给swa,swa从0/2接口学到的之后通过交换机的学习功能会在交换机的mac表中构成条目,目标是88-10,端口是F0/2,swa假设没有目标pc的mac,会按照交换机的未知数据帧的处理进行转发,比如数据从F0/3接口发送出去,同理,swb收到之后也会从F0/6接口发送出去,对于swa来说这个数据帧又从F0/4接口学到了,依据交换机的学习功能会把以前的条目删除,重新构建条目88-10,从F0/4接口学习,所以这是一个条目在mac地址表里面从不同的接口学到,如果网络中有很多个pc在发送这种数据,可能会导致大量mac地址条目端口在不同的映射不同的变化极大的消耗cpu的处理资源,同样会导致网络不可用
生成树的意义
- 如果是单星型以太网结构,就不会存在这些危害,但是会造成单点网络不可用,而如果使用双星型的,又会造成以太网环路,这个时候用生成树这个思想可以很好的解决这种情况
- 在网络中可以通过运行生成树算法来计算出一个或者多个端口成为阻塞端口,也就是说, 这个端口逻辑上是阻塞的,就相当于交换机之间的链路是拔掉的,数据是不允许从这个接口来发送的,所以从逻辑上看,网络形成的是单链路的网络,打破了以太网环路,不会出现三种环路危害,优势在于如果某一条链路故障,原本阻塞的端口会自动的进行恢复,那么数据会依赖于新恢复的端口进行转发从而保证数据不间断的进行处理
- 通过阻断冗余链路来消除网络中存在的环路
- 发生故障时激活冗余备份链路恢复网络的连通性
生成树关键参数计算
生成树就是一种树状算法,通过在网络中运行这种算法,选择各种端口的角色,比如根端口,指定端口,最终选择出哪些端口是阻塞端口,逻辑上进行阻塞,实现数据的单链路的传送避免以太网环路,
各种端口角色的选取,是交换机之间需要进行一个交互,进行一个比较,如何通过这些参数来进行比较,如何来知道对方的参数,知道对方的相关的信息?交换机之间数据的交互就是通过BPDU(网桥协议数据单元)来完成的!!!
STP树状结构的计算
- 通过在交换机之间传递一种特殊的协议消息来确定网络的拓扑结构,协议消息中包含了足够的的信息来保证交换机完成生成树计算
-
生成树算法:
1、选择根网桥
2、选择根端口
3、选择指定端口
BPDU(网桥协议数据单元)
- 通过在交换机之间传递BPDU,来保证设备完成生成树的计算过程,目标MAC地址为:01:80:c2:00:00:00
-
所有生成树的计算,生成树拓扑的维护,都是通过交互BPDU,通过这种报文,可以知道网络里面相关的参数对方交换机相关的参数这个报文是一个组播报文
BPDU的俩种类型
- 配置BPDU:
1、在网络收敛时用于生成树计算
2、在网络稳定时用来维护网络拓扑
在网络稳定之后,只有根网桥才发送的,所以在网络中生成树的计算就是通过配置BPDU来完成的, - TCN(拓扑变更通知)BPDU
1、只在拓扑发生变化的时候发出,用来通知相关的交换机网络发生变化
当网络中拓扑发生变化例如链路故障时发送TCN的BPDU来告知网络中其他的交换机网络链路出现了故障
BPDU数据帧结构
STP基本概念
网桥ID
- 网桥ID:用于标识运行STP的交换机,在网络中唯一,由网桥优先级与交换机MAC地址组成
- 网桥优先级长2字节,默认值32768,只能按4096的倍数修改
-
网桥ID越小越优先
网桥实际上就是指的交换机,在交换机基于软件转发的时候称之为网桥,后续在交换机基于芯片转发的时候,才叫做交换机,在生成树原理中,仍然延续了这种称呼,叫网桥,网桥ID也就是交换机ID
整个网桥ID是由俩部分组成,网桥优先级和MAC地址,mac地址指的就是交换机背板的mac,有限优先级是俩个字节的,是人工或者自动选择的这个网桥这个交换机的优先程度,网桥优先级为2字节,俩字节也就是16位,所以取值范围为2^16=65535,优先级默认为32768在思科的设备中,能使用的个数只有16个,因为只能按照4096的倍数来计算,最小优先级为0,第二个能配置就是4096,根网桥的选举根据网桥ID,ID越小越优先,首先比较网桥优先级,如果网桥优先级一样才比较mac地址,哪一个mac地址小,网桥ID就越优先, mac地址在局域网中是唯一的,所以也能代表整个网桥ID是唯一的
根网桥
-
在一个局域网中,网桥ID最小的交换机称之为根网桥,网桥ID次小的就是备份根网桥
例:如图所示,有5台交换机,在这个五台交换机中就要比较哪一个网桥ID最小,经过比较sw1的优先级最小为0,次小的为sw2,优先级为4096,所以sw1位根网桥,sw2位备份根网桥,在网络中,只能有一个设备作为根网桥根网桥为后续其他端口的一个参照点
端口ID
- 运行STP的交换机的每一个接口都具有一个端口ID
- 由端口优先级和接口编号组成,比较时越小越优
-
端口优先级,缺省值为128,取值范围0-240,只能按16倍数修改
端口id就是端口的一种标识,它指的是用这个参数知道BPDU是由交换机的哪一个端口发送过来的,端口id有俩部分组成,端口编号和端口优先级,端口编号为8位,256个端口,端口优先级也是8位,理论来说,端口优先级范围为256,但是在计算中有4位被占用,所以端口优先级的范围是0-240
跟路径开销
- 到达根网桥的路径开销的总和
-
路径开销是指单条链路的STP开销值,由相关标准指定,可以在交换机接口手工修改
到达网络中的根网桥所经过的所有链路的开销之和,路径开销就是去往不同带宽的链路的成本是不一样的
生成树根网桥和根端口的选取
STP端口角色
STP的算法详解-选择根网桥
- 步骤一:选举根网桥
1、判定对象 - 在所有运行STP协议的交换机上选举一个唯一的根网桥
2、判定条件 -
BPDU数据帧中网桥ID值最小的交换机将成为根网桥
STP使用BPDU选择根网桥
- 交换机启动时,假设自己是根网桥
-
想外发送的BPDU中,根网桥ID字段填写自己的网桥ID
- 接收其他交换机发出的BPDU
-
比较网桥ID,选择较小的添加到根网桥ID中
STP的算法详解-选择根端口
- 步骤一:选举根网桥
1、判定对象 - 在所有非根交换机上的不同端口之间选举出一个到根网桥最近的端口作为跟端口
2、判定条件 - 1、端口到根网桥路径开销最小
- 2、当路径开销相同时,选择发送方网桥ID最小
-
3、当发送方网桥ID相同时,发送方端口ID最小
STP使用BPDU计算路径开销
- 根网桥发送路径成本为0的BPDU
- 当BPDU进入接口后增加Cost值
-
非根交换机比较不同接口的开销选择出一个根端口
-
根端口是在非根交换机上,每一个非根交换机上只有一个跟端口
STP的算法详解-选择指定端口
- 步骤三:选举指定端口
1、判定对象 - 在每一个物理网段的不同端口之间选举出一个指定端口
2、判定条件 - 1、端口到根网桥路径开销最小
- 2、当路径开销相同时,选择发送方网桥ID最小
-
3、当发送方网桥ID相同时,发送方端口ID最小
生成树端口状态迁移
- 在端口选出来之后,不能立即进入数据转发的过程,必须要经历端口状态,确定网络收敛完毕,才允许进入转发状态,只有转发状态才能发送数据
STP端口状态迁移
- 指定端口、根端口
只有指定端口和根端口才有端口状态迁移
1、如果端口是禁止的,打开端口,端口就变成阻塞状态,在阻塞端口20秒之后进入监听状态,在监听状态既可以发送BPDU又可以接收BPDU,但是不允许学习mac地址,不允许装发数据,在监听状态经历15秒,会进入学习状态,学习状态比监听状态多了一个功能,学习mac地址,在学习状态15秒之后,最终才过度到转发状态,进行数据的转发
2、所以生成树的端口状态从打开到转发最终经历50秒的时间,在侦听和学习这15秒也叫做转发延迟,网络最大的直径是七个交换机,最大允许七个交换机进行一个串联,而在生成树中,BPDU是一种中继式的发送,也就是说这个交换机只有收到上一个交换机发送的BPDU我才会向上游进行发送,所以七个交换机从第一个交换机到第七个交换机收到的话是需要经历2x7=14秒,所以就设置这个转发延时15秒,确保网络中的所有BPDU能够到达所有交换机能够到达网络的最边缘,确保网络能够进行收敛,避免造成临时的环路,
STP计时器
- MaxAge时间:20秒
- 转发时延:15秒
- Hello周期:2秒
阻塞端口
- 一直停留在阻塞状态
- 在最大老化时间(20秒)之内没有收到BPDU,就会变成指定端口,然后成监听状态,重新进行网络收敛
阻塞端口一直停留在blocking状态,这个状态只允许接收BPDU但是不允许发送BPDU,不允许学习mac地址,不允许转发数据,只有一种情况,如果阻塞端口在很长的一段时间内上游没有发送BPDU,那么就会认为网络中某段链路发生了故障,这种情况下,阻塞端口才会进入侦听,重新参与生成树的计算,重新进行网络的收敛
端口角色到底是在哪一个端口状态下完成的,端口角色和端口状态到底有什么关系???
STP端迁移案例
- 时刻一:STP启动时,阻塞所有端口防止环路,所有端口都处于阻塞状态
- 时刻二:STP刚启动完,交换机都认为自己是根网桥,所有端口都是指定端口,并迁移到监听状态,发送BPDU,进行STP选举
- 时刻三:STP算法选出各端口角色
- sw3侧端口选举成为阻塞端口,切换到阻塞状态
- 时刻四:经过2个转发时延,指定端口和根端口最终切换到转发状态
假设所有设备现在同时加电,每一个交换机的生成树是需要启动的,所以在启动的过程中,所有端口首先会进入阻塞状态,就是避免造成临时的环路,在这种状态下是不允许任何数据的发送的,当生成树启动完之后,就开始生成树的算法,每一个交换机都认为自己是根网桥所有每一个端口都认为自己是指定端口,那么端口状态就从blocking状态变成侦听状态,在侦听状态下面,侦听状态的功能是能够接收BPDU,也能够发送BPDU,也就是说所有端口在侦听下面能够完成BPDU的交互,最终通过BPDU的交互,可以完成生成树算法端口角色的选举,比如说根据生成树端口角色的一个选举,sw1成为根网桥,所有交换机上面的根端口也选举出来,同样根据生成树的算法,选择sw3上的一个端口称为阻塞端口,如果这个端口成为阻塞端口,那么这个端口就立即成为阻塞状态,不允许数据的发送,其他的端口状态仍然是侦听状态,还不能进行数据的发送,指定端口和跟端口在侦听状态下经历15秒,学习状态下经历15秒,最终变成转发状态 -
生成树端口角色的选举是在侦听状态下完成的,通过交互BPDU来完成