生成树协议实验报告_详解:STP生成树协议

定义

以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,并导致广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。

STP包含两种含义:

  • 狭义的STP是指IEEE 802.1D中定义的STP协议。
  • 广义的STP包括IEEE 802.1D中定义的STP、IEEE 802.1W中定义的快速生成树协议RSTP(Rapid Spanning Tree Protocol)和IEEE 802.1S中定义的多生成树协议MSTP(Multiple Spanning Tree Protocol)。

目前,生成树协议支持如下:

  • STPIEEE于1998年发布的802.1D标准定义了STP。STP是数据链路层的管理协议,用于二层网络的环路检测和预防。STP可阻塞二层网络中的冗余链路,将网络修剪成树状,达到消除环路的目的。但是,STP拓扑收敛速度慢,即使是边缘端口也必须等待两倍forward delay定时器的时间(缺省为30秒)延迟,端口才能迁移到转发状态。
  • RSTPIEEE于2001年发布的802.1W标准定义了RSTP。RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN(Virtual Local Area Network)共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,还有可能造成部分VLAN的报文无法转发。RSTP向下兼容STP协议,可以混合组网。
  • MSTPIEEE于2002年发布的802.1S标准定义了MSTP。MSTP通过设置VLAN映射表(即VLAN和生成树实例的对应关系表),把VLAN和生成树实例联系起来。同时它把一个交换网络划分成多个域,每个域内形成多棵生成树实例,生成树实例之间彼此独立。MSTP将环路网络修剪成为一个无环的树形网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。MSTP兼容STP和RSTP。三种生成树协议的比较如表1所示。
生成树协议实验报告_详解:STP生成树协议_第1张图片

目的

在以太网交换网中部署生成树协议后,如果网络中出现环路,生成树协议通过拓扑计算,可实现:

  • 消除环路:通过阻塞冗余链路消除网络中可能存在的网络通信环路。
  • 链路备份:当前活动的路径发生故障时,激活冗余备份链路,恢复网络连通性。

STP出现的背景

STP是一个用于局域网中消除环路的协议。运行该协议的交换设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路。由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。

图1 典型局域网络示意图

生成树协议实验报告_详解:STP生成树协议_第2张图片

如图1所示网络中,会产生如下两种情况:

  • 广播风暴导致网络不可用。环路产生广播风暴,这是众所周知的。图1中,假设交换设备上没有启用STP协议。如果HostA发出广播请求,那么广播报文将被其他两台交换设备的端口port1接收,并分别从端口port2广播出去,然后端口port2又收到另一台交换设备发过来的广播报文,再分别从两台交换设备的端口port1转发,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。
  • MAC地址表震荡导致MAC地址表项被破坏。如图1所示,即使是单播报文,也有可能导致交换设备的MAC地址表项混乱,以致破坏交换设备的MAC地址表。假设图1所示的网络中没有广播风暴,HostA发送一个单播报文给HostB,如果此时HostB临时从网络中移去,那么交换设备上有关HostB的MAC地址表项也将被删除。此时HostA发给HostB的单播报文,将被交换设备S1的端口port1接收,由于S1上没有相应的MAC地址转发表项,该单播报文将被转发到端口port2上,然后交换设备S2的端口port2又收到从对端port2端口发来的单播报文,然后又从port1发出去。如此反复,在两台交换设备上,由于不间断地从端口port1、port2收到主机A发来的单播报文,交换设备会不停地修改自己的MAC地址表项,从而引起了MAC地址表的抖动。如此下去,最终导致MAC地址表项被破坏。

STP基本概念

基本思想

STP是数据链路层协议。运行该协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个端口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断增生和无限循环,避免设备由于重复接收相同的报文造成处理能力下降。

运行STP协议的设备采用配置消息BPDU(Bridge Protocol Data Unit,桥协议数据单元)交互信息,一般简称为BPDU。BPDU分为两大类:

  • 配置BPDU(Configuration BPDU):用来进行生成树计算和维护生成树拓扑的报文。
  • TCN BPDU(Topology Change Notification BPDU):当拓扑结构发生变化时,下游设备用来通知上游设备网络拓扑结构发生变化的报文。

