STP协议:生成树协议(Spanning-tree-protocol),将环形网络修剪成为一个无环的树型网络,避免报文在环形网络中的增生和无限循环。
工作在OSI模型中的二层(数据链路层),例如:二层交换机
生成树协议的目的是:①建立一个冗余的交换机网络;②提高容错性;③备份。
无STP配置的问题:
在一个复杂的网络环境中,难免会出现环路。由于冗余备份的需要,网络设计者都倾向于在设备之间部署多条物理链路,其中一条作主用链路,其他链路作备份,这样都有可能会导致环路产生。
环路会导致广播风暴、多帧复制、MAC地址表震荡等问题。
广播风暴:广播信息在网络中不停地转发,直至导致交换机出现超负荷运转,最终耗尽所有宽带资源、阻塞全网通信。
多帧复制:单播的数据帧被多次复制传送到目的站点
MAC地址表震荡:由于相同帧的拷贝在交换机的不同端口上被接收而引起的MAC地址表不稳定。(MAC地址表:它有一个300秒的维持时间 )
生成树协议的由来:由于网络中会存在单点故障而导致网络无法访问,系统瘫痪,因此在网络中提供冗余链路即引入备份链路来解决单点故障问题。
优点是:减少单点故障,增加网络可靠性;
缺点是:产生交换环路,会导致广播风暴、多帧复制、MAC地址表抖动。
因此生成树协议是为了提供冗余链路,解决环路问题(作用)。
生成树协议的原理:使冗余端口置于“阻塞状态”;网络中的计算机在通信时,只有一条链路生效;当原本的链路出现故障时,将处于“阻塞状态”的端口重新打开,从而确保网络连接稳定可靠。
生成树的目的(作用):通过算法算出来阻塞哪个接口进而消除环路。而且当正常的链路断掉之后,阻塞的接口会自动的打开,让终端之间可以正常访问,达到备份的目的。
- 根桥
树形网络结构必须有树根,于是STP/RSTP引入了根桥(Root Bridge)概念。
对于一个STP/RSTP网络,根桥有且只有一个,它是整个网络的逻辑中心,但不一定是物理中心。但是根据网络拓扑的变化,根桥可能改变。- BID(Bridge ID):桥ID
IEEE 802.1d标准中规定BID是由2字节的桥优先级(Bridge Priority)与桥MAC地址构成,即BID(8字节) = 桥优先级(2字节) + 桥MAC(6字节)。
在STP网络中,桥ID最小的设备会被选举为根桥。在华为公司的设备上,桥优先级支持手工配置。- PID(Port ID):端口ID
PID由两部分构成的,即PID(16位) = 端口优先级(4位) + 端口号(12位)。
PID只在某些情况下对选择指定端口有作用,即在选择指定端口时,两个端口的根路径开销和发送交换设备BID都相同的情况下,比较端口的PID,PID小者为指定端口。- 路径开销(RPC)
路径开销是STP/RSTP协议用于选择链路的参考值。STP/RSTP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。根设备的端口的路径开销都为0。
在一个STP/RSTP网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的开销。- PC(port cost)
PC的计算需要依据端口带宽来计算。
- 根端口(RP):
即去往根桥路径最近的端口。根端口负责向根桥方向转发数据,根端口同时还负责接收上游设备的BPDU报文和用户流量转发。根端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。在一个运行STP/RSTP协议的设备上根端口有且只有一个,而且根桥上没有根端口。- 指定端口(DP):
对一台交换设备而言,它的指定端口是向下游交换设备转发BPDU报文的端口。根桥的所有端口都是指定端口。在环网的每一网段都会选举出一个指定端口,在一个网段上拥有指定端口的交换设备被称作该网段的指定桥。- 替代端口(AP):
由于学习到其它设备发送的配置BPDU报文而阻塞的端口,作为根端口的备份端口,提供了从指定桥到根的另一条可切换路径。
端口状态 | 目的 | 说明 |
---|---|---|
Forwarding(转发) | 端口既转发用户流量也处理BPDU报文。 | 只有根端口或指定端口才能进入Forwarding状态。 |
Learning (学习) | 设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。 | 过渡状态,增加Learning状态防止临时环路。(15s) |
Listening(监听) | 确定端口角色,将选举出根桥、根端口和指定端口。 | 过渡状态。(15s) |
Blocking(阻塞) | 端口仅仅接收并处理BPDU报文,不转发用户流量 | 阻塞端口的最终状态。 |
Disabled(禁用) | 端口既不处理BPDU报文,也不转发用户流量。 | 端口状态为Down。 |
故障情况:
1.如果是和阻塞端口的直连链路断掉了。历经30S后开启阻塞端口。
2.如果是对端链路有问题,收敛过程需要50s。
故障链路向链路中的上一级发送TCN BPDU,逐个发送直到根桥收到,根桥收到TCN BPDU后返回一个TC BPDU,TC BPDU:让故障交换机30s较少到15s去清空MAC地址表。
BPDU报文的两种类型:
定时器类型 | 说明 |
---|---|
Hello Time | Hello Timer定时器时间的大小控制配置BPDU发送间隔。 |
Forward Delay Timer | Forward Delay Timer定时器时间的大小控制端口在Listening和Learning状态的持续时间。 |
Max Age | Max Age定时器时间的大小控制存储配置BPDU的超时时间,超时认为根桥连接失败。 |
STP的选举过程:
在一个交换网络中选举一个根桥,根桥是设备的概念。
根桥选举后,交换网络中的其他设备都是非根桥,每个非根桥还需选取一个到达根桥最短路径的端口称为根端口。
根桥的选举:
通过比较BID选举,优选BID小的。BID由优先级+MAC地址组成。
首先比较优先级,优先级越小越优。
如果优先级一样,比较MAC地址,MAC地址越小越优。
指定端口的选举:
比较RID,优选小的。
比较到达根桥的RPC(Root Path Cost),越小越优。
比较BPDU包发送者的BID,越小越优。
比较BPDU包发送者的PID,越小越优。
比较BPDU包接收者的PID,越小越优。
注意:
到达根桥最短路径的端口称为根端口。
非根桥只能有一个根端口。
每条链路上,还需选举一个指定端口,默认情况下根桥的所有端口都是指定端口。
既不是根端口,也不是指定端口的其他端口需要被阻塞,不能转发数据帧。
STP故障:
根桥故障
非根桥会在BPDU老化之后,开始根桥的重新选举。
直连链路故障
交换机检测到直连链路故障后,会将预备端口转换为根端口。
预备端口会在30s后恢复到转发状态。
间接链路故障
间接链路故障进入到转发状态需要50s(MAX age + Forwarding delay * 2)。
拓扑改变导致MAC地址表错误
MAC地址默认老化时间为300s,这段时间内无法转发数据。
STP用于拓扑改变的报文:
TCN BPDU报文:拓扑改变通知。
TCN BPDU报文只能由非根桥发出,通告给根桥。
TCA BPDU报文:用于确认接收到的TCN PBDU报文。
TC BPDU报文:只能由根桥发起,连续发送35s(MAX age + Forwarding delay)。
非根桥收到TC BPDU报文后会将MAC地址的老化时间设置为15s,加速老化。
STP拓扑改变:
如果非根桥上发生拓扑变化,向根桥发送TCN BPDU包,通告根桥拓扑已改变。
上联的非根桥从指定端口收到TCN BPDU包后,会向发送者回复TCA flag位置位的配置BPDU包,同时继续向根桥发送TCN BPDU包。
根桥收到TCN BPDU包后,向发送者回复TCA Flag位置位的配置BPDU包,同时向所有指定端口发送TC Flag位置位的配置BPDU包。TC置位的配置BPDU包会连续发送35s,同时将自己的MAC aging 设置为15s。
其他非根桥收到TC置位的配置BPDU包后,将自己的MAC地址的老化时间设置为15s,加速老化。
STP触发拓扑改变条件:
一个端口从forwarding状态过渡到disable或blocking状态。
一个非根桥如果从指定端口接收到TCN BPDU包,需要向根桥装发TCN BPDU包。
一个端口进入转发状态,并且本地已存在一个指端端口。
口诀:一个根桥,两种度量,三要素选举,四个比较原则,五种端口状态。
一个根桥:
每个二层拓扑中,必须要有一个根网桥(一个特殊的交换机(根交换机))
根交换机只有一个,非根交换机可以多个。
选择根网桥的依据是网桥ID,网桥ID是唯一的。
两种度量:
ID
BID(bridge ID)网桥ID:BID由两部分组成:优先级+MAC地址(MAC地址:交换机(或者交换机接口)的MAC地址)
第一部分是16bit的priority优先级(默认是32768)
取值范围:0-65535
第二部分是48bit的MAC地址
优先级最小的就是根设备(根交换机或者根网桥),如果优先级一样,那就比较MAC地址。
MAC地址小的就是根设备。
BID小的就一定是根设备。
根桥的BID就叫做RID(root ID)
PID(port ID)端口ID
PID也由两部分组成:
第一部分是接口优先级(默认是128);
第二部分是接口号:
①cost开销、成本:只有从接口把数据发出去的时候才考虑开销;
②路径开销:在交换机上把数据从接口发出去的开销(思科设备开销:10M带宽cost=100、100M带宽cost=19、1000M带宽cost=4、10G贷款cost=2);
③根路径开销:非根设备到达根设备的路径开销之和RPC(root path cost),一般都说的最小根路径开销。
三要素选举
①在每个非根设备上选举一个根端口 RP(root port:离根最近的端口);
在每个非根设备上有且只能有一个RP。
②在每段链路上选择一个指定端口DP(design port);
在每段链路上有且只能有一个DP。
③既不是RP端口,又不是DP端口,就将其阻塞掉。
如何选择根端口、指定端口:
1.依据该端口的根路径开销;2.依据对端的BID(桥ID);3.依据对端的PID(port+接口号);4.PID默认128,最大255。
四个比较原则:
RID(根桥的BID);
RPC(root path cost ,根路径开销,即成本);
发送者的BID;
发送者的PID;
五种端口状态:
disable(禁用):生成树关闭(或者接口关闭的时候)
blocking(阻塞):阻塞接口的最终状态
listening(侦听):设备开机之后,生成树接口默认处于的状态
等15s 15s的时间叫做转发延迟 forward delay
learning(学习):该状态是学习MAC地址的状态
等15s
forwarding(转发):只有处在该状态,才能转发数据
注:RP(根端口)和DP(指定端口)端口都在转发状态
STP的计算步骤:
STP命令:
stp mode { stp | rstp | mstp}
//配置交换机的STP工作模式,默认情况下,交换设备运行MSTP模式,MSTP模式兼容STP和RSTP模式。
stp root primary
//配置当前设备为根桥设备。缺省情况下,交换设备不作为任何生成树的根桥。配置后该设备优先级BID值自动为0,并且不能更改设备优先级。
stp root secondary
//配置当前交换机设备为备份根桥设备。缺省情况下,交换设备不作为任何生成树的备份根桥。配置后该设备优先级BID值为4096,并且不能更改设备优先级。
stp priority 32768
//配置交换设备在系统中的优先级。缺省情况下,交换设备的优先级取值是32768。 配置时,优先级必须为4096的倍数。
stp pathcost-standard { dot1d-1998 | dot1t | legacy }
//配置端口路径开销计算方法。缺省情况下,路径开销值的计算方法为IEEE 802.1t(dot1t)标准方法。
[接口视图]stp cost 100
//设置当前端口的路径开销值。
//使用华为计算方法时参数cost取值范围是1~200000。
//使用IEEE 802.1d标准方法时取值范围是1~65535。
//使用IEEE 802.1t标准方法时取值范围是1~200000000。
[接口视图] stp port priority 128
//配置端口的优先级。缺省情况下,交换设备端口的优先级取值是128。
stp enable //使能交换设备的STP功能。缺省情况下,设备的STP/RSTP功能处于启用状态。
stp converge { fast | normal}
//配置端口的收敛方式
//根据对ARP表项的处理方式不同,STP/RSTP的收敛方式分为fast和normal两种:
//fast:ARP表将需要更新的表项直接删除。
//normal:ARP表中需要更新的表项快速老化。
//交换设备将ARP表中这些表项的剩余存活时间置为0,对这些表项进行老化处理。如果配置的ARP老化探测次数大于零,则ARP对这些表项进行老化探测。
//建议选择normal收敛方式。若选择fast方式,频繁的ARP表项删除可能会导致设备CPU占用率高达100%,报文处理超时导致网络震荡。
stp bridge-diameter 5
//配置网络直径。缺省情况下,网络直径为7。
stp timer-factor factor
//配置未收到上游的BPDU就重新开始生成树计算的超时时间。 缺省情况下,设备未收到上游的BPDU就重新开始生成树计算的超时时间是Hello Timer的9倍。
stp timer forward-delay 1500
//配置设备的Forward Delay时间。 缺省情况下,设备的Forward Delay时间是1500厘秒(15秒)。
stp timer hello 200
//配置设备的Hello Time时间。 缺省情况下,设备的Hello Time时间是200厘秒(2秒)。
stp timer mac-age 2000
//配置设备的Max Age时间。缺省情况下,设备的Max Age时间是2000厘秒(20秒)。
max bandwidth-affected-linknumber 8
//配置影响带宽的最大连接数。 缺省情况下,影响链路聚合带宽的最大连接数是8。
reset stp error packet statistics
//清除生成树协议的错误报文计数。
display stp toplogy-change
//查看STP/RSTP拓扑变化相关的统计信息
调整生成树协议:
#1.修改优先级的命令
#配置交换设备在系统中的优先级。缺省情况下,交换设备的优先级取值是32768。 配置时,优先级必须为4096的倍数。
[Huawei]stp priority 0
#配置当前设备为根桥设备。缺省情况下,交换设备不作为任何生成树的根桥。配置后该设备优先级BID值自动为0,并且不能更改设备优先级。
[Huawei]stp root primary
#配置当前交换机设备为备份根桥设备。缺省情况下,交换设备不作为任何生成树的备份根桥。配置后该设备优先级BID值为4096,并且不能更改设备优先级。
[Huawei]stp root secondary
#2.查看STP命令
[Huawei]display stp brief
调整生成树协议:
调整生成树协议:
#1、通过调整优先级,来影响阻塞端口(全局配置模式下)
#启用生成树(默认启用的)
spanning-tree vlan 10
#修改sw1在vlan10中的优先级
spanning-tree vlan 10 priority 0
#修改sw3在vlan10中的优先级
spanning-tree vlan 20 priority 4096 修改sw3在vlan10中的优先级
#primary:优先级为24576、secondary:优先级为28672;
spanning-tree vlan 5,10-20 priority 0
spanning-tree vlan 10 root {primary|secondary}
2、修改端口成本(在端口模式中)
#修改本交换机的端口在vlan10中的出接口成本
spanning-tree vlan 10 cost 50
3、修改端口优先级
spanning-tree vlan 10 port-priority 96
#查看所有的vlan生成树。
show spanning-tree
#目的:为了减少接口收敛时间(?/?/?建议将PC的接口都设置成边缘端口)
[Huawei-Ethernet?/?/?]stp edged-port enable
2. STP根保护功能(?/?/?设置在根桥指定的端口,也就是除阻塞端口的端口):
[Huawei-Ethernet?/?/?]stp root-protection
3. STP BPDU防护:根保护功能不能限制用户接入交换机,BPDU防护可以检测用户接入的是交换机还是PC。
[Huawei]stp bpdu-protection
4.自动恢复机制:间隔30s检测因为BPDU保护功能shutdown的链路,如果链路接入的是PC则恢复链路
[Huawei]error-down auto-recovery cause bpdu-protection interval 30
注意:error-down auto-recovery命令对于已经处于Error-Down状态的接口不生效,只对配置该命令后发生Error-Down的接口生效。
MSTP:多生成协议(华为交换机默认运行MSTP)
MSTP的工作原理:将多个VLAN捆绑在一起运行在一个STP实例里面,不同实例间的stp相互独立。
注意:默认情况下所以VLAN都在实例0里面。
#创建VLAN 10、VLAN 20,一个组就是一个实例。
instance 10 VLAN 10
instance 10 VLAN 20
stp region-configuration
region-name mt
instance 10 vlan 10
instance 20 vlan 20
active region-configuration
#
stp instance 20 priority 4096