BPDU:bridge protocol data unit,网桥协议数据单元。
网络中所有设备使能STP后,每一台设备都以为自己是根桥。此时,每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于listening状态,所有设备通过交换配置BPDU后,进行选举工作,选出根桥、根端口和指定端口。
根桥BID,累计根路径开销、发送者BID,发送端口PID构成有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送。
由于每个桥都以为自己是根桥,所以在每个端口所发出的BPDU中,根桥字段都是用各自的BID,root path cost字段是累计的到达根桥的开销,发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。
2、选择根桥网络初始化时,网络中所有的STP设备都自以为根桥,根桥ID为自身的BID,通过交换BPDU,设备之间比较BID,BID最小的设备被公认为根桥。至此,根桥确定。
3、选择根端口和指定端口3.1 非根桥将接收最优BPDU的那个端口定为根端口。最优配置消息的选择过程1 每个端口将收到的配置消息与自己的配置消息进行比较- 如果收到的配置消息优先级比较低,则将其直接丢弃,对自己的配置消息不进行任何处理;
- 如果收到的配置消息优先级较高,则用该配置消息的内容将自己配置消息的内容替换掉。
- 如果收到的配置消息优先级与自己相同, 则将其直接丢弃。2 设备将所有端口的配置消息进行比较,选出最优的配置消息3.2 设备根据根端口的配置消息和根端口的路劲开销,为每个端口计算一个指定端口配置消息:
- RBID字段替换为RP的收到的BPDU中的RBID字段(BPDU中原来的RBID字段为自身BID,由于从RP收到的BPDU中得到了真正的RBID,将此字段进行替换)
- 根路径开销字段替换为RP收到的根路径开销加上RP对应的路径开销。(原来为0,即根桥所有端口到根桥的路径开销为0)
- 发送者BID替换为自身设备的ID
- 发送端口PID替换为自身端口ID3.3 设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:
- 如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
- 如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞,该端口将不再转发数据,且只接收不发送配置消息。STP算法实现过程
1 各设备的初始状态
A,B,C的优先级分别为0,1,2,A与B之间,A与C之间,B与C之间链路的路径开销分别为5,10,4.注意:四元组:{根桥ID,累计根路径开销,发送者BID,发送端口PID}
A
- Port A1收到Port B1的配置消息{1,0,1,Port B1},发现自己的配置消息{0,0,0,Port A1}更优,于是将其丢弃。
- Port A2收到Port C1的配置消息{2,0,2,Port C1},发现自己的配置消息{0,0,0,Port A2}更优,于是将其丢弃。
- DeviceA发现自己各端口的配置消息中的根桥和指定桥都是自己,于是认为自己就是根桥,各端口的配置消息都不作任何修改,此后便周期性地向外发送配置消息。比较结果
- Port A1:{0,0,0,Port A1}
- Port A2:{0,0,0,Port A2}B比较过程一
- pb1收到pa1的发来的配置消息{0,0,0,pa1},发现比自己的配置消息{1,0,1,pb1}更优,于是更新自己的配置消息。
- pb2收到pc2发来的配置消息{2,0,2,pc2},发现自己的配置消息{1,0,1,pb2}更优,于是将其丢弃。比较结果二
- PB1:{0,0,0,PA1}
- PB2:{1,0,1,PB2}比较过程二
- B比较自己各端口的配置消息,发现PB1的配置消息最优,于是将其指定为根端口,,其配置消息不变。
- B根据根端口PB1的配置消息和路径开销,为PB2计算出指定端口的配置消息{0,5,1,PB2},然后与BP2本身的配置消息进行比较,发现计算出的配置消息更优,于是PB2被定为指定端口,其配置消息也被替换为计算出的配置消息,并周期性向外发送。计算结果二
- 根端口PB1:{0,0,0,PA1}
- 指定端口PB2:{0,5,1,PB2}C计算过程一
- PC1收到PA2的配置消息{0,0,0,PA2},发现其比自己的配置消息{2,0,2,PC1}更优,于是更新自己的配置消息。
- PC2收到PB2更新前的配置消息{1,0,1,PB2},发现其比自己的配置消息{2,0,2,PC2}更优,于是更新自己的配置消息。计算结果一
- PC1:{0,0,0,PA2}
- PC2:{1,0,1,PB2}计算过程二
- C比较自己各端口的配置消息,发现PC1的配置消息最优,于是该端口被确定为根端口,其配置消息不变。
- C根据根端口的配置消息和路径开销,为PC2计算出指定端口的配置消息{0,10,2,PC2},然后与PC2本身的配置消息{1,0,1,PB2}进行比较,发现计算出的配置消息更优,于是PC2被确定为指定端口,其配置消息更新为计算出的配置消息计算结果二
- PC1:{0,0,0,PA2}
- PC2:{0,5,1,PB2}计算过程三
- C比较PC1的根路径开销10与PC2的根路劲开销9,发现后者更小,于是PC2的配置消息更优,于是PC2被确定为根端口,其配置消息不变。
- C根据根端口的配置消息和路径开销,为PC1计算出指定端口的配置消息{0,9,2,PC1},然后与PC1本身的配置消息{0,0,0,PA2}进行比较,发现本身的配置消息更优,,于是PC1被阻塞,其配置消息不变。从此,,PC1不再转发数据,直到有触发STP计算的新情况出现,如B与C之间的链路down掉。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备收到该配置BPDU后,如果优先级比自己的配置BPDU高,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息,否则会丢弃该配置BPDU。
STP 拓扑变化- T点接口发生变更后,下游设备会不间端地向上游设备发送TCN BPDU报文。
- 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文,其他端口也有可能收到TCN BPDU报文,但不会处理。
- 上游设备会将配置BPDU报文中的flags字段中的TCA位置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
- 上游设备复制一份TCN BPDU报文,向根桥方向发送。
- 重复步骤1,2,3,4.直到根桥收到TCN BPDU报文。
- 根桥把配置BPDU报文中flags的TC位和TCA位同时置1 后发送,TC位置1 是为了通知下游设备直接删除桥MAC地址表项,TCA位置1 是为了通知下游设备停止发送TCN BPDU报文。
说明:- TCN BPDU报文主要用来向上游设备乃至根桥通知拓扑变化。
- 置位的TCA标记的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文。
- 置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥MAC地址表项,从而达到快速收敛的目的。
- 1、选择根桥
- 2、非根桥上选择根端口
- 3、冲突域上选择指定端口
- 4、既不是RP也不是DP的就是AP在稳定STP网络中端口状态只有2种1、discasrding(AP)2、forwarding(RP.DP)最优BPDU的选择
- 1 root id 最小
- 2 rpc积累和
- 3 bid最小
- 4 pid最小选举的算法
- root id 最小是根桥
- 非根桥bpdu最好的端口是RP
- 根据RP计算DP的BPDU参数,如果比指定端口的本身的BPDU参数好,则该端口为DP端口,如果没有比指定端口本身的BPDU参数好,则该端口为AP。