目录
STP简介
一个负责的网络环境中,难免会出现环路。
由于冗余备份的需要,网络设计者都倾向于在设备之间部署多条物理链路。
其中一条作主用链路,其他链路作为备份,这样都有可能导致环路产生。
环路影响
1、产生广播风暴(二层),最终导致网络资源被耗尽,网络瘫痪不可用。
2、引起MAC地址表震荡不稳定,导致MAC地址表被破坏
3、数据帧的重复拷贝。
解决思路
为了破坏环路,可以采用数据链路层协议STP(二层协议)。
运行STP协议的设备通过彼此的交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络接口修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接受相同的报文造成处理能力下降。
直白的说就是STP用逻辑链路控制一条路关闭,使其物理有环逻辑无环
打破交换网络中的环路(针对交换网络的所有环路中,关闭其中的某个接口)
工作原理
找到冗余的一段,然后阻塞端口,避免环路
工作过程
STP通过协商阻断一些交换机接口,以确保网络中所有目的地之间只有一条逻辑路径,构建一条没有环路的转发路。
当一个端口阻止流量进入或离开时,该端口视为阻塞状态。
不过STP用来防止环路的网桥协议数据单元帧仍(BPDU)可进行。
为了在网络中形成一个没有环路的拓扑,交换机要进行以下3个步骤:
1、选举根桥
2、每个非根桥交换机计算到达根桥的最短距离
3、选择活动端口以及端口的角色类型
STP属性
-
BPDU(网桥协议数据单元)
网桥协议数据单元分为
- 配置BPDU——config-BPDU4
- 在网络收敛时用于进行生成树计算
- 在网络稳定时用来维护网络拓扑
- 包含了桥ID、路径开销、端口ID
- 拓扑变更BPDU——TCN-BPDU
- 只在拓扑发生变化时发出,用来通知相关的交换机网络发生变化。
BPDU数据结构
Message type | 代表着BPDU 的类型 (0X00 配置 0X80 拓扑TC) |
---|---|
Flags | 标记位——在802.1D 中,标识BPDU 是拓扑变更还是拓扑变更确认BPDU |
Root ID | 根标识符——用于标记一颗树的树根。与根网桥的BID 一致。 |
Bridge ID | 网桥标识符——BID , 用于标识本设备在本生成树的唯一性。 |
Port ID | 端口标识符——PID ,用于标识设备上某接口的唯一性。 |
Cost of path | 路径开销——在华为设备中,称作 root path cost (RPC)根路径开销。离根越远值越大 离根越近值越小 |
hello时间 | 默认为2s ,BPDU 发送的间隔。 |
Max-age | 最大时间——可以理解为hello包的超时时间。默认时间为20s |
Forward delay | 转发延时——状态切换时间,默认为15s(交换机接口状态切换时间) |
Message age | 在思科中默认为300s,就是对应的MAC地址条目的老化时间,(但实际上 该时间为此BPDU 经过的跳数);华为中,代表着该BPDU传递的跳数(默认值为0,没经 过一台交换机 值+1) |
Max-hop | 默认为20 ,收到BPDU之后 将message age中的时间与max-hop进行比较,若小 于,则正常使用该BPDU ,若大于,则忽略BPDU。 |
BPDU每2秒刷新一下mac地址表的老化计时器
BPDU的四个关键参数
- Root Identifiler(RID):当前根桥的BID
- Root Path Cost(RPC):根路径开销。就是某端口到根桥所经过的各个桥上的各端口路径开销的累加值
- Bridge identifiler(BID):本交换设备的BID
- Port Identifiler(PID):发送该BPDU的端口ID。由高4位(端口优先级)和低12级(端口号)组成
字段 | 说明 |
根桥ID | 每个STP网络中有且只有一个根 |
根路径开销 | 发送配置BPDU的端口到根桥的距离,决定了到根桥的路径开销。 |
发送设备BID | 发送配置BPDU的设备的BID |
发送端口PID | 发出配置BPDU的端口的PDi |
最小BID:用来选举根桥。运行STP协议的设备之间根据表所示根桥ID字段选择最小的BID。
最小根路径开销:用来在非根桥上选择根端口。在根桥上,每个端口到根桥的根路径开销都是0
最小发送者BID:当一台运行STP协议的设备要在两个以上根路径开销相等的端口之中选择根端口时,通过STP协议计算,将选择接收到的配置消息中发送者BID较小的那个端口。
最小PID:用于在根路径开销相同的情况下,阻塞PID值较大的端口。在两个端口上收到的BPDU中,跟路径开销、发送交换设备的BID都相同,所有消除环路的依据就只有PID。
BID(网桥标识符)
BID | 使用8字节构成,组成方式: BID优先级字段(4个bit)+扩展系统ID(12个 bit)+Mac地址(6个字节) |
---|---|
BID 使用 | 1、比较BID 优先级 2、比较MAC地址 |
BID优先级 | 4位,默认值为32768 ,范围0-65535(实际范围0-61440),越小越优。BID 优先级单位4096.调整BID优先级时 值必须为4096的倍数(最大15倍)。 |
扩展系统ID | 8位,在802.1D和802.1W 无意义,在802.1S中有用的 |
Mac地址 | 为交换机背板地址池中所有MAC地址中最小的,MAC地址越小越优 |
PID(端口标识符)
PID | 端口标识符 2个字节构成,组成部分:PID优先级(4个bit构成)+端口标识符(12个 bit构成) |
---|---|
使用方法 | 1.比较PID优先级 2.Port number |
PID优先级 | 默认值为128,范围0-255(实际范围0-240),单位16 |
Port number | 标识唯一性 |
RPC(根路径开销)
PC(端口开销)
RPC
COST(开销值)
不同带宽的链路使用不同的cost (该cost值是内部编码的),非线性过程。
802.1D-1998
10G---2
1G---4
100M---19
10M---100
这四个字段构成了消息优先级向量,一般用【根桥ID、跟路径开销、发送设备BID、发送端口PID】形式表示。
当一个网桥收到配置BPDU报文时,只有当发送者的BID或端口的PID两个字段中至少有一个和本桥段接收端口不同,BPDU报文才会被处理,否则丢弃。避免了处理和本端口信息一致的BPDU报文。
STP相关概念
根桥
树形网络结构必须有树根,于是STP/RSTP引入根桥概念。
对于一个STP/RSTP网络,根桥有且只有一个,它是整个网络的逻辑中心,但不一定是物理中心。
根据网络拓扑的改变,根桥可能改变。
BID(桥ID)
IEEE 802.1d标准中规定BID是由2字节的桥优先级(Bridge Priority)与桥MAC地址构成,即BID(8字节) = 桥优先级(2字节) + 桥MAC(6字节)。
在STP网络中,桥ID最小的设备会被选举为根桥。在华为公司的设备上,桥优先级支持手工配置。
PID(端口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地址表(限制未知单播帧的洪泛) 可以发送并接收BPDU,不能发送和接收数据 | 过渡状态,增加Learning状态防止临时环路(15s) |
Listening (监听状态) | 确定端口角色,将选举出根桥、根端口和指定端口 可以发送并接收BPDU,不能发送和接收数据 | 过渡状态(15s) |
Blocking(阻塞状态 ) | 可以接收并处理BPDU,不能发送BPDU,不能发送和接收数据 | 阻塞端口的最终状态 |
Disable (禁用状态) | 端口既不处理BPDU报文,也不转发数据 1、关闭生成树协议 2、接口物理关闭 | 端口状态为Down |
三种定时器
定时器类型 | 说明 |
Hello Time | Hello Time定时器时间的大小控制配置BPDU发送间隔 |
Forward Delay Timer | Forward Delay Timer定时器时间的大小控制端口在Listening和Learning状态的持续时间 |
Max Age | Max Age定时器时间的大小控制存储配置BPDU的超时时间,超时认为根桥连接失败 |
STP协议
STP类型
STP(标准生成树,又称为802.1D)
RSTP(快速生成树,又称为 802.1W)
MSTP(多生成树协议,又称为802.1S)——华为
STP定义
Spanning Tree (STP)生成树协议。
所有的生成树协议都在通过发送比较信息进行选举,找到环路中应该被关闭的接口(接口阻塞)
发送的比较信息成为BPDU(网桥协议数据单元)
STP算法
STP算法分为3个步骤
1、每个广播域选择根桥(RB)
选择网桥ID小的作为根桥(RB)
网桥ID=优先级(0-65535,默认:32768,steps:4096)+MAC地址
2、每个非根桥选择一个根端口(RP)
- 该非根端口的交换机的端口到根网桥的路径成本最低
- 一样的话,端口另一端的设备的网桥ID最小
- 还一样的话,选择端口标识小的
端口优先级(0-240,默认128,steps 16)+端口(e0/0/0这样)
3、每个网段必须选择一个指定端口(DP)
根网桥上全是指定端口,那么对面就是根端口
- 该端口所在的交换机到根端口
- 一样的话,所在的交换机网桥ID最小
STP选举过程
1、在一个交换网络中选举一个根桥,根桥是设备的概念。
2、根桥选举后,交换网络中其他设备都是非根桥,每个非根桥还需选取一个到达根桥最短路径的端口成为根端口。(非根桥只能有一个端口)
3、每条链路上,还需选举一个指定端口,默认情况下根桥的所有端口都是指定端口。
4、既不是根端口,也不是指定端口的其他端口需要被阻塞,不能转发数据帧。
根桥的选举
1、通过比较BID选举,优选BID小的。BID=优先级+MAC地址
2、首先比较优先级,优先级越小越优
3、如果优先级一样,比较MAC地址,MAC地址越小越优
指定端口的选举
1、比较RID,优选小的
2、比较到达根桥的RPC,越小越优
3、比较BPDU报发送者的BID,越小越优
4、比较BPDU报发送者的PID,越小越优
5、比较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包。
- 一个端口进入转发状态,并且本地已存在一个指端端口。
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拓扑变化相关的统计信息