为防止二层单点故障,采用冗余的交换机,可是,冗余会产生环路,致使广播风暴、mac-address-table不稳定,多帧复制等一系列问题。因此救世主STP来了。
html
选举 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 , 不是指定端口的就是 阻塞端口了。
端口角色:ide
一、blocking--阻塞状态,不转发数据帧,监听流入的BPDU,不学习MAC地址 二、listening--监听状态,不转发数据帧,不学习MAC地址,可以决定端口角色 三、learning--学习状态,不转数据发帧,能学习MAC地址 四、forwarding--转发状态,可以进行正常的帧转发 五、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的封装
选举实例:code
①选举根桥(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口为阻塞端口。