说明:配置BPDU中包含了足够的信息保证设备完成生成树计算,其中包含重要信息如下:

  • 根桥ID:由根桥的优先级和MAC地址组成,每个STP网络中有且仅有一个根。
  • 根路径开销:到根桥的最短路径开销。
  • 指定桥ID:由指定桥的优先级和MAC地址组成。
  • 指定端口ID:由指定端口的优先级和端口名称组成。
  • Message Age:配置BPDU在网络中传播的生存期。
  • Max Age:配置BPDU在设备中能够保存的最大生存期。
  • Hello Time:配置BPDU发送的周期。
  • Forward Delay:端口状态迁移的延时。

一个根桥

树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念。

对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。

网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行转发,传达拓扑变化记录,从而保证拓扑的稳定。

两种度量

生成树的生成计算有两大基本度量依据:ID和路径开销。

  • IDID又分为:BID(Bridge ID)和PID(Port ID)。BID:桥IDIEEE 802.1D标准中规定BID是由16位的桥优先级(Bridge Priority)与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。在STP网络中,桥ID最小的设备会被选举为根桥。PID:端口IDPID由两部分构成的,高4位是端口优先级,低12位是端口号。PID只在某些情况下对选择指定端口有作用。 说明:端口优先级可以影响端口在指定生成树实例上的角色,详细介绍请见STP拓扑计算。
  • 路径开销路径开销(Path Cost)是一个端口量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。在一个STP网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。 说明:对于聚合链路,链路速率是聚合组中所有状态为Up的成员口的速率之和。

三要素选举

从环形网络拓扑结构到树形结构,总体来说有三个要素:根桥、根端口和指定端口。以下结合图1介绍三要素。

图1 STP网络结构

生成树协议实验报告_详解:STP生成树协议_第3张图片
  • 根桥RB(Root Bridge)根桥就是网桥ID最小的桥,通过交互配置BPDU协议报文选出最小的BID。
  • 根端口RP(Root Port)所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
  • 指定端口DP(Designated Port)指定桥与指定端口的描述见表1。

表1 指定桥与指定端口的含义

c2acfb233cfb052c2efc1239ca0d1ae2.png

如图2所示,AP1、AP2、BP1、BP2、CP1、CP2分别表示设备S1、S2、S3的端口。S1通过端口AP1向S2转发配置消息,则S2的指定桥就是S1,指定端口就是S1的端口AP1。与局域网LAN相连的有两台设备:S2和S3,如果S2负责向LAN转发配置消息,则LAN的指定桥就是S2,指定端口就是S2的BP2。

图2 指定桥与指定端口示意图

生成树协议实验报告_详解:STP生成树协议_第4张图片

一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根非指定端口都处于阻塞(Blocking)状态,它们只接收STP协议报文而不转发用户流量。

四个比较原则

STP选举有四个比较原则,构成消息优先级向量:{ 根桥ID,累计根路径开销,发送设备BID,发送端口PID }。

配置BPDU中携带本端口的主要信息如表2所示。

生成树协议实验报告_详解:STP生成树协议_第5张图片

STP网络中的其他设备收到配置BPDU消息后,将比较表2中所述的字段,四个基本比较原则如下:

说明:在STP计算过程中,都遵循数值越小越好的原则。

  • 最小BID:用来选举根桥。运行STP协议的设备之间根据表2所示根桥ID字段选择最小的BID。
  • 最小累计根路径开销:用来在非根桥上选择根端口。在根桥上,每个端口到根桥的根路径开销都是0。
  • 最小发送者BID:当一台运行STP协议的设备要在两个以上根路径开销相等的端口之中选择根端口时,通过STP协议计算,将选择接收到的配置消息中发送者BID较小的那个端口。如图1所示,假设S2的BID小于S3的BID,如果S4的A、B两个端口接收到的BPDU里面的根路径开销相等,那么端口B将成为根端口。
  • 最小PID:用于在根路径开销相同的情况下,不阻塞最小PID的端口,而是阻塞PID值较大的端口。如图3所示的情况下PID才起作用,S1的端口A的PID小于端口B的PID,由于两个端口上收到的BPDU中,根路径开销、发送交换设备BID都相同,所以消除环路的依据就只有PID。图3 应用到PID进行比较的拓扑
