28-STP,选举过程、端口状态、计时器、拓扑变化


1.STP选举过程: STP有三个选举过程:选根桥、选根端口、选指定端口; 选举完成后,剩下的端口会被阻塞;          1)选根桥 根桥只有唯一的一个;(树形结构的有唯一的根节点)   根桥的选举规则:     BID(桥id)最小的成为根桥     BID是STP数据包BPDU中的一个字段;格式为:优先级.mac     先比较优先级在比较MAC   如图:根桥选举过程     有三个交换机;     刚开始三个交换机都认为自己是根桥(也就是发送的BPDU中的根桥id=自己的bid),然后给其它交换机发BPDU;     如SWA和SWB比较:         SWA收到SWB的BPDU后,得到了SWB的PID,用SWB的pid和自己的pid比较         先比优先级SWA的优先级=4096,小于SWB的优先级32768,于是SWA认为自己比SWB优先,不改变根桥id;      如果SWC收到SWB的BPDU,则是先比优先级 ,都是32760,然后比mac地址,SWB的mac地址较小,因此SWC认为SWB是根桥,改变自己的根桥id;     交换机之间经过一次交互之后,最终选举出了唯一的根桥;             2)选根端口 根端口是非根桥上的端口; 根端口是交换机到达根桥交换机最近的端口,也就是Root Path Cost最小的端口;   根端口选举规则:    1】 先比较端口的根路径开销Root Path Cost(RPC = 端口收到的BPDU中的RPC + 端口所属链路的Path Cost)     2】如果交换机有多个端口的RPC相等,则比较对端BID;             对端BID是指交换机接口收到的BPDU中的BID;             例如下图中SWB的g0/0/2端口连交换机SWC,会收到SWC的BPDU,SWB的对端BID,就是交换机SWC的BID = 32768.00-01-02-04-cc          3】如果对端BID也相等,则比较对端PID(端口id);             对端bid相等的情况:交换机的两个端口都接在同一个对端交换机上;             例如,SWB的g0/0/2端口 收到SWC的g0/0/2端口发过来的BPDU,对端PID就是g0/0/2(SWC的2号端口)      4】如果对端PID也相等则比较本端PID大小;             对端pid相等的情况:从对端交换机拉一根线接集线器,然后交换机的两个接口连在集线器上; 0 (先看RPC在看对端BID,最后比较对端PID和本地PID)   验证根端口选举结果命令:
dis stp brief
可以看到:交换机的g0/0/2端口是根端口,g0/0/1端口是预备端口;   3)选举指定端口 指定端口决定了数据的转发方向; 对交换机而言:根端口接收来自根桥的数据,然后从指定端口转发出去;(也就是说根端口用来接收数据,指定端口用来发送数据) 正常情况下根桥交换机的所有端口都是指定端口(除了自环端口,也就是用一根线连交换机的两个端口); 因为根桥的端口的根路径开销为0,是最小的;   指定端口选举规则:(越小越优先)     1】首先比较根路径开销     2】如果RPC相同则比较BID     3】RPC和BID都一样,比较PID     如下图:     SWA-SWB链路的指定端口选举:         这条链路中有两个端口:SWA的g0/0/1端口、SWB的g0/0/1端口;要从这两个端口中选出指定端口;         首先比较根路径开销,因为SWA是根桥,SWA的g0/0/1端口根路径开销是0,SWB的g0/0/1端口小;         SWA的g0/0/1端口被选为这条链路的指定端口;     SWB-SWC链路的指定端口选举:         这条链路中有两个端口:SWB的g0/0/2端口、SWC的g0/0/2端口;         首先比根路径开销,RPC都是2000;         然后比较BID,BID包括优先级和mac地址,的优先级都是32768,于是比较mac地址,SWB的BID中的mac地址较小;         因此SWB的SWB的g0/0/2端口被选为了这条链路的指定端口;         SWC的g0/0/2端口既不是指定端口,也不是根端口,因此成为预备端口,将被阻塞;         导致的结果是,数据包在转发时将不会从SWB转发到SWC; 0 没有被选为根端口和指定端口的就是预备端口,将会被阻塞; 例如上图中SWC的g0/0/2口就是预备端口;     2.STP的端口状态  
STP端口状态 接收BPDU 转发BPDU 学习MAC 转发数据 过渡状态 稳定状态
Disabled禁用  × × × × ×
Blocking阻塞 × × × ×
Listening监听 × × ×
Learning学习 × ×
Forwarding转发
华为设备STP和RSTP端口状态的显示有所不同:(RSTP将端口状态缩减成三个)   STP端口的状态解释:     1】禁用 disable        未开启STP协议     2】阻塞 blocking      接收BPDU(端口处于阻塞状态时,可以收数据,但不能转发)     3】侦听 listening       接收BPDU 转发BPDU     4】学习 learning       接收BPDU 转发BPDU 学习MAC地址     5】转发 forwarding   接收BPDU 转发BPDU 学习MAC地址 转发用户流量   查看端口状态的命令:
dis stp brief
    3.STP的计时器: STP数据包BPDU中的最后4个字段用做计时器;
