分享

生成树协议配置管理-1

 Enzoleung 2019-07-01

生成树协议——STP——Spanning Tree Protocol,主要以理解其原理和算法为主。

生成树协议就是用来消除网络中可能存在的二层环路,以防止广播风暴,或者数据传输死循环。有STP(生成树协议)、RSTP(快速生成树协议)和MSTP(多生成树协议)

    STP(SpanningTree Protocol,生成树协议)是根据IEEE802.1D标准建立的,用于在局域网中消除数据链路层环路的协议。运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择地对某些端口进行阻塞,以最终实现将环路网络结构修剪成无环路的树形网络结构,防止报文在环路网络中不断增生和无线循环

形成环路的结构:

环路导致的后果:

(1)广播风暴导致网络不可用

(2)MAC地址表震荡导致MAC地址表项被破坏

STP基本概念

STP中涉及许多基本概念,如根桥、桥ID、桥优先级、根端口、指定端口、端口状态、端口ID、端口优先级等——“一个根桥、两种度量、三个选举要素、四个比较原则和五种端口状态”一句话形容。

1、一个根桥

树形的网络结构必须有一个树根,STP引入了根桥(RootBridge)概念。对于一个运行STP协议的网络,根桥在全网中只有一个,就是网络中具有最小桥ID(BID)的桥。网络中除根桥外的其他桥统称为非根桥。

一般是需要将环路中所有交换机当中性能最好的一台设置为根桥交换机,网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,,其他设备仅对该报文进行转发,传达拓扑变化记录,从而保证拓扑的稳定。

2、两种度量

STP生成树的计算中要确定两个方面:一是确定哪台交换机将成为根桥,在非根桥的交换机中哪些端口具有收、发数据的功能,哪些端口又该被阻塞,以便最终形成无环路的树形结构交换网络。STP生成树计算所依据的就是STP中的ID和路径开销

 

(1)ID:STP中的ID包括:BIDBridge ID,桥IDPIDPort ID,端口ID两种。

BID:BID一共64位,16位为桥优先级(BridgePriority)值,低48位为桥背板MAC地址BID决定了哪台交换机将成为交换网络中的根桥。在STP中规定BID最小的交换机将被选举为根桥。根桥选举中,首先要比较的就是高16位的桥优先级,它是一个用户可以设定的参数,数值范围从0到61440,值越小,优先级越高。如果各交换机的桥优先级一样才比较他们的BID中桥背板MAC地址,MAC地址最小的将成为该交换网络中的根桥。

