为防止二层单点故障,采用冗余的交换机,但是,冗余会产生环路,导致广播风暴、mac-address-table不稳定,多帧复制等一系列问题。所以救世主STP来了。
 

  1. 选举root bridge
  2. 选举root port
  3. 选举指定端口
  4. 最后为阻塞端口

 
 


选举 root bridge:
最初所有的交换机都想成为root bridge, 都会发送BPDU宣称自己是root bridge, 有发送BPDU就会收到别的交换机发的BPDU, 交换机根据接收到的BPDU中的bridge-id 与自己的bridge-id比较, 最小的为root bridge 。
bridge-id 组成:优先级+物理地址

 

选举 root port:
此时根桥已经选举完成了,只有root bridge可以发送BPDU,所以交换机根据接收到的BPDU 中的Root Path Cost值,比较值的大小,小的会成为root port(是从交换机本身的各个接收BPDU的端口中选举root port ,与其他交换机没关系 )。
注:Path Cost:根桥发出的COST值是0,在下一交换机的入口处才加上COST值,出口处COST值不变。交换机接收BPDU时开销值增加,发送BPDU时开销值不变;
选举根端口,比较接收的BPDU 。

 

选举 指定端口:
选举完root port后,就还剩下到目前为止还没有名字的port了,选举指定端口,比较端口转发BPDU时的Root Path Cost , 小的为指定端口。(看下面引用的案例最好理解,在不同交换机之间端口产生 指定端口)
注:选举指定端口,比较发送的BPDU

 

阻塞端口:
不是root port , 不是指定端口的就是 阻塞端口了。

 
端口角色:
STP生成树 概述


1、blocking--阻塞状态,不转发数据帧,监听流入的BPDU,不学习MAC地址
2、listening--监听状态,不转发数据帧,不学习MAC地址,能够决定端口角色
3、learning--学习状态,不转数据发帧,能学习MAC地址
4、forwarding--转发状态,能够进行正常的帧转发
5、disable--该端口没有运行STP

当拓扑发生变化时,端口从阻塞状态过渡到正常转发状态的时间是30-50S
①   如果是直连接口down掉,端口状态过渡最大需要30S
【直连端口挂了,可以感知到出现问题了,所以不用20s的等待来判断是否出问题了】
②   如果是非直连故障,最大需要50S

<BPDU Timer>
三个计时器:
•Message Age:最大存活时间(20S)
 Hello Time:根桥连续发送BPDU的间隔(2S)
 Forward Time:SW在监听和学习状态所停留的时间(15S)

参考链接:http://www.360doc.com/content/13/0330/14/8797027_274883365.shtml

 
BPUD的封装
STP生成树 概述
STP生成树 概述
 
 
选举实例:
STP生成树 概述

①选举根桥(Root Bridge)。优先级一样,比较MAC地址,SW1为根桥。
②选举每台非根桥交换机上的根端口(Root Port),比较接收到的BPDU(BPDU由根桥发出,即SW1发出):
SW2:从f0端口收到的BPDU代价为19;从f1端口收到的BPDU代价为19+4+19=42;因此f0端口为根端口。
SW3:从g0端口收到的BPDU代价为19+19=38;从g1端口收到的BPDU代价为19+4=23;因此g1端口为根端口。
SW4:从g0端口收到的BPDU代价为19;从g1端口收到的BPDU代价为19+19+4=42;因此g0端口为根端口。
③选举每个网段上的指定端口(Designated Port),比较发出的BPDU:
SW1-SW2网段:从SW1/f0口发出的BPDU代价为0;从SW2/f0口发出的BPDU代价为19+4+19=42;因此SW1/f0口为指定端口。
SW1-SW4网段:从SW1/f1口发出的BPDU代价为0;从SW4/g0口发出的BPDU代价为19+19+4=42;因此SW1/f1口为指定端口。
SW3-SW4网段:从SW3/g1口发出的BPDU代价为19+19=38;从SW4/g1口发出的BPDU代价为19;因此SW4/g1口为指定端口。
SW2-SW3网段:从SW2/f1口发出的BPDU代价为19;从SW3/g0口发出的BPDU代价为19+4=23;因此SW2/f1口为指定端口。
④非根端口,非指定端口即为阻塞端口(Block Port),即SW3/g0口为阻塞端口。

参考链接:http://www.slyar.com/blog/stp-port-election.html