STP生成树协议详解
- 交换机的工作过程
交换机基于MAC地址表进行转发,MAC地址表是目的MAC地址和目的端口的对应关系。
1:假设PCA向PCB发送一个数据帧,此数据帧的目的MAC地址设置为PCB的MAC地址00-0D-56-BF-88-20,交换机SWA接收到此数据帧之后,需要查找MAC地址表,根据MAC地址表中的记录,将数据帧从E0/3口向外转发。
交换机在转发数据帧的时候,对数据帧不做任何修改,如果交换机接收到的是一个广播数据帧,则向所有端口转发。
2:交换机SWB接收到了此数据帧之后,查找MAC地址表,根据MAC地址表中的记录,将数据从E0/6端口上转发出去,此次转发仍然不会对数据帧做任何修改。
3:PCB接收到数据帧之后,查看目的MAC地址,由于目的MAC地址为接收者本身,所以PCB处理此数据帧并上送上层协议处理数据帧所携带的数据。
2.交换机的二层环路
如果为了保证网络运行的稳定性,在以太网交换网络上使用冗余链路进行了链路备份,如图所示
在使用了冗余链路后,出现了二层交换网络的环路,引发了广播风暴、MAC 地址表不稳定等问题。
二层环路中的广播风暴
如果交换机从一个端口上接收到的是一个广播数据帧,则向所有其它端口转发,而且交换机在转发数据帧的时候,对数据帧不做任何修改,因此,如果交换网络中有环路,则广播帧会被无限期的转发,形成广播风暴。
STP工作原理
桥ID
在二层网络中用“桥ID”来描述网络中的交换机。一个“桥ID”由两部分组成,前16 位表示的是交换机的优先级,后48 位表示的是交换机的MAC 地址,如图所示。桥ID 的优先级可以人为设定,默认取值32 768。
端口ID(Port Identifier)是用于区分描述交换机上不同端口的
端口ID 的定义方法有多种。第一种定义中,高4 位是端口优先级,低12 位是端口号。第二种定义中,高8 位是端口优先级,低8 位是端口编号,端口优先级默认取值为128。
根桥选举
为了计算生成树,交换机之间需要交换相关信息和参数,这些信息和参数被封装在配置BPDU中,在交换机之间传递。
BPDU是指桥接协议数据单元,泛指交换机之间运行的协议交互信息时使用的数据单元。配置BPDU是BPDU的一种。
生成树计算的第一步是选举根交换机,根交换机的选举基于交换机标识(Bridge ID)。
交换机标识由两部分组成:两字节长度的交换机优先级和六字节长度的MAC地址。
交换机优先级是可以配置的,取值范围是0~65535,默认值为32768。
网络中交换机标识最小的成为根交换机,首先比较优先级,如果优先级相同则比较MAC地址,值越小越优先。
本例中,三个交换机的优先级是相同的,由于SWA的MAC地址值最小,因此SWA为根交换机。
根端口的选举
STP为每个非根交换机选举根端口(Root Port)。
交换机的每个端口都有一个端口开销(Port Cost)的参数,此参数表示数据从该端口发送时的开销值,也即出端口的开销。STP认为从一个端口接收数据是没有开销的。
端口的开销和端口的带宽有关,带宽越高,开销越小,VRP平台中,百兆端口的开销值为200。
从一个非根交换机到达根交换机的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有出端口的端口开销总和。
根端口是指从一个非根交换机到根交换机总开销最小的路径所经过的本地端口。这个最小的总开销值称为交换机的根路径开销(Root Path Cost)。如果这样的端口有多个,则比较端口上所连接的上行交换机的交换机标识,越小越优先,如果端口上所连接的上行交换机的交换机标识相同,则比较端口上所连接的上行端口的端口标识(PID),越小越优先。
端口标识由两部分组成:一字节长度的端口优先级和一字节长度的端口号。
一字节长度的端口优先级是可配置的,默认为128。
COST值
端口的开销和端口的带宽有关,带宽越高,开销越小
指定端口的选举
STP为每个网段选出一个指定端口(DP),指定端口为每个网段转发发往根交换机方向的数据,并且转发由根交换机方向发往该网段的数据。指定端口所在的交换机称为该网段的指定交换机。
为每个网段选举指定端口和指定交换机的时候,首先比较该网段所连接的端口所属交换机的根路径开销,越小越优先;如果根路径开销相同,则比较所连接的端口所属交换机的交换机标识,越小越优先;如果根路径开销相同,交换机标识也相同,则比较所连接的端口的端口标识,越小越优先。
对于根交换机来说,所有端口都是所连网段的指定端口。因此LANA和LANB的指定端口都在SWA上。
LAND和LANE都只连接了一个交换机端口,此端口即为指定端口。
对于LANC来说,同时连接到两个交换机端口,并且两个交换机的根路径开销相同,因此需要比较两个端口所在交换机的交换机标识,由于SWB的交换机标识比SWC小(MAC地址更小),因此LANC的指定端口在SWB上。
既不是根端口也不是指定端口的交换机端口称为AP(预备端口),预备端口不转发数据,处于阻塞状态。
阻塞预备端口
在完成根端口和指定端口的选举后,交换机上所有的既非根端口,也非指定端口的端口,统称为预备端口。
为防止环路,STP 会将交换机上的预备端口进行逻辑阻塞。被逻辑阻塞的端口,无法转发用户数据帧,但可以接收并处理STP 的BPDU 报文。一旦网络出现故障,借助STP 的重新收敛,能够放开部分阻塞端口,实现业务的保护。
SWC 连接LANC 的端口既非根端口,也非指定端口,因此,该端口被称为预备端口,STP 会将该端口的数据转发阻塞,从而构建出树形的拓扑
交换机的端口类型
Root Port
根端口,是所在交换机上离根交换机最近的端口,处于转发状态。
Designated Port
指定端口,转发所连接的网段发往根交换机方向的数据和从根交换机方向发往所连接的网段的数据。
Alternate Port
预备端口,不向所连网段转发任何数据。
生成树协议 通过根端口、指定端口、预备端口的选举,构建了无环的树形拓扑。
端口描述
Disabled端口未启用
此状态下端口不转发数据帧,不学习MAC地址表,不参与生成树计算。
Listening侦听状态
此状态下端口不转发数据帧,不学习MAC地址表,只参与生成树计算,接收并发送BPDU。
Blocking阻塞状态
此状态下端口不转发数据帧,不学习MAC地址表,此状态下端口接收并处理BPDU,但是不向外发送BPDU。
Learning学习状态
此状态下端口不转发数据帧,但是学习MAC地址表,参与计算生成树,接收并发送BPDU。
Forwarding转发状态
此状态下端口正常转发数据帧,学习MAC地址表,参与计算生成树,接收并发送BPDU。
当端口正常启用之后,端口首先进入Listening状态,开始生成树的计算过程。
如果经过计算,端口角色需要设置为预备端口(Alternate Port),则端口状态立即进入Blocking;
如果经过计算,端口角色需要设置为根端口(Root Port)或指定端口(Designated Port),则端口状态在等待Forward Delay之后从Listening状态进入Learning状态,然后继续等待Forward Delay之后,从Learning状态进入Forwarding状态,正常转发数据帧。
端口状态迁移过程
1:端口被选为指定端口(DP)或根端口(RP);
2:端口被选为预备端口(AP);
3:经过Forward Delay间隔。Forward Delay默认为15秒。
端口被禁用之后进入Disable状态。
当一个端口从不转发状态进入转发状态之前需要等待两次Forward Delay间隔,以解决临时环路。
STP中的临时环路
在端口角色以及状态的变化过程中,可能会出现临时环路问题。
本例中,初始状态下SWA为根交换机,所有的交换机端口中,只有SWD的E0/2端口为Alternate Port,处于不转发状态。
假设修改SWC的优先级,使SWC成为新的根交换机,SWD的E0/2接口成为新的根端口,进入转发状态,E0/1接口成为新的指定端口,处于转发状态,SWB的E0/2应当成为新的Alternate Port,进入不转发状态。
如果在SWB的E0/2在从转发状态进入不转发状态之前,SWD的E0/2就从不转发状态进入转发状态,则网络中会出现临时环路。
解决临时环路的方法是:在一个端口从不转发状态进入转发状态之前(例如SWD的E0/2端口),需要等待一个足够长的时间,以使需要进入不转发状态的端口有足够时间完成生成树计算,并进入不转发状态。
用于计算生成树的各种信息和参数被封装在配置BPDU()中在交换机之间发送。
配置BPDU使用标准LLC格式封装在以太网数据帧中。
配置BPDU只在指定端口(DP)上发送。
DMAC:目的MAC地址。发送配置BPDU的数据帧使用保留的组MAC地址01-80-C2-00-00-00,此地址标识所有交换机,但是不能被交换机转发,也即只在本地链路有效。
LLC Header:目的服务访问点(DSAP)和源服务访问点( SSAP)的值都设为二进制01000010。Ctrl字段的值设为3