生成树协议实验报告_详解:STP生成树协议_第6张图片

五种端口状态

运行STP协议的设备上端口状态如表3所示。

生成树协议实验报告_详解:STP生成树协议_第7张图片
生成树协议实验报告_详解:STP生成树协议_第8张图片

注意:

当从MSTP模式切换到STP模式,运行STP协议的设备上端口支持的端口状态仍然保持和MSTP支持的端口状态一样,支持的状态仅包括Forwarding、Learning和Discarding,如表4所示。

生成树协议实验报告_详解:STP生成树协议_第9张图片

对于STP,影响端口状态和端口收敛有以下3个参数。

  • Hello Time运行STP协议的设备发送配置消息BPDU的时间间隔,用于设备检测链路是否存在故障。设备每隔Hello Time时间会向周围的设备发送hello报文,以确认链路是否存在故障。当网络拓扑稳定之后,该计时器的修改只有在根桥修改后才有效。新的根桥会在发出的BPDU报文中填充适当的字段以向其他非根桥传递该计时器修改的信息。但当拓扑变化之后,TCN BPDU的发送不受这个计时器的管理。
  • Forward Delay设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此,STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。

说明:Forward Delay Timer指一个端口处于Listening和Learning状态的各自持续时间,默认是15秒。即Listening状态持续15秒,随后Learning状态再持续15秒。这两个状态下的端口会处于Blocking状态,这正是STP用于避免临时环路的关键。

  • Max Age端口的BPDU报文老化时间,可在根桥上通过命令人为改动老化时间。Max Age通过配置BPDU报文的传输,可保证Max Age在整网中一致。运行STP协议的网络中非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。

说明:如果配置BPDU是根桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文经过一个桥,Message Age增加1。

STP报文格式

在前面的章节中介绍了桥ID、路径开销和端口ID等信息,所有这些信息都是通过BPDU协议报文传输。

  • 配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
  • TCN BPDU是在设备检测到网络拓扑发生变化时才发出。

BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC头,IEEE为STP保留了DSAP和SSAP为0x42的值,UI为0x03,LLC之后是BPDU报文头。以太网数据帧格式如图1所示。

生成树协议实验报告_详解:STP生成树协议_第10张图片

STP报文格式

在前面的章节中介绍了桥ID、路径开销和端口ID等信息,所有这些信息都是通过BPDU协议报文传输。

  • 配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
  • TCN BPDU是在设备检测到网络拓扑发生变化时才发出。

BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC头,IEEE为STP保留了DSAP和SSAP为0x42的值,UI为0x03,LLC之后是BPDU报文头。以太网数据帧格式如图1所示。

生成树协议实验报告_详解:STP生成树协议_第11张图片
生成树协议实验报告_详解:STP生成树协议_第12张图片

配置BPDU在以下3种情况下会产生:

  • 只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
  • 当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
  • 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。

TCN BPDU

TCN BPDU内容比较简单,只有表1中列出的前3个字段:协议号、版本和类型。类型字段是固定值0x80,长度只有4个字节。

TCN BPDU是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点。TCN BPDU在如下两种情况下会产生:

  • 端口状态变为Forwarding状态,且该设备上至少有一个指定端口。
  • 指定端口收到TCN BPDU,向根桥复制TCN BPDU。

STP拓扑计算

生成树初始化过程

网络中所有的设备使能STP协议后,每一台设备都认为自己是根桥。此时,每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于Listening状态。所有设备通过交换配置BPDU后,进行选举工作,选出根桥、根端口和指定端口。

  1. 根桥的选择如图1所示,用{}标注的四元组表示了由根桥ID(图中以S1_MAC和S2_MAC代表两台设备的BID)、累计根路径开销、发送者BID、发送端口PID构成的有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送,默认的时间是2秒。

说明:由于每个桥都认为自己是根桥,所以在每个端口所发出的BPDU中,根桥字段都是用各自的BID,Root Path Cost字段是累计的到根桥的开销,发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。

生成树协议实验报告_详解:STP生成树协议_第13张图片

