[toc]
一、背景介绍
在网络架构设计中,防环是一个很重要的因素,环路的潜在隐患不再赘述,所以无论是三层还是二层都非常注意防环的机制,在三层中无论是ttl值还是ospf这种倒状树结构其目的都是为了避免环路,在二层中防环的机制则为生成树协议(spanning tree protocol),以及优化后的rstp和mstp,本章重点介绍stp生成树协议。
二、STP协议的端口状态
stp协议是通过计算后在实际产生环路的物理链路上逻辑的阻塞一个端口,只有当链路发生变化时被阻塞的端口才有可能从新参与计算并抓发数据,端口的5种状态为:
上述是思科定义的5种状态,从blocking到forwarding每种状态都需要经过15s的时间共计45s,华为的stp在此基础上进行了优化,省去了listening的状态,所以华为的stp协议是4种端口状态,从blocking到forwarding需要经过30s的时间。
三、生成树的计算方法
既然需要选取出一个阻塞端口,自然会通过计算得出,每个广播域中都会选举出一个根桥,stp计算的方法大体分为以下步骤:
- 选取根桥。初始阶段每一个交换机都默认自己为根桥,对外发送bpdu信息,通过bpdu选取出一个根桥,根桥选举出来后,同一广播域内的route id都为根桥的route id。
- 广播域内其他非根交换机上根据每个端口到达根桥的开销选取根端口。
- 每条链路根据端口到根桥的开销选取指定端口,最后非根端口根指定端口的,就是阻塞端口。
补充说明:bpdu信息是从指定端口发出,从根端口接收,所以根桥上所有的端口都是指定端口,而非根桥上接收bpdu消息的端口为根端口,所以每一个链路中根端口对应的一定是指定端口。
四、BPDU优先级选取原则
无论是根桥还是根端口、指定端口都是根据bpdu信息来计算出优先级,而优先级按照先后顺序以下面4个为判断依据:
- Rourer ID
- Path cost
- sender BID(bridge ID),由8字节组成,分为2字节的优先级和6字节的mac地址,先比较优先级
- 发送方物理接口,由接口优先级与接口号组成,先比较接口优先级
上述的判断依据,数值越小优先级越高。以下通过几个示例,进行说明。
示例1
(1)选取根桥: 首先根据优先级,判断SW1为根桥,其上的所有端口都为指定端口
(2)选取根端口: 根据path cost判断出sw2的1端口,sw3的2端口sw4的2端口为根端口。其中sw4的根端口判定步骤为:
<1>router id。此时都为sw1的id,继续比较下一项
<2>path cost。sw4的2端口到达根桥需要经过sw2的2端口与sw1的1端口,此时cost值为100+19=119;另一方向,sw4的1端口到达根桥需要经过sw3的1端口与sw1的2端口,此时cost值也为19+100=119,继续比较下一项
<3>Sender BID。sw2与sw3优先级都是8192,但是sw2的mac地址比sw3的小,所以sw4的2端口为根端口
(3)选取指定端口:
此时选取结果如下图,还需要sw3与sw4之间的链路上确定出一个指定端口
选取指定端口也是根据bpdu信息为依据,步骤为:
<1>route id。同一广播域内route id都为sw1,继续比较下一项
<2>path cost。sw3的1端口到根桥开销需要经过sw1的2端口,此时cost值为100;sw4的1端口到根桥开销需要经过sw2的2端口与sw1的1端口,此时cost值为100+19=119,所以sw3的1端口为指定端口
(4)确定阻塞端口: 最后,sw4 的1端口既非根端口也非指定端口,只能成为阻塞端口
五、RSTP介绍
RSTP与STP大致相同,传统的生成树协议端口分为3个角色:rp、dp、ap,和4个状态:丢弃、阻塞、学习、转发。当网络发生变化时,身为ap的端口角色会从新参与计算,计算后以rp或dp的角色再经过学习后转发数据,这个过程就需要花费30s的时间,为了加快生成树的收敛时间,从而诞生了快速生成树协议rstp。
rstp是将原有的3个角色变成了4个角色,引入了bp的角色,而端口的4个状态进一步精简为3个:
此时的ap是为rp做备份,bp是为dp做备份,所以当ap发现无法在接收到rp的bpdu消息时直接将角色变为rp,不再需要计算,同理bp也是如此,加速了网络的收敛。
六、MSTP介绍
RSTP尽管加快了收敛速度,但在负载均衡上仍存在着缺陷,生产环境中也很少使用,因为传统的生成树在设置根桥后会成为所有vlan的根,这样在一个有100个vlan的大型网络架构下,所有的流量都只会走一条链路,另一条链路由于端口被阻塞一直处于待机状态,如下图所示:
上图中C交换机上的A端口在所有vlan下都被阻塞,所以所有流量都只会从左边经过,而右边则一直处于空闲状态,这样右边的链路其实是一种浪费,所以衍生出了MSTP,他是可以创建多个生成树实例,同一交换机在不同实例中可以有不同的优先级,每个实例包含一个或多个vlan,这样上图中的数据流向就可以变成下图的样子
vlan2和vlan3属于不同的实例,这样他们拥有不同的阻塞端口,流量也负载均衡。思科的pstp是为每一个vlan创建一个根桥,而华为的MSTP是创建多个实例,每个实例可以包含一个或多个vlan,相同的实例拥有相同的根桥,华为交换机默认的STP就是MSTP。
七、实验
设置2个不同vlan,将每个vlan加入不同的实例,进行负载均衡,拓扑如下图所示:
1.基础配置
SW3上配置如下:
[SW3]vlan batch 1 12
[SW3]port-group group-member Ethernet 0/0/11 Ethernet 0/0/12
[SW3-port-group]port link-type access
[SW3-port-group]stp edged-port enable
[SW3-port-group]q
[SW3]interface e0/0/11
[SW3-Ethernet0/0/11]port default vlan 11
[SW3-Ethernet0/0/11]int e0/0/12
[SW3-Ethernet0/0/12]port default vlan 12
[SW3]port-group group-member Ethernet 0/0/2 Ethernet 0/0/3
[SW3-port-group]port link-type trunk
[SW3-port-group]port trunk allow-pass vlan 11 12
[SW3-port-group]undo port trunk allow-pass vlan 1
SW1上配置如下:
[SW1]vlan batch 11 12
[SW1]port-group group-member e0/0/1 e0/0/2
[SW1-port-group]port link-type trunk
[SW1-port-group]port trunk allow-pass vlan 11 12
[SW1-port-group]undo port trunk allow-pass vlan 1
[SW1-port-group]q
[SW1]interface Vlanif 11
[SW1-Vlanif11]ip add 192.168.11.254 24
SW2上配置如下:
[SW1]vlan batch 11 12
[SW2]port-group group-member e0/0/1 e0/0/3
[SW2-port-group]port link-type trunk
[SW2-port-group]port trunk allow-pass vlan 11 12
[SW2-port-group]undo port trunk allow-pass vlan 1
[SW2-port-group]q
[SW2]interface Vlanif 12
[SW2-Vlanif12]ip add 192.168.12.254 24
此时PC1和PC2都可以ping通自己的网关,由于交换机的自动防环机制,所以在SW2上能看到,此时e0/0/3端口是阻塞状态
此时PC2发往SW2的数据是先经过SW3再经过SW1最终到达SW2,通过在SW3的e0/0/2口抓包,可以看到该现象
2.创建多实例生成树
将当前配置改为使用MSTP,使用MSTP需要同一广播域内所有交换机同时满足以下条件:
- MSTP需要在广播域内所有交换机上进行配置,且所有交换机拥有相同的区域名称
[SW1]stp region-configuration [SW1-mst-region]region-name hw
- 所有使用MSTP交换机的修订版本号需一致
[SW1-mst-region]revision-level 1
- 所有交换机上相同实例中关联的vlan信息要一致
[SW1-mst-region]instance 1 vlan 11 [SW1-mst-region]instance 2 vlan 12
- 激活MSTP
[SW1-mst-region]active region-configuration [SW1-mst-region]q
- 此时再为每一个实例设置根桥
[SW1]stp instance 1 root primary [SW2]stp instance 2 priority 0 #与SW1上配置命令作用相同
这时,能看到vlan11和vlan12已经属于不同的instance
而对于instance1来说SW2上的e0/0/3端口是组测端口,而instance2的组测端口为SW3上的e0/0/2
此时的流量则变为如下图所示:
红色表示instance1,流量从左边走,橙色代表instance2,流量从右边走,此时再到SW3的e0/0/2口抓包则看不到ICMP报文,验证了instance2的阻塞端口为SW3上的e0/0/2。
原文地址:https://blog.51cto.com/arkling/2450512