session 1 stp-overview
生成树协议stp,快速生成树协议rstp,多实例生成树协议mstp,目前华为交换机默认使用多实例生成树mstp。
一、STP中的选举步骤和端口状态
选举步骤:
1、选举ROOT-SW根网桥
2、选举根端口RP(root port)
3、选举指定端口DP(Designate port)
4、其余的端口被Block阻塞
stp选举时候端口状态(15s 到listening,选举就结束了):
三、STP选举过程
A、确定Root Bridge -通过BID的比较判决。
在同一个二层网络中需要选举,即一个广播域内要选举,并且一个网络中只能选举一台根交换机(ROOT)。Birdge-ID中优先级数字小的为根交换机,优先级范围为0-65535,如果优先级相同,则MAC地址小的为根交换机。
B、所有非根桥交换机选举RP(Root Port) - 每个非根桥有且只有一个RP(主要作用是负责接收并且监听根桥的BPDU)
1、比较每个端口到达Root的Cost,具有最小Cost的端口成为RP端口的,开销是指本端口收到一个对端网桥的BPDU以后,累加本端口的COST之后的总路径开销。cost相同比较Sender BID
2、比较Send BID,收到BPDU中Send BID最小的端口成为RP,负责转发根网桥BPDU的交换机每次转发都将其中BID替换为自己的,先优先级后MAC 越小越好,Sender BID相同的话比较port ID
3、比较Port ID,收到BPDU中,Port ID最小的端口成为RP。Port ID由2个字节组成.包含一个数字有序对。第一个数字作为Port priority,第二个数字作为Port Number。排列顺序不一定和物理端口顺序一样,但是具体数字丌一定一样。
C、所有链路上确定DP(Design Port) - 转发BPDU的端口。
在每个冲突域需要选举,简单的理解为为每条连接交换机的物理线路的两个端口中,有一个要被选为指定端口,每个网段选举指定端口后,就能保证每个网段都都链路能够到达根交换机。根端口的对端一定是指定端口(主要作用是用来转发来自跟桥的BPDU)
1、比较同一段链路上2个端口发送BPDU到根的cost,较小的一个端口成为DP,如果相同再比较Sender BID
2、比较同一段链路上的2个端口发送BPDU的Sender BID(发送SW一般是这个端口所属的SW),较小的一个端口成为DP
D、网络中剩余的端口不全就是Block,只接受和监听BPDU,但是不发送接受数据。
在这个简单的拓扑中,三台交换机形成一个闭环,交换机之间使用trunk链路,并允许所有vlan通过(mstp中如果不允许某个vlan通过那么这个vlan的mstp-bpdu报文将无法收发也就无法形成实例树),然后查看默认的stp模式。
1、分别在三台交换机上查看stp的默认模式,以LSW1为例:
-------[CIST Global Info][Mode MSTP]-------
CIST Bridge :32768.4c1f-ccdb-6e3b 本交换机的root-id
Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 mstp中各种报文的默认时间
Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
CIST Root/ERPC :32768.4c1f-ccdb-6e3b / 0 根桥的root-id,就是sw1自己
CIST RegRoot/IRPC :32768.4c1f-ccdb-6e3b / 0
CIST RootPortId :0.0
BPDU-Protection :Disabled
TC or TCN received :26
TC count per hello :0
STP Converge Mode :Normal
Time since last TC :0 days 16h:20m:53s
Number of TC :23
Last TC occurred :GigabitEthernet0/0/2
2、在三台交换机中分别配置vlan2、3,并使用mstp观察各个交换机的角色和端口状态
[sw1]display stp brief 默认情况下mstp是实例0,并只有一个vlan1在实例0中
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
[sw1]
[sw2]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 ALTE DISCARDING NONE
[sw2]
[sw3]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
[sw3]
在以上的显示中看到sw1是instance 0的根桥,sw2上的g0/0/2端口被阻塞,参考指定端口的选举原则,sw2的root-id大于sw3,所以端口被逻辑阻塞。
3、在三台交换机中创建实例mstp实例1,并将vlan2、3放入实例1中,三台交换机配置一样:
stp region-configuration 进入mstp配置模式
region-name mstp mstp域名,同一个域内的交换机域名必须相同(多个mstp域相连,每个域被看做一台sw)
revision-level 1 mstp的版本等级,一个域内必须相同,用于bpdu报文的hash计算
instance 1 vlan 2 to 3 创建实例1,并将vlan2、3放入实例1中
active region-configuration 激活以上配置,否则配置不生效也看不到
#
MSTID Port Role STP State Protection
1 GigabitEthernet0/0/1 ROOT FORWARDING NONE
1 GigabitEthernet0/0/2 DESI FORWARDING NONE
4、将包含vlan1的instance1的根桥配置为sw2,与包含vlan2、3的instance0形成流量在逻辑上的负载分担,和备份。
在sw2上配置根桥优先级让sw2成为instance 1的根桥
[sw2]stp instance 1 priority 4096 在instance1中将sw2的优先级改为4096(默认为32768)使它成为instance1的根桥
再查看mstp中instance0和instance1的树状态对比:
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 DESI FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
1 GigabitEthernet0/0/1 ROOT FORWARDING NONE
1 GigabitEthernet0/0/2 DESI FORWARDING NONE
[sw2]display stp brief
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 ALTE DISCARDING NONE
1 GigabitEthernet0/0/1 DESI FORWARDING NONE
1 GigabitEthernet0/0/2 DESI FORWARDING NONE
[sw2]
MSTID Port Role STP State Protection
0 GigabitEthernet0/0/1 ROOT FORWARDING NONE
0 GigabitEthernet0/0/2 DESI FORWARDING NONE
1 GigabitEthernet0/0/1 ALTE DISCARDING NONE
1 GigabitEthernet0/0/2 ROOT FORWARDING NONE
在交换机中查看instance 1 的根桥
-------[MSTI 1 Global Info]-------
MSTI Bridge ID :0.4c1f-ccfa-7cd1
MSTI RegRoot/IRPC :0.4c1f-ccfa-7cd1 / 0 根桥root-id
MSTI RootPortId :0.0
MSTI Root Type :Primary root 说明是根桥
Master Bridge :32768.4c1f-ccdb-6e3b sw1的root-id,这个是全局instance0的根桥root-id
Cost to Master :20000
TC received :7
TC count per hello :0
Time since last TC :0 days 17h:16m:56s
Number of TC :10
Last TC occurred :GigabitEthernet0/0/2
----[Port1(GigabitEthernet0/0/1)][FORWARDING]----
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=20000
Designated Bridge/Port :0.4c1f-ccfa-7cd1 / 128.1
Port Times :RemHops 20
TC or TCN send :3
TC or TCN received :3
----[Port2(GigabitEthernet0/0/2)][FORWARDING]----
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=20000
Designated Bridge/Port :0.4c1f-ccfa-7cd1 / 128.2
Port Times :RemHops 20
TC or TCN send :3
TC or TCN received :4
[sw2]
做完以上配置后,形成的逻辑拓扑如图:
根桥上的所有端口都是指定端口,一条链路上收到根桥报文最近的端口为根端口,发送报文到根桥最近的端口是指定端口
在mstp中的形成2个实例树,对应instance0和1,这里vlan1的流量就对应instance0的路径,vlan2、3的流量对应instance1的路径。指定端口的选举时根据发出bpdb到达根桥的cost最短计算,那么如有想要在instance1中让sw1的g0/0/2端口阻塞而sw3的g0/0/1端口成为指定端口,就需要修改sw3的g0/0/1端口到达sw2的cost<sw1的g0/0/2端口到达sw2的cost值
在完整的拓扑中,sw1的g0/0/2到达root的cost:sw1g0/0/2--sw3g0/0/1的cost+sw3g0/0/2--sw2g0/0/2的cost
sw3的g0/0/1到达root的cost:sw3g0/0/1--sw3g0/0/2的cost+sw1g0/0/1--sw2g0/0/1的cost
所以要调整指定端口只需要修改其中一个cost的值就可以,默认情况下是sw3的g0/0/1接口被阻塞,sw1的g0/0/2接口成为了指定端口,现在要让sw1的g0/0/2端口被阻塞就需要修改它到达rootsw2的cost,也就是修改sw1g0/0/2--sw3g0/0/1的cost+sw3g0/0/2--sw2g0/0/2的cost,其中可以在任意sw1进过的接口修改cost使总cost变小即可,默认为1,也就是修改sw3的g0/0/0和g0/0/2都可以,将cost修改为10,再次查看instance 1 中树的端口状态:
[sw3-GigabitEthernet0/0/1]display this
#
interface GigabitEthernet0/0/1
port link-type trunk
port trunk allow-pass vlan 2 to 4094
stp instance 1 cost 10 修改cost在instance1中的值为10
#
return
[sw3-GigabitEthernet0/0/1]display stp instance 1 brief sw3的g0/0/1变为指定端口
MSTID Port Role STP State Protection
1 GigabitEthernet0/0/1 DESI FORWARDING NONE
1 GigabitEthernet0/0/2 ROOT FORWARDING NONE
[sw1]display stp instance 1 brief
MSTID Port Role STP State Protection sw1的g0/0/2变为的阻塞端口
1 GigabitEthernet0/0/1 ROOT FORWARDING NONE
1 GigabitEthernet0/0/2 ALTE DISCARDING NONE
[sw1]
注意:端口的cost计算时,本端口自身的cost不算,从下一跳方向的端口开始计算到跟root的cost之和