一旦某个端口收到比自己优的BPDU报文,此端口就提取该BPDU报文中的某些信息更新自己的信息。该端口存储更新后的BPDU报文后,立即停止发送BPDU报文。

当端口发送BPDU报文时,设备填充Sender BID字段的总是自己的BID,而填充Root BID字段的是认为自己是根桥的BID。如图1所示,S2的端口B由于接收到了更好的BPDU,从而认为此时S1是根桥,然后S2的其他端口再发送BPDU的时候,在根桥字段里面填充的就是S1_BID了。此过程不断交互进行,直到所有交换设备的所有端口都认为根桥是相同的,说明根桥已经选择完毕。如图2所示根桥选举示意图。

生成树协议实验报告_详解:STP生成树协议_第14张图片

2.根端口的选择

每个非根桥设备都要选择一个根端口,根端口对于一个设备来说有且只有一个。

根端口的本质是距离根桥最近的端口,这个最近的衡量标准是靠累计根路径开销来判定的,即累计根路径开销最小的端口就是根端口。如图3所示根端口选举示意图。

说明:

累计根路径开销的计算方法:端口收到一个BPDU报文后,抽取该BPDU报文中累计根路径开销字段的值,加上该端口本身的路径开销。所谓该端口本身的路径开销只体现直连链路的开销,这个值是端口量,可以人为配置的。如果有两个以上的端口计算得到的累计根路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。

生成树协议实验报告_详解:STP生成树协议_第15张图片

3.指定端口的选择

在网段上抑制其他端口(无论是自己的还是其他设备的)发送BPDU报文的端口,就是该网段的指定端口。如图1所示,假定S1的MAC地址小于S2的MAC地址,则S1的端口A会成为指定端口。在一个网段上拥有指定端口的设备被称作该网段的指定桥。S1-S2间网段的指定桥是S1。

网络收敛后,只有指定端口和根端口可以处于转发状态。其他端口都是Blocking状态,不转发用户流量。

根桥的所有端口都是指定端口(除根桥物理上存在环路)。如图4所示指定端口选举示意图。

生成树协议实验报告_详解:STP生成树协议_第16张图片

拓扑稳定之后

拓扑稳定后,根桥仍然按照Hello Timer规定的时间间隔发送配置BPDU报文,非根桥设备从根端口收到配置BPDU报文,通过指定端口转发。如果接收到的优先级比自己高的配置BPDU,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息。

STP拓扑变化

STP拓扑变化处理过程如图5所示。

生成树协议实验报告_详解:STP生成树协议_第17张图片
  1. 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送TCN BPDU报文。
  2. 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到TCN BPDU报文,但不会处理。
  3. 上游设备会把配置BPDU报文中的Flags的TCA位设置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
  4. 上游设备复制一份TCN BPDU报文,向根桥方向发送。
  5. 重复步骤1、2、3、4,直到根桥收到TCN BPDU报文。
  6. 根桥把配置BPDU报文中的Flags的TC位置1后发送,通知下游设备直接删除桥MAC地址表项。

说明:

  • TCN BPDU报文主要用来向上游设备乃至根桥通知拓扑变化。
  • 置位的TCA标记的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文。
  • 置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥MAC地址表项,从而达到快速收敛的目的。

以图4为例说明根桥、根桥的指定端口分别发生故障时,网络拓扑如何收敛。

  • 根桥发生故障
生成树协议实验报告_详解:STP生成树协议_第18张图片
  • 如图6所示,根桥发生故障,设备S2和设备S3之间将重新选举根桥。设备S2和设备S3之间根据交互的配置BPDU报文,选出根桥。
  • 根桥指定端口发生故障

图7 拓扑变化示意图-根桥指定端口发生故障

生成树协议实验报告_详解:STP生成树协议_第19张图片

如图7所示,根桥的指定端口port1发生故障,S2和S3通过交互配置BPDU报文将port6选举为根端口。

同时,port6变为forwarding状态后,会向外发送TCN报文,根桥收到TCN报文后向其他设备发送TC报文,通知其他设备直接删除MAC表项。

你可能感兴趣的:(生成树协议实验报告)