知识点


STP 是根据IEEE  802.1D标准定义的。



BID64=8字节)

优先级(2字节)+MAC地址(6字节); 16为桥优先级,最小的成为根桥;当优先级相同时,最小mac地址成为根桥。

注意:由于优先级是高16位,所以修改的step4096的倍数。

 

PID16=2字节):优先级+端口号;高4为端口优先级。//在某些情况下,选举指定端口时,相同根开销和发送BDPU的桥 ID一样是,才需要比较PID,最小的PID为指定端口。

注意:由于优先级是高4位,所以修改的step16的倍数。默认是128,1000 0000  

 

端口优先级字段共8位,优先级位+0比特两部分组成。高4位为优先级位,底4位固定为0;

端口优先级的取值范围是0-240   0000 0000   -1111  0000


证明:一些书上写255,是错的。  


STP生成树的一些笔记。_java


STP生成树的生成计算中依据的就是各个端口在发送配置的BPDU中所携带的4个优先级向量:

{根桥ID ,累计根路径开销,发送者的ID ,发送者的端口ID }

 

端口角色决定因素的顺序:路径开销 > 桥ID> 端口ID   

//先比较路径开销,相同的话,再比较桥ID,如再相同的话,再比较端口ID。


报文:

STP生成树的一些笔记。_java_02



根端口是在指定桥上,根桥上是不会有根端口的。

根桥上的端口都是指定端口。

 

五个端口状态:

Disable没启用stp

Blocking只能接收BPDU

Listening不转发数据,不学习mac,但可以接收、发送BPDU配置消息;此时确定端口角色、根桥、根端口、指定端口。

Learning不转发数据,学习mac,接收、处理、发送BPDU配置消息;

Forwarding:转发数据。

 

注意:华为设备默认缺省为MSTP模式,当MSTP切换为STP,运行STP协议的设备端口支持的端口状态仍然保持MSTP端口状态一样(MSTP端口状态与RSTP端口相同)即:forwarding、learning、discarding。

 

 

当网络拓扑稳定之后,该定时器的修改只有在根桥修改后才有效。

 

当配置BPDU从根桥发出时报文中的MessageAge 值为0 。其他桥收到的配置BPDU时,值为从根桥发送到当前桥接收到BDPU的总时间,包括传输时延。但实际实现中,配置BPDU报文每经过一跳,MessageAge 增加1

 

 

 

STP在进行根路径开销计算时,是将所接收BPDU中的根路径开销值加上自己接收端口的链路开销值。

 

验证:

STP生成树的一些笔记。_java_03

网络稳定后,只有根桥可以发BPDU所以在LSW4的端口修改接口cost,无意义,因为它不接收BDPU,

所以在LSW5E0/0/1接口修改cost来验证,改成300.

[LSW5]interfaceEth0/0/1

[LSW5-Ethernet0/0/1]stpco        

[LSW5-Ethernet0/0/1]stpcost        

[LSW5-Ethernet0/0/1]stpcost 300



这样在LSW6E0/0/1接口收到BPDU包就可以看到根路径开销。

STP生成树的一些笔记。_java_04



STP生成树的一些笔记。_java_05

H3C交换机默认采用私有标准定义的链路开销。

 

 

配置BPDU基于二层组播方式发送目的地址为01-80-C2-00-00-00

 

网桥上的每个端口都会保存本端口接收到的最优配置BPDU,老化时间为Max age

Max age 默认是20s

MAC地址老化时间默认是300s

 

0x00为配置BPDU0x80TCN BPDU

 

 

 

STP BPDU  报文格式:

STP生成树的一些笔记。_java_06



STP生成树的一些笔记。_java_07



Max Age运行STP协议的网络中 非根桥设备收到配置BPDU报文后,会对报文中的Massege Age(消息生存时间)和Maxage 进行比较:

如果message age小于等于 max age,则该非根桥设备继续转发配置BPDU报文;

如果message age 大于max age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。

 

当网桥收到一个配置BPDU后,先获取其中的RPC(根端口路径开销),和接收端口的链路开销相加起来,得到此端口的RPC

然后比较各个端口的RPC,最小的RPC的端口将成为该交换机的根端口。

 

TCN在如下两种情况产生

1、端口状态变为forwarding状态,且该设备至少有一个指定端口。

2、指定端口在接收到TCN BPDU后向根桥复制TCNBPDU

 

注意TCN报文很简单,注意前3个字段而已:协议ID, 协议版本,消息类型。

如图:



STP生成树的一些笔记。_java_08


 

但当拓扑变化之后,TCNBPDU的发送不受Hello这个计时器的管理。


 注意:同一交换机上不同端口之间的路径值为 0

 

STP定义TCN BPDU,使得网络拓扑变化时,在50s之内实现收敛。

 

 

根桥收到TCN BPDU报文后,根桥会使用flags字段中的TC(拓扑变化)标志位置1的配置BPDU报文,向对应的下游设备回送,通知下游设备直接删除发送故障的端口的MAC地址表项。

 

根端口对一个设备来说,有且只有一个!

 

通常,非根网桥不会主动发送配置BPDU,但存在一种例外情况。

当网桥在指定端口收到一个劣质的配置BPDU时,会立即回应一个配置BDPU(处于阻塞端口不会对劣质配置BPDU做出回应),这样可以保证新加入的网桥尽快地确认根桥和端口角色,使得网络加快收敛。

网桥可以立即回应配置BPDU,是因为网桥都会保存当前最优的配置BPDU,该配置BPDU的生存期为Max age 。当配置BPDU生存期超时后,网桥会重新认为自身是网络中的根桥,发送:以自身为根的配置BPDU

 

STP网络拓扑变化处理:

默认,网桥学习mac地址的老化时间是:300s

当网络拓扑变更时,变化的网桥从根端口发送TCN BPDU,上游网桥收到后,回复TCA配置BPDU,若没收到,下游会一直发TCN BPDU;

直到根桥收到,会在下一个发送配置BPDU里置位:TCA,和TC(在20+15s时间内发送)

其他交换机收到TC 后,将mac老化时间置为15s

最长50s网络可以恢复。

 

 

交换机的根端口down时,根桥会立即发现根桥丢失了,阻塞端口会立即进入listening状态。

 

 

端口变为forwarding,或从forwarding变为blocking都会触发拓扑变更处理过程。