计时器 备注
Hello 默认2S,根桥发送BPDU的间隔
Forwarding Delay 默认15S,stp端口listening和learning状态的持续实际(监听到学习需要15S,学习到转发需要15S)
MSG Age 当前的年龄,每经过一个设备就加1(从根桥开始为0往下算),最大为20,超过20则丢弃BPDU.(不建议接太多设备影响交换机性能)
Max Age 20S,保持阻塞的最大时间(每2秒收到一次BPDU,若20秒没收到就不再阻塞,开始侦听、学习、转发)
  一个预备端口从阻塞状态到转发状态的时间:50S 0   STP的端口状态转换: 0   0     4.STP拓扑变化的恢复时间 STP稳定后,根桥会周期性发送BPDU(2s一次); 如果发生一些故障或更改了配置,STP需要时间重新恢复到稳定状态;   1)根桥故障 如图,SWA为根桥,当SWA挂掉后:     SWB和SWC的根端口将收不到根桥的BPDU;     等待20s(Max Age 默认20s)之后,BPDU老化,开始重新选举根桥;     选出新根桥后,交换机端口还要listening和learning状态各15s(Forwarding Delay默认15s)     也就是说至少要等 20s + 15s + 15s = 50s 之后才能恢复到stp稳定状态; 0 根桥故障需要等待50S,网络才会恢复正常(20S老化时间和30S变成转发状态)   2)直连故障  如图,SWB的根端口挂掉时:     SWB需要重新选根端口,也就是备用端口会选举成根端口;     备用端口的状态变化:阻塞-帧听-学习;     侦听和学习状态各保持15s,至少需要30s才恢复稳定状态;     直连链路故障可能需要等待30S(检测到自己的链路与根桥断了,立马将预备端口从阻塞状态变成转发状态需要经过2个forwarding delay)   3)非直连故障 如图,SWB的接口发生故障,对SWC而言:     SWC感觉不到SWB的故障;     SWB没收到根桥SWA的BPDU,于是认为自己是根桥,给SWC发送BPDU;     同时,SWA也给SWC发送BPDU;     SWC经过比较,SWA和SWB 的BID,还是得出根桥为SWA;     SWC的左接口由于收不到根桥SWA的BPDU,将在等20s之后不再阻塞;     从阻塞状态变成转发状态,中间会经过帧听、学习两个阶段,各保持15s;     最终耗时 = 20s + 15s + 15s = 50s; 0 (当非直连设备故障后,收到对端发来的BPDU并不是最优的,接收但不会改变该角色,等到老化时间在会改变角色状态)   5.拓扑变化对MAC地址表的影响 如图:     正常情况下,链路走的是:SWB-SWA-SWC;SWC的g0/0/2端口被阻塞;     此时SWB的mac地址表中记录:mac地址aa对应3口,bb对应1口;     如果SWC的1口挂掉,stp需要恢复到稳定状态,swc的2口作为备用口不再阻塞 ;     对于SWB而言,这是非直连故障,恢复耗时50s;     但mac地址表的老化时间为300s,导致了链路已经变化的情况下,SWB的mac地址表没能及时更新;     导致的结果是主机A发给主机B的数据依然从SWB的1口转发出去给SWA,但此链路不通数据发不过去;     解决办法只有:等待300s让mac表老化,或者清空主机A的arp缓存让SWB的mac地址表更新;     但300s对于业务来说太久了; 0 (MAC地址表老化太长,链路角色变换,但是MAC地址还是原来(要么等待300S或ARP老化))   解决方法: 0 为了让链路中交换机的mac地址表和链路变化保持同步:     1】SWC检测到1口的故障,发送一个TCN包给SWB,告诉上游交换机,这边出现拓扑变化;         BPDU包的第三个字段为BPDU Type,用来表示BPDU类型,这里指定为TCN;     2】上游交换机SWB收到后会给SWC发送一个TCA表示收到了SWC的TCN(SWC会周期性发送TCN,直到收到确认的TCA)       3】SWB同样给上游交换机SWA发送TCN,直到收到SWA的TCA;     4】SWA是根桥,收到下游的TAN后会向下游交换机发送TC;             TC的作用是,通知下游交换机,将其mac地址表的老化时间从300s改为15s;    6.总结 总之STP可以在保证可靠性的同时避免环路,但有个缺点就是慢; 因为链路变化,反应时间至少30s,对于业务来说太慢了; 为了提高STP的速度,产生了RSTP技术;    7.STP的配置  
命令 备注
Stp mode stp 调整STP的模式,默认MSTP
Stp priority 4096 调整BID优先级值,0~61440,选值4096的倍数
Stp root primary / secondary 自动修改优先级,指定主/备根桥
Stp pathcost-standard ( dot1q-1998 | dot1q | legacy ) 配置计算路径开销值得标准
开销标准 Legacy标准:cost=1~200000,华为私有 802.1d标准:cost=1~65535 802.1t标准:cost=1~200000000,默认选则
Stp cost 10 修改STP开销
Stp port priority 144 修改PID优先级,0~240,选值16的倍数
Display stp brief 显示STP配置信息和参数