生成树协议
简述
产生条件:既要提供网络的冗余性以及健壮性还要避免多帧复制,广播风暴,MAC地址紊乱。
✓MAC地址紊乱
如图,根据交换机的工作原理,初始状态没有MAC地址表,F5收到PC1发出的数据帧后,将PC1的MAC地址与F5绑定,然后查找MAC地址,如果没有,那么将泛洪,当SW2从F2收到后又从F3传回,F4接口收到后,将PC1的MAC 地址与F4接口绑定,造成MAC地址紊乱,从而影响数据转发。
✓多帧复制
服务器发出的数据帧会从两个路径发送到路由器上,使得路由器收到两份相同的数据帧。
广播风暴
在网络拓扑中,如果交换机之间存在多条冗余路径,可能产生环路,产生环路时,有些交换机会看到同一台设备的MAC地址同时出现在两侧。
STP(生成树协议)定义了一个在扩展网络中可以延伸到所有网络上的树形结构,逻辑上断开环路,防止广播风暴的产生,当线路故障时,阻塞端口被激活,恢复通信,起到备份线路的作用。
802.1D 标准生成树协议(STP)。
802.1W 快速生成树协议(RSTP),增强的生成树协议,能使网络快速的收敛稳定下来。
RSTP需要手工打开,并且网络中所有的交换机都应运行RSTP,尽管RSTP和STP可以相互兼容,但是RSTP将会失去它的快速收敛的功能。
802.1s 多生成树协议区域(用MSTP)。
CISCO私有的PVST+和PVRST+。
通过将特定的端口设定为Blocking State,来实现无环的拓扑。
STP/RSTP是基于交换机的,PVST/PVST+是基于VLAN的,MST 是基于实例的。会聚
当网桥或交换机上的所有端口都转换到了转发或阻塞模式时,就会形成汇聚。会聚完成以前,无法转发数据。
从阻塞到转发状态的典型的生成树拓扑会聚时间为50秒。但是当在一台丢失根端口的交换机上只需要30s,开启Backbone fast特性以后,可以节省20s。
传统的生成树协议,如果要由Block状态转换到Forwarding状态需要50s,即20s(Blocking→Listening)+15s(Listening→Learning)+15s(Learning→Forwarding)。这对于一个大型网络来说,时间太长了。
所以,Cisco针对PVST+发明了三个对生成树增强的协议:PortFast,UplinkFast,BackboneFast。
BPDU报文结构
STP端口状态
✓Blocking(封闭)→接受BPDU包,如果20s内没收到BPDU报文,就进入listen 状态。
✓Listening(侦听15s,如果不符合标准,则继续为Blocking状态)→不转发帧,不学习MAC地址。
让整个交换网络的交换机学习到BPDU包。该过程也负责选举RP,DP。
✓Learing(学习;delay--15s是为了有时间更新MAC地址表,减小泛洪)→学习MAC地址。
✓Forwarding(侦听转发)RP,DP端口状态。
如果直接从Blocking状态转换到Forwarding状态的话,
根本原因:交换机BPDU报文没有收集完全,无法选举。
直接原因:交换机的MAC地址表不完全,使得交换机收到数据帧就要泛洪。STP/ PVST+
STP工作过程
1、每个广播域选择一个根桥
2、每个非根桥上选择一个根端口(非根桥上与根桥连接的所有方向上进行选举)
3、每个冲突域选择一个指定端口
4、最终(如果有环路存在)选择一个非指定端口
选举规则
运行生成树算法(STA)的交换机初始时都认为自己是老大,将Root ID填写上Vlan 对应的MAC地址,定期发送BPDU;选举完成后,只有根桥可以发送BPDU,其他网桥收到后,通过修改相应的字段,然后再发送出去。
选取唯一一个根网桥
(只要在一个交换网络中不管有几个环路);
选取唯一一个根网桥:BPDU中包含Bridge ID;Bridge ID(8B)=优先级(2B)+交换机MAC地址(6B); 前两个字节桥优先级为1-65535(默认的为32768),后六个字节为交换机Mac地址。.cisco交换机默认优先级是32768,在你没有对桥优先级进行设置的情况下所有交换机是一个优先级,所以这时候就要有另一个仲裁机制,比较Vlan对应的MAC地址大小(依据背板MAC生成),同优先级一样,MAC地址较小的一方成为根桥。优先级可以手工修改。
根网桥缺省每2秒发送一次BPDU;
在每个非根网桥选取唯一一个根端口;
根桥上没有根端口;
●到达根桥的路径上所有COST值累加和最小的端口成为根端口;
而指定端口选举时不用添加自身的根路径成本。因为根端口与指定端口的角色功能不同,所以选举时会有是否加上自身的根路径成本的区别。
根端口用来接收BPDU,并且根端口选举发生在同一个交换机上,所以BPDU 要进入交换机。
而指定端口是用来发送BPDU的,选举发生在一条链路上即一个网段内,他们是以链路为单位一致对外的,所以不需要加上自身的根路径成本!!!!
●当COST值相同时,比较BPDU发送者的Bridge ID。
当为指定端口选举时,比较的是指定端口所在网桥的网桥ID。
●发送者BPDU的Bridge ID相同时,比较Port ID(端口优先级默认为128+端口号)。端口号并不是F1或F2之类的,他只是外在编号,生成树利用内在编号,可以通过
Show spanning-tree interface f0/2 detail 查看。思科并没有明确给出内外在端口号转换的算法。
在每网段选取唯一一个指定端口。
●到达根桥的路径上所有COST值累加和最小的端口成为根端口;
●当COST值相同时,比较被选举端口所在的Bridge ID。
●发送者BPDU的Bridge ID相同时,比较发送者的Port ID(端口优先级+端口号)
如图中所示,以上三个接口均属于一个段内,所以三个接口中要选举一个指定端口。
通常只有根网桥端口成为指定端口;被选定为根端口和指定端口的端口进行Forwarding;落选端口进入阻塞状态,只侦听BPDU;
剩余端口将被阻塞。
阻塞端口在指定的时间间隔(缺省20秒)收不到BPDU时,会重新运行生
成树算法进行选举;当进入生成树算法时才会有端口状态。
缺点:在运行生成树算法的过程中,网络处于阻断状态,所有端口都不进行数据转发,计算过程缺省为50秒。