04-生成树配置
本章节下载: 04-生成树配置 (356.95 KB)
生成树协议是一种二层管理协议,它通过选择性地阻塞网络中的冗余链路来消除二层环路,同时还具备链路备份的功能。
STP由IEEE制定的802.1D标准定义,用于在局域网中消除数据链路层物理环路的协议。运行该协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某些端口进行阻塞,最终将环路网络结构修剪成无环路的树型网络结构,从而防止报文在环路网络中不断增生和无限循环,避免设备由于重复接收相同的报文造成的报文处理能力下降的问题发生。
STP包含了两个含义,狭义的STP是指IEEE 802.1D中定义的STP协议,广义的STP是指包括IEEE 802.1D定义的STP协议以及各种在它的基础上经过改进的生成树协议。
STP采用的协议报文是BPDU(Bridge Protocol Data Unit,网桥协议数据单元),也称为配置消息。本文中将把生成树协议的协议报文均简称为BPDU。
STP通过在设备之间传递BPDU来确定网络的拓扑结构。BPDU中包含了足够的信息来保证设备完成生成树的计算过程。STP协议的BPDU分为以下两类:
· 配置BPDU(Configuration BPDU):用来进行生成树计算和维护生成树拓扑的报文。
· TCN BPDU(Topology Change Notification BPDU,拓扑变化通知BPDU):当拓扑结构发生变化时,用来通知相关设备网络拓扑结构发生变化的报文。
网桥之间通过交互配置BPDU来进行根桥的选举以及端口角色的确定。配置BPDU的格式如图1-1所示。
配置BPDU中BPDU数据的信息包括:
· 协议类型(Protocol ID):固定为0x0000,表示生成树协议。
· 协议版本号(Protocol Version ID):目前生成树有三个版本,STP的协议版本号为0x00.
· BPDU类型:配置BPDU类型为0x00。
· BPDU Flags位:BPDU标志位,表示是哪种BPDU。由8位组成,最低位(0位)为TC(Topology Change,拓扑改变)标志位;最高位(7位)为TCA(Topology Change Acknowledge,拓扑改变确认)标志位;其他6位保留。
· 根桥(Root Bridge)ID:由根桥的优先级和MAC地址组成。
· 根路径开销:到根桥的路径开销。
· 指定桥ID:由指定桥的优先级和MAC地址组成。
· 指定端口ID:由指定端口的优先级和该端口的全局编号组成。
· Message Age:BPDU在网络中传播的生存期。
· Max Age:BPDU在设备中的最大生存期。
· Hello Time:BPDU的发送周期。
· Forward Delay:端口状态迁移的延迟时间。
其中通过根桥ID、路径开销、指定桥ID、指定端口ID、Message Age、Max Age、Hello Time和Forward Delay信息来保证设备完成生成树的计算过程。
如图1-2所示,TCN BPDU和配置BPDU在结构上基本相同,也是由源/目的MAC地址、L/T位、逻辑链路头和BPDU数据组成。但是TCN BPDU的BPDU数据组成非常简单,只包含三部分信息:协议类型、协议版本号和BPDU类型。协议类型和协议版本号字段和配置BPDU相同,BPDU类型字段的值为0x80,表示该BPDU为TCN BPDU。
TCN BPDU有两个产生条件:
· 网桥上有端口转变为Forwarding状态,且该网桥至少包含一个指定端口。
· 网桥上有端口从Forwarding状态或Learning状态转变为Blocking状态。
当上述两个条件之一满足时,说明网络拓扑发生了变化,网桥需要使用TCN BPDU通知根桥。根桥可以通过将配置BPDU中对应标志位置位来通知所有网桥网络拓扑发生了变化,需要使用较短的MAC地址老化时间,保证拓扑的快速收敛。
树形的网络结构必须有树根,于是STP引入了根桥的概念。根桥在全网中有且只有一个,其他设备则称为叶子节点。根桥会根据网络拓扑的变化而改变,因此根桥并不是固定的。
在网络初始化过程中,所有设备都视自己为根桥,生成各自的配置BPDU并周期性地向外发送;但当网络拓扑稳定以后,只有根桥设备才会向外发送配置BPDU,其他设备则对其进行转发。
所谓根端口,是指非根桥设备上离根桥最近的端口。根端口负责与根桥进行通信。非根桥设备上有且只有一个根端口,根桥上没有根端口。
有关指定桥与指定端口的含义,请参见表1-1的说明。
分类 |
指定桥 |
指定端口 |
对于一台设备而言 |
与本机直接相连并且负责向本机转发BPDU的设备 |
指定桥向本机转发BPDU的端口 |
对于一个局域网而言 |
负责向本网段转发BPDU的设备 |
指定桥向本网段转发BPDU的端口 |
如图1-3所示,Device B和Device C与LAN直接相连。如果Device A通过Port A1向Device B转发BPDU,则Device B的指定桥就是Device A,指定端口就是Device A上的Port A1;如果Device B负责向LAN转发BPDU,则LAN的指定桥就是Device B,指定端口就是Device B上的Port B2。
STP的端口有5种工作状态。如表1-2所示。
表1-2 STP的端口状态
状态 |
描述 |
Disabled |
该状态下的端口没有激活,不参与STP的任何动作,不转发用户流量 |
Listening |
该状态下的端口可以接收和发送BPDU,但不转发用户流量 |
Learning |
该状态下建立无环的转发表,不转发用户流量 |
Forwarding |
该状态下的端口可以接收和发送BPDU,也转发用户流量 |
Blocking |
该状态下的端口可以接收BPDU,但不转发用户流量 |
路径开销是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构。
STP的拓扑计算过程如下:设备通过比较不同端口收到的BPDU报文的优先级高低,选举出根桥、根端口、指定端口,完成生成树的计算,建立对应的树形拓扑。
各设备的各端口在初始时会生成以本设备为根桥的BPDU,根路径开销为0,指定桥ID为自身设备ID,指定端口为本端口。
网络初始化时,需要在网络中所有的STP设备中选择一个根桥,根桥的选择方式有以下两种:
· 自动选举:网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换BPDU,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
· 手工指定:用户手工将设备配置为指定生成树的根桥或备份根桥。
¡ 在一棵生成树中,生效的根桥只有一个,当两台或两台以上的设备被指定为同一棵生成树的根桥时,系统将选择MAC地址最小的设备作为根桥。
¡ 用户可以在每棵生成树中指定一个或多个备份根桥。当根桥出现故障或被关机时,如果配置了一个备份根桥,则该备份根桥可以取代根桥成为指定生成树的根桥;如果配置了多个备份根桥,则MAC地址最小的备份根桥将成为指定生成树的根桥。但此时若配置了新的根桥,则备份根桥将不会成为根桥。
根端口和指定端口的选择过程如表1-3所示。
表1-3 根端口和指定端口的选择过程
步骤 |
内容 |
1 |
非根桥设备将接收最优BPDU(最优BPDU的选择过程如表1-4所示)的那个端口定为根端口 |
2 |
设备根据根端口的BPDU和根端口的路径开销,为每个端口计算一个指定端口BPDU: · 根桥ID替换为根端口的BPDU的根桥ID; · 根路径开销替换为根端口BPDU的根路径开销加上根端口对应的路径开销; · 指定桥ID替换为自身设备的ID; · 指定端口ID替换为自身端口ID。 |
3 |
设备将计算出的BPDU与角色待定端口自己的BPDU进行比较: · 如果计算出的BPDU更优,则该端口被确定为指定端口,其BPDU也被计算出的BPDU替换,并周期性地向外发送; · 如果该端口自己的BPDU更优,则不更新该端口的BPDU并将该端口阻塞。该端口将不再转发数据,且只接收不发送BPDU。 |
当拓扑处于稳定状态时,只有根端口和指定端口在转发用户流量。其他端口都处于阻塞状态,只接收STP协议报文而不转发用户流量。
表1-4 最优BPDU的选择过程
步骤 |
内容 |
1 |
每个端口将收到的BPDU与自己的BPDU进行比较: · 如果收到的BPDU优先级较低,则将其直接丢弃,对自己的BPDU不进行任何处理; · 如果收到的BPDU优先级较高,则用该BPDU的内容将自己BPDU的内容替换掉。 |
2 |
设备将所有端口的BPDU进行比较,选出最优的BPDU |
BPDU优先级的比较规则如下:
· 根桥ID较小的BPDU优先级较高;
· 若根桥ID相同,则比较根路径开销:将BPDU中的根路径开销与本端口对应的路径开销相加,二者之和较小的BPDU优先级较高;
· 若根路径开销也相同,则依次比较指定桥ID、指定端口ID、接收该BPDU的端口ID等,上述值较小的BPDU优先级较高。
一旦根桥、根端口和指定端口选举成功,整个树形拓扑就建立完毕了。
下面结合例子说明STP算法实现的具体过程。
图1-4 STP算法实现过程组网图
如图1-4所示,Device A、Device B和Device C的优先级分别为0、1和2,Device A与Device B之间、Device A与Device C之间以及Device B与Device C之间链路的路径开销分别为5、10和4。
各设备的初始状态如表1-5所示。
设备 |
端口名称 |
端口的BPDU |
Device A |
Port A1 |
{0,0,0,Port A1} |
Port A2 |
{0,0,0,Port A2} |
|
Device B |
Port B1 |
{1,0,1,Port B1} |
Port B2 |
{1,0,1,Port B2} |
|
Device C |
Port C1 |
{2,0,2,Port C1} |
Port C2 |
{2,0,2,Port C2} |
表1-5中BPDU各项的具体含义为:{根桥ID,根路径开销,指定桥ID,指定端口ID}。
各设备的比较过程及结果如表1-6所示。
设备 |
比较过程 |
比较后端口的BPDU |
Device A |
· Port A1收到Port B1的BPDU {1,0,1,Port B1},发现自己的BPDU {0,0,0,Port A1}更优,于是将其丢弃。 · Port A2收到Port C1的BPDU {2,0,2,Port C1},发现自己的BPDU {0,0,0,Port A2}更优,于是将其丢弃。 · Device A发现自己各端口的BPDU中的根桥和指定桥都是自己,于是认为自己就是根桥,各端口的BPDU都不作任何修改,此后便周期性地向外发送BPDU。 |
· Port A1: {0,0,0,Port A1} · Port A2: {0,0,0,Port A2} |
Device B |
· Port B1收到Port A1的BPDU {0,0,0,Port A1},发现其比自己的BPDU {1,0,1,Port B1}更优,于是更新自己的BPDU。 · Port B2收到Port C2的BPDU {2,0,2,Port C2},发现自己的BPDU {1,0,1,Port B2}更优,于是将其丢弃。 |
· Port B1: {0,0,0,Port A1} · Port B2: {1,0,1,Port B2} |
· Device B比较自己各端口的BPDU,发现Port B1的BPDU最优,于是该端口被确定为根端口,其BPDU不变。 · Device B根据根端口的BPDU和路径开销,为Port B2计算出指定端口的BPDU {0,5,1,Port B2},然后与Port B2本身的BPDU {1,0,1,Port B2}进行比较,发现计算出的BPDU更优,于是Port B2被确定为指定端口,其BPDU也被替换为计算出的BPDU,并周期性地向外发送。 |
· 根端口Port B1: {0,0,0,Port A1} · 指定端口Port B2: {0,5,1,Port B2} |
|
Device C |
· Port C1收到Port A2的BPDU {0,0,0,Port A2},发现其比自己的BPDU {2,0,2,Port C1}更优,于是更新自己的BPDU。 · Port C2收到Port B2更新前的BPDU {1,0,1,Port B2},发现其比自己的BPDU {2,0,2,Port C2}更优,于是更新自己的BPDU。 |
· Port C1: {0,0,0,Port A2} · Port C2: {1,0,1,Port B2} |
· Device C比较自己各端口的BPDU,发现Port C1的BPDU最优,于是该端口被确定为根端口,其BPDU不变。 · Device C根据根端口的BPDU和路径开销,为Port C2计算出指定端口的BPDU {0,10,2,Port C2},然后与Port C2本身的BPDU {1,0,1,Port B2}进行比较,发现计算出的BPDU更优,于是Port C2被确定为指定端口,其BPDU也被替换为计算出的BPDU。 |
· 根端口Port C1: {0,0,0,Port A2} · 指定端口Port C2: {0,10,2,Port C2} |
|
· Port C2收到Port B2更新后的BPDU {0,5,1,Port B2},发现其比自己的BPDU {0,10,2,Port C2}更优,于是更新自己的BPDU。 · Port C1收到Port A2周期性发来的BPDU {0,0,0,Port A2},发现其与自己的BPDU一样,于是将其丢弃。 |
· Port C1: {0,0,0,Port A2} · Port C2: {0,5,1,Port B2} |
|
· Device C比较Port C1的根路径开销10(收到的BPDU中的根路径开销0+本端口所在链路的路径开销10)与Port C2的根路径开销9(收到的BPDU中的根路径开销5+本端口所在链路的路径开销4),发现后者更小,因此Port C2的BPDU更优,于是Port C2被确定为根端口,其BPDU不变。 · Device C根据根端口的BPDU和路径开销,为Port C1计算出指定端口的BPDU {0,9,2,Port C1},然后与Port C1本身的BPDU {0,0,0,Port A2}进行比较,发现本身的BPDU更优,于是Port C1被阻塞,其BPDU不变。从此,Port C1不再转发数据,直至有触发生成树计算的新情况出现,譬如Device B与Device C之间的链路down掉。 |
· 阻塞端口Port C1: {0,0,0,Port A2} · 根端口Port C2: {0,5,1,Port B2} |
经过上述比较过程之后,以Device A为根桥的生成树就确定下来了,其拓扑如图1-5所示。
为了便于描述,本例简化了生成树的计算过程,实际的过程要更加复杂。
STP的BPDU传递机制如下:
· 当网络初始化时,所有的设备都将自己作为根桥,生成以自己为根的BPDU,并以Hello Time为周期定时向外发送。
· 接收到BPDU的端口如果是根端口,且接收的BPDU比该端口的BPDU优,则设备将BPDU中携带的Message Age按照一定的原则递增,并启动定时器为这条BPDU计时,同时将此BPDU从设备的指定端口转发出去。
· 如果指定端口收到的BPDU比本端口的BPDU优先级低时,会立刻发出自己的更好的BPDU进行回应。
· 如果某条路径发生故障,则这条路径上的根端口不会再收到新的BPDU,旧的BPDU将会因为超时而被丢弃,设备重新生成以自己为根的BPDU并向外发送,从而引发生成树的重新计算,得到一条新的通路替代发生故障的链路,恢复网络连通性。
不过,重新计算得到的新BPDU不会立刻就传遍整个网络,因此旧的根端口和指定端口由于没有发现网络拓扑变化,将仍按原来的路径继续转发数据。如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。
在STP的计算过程中,用到了以下三个重要的时间参数:
· Forward Delay:用于确定状态迁移的延迟时间。缺省情况下Forward Delay时间为15秒。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新BPDU无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。为此,生成树协议在端口由Blocking状态向Forwarding状态迁移的过程中设置了Listening和Learning状态作为过渡(Listening和Learning状态都会持续Forward Delay时间),并规定状态迁移需要等待Forward Delay时间,以保持与远端的设备状态切换同步。新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的BPDU已经传遍整个网络。
· Hello Time:用于设备检测链路是否存在故障。缺省情况下Hello Time为2秒。生成树协议每隔Hello Time时间会发送BPDU,以确认链路是否存在故障。如果设备在超时时间(超时时间=超时时间因子×3×Hello Time)内没有收到BPDU,则会由于消息超时而重新计算生成树。
· Max Age:用于判断BPDU在设备内的保存时间是否“过时”,设备会将过时的BPDU丢弃。缺省情况下Max Age时间为20秒。
STP每隔一个Hello Time发送一个BPDU,并且引入Keepalive机制。Hello包的发送可以避免最大失效定时器溢出。如果最大失效定时器溢出,通常表明有连接错误发生。此时,STP会进入Listening状态。STP要从连接错误中恢复过来,一般需要50秒的时间。其中BPDU最长的失效时间20秒;Listening状态持续15秒;Learning状态持续15秒。
为保证网络拓扑的快速收敛,需要配置合适的时间参数。上述三个时间参数之间应满足以下关系,否则会引起网络的频繁震荡:
· 2×(Forward Delay-1秒)≥Max Age
· Max Age≥2×(Hello Time+1秒)
与生成树相关的协议规范有:
· IEEE 802.1D:Media Access Control (MAC) Bridges
· IEEE 802.1w:Part 3: Media Access Control (MAC) Bridges—Amendment 2: Rapid Reconfiguration
· IEEE 802.1s:Virtual Bridged Local Area Networks—Amendment 3: Multiple Spanning Trees
· IEEE 802.1Q-REV/D1.3:Media Access Control (MAC) Bridges and Virtual Bridged Local Area Networks—Clause 13: Spanning tree Protocols
本特性的支持情况与设备型号有关,请以设备的实际情况为准。
型号 |
说明 |
IG4500-L |
支持 |
IG4510-L |
支持 |
IG4520-L |
支持 |
IG4300-R |
不支持 |
IG4300-L-R |
不支持 |
IG4100-L |
支持 |
生成树的部分功能支持在二层以太网接口视图配置,本文后续将概括称为接口视图。
系统视图下的配置全局生效;二层以太网接口视图下的配置只对当前端口生效。
STP模式下,根桥上的配置任务如下:
(1) 配置STP生成树的工作模式
通过本配置将生成树的工作模式配置为STP模式。
(2) 开启生成树协议
(3) 配置环路保护功能
STP模式下,叶子节点上的配置任务如下:
(1) 配置STP生成树的工作模式
通过本配置将生成树的工作模式配置为STP模式。
(2) 开启生成树协议
(3) 配置环路保护功能
设备的所有端口都将向外发送STP BPDU。LoRa网关设备仅支持STP模式。
(1) 进入系统视图。
system-view
(2) 配置生成树的工作模式。
stp mode stp
缺省情况下,生成树的工作模式为非STP模式,需要用户通过本命令将生成树模式切换到STP模式。
只有开启了生成树协议,生成树的其他配置才会生效。在STP模式下,必须保证全局和端口上的生成树协议均处于开启状态。
可以通过undo stp enable命令关闭指定端口的生成树协议,使其不参与生成树计算,以节省设备的CPU资源。但必须保证指定的端口关闭生成树协议后,网络中不能出现环路。
(1) 进入系统视图。
system-view
(2) 全局开启生成树协议。
stp global enable
缺省情况下,生成树协议的全局状态为关闭。
(3) 进入接口视图。
interface interface-type interface-number
(4) 在端口上开启生成树协议。
stp enable
缺省情况下,所有端口上的生成树协议均处于开启状态。
请在设备的根端口和替换端口上配置本功能。
依靠不断接收上游设备发送的BPDU,设备可以维持根端口和其他阻塞端口的状态。但是由于链路拥塞或者单向链路故障,这些端口会收不到上游设备的BPDU,此时下游设备会重新选择端口角色,收不到BPDU的下游设备端口会转变为指定端口,而阻塞端口会迁移到转发状态,从而交换网络中会产生环路。环路保护功能会抑制这种环路的产生。
在同一个端口上,不允许同时配置边缘端口和环路保护功能,或者同时配置根保护功能和环路保护功能。
以下端口配置环路保护功能后,该端口不会因收不到BPDU而导致其一直处于Discarding状态,而是进行端口状态迁移,经过两个Forward Delay时长后再次变为Forwarding状态:
· 端口状态从down变成up。
· 处于up状态的端口,生成树功能状态从关闭变成开启。
(1) 进入系统视图。
system-view
(2) 进入接口视图。
interface interface-type interface-number
(3) 开启端口的环路保护功能。
stp loop-protection
缺省情况下,端口的环路保护功能处于关闭状态。
在完成上述配置后,在任意视图下执行display命令都可以显示配置后生成树的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除生成树的统计信息。
操作 |
命令 |
显示生成树的状态和统计信息 |
display stp [ brief ] |
清除生成树的统计信息 |
reset stp |
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!