STP
局域网中物理环路通常有两种产生的原因:一种是基于可靠性的考虑,为交换机之间提供冗余连接;另一种是由于错误的网络设置导致环路的产生。两种情况会导致广播风暴和mac地址学习错误。
STP生成树协议就是用于消除环路中的一种。
STP在IEEE制定的IEEE802.1D标准中定义,用于在局域网中消除数据链路层环路,STP可以通过计算,动态地阻断冗余链路,而当活动链路发生故障时,STP又可以激活冗余链路,恢复网络的连通,避免网络中断。
-
运行STP的设备依据一定的准则选举一个树根节点作为网络中的根桥,其他节点为非树根几点。
-
每一个非树根节点,会选择最优的路径和根桥相连,非树根节点上位于最优路劲的端口,为该节点的根端口。
基本概念
桥和端口的角色
两种特殊的网桥:
- 根桥:整个生成树的根节点,由所有网桥中优先级最高的桥担任
- 指定桥:负责一个Physical Segment(物理段)上数据转发任务的桥,由这个Physical Segment上优先级最高的桥担任。
根端口(Root Port)、指定端口(Designate Port)和候补端口(Alternate Port)
根端口指距离根桥最近的端口。根桥没有根端口,每一个非根桥有且仅有一个根端口
指定端口属于指定桥上的端口。根桥是所有网桥中优先级最高的,它在其所连接的所有Physical Segment上都是指定桥,所有通常情况下根桥的所有端口都是指定端口。
Alternate端口既不是根端也不是指定端口,它是用来为根端口或指定端口做备份的。从Alternate端口出发到达根桥的路径,是网桥到达根桥的备用路径,即最终需要阻塞的路径。
桥ID
STP中每一个网桥都具有一个桥ID(Bridge ID),用于在网络中唯一标识一个桥。根桥选择的依据就是桥ID,具有由最小桥ID的网桥即为网络中的根桥。
在进行桥ID比较时,先比较桥优先级优先级数值小为优在比较桥MAC地址,MAC地址小为优
路径开销
f非根桥需要确定根端口,根端口的选择取决于端口到达根桥距离的远近,网桥上到达根桥距离最近的端口为根端口,衡量距离远近,依据的是路径开销(Path Cost)。
默认的路径开销取决于所遵循的路径开销标准和链路的带宽。
BPDU
BPDU:桥协议数据单元来交互协议信息
BPDU分为如下两类:
- 配置BPDU:是用来进行生成树计算和维护生成树形拓扑的报文
- TCN BPDU:是当拓扑结构改变时,用来通知其他设备网络拓扑发生改变的报文
Protocol identifier: 固定为0x0000,表示是生成树协议。
Protocol Version ID: 协议版本号,目前生成树有三个版本,STP协议版本号为0x00.
BPDU type: 配置BPDU类型为0x00,TCN BPDU类型为0x80.
Flags:由8位组成。最低位(0位)为TC标志位,最高位(7位)为TCA标志位,其他6位保留
Root ID: 根桥ID,由两字节的优先级和6字节MAC地址构成
Root path cost: 根路径开销
Bridge ID: 桥ID,表示发送BPDU的桥的ID,由2字节优先级和6字节MAC地址构成
Port ID: 端口ID,标识发出BPDU的端口
Message age: 从根桥生成配置BPDU开始,到当前时间为止配置BPDU的存活时间。
Maximum age: 当前BPDU的老化时间,即端口保存BPDU的最长时间
Hello time: 根桥发送BPDU的周期,默认2秒
Forward delay: 表示在拓扑改变后,交换机在发送数据包前维持在监听和学习状态的时间,配置BPDU传播到全网的最大时延,默认为15秒。
STP计算过程
STP计算过程
同时进行的两个任务:
- 选举根桥
- 确定端口角色
根桥选举
每一个网桥都还没有收到其他网桥发送的配置BPDU,此时每一个网桥都认为自己是网络中的根桥,并向外发送以自己为根桥的配置BPDU。
由于此时每个网桥都认为自身是根桥,所以每一个网桥都会发送配置bpdu,同时也会收到对端网桥发送的配置BPDU,每一个网桥都将自身认为的Root BRidge ID和接收到的配置BPDU中的Root Bridge ID进行比较,选择Root Bridge ID 较小的作为网络中的根桥。
确定端口角色
根端口的确定需要比较RPC。当网桥从一个端口收到配置BPDU后,首先获取其中的RPC ,和接收端口的链路开销相加,得到此端口的PRC,每一个收到配置BPDU的端口都进行同样的计算。然后比较各端口的RPC,拥有最小RPC值的端口即为本网桥的根端口。
指定端口的确定需要比较端口发送的配置BPDU和接收的配置BPDU,如果发送的配置BPDU优于接收到的配置BPDU,表明端口在本Physical Segment上拥有最优的配置BPDU,则指定为指定端口
Alternate端口指该端口的配置BPDU在其所属Physical Segment上不是最优的,且端口不是根端口 。
端口状态
网络拓扑收敛为一颗无环的树是通过网桥间交互配置BPDU,并进行计算而得到的。STP计算收敛需要一定的时间,当网络拓扑发生变化时,最优的配置BPDU需要经过一定的延时才能传播到整个网络,在所有网桥都收到最优配置BPDU之前可能会存在临时环路
STP定义了5种端口状态:Disabled、Blocking、Listening、Learning和Forwarding。其中Listening和Learning状态为中间状态,为避免临时环路,当端口处于中间状态时,端口不能接收和发送数据。
STP端口状态 | 是否发送配置BPDU | 是否进行MAC地址学习 | 是否收发数据 |
---|---|---|---|
Disabled | 否 | 否 | 否 |
Blocking | 否 | 否 | 否 |
Listening | 是 | 否 | 否 |
Learning | 是 | 是 | 否 |
Forwarding | 是 | 是 | 是 |
当端口为down时,处于STP定义的Disabled
状态;当端口UP后,经过初始化会首先进入Blocking
状态。由于端口在STP计算初期均会认为自己时指定端口,所以端口直接从Blocking
状态进入第一个中间状态Listening
在Listening
状态期间,端口通过交互配置BPDU
,完成角色的确认,在此期间端口不进行MAC地址的学习也不能收发数据。如果端口最终被定义Alternate
端口,端口会重新回到Blocking
状态,如果端口角色确定为根端口或指定端口,当Forward Delay
时间过去后,端口进入Leaning
状态。
在Learning
状态期间,根端口和指定端口进行MAC地址学习,但仍然不进行数据的收发。如果端口在learning
状态期间重新被选择为Alternate
端口,则端口会回到Blocaking
状态。如果在learning
状态期间维持根端口和指定端口角色不变,则当Forward Delay
时间过去后,端口会进入Forwarding
状态。
在Forwarding
状态根端口和指定端口开始收发数据。
STP拓扑改变处理过程
《H3C-路由与交换技术》P80
STP
- STP收敛时间长
- 拓扑变化收敛机制不灵活
RSTP
快速生成树协议
和STP相比,RSTP的改进之处包括:
减少了端口状态
增加了端口的角色
配置BPDU的格式发生了改变
当网络发生变化的时候,处理方式不同
STP端口状态 | 是否发送配置BPDU | 是否进行MAC地址学习 | 是否收发数据 |
---|---|---|---|
Discarding | 否 | 否 | 否 |
Discarding | 否 | 否 | 否 |
Discarding | 是 | 否 | 否 |
Learning | 是 | 是 | 否 |
Forwarding | 是 | 是 | 是 |
RSTP将STP中的Alternate端口角色进一步划分为两种,其中一种角色为Backup,另一种角色名称仍为Alternate
- 当阻塞端口收到的更优的配置BPDU来自其他网桥时,该端口为
Alternate
- 当阻塞端口收到更优的配置BPDU来自本网桥时,该端口为
Backup
端口
BPDU
BPDU协议号:0x02,表示RSTP
RSTP的快速收敛
边缘端口
当端口直接与用户终端相连,而没有连接到其他网桥或局域网网段上时,该端口即为边缘端口。
MSTP
多生成树协议
是基于实例计算出多颗生成树,每一个实例可以包含一个或多个VLAN,每一个VLAN只能映射到一个实例。网桥通过配置多个实例,可以实现不同VLAN组之间的负载分担
MST域
是指网络中具有相同域名、修订级别、摘要信息的网桥构成一个集合
- 域名:本域的名称,MSTP中每一个域都有一个独一无二的名称,配置不同域名的网桥被认为不同的域
- 修订级别:目前保留,默认为0.
- 配置摘要:由网桥的VLAN和实例映射关系生成的长度为16B的HMAC-MD5签名。
配置:
RSTP
//在系统试图全局使用生成树协议
[H3C]stp global enable
//默认情况下:交换机的所有端口的STP特性处于开启,全局的STP特性处于关闭状态
//关闭设备上特定端口的STP特性
[H3C-Ethernet0/1]undo stp enable
//在系统模式下设置STP的工作模式
[H3C]stp mode {mstp|pvst|rstp|STP}
//默认情况下的是MSTP模式
//配置网桥的优先级
[H3C]stp priority [bridge-priorty]
//接口模式下配置路径开销
[H3C]stp cost [cost]
//可以通过命令改变设备支持的端口开销标准
[H3C]stp pathcost-standard {dot|d-192|dotlt|legacy}
//端口的优先级
[H3C-Ethernet0/1]stp port priority [port-priority]
//定时器的配置
[H3C]stp timer hello 400
[H3C]stp timer max-age 1000
[H3C]stp timer forward-delay 2000
//网络直径配置
[H3C]stp bridge-diameter 5
//RSTP的高级配置
//配置为边缘端口
[H3C-E0/1]stp edged-port
//配置全局为兼容STP模式
[H3C]stp global mcheck
//端口为兼容
[H3C-E0/1]stp mcheck
MSTP
//由系统视图进入域配置视图
[H3C]stp region-configuration
//配置域名
[H3C-mst-region]region-name [name]
//配置修订级别
[H3C-mst-region]revision-level [level]
//interface命令用来指定的VLAN列表映射到指定的生成树实例上,默认情况,所有的VLAN均对应CIST(实例0)上。不能将同一个VLAN映射到多个不同的实例中。
[H3C-mst-region]instance [instance-id] vlan [vlan-list]
//instace-id表示MST实例的ID,取值范围为0~32,最小取值为0
//激活MSTP域
[H3C-mst-region]action region-configuration
//高级配置
//指定网桥为实例中的首选根桥
[H3C]stp instence [instance-id] root primary
//备份
[H3C]stp instence [instance-id] root secondary
STP的保护机制
[SWA]stp bpdu-protection//BPDU保护
[SWA]stp root-protection//根桥保护
[SWA-eth0/1]stp loop-protection//环路保护
[SWA]stp tc-peotection threshold [number]//TC保护
实验
//1、vlan 的创建与划分
//SW1-SW4创建vlan
vlan 10
vlan 20
//SW3 SW4将连接PC的端口分别加入vlan
//2、trunk配置(交换机之间的互连端口)
//SW1和SW2
interface range GigabitEthernet 1/0/1 to GigabitEthernet 1/0/3
port link-type trunk
port trunk permit vlan 10 20
//SW3和SW4
interface range GigabitEthernet 1/0/2 to GigabitEthernet 1/0/3
port link-type trunk
port trunk permit vlan 10 20
//3、MSTP配置(SW1-SW4)
stp region-configuration //进入stp域配置试视图
region-name h3c //配置域名
instance 1 vlan 10 //将vlan 10 映射进实例1
instance 2 vlan 20 //将vlan 20 映射进实例2
active region-configuration
//4、MSTP根桥制指定
//SW1作为实例1的主根,实例2的备根
stp instance 1 root primary //设备作为实例1的主根
stp instance 2 root secondary //设备作为实例2的备根
//SW2作为实例2的主根,实例1的备根
stp instance 1 root secondary
stp instance 2 root primary
//5、边缘端口(SW3-SW4连接PC的端口)
interface range GigabitEthernet 1/0/1 GigabitEthernet 1/0/4
stp edged-port //配置端口为STP边缘端口