PID:PID由两部分构成,4位是端口优先级,低12位是端口号。PID只在某些情况下对选择“指定端口”有作用。即在选举指定端口时,两个端口的根路径开销和发送BPDU交换机的BID都相同的情况下,比较端口的PID,PID小者为指定端口。端口优先级可以影响端口在指定生成树实例上的角色。(这里可能有错误的,高8位是端口优先级

(2)路径开销:路径开销(PathCost)是一个端口参数,由具体端口的链路速率决定(对于聚合链路,链路速率是聚合组中所有状态为Up的成员口的速率之和),是STP协议用于选择链路的参考值。STP协议通过计算各端口的路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。

在一个运行STP协议的交换网络中,某端口到根桥累计的路径开销就是所经过的各个桥上各端口的路径开销累加值,这个值叫做根路径开销(Root Path Cost。根桥上所有端口的根路径开销,以及同交换机上不同端口间的路径开销值均为零。

3、三个选举要素

由环形网络拓扑结构修剪为树形结构,需要使用STP中的3个选举要素,即根桥、根端口和指定端口。

PC为Path Cost,即“路径开销”,RPC为Root PathCost,即“根路径开销”。

(1)根桥

根桥(Root Bridge,RB就是BID最小的桥设备,通过交互配置BPDU报文来选出最小的BID,如上图的S1为根桥。

(2)根端口

根端口(Root Port,RP负责向根桥方向转发数据,是当前桥设备上去往根桥“根路径开销”(Root Path Cost,RPC)值最小的端口,也即非根桥的交换机上离根桥“最近”的端口。——通过这一段,是否可以这样说,根端口不在根桥上,在非根桥上

当多个端口根路径开销相同时,会先比较指定桥ID,对应最小指定桥ID的端口会成为根端口;当指定桥ID也相同时,才会比较指定桥上的PID,指定桥上具有最小PID的对应端口会成为根端口。端口优先级的取值范围为0到255,值越小,端口优先级越高。在一个运行STP协议的设备上根端口有且只有一个,但根桥上没有根端口。——(PID的高4位是端口优先级,怎么会出现端口优先级取值范围为0到255呢??)

(3)指定端口

指定端口”(DesignatedPort,DP)与“指定桥”(Designated Bridge,DB)息息相关,但不是一一对应,如何确定要分以下两种情况。

①对于一台设备而言,与本机直接相连并且负责向本机转发配置消息的设备就是指定桥,指定桥中向本桥转发配置消息的端口就是指定端口。(这个概念说的很笼统)

②对于一个局域网而言,负责向本网段转发配置消息的设备就是指定桥,指定桥上向本网段转发配置消息的端口就是指定端口。

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

根桥上的所有端口都是指定端口

4、四个比较原则

STP生成树的生成计算中依据的就是各个端口在发送配置BPDU中所携带的4个优先级向量{根桥ID,累计根路径开销,发送者BID,发送端口PID}

(1)根桥ID:每个STP网络中有且仅有一个根。

(2)累计根路径开销:发送配置BPDU的端口到根桥的距离

(3)发送者BID:发送配置BPDU的设备的BID

(4)发送端口PID:发送配置BPDU的端口的PID。

STP网络中的其他设备收到配置BPDU消息后,将比较这些字段值,然后按照以下4个基本比较原则(在STP计算过程中,遵循数值越小越好的原则)。

(1)最小BID:用来选举根桥。运行STP协议的设备之间根据各自发送的配置BPDU中BID字段值最小的作为根桥。根桥的选举原则是通过BID中的桥优先级和桥MAC地址进行比较,先进行桥优先级比较,优先级最高(优先级最小)的将成为根桥;桥优先级相同再比较桥MAC地址,MAC地址最小的将成为根桥。

(2)最小累计根路径开销:用来在非根桥上选择根端口。在运行STP协议的设备上到达根桥的总路径开销值最小的端口作为该桥的根端口。在根桥上,每个端口到根桥的根路径开销都是0,所以根端口都是在指定桥上的,而不是在根桥上的。

(3)最小发送者BID:用来在非根桥上选择指定桥和根端口。当一台运行STP协议的设备要在两个以上根路径开销相等的非根桥中选择指定桥,要在接收配置BPDU的多个端口之中选择根端口时,通过STP协议计算将选择接收到的配置BPDU中发送者的BID较小的那个桥作为自己的指定桥,接收该配置BPDU的端口就作为自己的根端口。

如图8-4,假设S2的BID小于S3的BID,如果S4的A、B两个端口接收到的BPDU里面的根路径开销相等,那么S2将成为S4的指定桥,S4端口B将成为S4的根端口。

(4)最小PID:用于在根路径开销相同的情况下,阻塞PID值较大的端口,PID值最小的端口将成为该桥上的指定端口

5、五种端口状态

运行STP协议的设备上有以下5种端口状态

(1)Forwarding:转发状态,此时端口既转发用户流量也转发BPDU报文。只有根端口或指定端口才能进入Forwording状态

(2)Learning:学习状态,此时设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。这是一种过渡状态,增加Learning状态为防止临时二层环路。

(3)Listening:监听状态,此时设备正在确定端口角色,将选举出根桥、根端口和指定端口。这是一种过渡状态。

(4)Blocking:阻塞状态,此时端口仅可接收并处理BPDU,不转发用户流量。

(5)Disabled:禁用状态,此时端口不仅不能转发BPDU报文,也不能转发用户流量。端口状态为Down。

①:端口从禁用状态开始初始化或者使能后首先进入阻塞状态。

②:在端口突然被禁用或者链路失效时将从当前其他所有状态下直接进入到禁用状态。

③:在端口被选举为根端口或指定端口后,由阻塞状态进入到监听状态。

④:在端口不再是根端口或指定端口时,会从当前其他状态直接进入阻塞状态。

⑤:当新选出的根端口和指定端口要经过两倍的转发延时(即从监听状态进入学习状态,再从学习状态进入转发状态)后才能进入转发状态,以确保新的配置信息传遍整个网络,防止临时环路的产生。

STP的3个定时器

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

1、Hello Time(Hello定时器)

Hello定时器是指运行STP协议的设备发送配置BPDU的时间间隔,即设备会每隔HelloTime时间向周围的设备发送配置消息BPDU,以确认链路是否存在故障。

当网络拓扑稳定之后,该定时器的修改只有在根桥修改后才有效。新的根桥会在发出的BPDU报文中填充适当的字段以向其他非根桥传递该定时器修改的信息。当拓扑变化之后,TCN BPDU的发送不受这个定时器的管理。

2、ForwardDelay(转发延时)

转发延时是设备进行状态迁移的延迟时间,是指一个端口处于Listening和Learning状态的各自持续时间,缺省是15s。即Listening状态持续15s,随后进入Learning状态,然后再持续15s。

链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。但是重新计算得到的新配置消息不可能立即传遍整个网络,如果此时新选出的根端口和指定端口就立即开始数据转发的话很可能造成临时的二层环路。为此,STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过两倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。

3、Max Age(最大生存时间)

最大生存时间是指端口的BPDU报文的老化时间,可在根桥上通过命令人为改动老化时间。

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

当配置BPDU从根桥发出时报文中的MessageAge值为0。当其他桥收到配置BPDU时,Message Age值为从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际现实中,配置BPDU报文每经过一个桥,Message Age增加1。

STP BPDU报文

STP协议采用的是BPDU(BridgeProtocol Date Unit,桥协议数据单元)类型报文,也称为配置消息。STP就是通过在设备之间传递BPDU来确定最终修剪完成的网络拓扑结构。STP BPDU又分为两大类。

(1)配置BPDU(ConfigurationBPDU:用来进行生成树计算和维护生成树拓扑的报文,是初始的阶段中各交换机发送的BPDU消息。

(2)TCN BPDU(TopologyChange Notification BPDU:当拓扑结构发生变化时,下游设备用来通知上游设备网络拓扑结构发生变化的报文。它是当拓扑稳定后,网络中出现了链路故障,网络拓扑发生改变时所发送的BPDU消息。

“配置 BPDU”是一种心跳报文,只要端口使能STP协议,则设备就会按照Hello Time定时器规定的时间间隔从指定端口发送配置BPDU;而TCN BPDU是在设备检测到网络拓扑发生变化时才发出的。STP BPDU报文被封装在以太网数据帧中,此时目的MAC地址是组播MAC地址:01-80-C2-00-00-00LLC头部中IEEE为STP保留的DSAP和SSAP值均为0x42,Control为0x03

1、配置BPDU

在STP中通常所说的BPDU报文多指配置BPDU。在初始化过程中每个桥都主动发送配置BPDU。但在网络拓扑稳定后只有根桥主动发送配置BPDU其他桥收到上游传来的配置BPDU后才触发发送自己的配置BPDU。配置BPDU在以下3种情况下会产生

(1)只要端口使能STP,则配置BPDU就会按照HelloTime定时器规定的时间间隔从指定端口发出

(2)当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。

(3)当指定端口收到比自己差的配置BPDU,会立刻向下游设备发送自己的配置BPDU。

配置BPDU的长度至少要35个字节,包含了ID、路径开销和端口ID等参数,如下图。只有当“发送者BID”或“发送端口PID”两个字段中至少有一个和本桥接收端口不同,所收到的这个BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。

2、TCN BPDU

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

(1)端口状态变为Forwarding状态,且该设备上至少有一个指定端口。

(2)指定端口在收到TCNBPDU后向根桥复制TCN BPDU。

TCN BPDU中的内容比较简单,只有前3个字段:协议ID、协议版本和消息类型,长度只有4个字节,且“消息类型”字段是固定值0x80

3、BPDU优先级

收到其他桥发来的配置BPDU时会视情况对自己的配置BPDU进行更新,那么当桥的多个端口收到多个不同的配置BPDU时该以哪个为准呢?这就要使用配置BPDU的优先级来区分。即当同一桥收到了多个不同的配置BPDU优先级高的BPDU则采用,其他的将被丢弃。假定有两条配置BPDU X和Y,则他们的比较顺序如下:

(1)如果X的根桥ID小于Y的根桥ID,则X优于Y。

(2)如果X和Y的根桥ID相同,但X的根路径开销小于Y,则X优于Y。

(3)如果X和Y的根桥ID,以及路径开销都相同,但X的ID小于Y,则X优于Y。

(4)如果X和Y的根桥ID、根路径开销以及桥ID都相同,但X的端口ID小于Y,则X优于Y。

 

STP拓扑计算原理深入剖析

STP协议拓扑结构生成树的计算过程要区分初始化阶段拓扑结构稳定后这两个阶段。

 

一、生成树初始化阶段的角色选举

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

1、根桥的选举

“根桥的选举”就是在交换网络中所有运行STP协议的交换机上选举出一个唯一的根桥。“根桥”是STP生成树的最顶端交换设备,是STP生成树的“树根”。根桥的选举依据是各桥的配置BPDU报文中BID(桥ID字段值,BID字段值最小的交换机将成为根桥。而桥配置BPDU报文中BID字段共有8个字节,即2个字节的桥优先级和6个字节的桥背板MAC,其中桥优先级的取值范围是0~65535,缺省值是32768。在进行BID比较时,先比较桥优先级,优先级值小的为根桥;当桥优先级值相等时,再比较桥的背板MAC地址,MAC地址小的为根桥。

在初始化过程中,根桥的选举要经历两个主要过程:一是每桥上确定自己的配置BPDU;二是在整个交换网络中通过各桥自己发送的配置BPDU进行比较选举整个交换网络中的根桥。

(1)桥配置BPDU的确定。一开始每个桥都认为自己是根桥,所以每个端口所发出的配置BPDU报文中,“ID”字段都是用各自的BID,“根路径开销字段值均为0,“发送者BID”字段自己的BID,“发送端口PID”字段是发送该BPDU端口的端口ID。——也就是说,一开始的时候,每个桥都认为自己是根桥,所以配置BPDU中的RootID和BridgeID是相同的,是本桥的BridgeID,而BridgeID按照前面的说法,共8个字节,前两个字节是优先级,后6个是本设备(即本交换机)的背板MAC地址,这里需要搞明白交换机的背板MAC是什么;PortID是发送BPDU的端口的相关信息,共2个字节,高4位是优先级,后12位是端口号;而根路径开销RPC都是0,因为本设备被认为是根桥,而在根桥上,每个端口到根桥的根路径开销都是0

每个桥在向外发送自己的配置BPDU的同时也会收到其他桥发送的配置BPDU。但桥端口并不会对收到的所有配置BPDU都用来更新自己的配置BPDU,而是先会进行配置BPDU优先级比较。当端口收到的配置BPDU比本端口的配置BPDU的优先级低时,将丢弃所收到的这个配置BPDU,仍保留自己原来的配置BPDU,否则桥将收到的配置BPDU作为该端口的配置BPDU。然后,桥再将自己所有端口的配置BPDU进行比较选出最优的BPDU作为本桥的配置BPDU

端口第一次发送配置BPDU,应该是所有的信息相同,除了PortID外,在各个端口收到其他桥设备发来的配置BPDU之后,端口自身的配置BPDU与收到的配置BPDU进行比较后取最优的,然后各个端口的最后取优的配置BPDU进行比较,最优的作为本桥的配置BPDU,在经过各个端口发送出去,发送的时候,配置BPDU中应该只有PortID不同;然后依次迭代。

端口发送的应该也是设备的配置BPDU。

(2)根桥的确定。每个桥的最优配置BPDU确定后,以后各桥间交换的配置BPDU都是各自最优的配置BPDU。如下图,用{}标注的四元组表示了由根桥BID(图中以S1_MAC和S2_MAC代表两台设备的BID)、累计根路径开销发送者BID(SBID)、发送端口PID构成的有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送,缺省的时间是2s。

一旦某个端口收到比自己优的配置BPDU报文,此端口提取该配置BPDU报文中的某些信息更新自己的信息。该端口存储更新后的配置BPDU报文后立即停止发送自己的配置BPDU报文。图中如果S2的端口B由于接收到了来自S1的更好的配置BPDU,从而认为此时S1是根桥,然后S2的其他端口再发送BPDU的时候,在根桥ID字段里面填充的就是S1-BID了。此过程不断交互进行,直到所有交换设备的所有端口都认为根桥是相同的,说明根桥已经选择完毕。——也就是说S2的B端口收到S1的A端口发来的配置BPDU后,发现S1的配置BPDU更优,则跟新自己的配置BPDU,同时S2交换机比较所有端口的配置BPDU,以最优的作为本设备的配置BPDU,所有端口发送配置BPDU时以设备配置BPDU为准,而作为接收最优BPDU的端口应该停止发送配置BPDU。

2、根端口的选举

“根端口的选举”就是在所有非根桥上的不同端口之间选举出一个到根桥最近的端口。这个“最近”的衡量标准不是根据到达根桥所经过的桥数,而是根据端口到根桥的累计根路径开销最小来判断的。实质上是非根桥上接收到最优配置BPDU的那个端口即为根端口每个非根桥设备都要选择一个根端口根端口对于一个设备来说有且只有一个

累计根路径开销的计算方法累加从端口到达根桥所在路径的各端口根桥上的指定端口外各段链路路径开销值(也称链路开销值。要特别注意的是,同一交换机上不同端口之间的路径开销值为0。如果同一桥上有两个以上的端口计算得到的累计根路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。

如上图所示交换网络中,S1为根桥,这时就需要选举S2和S3非根桥的根端口。S2到达根桥S1有两条路径:一条是通过port5端口直接到达S1的port1端口,其累计根路径开销和容易得出,就是port5端口自身的路径开销值,即图中标的是19。另一条是从port6端口发出,经过S3的port3和port4端口,到达根桥S1的port2端口,其累计根路径开销值就是port6、port3和port4端口的路径开销值之和。从图中的标注可知道,port6端口的路径开销值为19,因为port3到port4端口在同一交换机S3上,所以port3到port4端口的路径开销值为0port4到S1的port2端口的路径开销值也为19,这样port6端口累计根路径开销值就是19+0+19=38,很明显高于port5端口的累计跟路径开销值19,所以port5端口最终选举为S2的根端口。用同样的方法可以得出S3桥上的根端口为port4。——对于算法的理解:首先累计根路径开销是各段链路的路径开销和,那么怎么理解路径开销呢?从S2的port5到S1的port1端口之间的链路路径开销,就是port5端口自身的路径开销值来看,因为每个端口都有速率配置信息,按照前面的学习,端口的速率配置一般是自协商确定的,两端的端口速率应该是一样的,这样所谓的链路路径开销就是一个端口的速率所代表的开销值,这里取每一段链路起点端口的速率值代表的开销值,如S2.port5——>S1.port1,选port5的PC值(Path Cost,路径开销),这个值在BPDU中怎么体现??直接填在RPC字段中吗?这里如果S2.port3是10M的速率,最后协商10M,则其PC值为100。

(百度上的:根路径成本(开销)-是网桥到根网桥的路径上所有链路的成本之和,10Gbps=1,1Gbps=2,100Mbps=19,10Mbps=100。)

IEEE标准路径开销表:

链路速度

开销(最新修订)

开销(以前)

10Gbps

2

1

1Gbps

4

1

100Mbps

19

10

10Mbps

100

100

所以,链路路径开销就是链路的速率(端口速率——两端应该相同)对应上表的数据,两个端口在同一设备上的,路径开销为0,然后就这样一段一段链路开销相加。关键是在实际设备中是怎样实现的?

3、指定端口的选举

“指定端口的选举”是在每一个物理网段不同端口之间选举出一个指定端口。“指定端口”与“根端口”相对,他可以理解为离下游设备最近的端口,是本物理网段(这里的“网段”是指一个交换机端口所连接的所有设备)中唯一可以接收下游设备数据的端口。它是依次根据以下三项条件来断定的。

(1)某网段到根桥的路径开销最小。

(2)接收数据时发送方(也就是链路对端的桥)的桥ID最小

(3)发送方端口ID最小(端口ID有16位,它是由8位端口优先级和8位端口编号组成的,其中端口优先级的取值范围是0~240,缺省值是128,可以修改,但必须是16的倍数)。

如图8-10所示,假定S1的MAC地址小于S2的MAC地址,则S1为根桥。根据上面的第一项指定端口判定原则可以得出S1的端口A会成为指定端口。在一个物理网段上拥有指定端口的设备被称为该网段的指定桥,由此可以得出图8-10所示的S1-S2间网段的指定桥是S1。

网络收敛后,只有指定端口和根端口可以处于转发状态。其他端口都是Blocking状态,不转发用户流量。根桥的所有端口都是指定端口(除根桥物理上存在环路)。——根桥也可能是指定桥。

看图8-13所示交换网络中指定端口的选举。S1为根桥,这样很容易根据前面列出的指定端口判断条件中的第一项得出在S2-S1网段,以及S3-S1网段中的指定端口分别为S1的port1和port2端口。而在S3-S2网段中,由于S3和S2桥到达根桥的路径开销均为19,所以这里要比较前面提到的第二项条件,即发送发的桥ID(即图中标识的SBID)大小了。S3的port3的发送方的桥ID为32768.000-0C12-3457,而S2的port6的发送方的桥ID为32768.0C12-3458,经过比较发现S3的port3的发送方的桥ID更小,所以最终选举为S3-S2网段的指定端口。这样一来就可确定port6端口为阻塞端口了。——对于S2-S1网段,以及S3-S1网段中的指定端口分别为S1的port1和port2端口,根据的是判断条件中的第一项:某网段到根桥的路径开销最小。指定端口与指定桥相关,除根桥外,其他设备都要有对应的指定桥,在指定桥上有指定端口。至于判断的第一项,网段到根桥的路径开销概念有些模糊,

拓扑发生变化后的角色选举

拓扑稳定后根桥仍然按照Hello定时器规定的时间间隔发送配置BPDU报文非根桥设备从根端口收到配置BPDU报文,通过指定端口转发。如果接收到优先级比自己高的配置BPDU,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息。——对于根桥,其所有端口都是指定端口,所以也是指定端口转发配置BPDU。同一设备中根端口接收,指定端口转发,报文在交换机内部交换。

在网络拓扑结构发生变化后,下游设备会不断地向上游设备发送TCN BPDU报文上游设备在收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其他端口也有可能收到TCN BPDU报文,但不会处理。上游设备会使用Flags字段中TCA(拓扑变化确认)标志位置1的配置BPDU报文发送给下游设备,告知下游设备停止发送TCN BPDU报文。与此同时,上游设备复制一份TCN BPDU报文,向根桥方向发送。当根桥收到TCN BPDU报文后,根桥会使用Flags字段中TC(拓扑变化)标志位置1的配置BPDU报文向对应下游设备回送,通知下游设备直接删除发生故障的端口的MAC地址表项。——即阻止故障端口的做法就是在交换机的MAC地址表中删除对应端口MAC。

由此可以看出,在发生拓扑变化时,下游设备使用TCN BPDU报文向上游设备通知,但上游设备使用的是TC,或TCA位置1配置BPDU,而不是TCN BPDU通知下游设备。即TCN BPDU报文用来向上游设备乃至根桥通知拓扑变化;TCA标志位置1的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文;TC标志位置1的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,要求下游设备直接删除有故障的端口的MAC地址表项,从而达到快速收敛的目的。——根设备发送TC置1的配置BPDU,直接下游设备是否转发此报文到它的下游设备?上游设备复制一份TCN BPDU向根桥方向发送,对应的上游设备是否也发TCA标志置1的配置BPDU到转发的设备??

然后找到了一篇以前的资料,总结保存如下:

生成树协议产生的背景

 

 透明网桥三大功能

1、地址学习功能

网桥基于目标MAC(介质访问控制)地址做出转发决定,所以它必须“学习”MAC地址的位置,这样才能准确地做出转发决定。每个以太网物理网段上的工作站都将对所有在网段上传输的帧进行监听。当网桥与物理网段连接时,网桥会对它监测到的所有帧进行检查。网桥读取帧的源MAC地址字段后便做出一个假定:如果它监测到一个来自特殊端口上节点的帧,发送帧工作站的信息就必须驻留在这个端口上。网桥将这个信息放置在一个网桥表(SAT—Source Address Table)中,它在将条目引入网桥表之前,还将执行帧检验序列(FCS—Frame Check Sequence),以阻止错误的条目进入网桥表。为了适应拓扑的变化,网桥中有一个进程定期扫描地址表,清除早于当前若干时间的全部表项

2、转发功能和过滤功能

使用网桥表(SAT表)后,网桥可以作出转发或不转发(即过滤)帧的决定:

·  检查数据包的DA是否在网桥表中;

·  如果在SAT中且端口号与收到此包的端口号不同,则将此数据包转发到那个端口,发送到网络。

·  如果在SAT表中且端口号与收到数据包的端口号相同,则丢弃此包。(这个有点异议,从端口来,又从端口出,自己ping自己的情况呢??

·  如果在SAT表中没有,则此数据包将被转发到交换机上的所有端口。(应该不包括接收到帧的端口

3、消除循环

由于网络中存在冗余链路,因此可能导致报文在网络中循环转发,甚至使得交换机过载。

 STP原理

STP是通过在一个网络中所有参与STP的交换机之间交换桥协议数据单元BPDU(Bridge Protocol Data Unit)来实现的。通过交换BPDU消息可以实现:

1)为稳定的生成树拓扑结构选择一条根桥;

2)为每个交换网段选择一台指定交换机;

3)通过将冗余的交换机端口置为Blocking来消除网络中的环路。

 

 BPDU报文格式

BPDU报文格式—IEEE 802.1d  BPDU

协议及状态信息:

Protocol ID:取值0,标识stp协议,占用2个bytes;

Version ID:标准指定为0,占用1个byte;

BPDU Type:填充0值,占用1个byte;

BPDU Flags:占用1个byte,只用前2个bits,TC(topology change)位指示拓扑结构改变,TCA(topology change acknowledgment)位表示收到对端交换机拓扑改变指示位而做出确认。

根网桥信息:

Root Priority:占用2个bytes,标识根网桥的优先级,取值为0-65535,默认值一般为32768;

Root ID:占用6个bytes,作为根网桥的标识,一般采用根网桥的MAC地址作为标识;

Root Path Cost:路径费用,占用4个bytes,表示从该网桥到根网桥的路径费用总和;

本网桥信息:

Bridge Priority:占用2个bytes,表示本网桥的优先级,取值为0-65535,默认值一般为32768 ;

Bridge ID:占用6个bytes,表示本网桥的标识,一般采用MAC地址作为网桥标识;

端口信息:

Port ID:包括两个部分,端口优先级及端口标识,各占用1个byte;端口优先级取值为0-255,默认值为128;(这里描述了PID的组成,优先级占用1个字节,而不是高4位,与前面的错误对应

记时器:

Message Age:占用2个bytes,表示根网桥发送有效BPDU报文的时间;

Max Age:占用2个bytes,表示删除根网桥配置信息等待的最大时间;

Hello Time:占用2个bytes,表示BPDU报文的发送周期;

Forword Delay:占用2个bytes,表示在过滤数据库中,指示网络拓扑改变的BPDU动态条目的老化时间;同时也表示交换机端口从监听状态到学习状态或从学习状态到转发状态所经历的时延。

 

生成树算法(STA—Spanning Tree Algorithm)

STA将具有最小标示值的网桥作为根网桥,在其它所有网桥上确定根端口,为每一个交换网段确定指定网桥及其指定端口

STA是由DEC公司开发的,后来成了IEEE 802.1d的基础。但是,IEEE 802.1d算法与DEC的算法并不是兼容的。这里将使用IEEE 802.1d算法作为标准的桥接协议。

STA的目的是创造一个“非循环”的环境。就像现实生活中的树,所有树干的底部都有树根,树干朝上分成大树枝,大树枝再分成小树枝等等。所以,树枝从来都不会蔓延到其他树枝,即形成一个“非循环”的环境。

几个重要概念

· 根网桥:为了创造一个“非循环”的环境,需要定义一个参考点,这就是根网桥。

· 根端口:离根网桥最近的端口为根端口。

· 指定网桥:在每一个网段中,离根网桥最近的网桥为指定网桥。(这里说的是每一个网段,怎么理解每一个网段呢?

· 指定端口:与指定网桥连接的端口为指定端口。(这里也很模糊,到低是指定桥上的端口是指定端口,还是说与指定网桥连接的对端设备上的端口是指定端口?经过理解,我觉得是指定网桥上的端口是指定端口。

STA算法功能:

1)STA将具有最小标示值的网桥作为根网桥,即标示值越小,优先级越高。

2)STA将在其他所有网桥上确定根端口。网桥的根端口是指用最小合计路径代价到达根的网桥端口。该值也叫根路径代价。

3)STA将确定指定网桥及其指定端口。指定网桥是指在每一个LAN上能够提供最小根路径代价的网桥。在某些情况下,两个或多个网桥具有相同的根路径代价。STA选择具有最高优先级标示符(值最小)的网桥作为指定网桥;如果标示符也相同,那么STA选择具有最高优先级的网桥;如果网桥优先级相同,那么STA将使用端口标示符作为决定的标准。

 

STA工作过程

1、根网桥的选举

比较所有参与者的桥ID,最小者为根桥。Bridge ID组成:

Bridge Priority(2 Bytes)+ bridge MAC(6 Bytes)

根桥上的参与STP计算的端口将被设定为Forwarding状态。

Switch_A、Switch_B、Switch_C中,Switch_B的ID最小,所以被选为根网桥。

 

2、选定根端口,与根桥建立关联

如果一个交换机能在多个端口上收到同一个BPDU,就说明存在到根桥的冗余路径。这时就要从这些端口中选择一个作为根端口,被选为根端口的端口将被设定为Forwarding状态。(这里的同一个BPDU如何判断?我的理解是通过RID、RPC、BID三元组来比较,不包括PID,因为不同端口接收到的配置BPDU,其PID应该也不同,如果三元组相同,则为同一个BPDU,这时通过PID选择哪个端口为根端口。如果三元组不同,先比较RID,RID最优的为根端口,但是如果根设备已经选择出来,则RID应该是一样的,RID不一样是在选择根设备阶段才出现的。所以选定根端口阶段只比较RPC与BID二元组就行了。先比较RPC,小着优先,如果RPC相同,比较BID,小者优先,对应的端口就是根端口。下面的选择依据很好的说明了这一点,应为直接就是从根路径开销开始比较,即RPC,然后是对端桥ID,即BID,然后是对端PID,最后是自己一端的PID。

选择的依据是分别比较:

1)到达根桥的路径开销;

2)端口所连对端网桥ID;

3)端口所连对端端口ID;

4)自己的端口ID。

其中端口ID为端口优先级(port Priority)+ 端口号(port number)

根端口的选择还比较好理解,就是设备本身对收到的BPDU进行比较最后选择根端口。象上图,Switch_D能够从1、2和到Switch_C的端口三个端口接收到BPDU,然后进行比较选择。

3、选定指定桥和指定端口

如果一个LAN可以通过多个交换机到达根桥,他将选择其中的一个作为其指定桥,LAN与指定桥相连的端口就是该LAN的指定端口LAN的指定端口也将被设定为Forwarding状态。(这里不好理解的是一个LAN是什么意思??前面做过这样的解释:指定网桥:在每一个网段中,离根网桥最近的网桥为指定网桥。指定端口:与指定网桥连接的端口为指定端口。拿上面的图来说,一个LAN是否可理解为一台交换机的所有端口,如Switch_B的LAN就是1、2和根端口组成一个LAN?对Switch_B来说能够通过Switch_A和Switch_D到达根桥,在这两个交换机中选择指定桥,选择的依据如下面顺序。因为Switch_A直接就是根桥,路径开销最小,Switch_A为Switch_B的指定桥,也就是说,根桥可以是指定桥,或者说,根桥一定是指定桥,Switch_A连接Switch_B的端口就是指定端口,或者说,根桥上的所有端口都是指定端口。对于Switch_D来说,可通过Switch_B和Switch_C到达根桥,而RPC相同,BID比较后,Switch_B最优,所以Switch_B为Switch_D的指定桥,Switch_B到Switch_D有两个端口相连,比较端口的优先级,最后选择Switch_B的1端口为指定端口。

选择的依据是分别比较:

1)到达根桥的路径开销;

2)所连网桥ID;

3)LAN所连端口ID。(这里是对端的端口ID,是相对于LAN或者说交换机的对端设备。

也就是说除了根桥外,其他所有设备通过配置BPDU选择根端口,又可以根据所收到的BPDU,选择指定桥和指定端口,指定桥是通过收到的所有BPDU的BID来判断的,如果有多个BID(两个或多个),说明此交换机连接了多台其他的交换机,先比较通过这多台交换机的RPC,找最优的,相同,比较BID,找最优的,相同(说明只连接了一台交换机,即这两台设备间有多条链路),比较PID,找最优的,按上图,Switch_B的1端口为Switch_D的指定端口,这下有点明白了,指定端口是在对端设备上的,而本设备标注的应该是连接指定端口的端口,Switch_D阻塞2端口、与Switch_C连接的端口,而不是Switch_B上阻塞2端口。那么Switch_B上的2端口是什么状态?这里关键不太明白的是是这一句:“网络收敛后,只有指定端口和根端口可以处于转发状态。其他端口都是Blocking状态,不转发用户流量”,就是对Switch_B的2端口的处理不明白。

这样网络中参与STP计算的交换机其他端口将被设定成Blocking状态。经过STP计算可以将以前网络拓扑中的一种图状连接变成一个树状连接,确保网络中从任何一点到另一点只有一条处于活动的主链路。

从下面的图中可见,Switch_B的2端口还是开放的,Switch_B上2端口开放,那么数据是否往这个端口转发??——进一步理解,也许在2端口学习不到MAC地址,所以除了广播帧,其他单播帧无法到达这个端口,而广播帧从此端口转发后,由于对端是Blocking状态,帧也被丢弃,也就是说,只在Switch_B上有浪费。??

4、故障监测与树的更新

根定期发送BPDU,各Designated Bridge都向非Root Port连接的LAN转发以表示自己的工作状态正常。假设在规定时间内没有转发出BPDU,则认为发生故障,开始新一轮的选举。

STP目的是通过协商一条到根网桥的无环路路径来避免和消除网络中的环路。通过这种机制,它确保到每个目的地只有一条路径,如果某条链路失效了,根网桥知道存在冗余链路,他会启动先前关掉的这条冗余链路。

5、STP的端口状态

为了建立一个无环网络,生成树强迫各个端口经历几种不同的状态:

首先,端口进入监听状态,对BPDU进行监听。它将读取这些BPDU,然后确定它的根端口和与端口相连的网桥。如果确定某个端口需要设置成阻塞状态,那么该端口将进入阻塞状态,同时监听状态结束。如果确定某个端口应该进入发送状态,那么这个端口将进入称为“学习”的中间状态,之所以这么称呼,是因为端口先对源MAC地址进行检测,然后再将条目导入网桥表中。“学习”状态结束后,发送状态立即开始。

五种端口状态的定义:

Blocking:端口不能转发数据,处于阻塞状态。

Listening:利用这段时间来倾听是否还有到达根桥的其他路径,确认是否会产生环路。这时端口可以倾听到数据,但不能发送和接收用户数据,不允许端口地址学习。

Learning:不能发送和接收用户数据,允许端口地址学习。

Forwarding:发送和接收用户数据,允许端口地址学习,是端口的正常工作状态。

Disable:端口处于关闭状态,不参与STP计算。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多