STP生成树协议笔记之(三):协议报文的抓包解析

您所在的位置:网站首页 stp协议帧的载荷数据 STP生成树协议笔记之(三):协议报文的抓包解析

STP生成树协议笔记之(三):协议报文的抓包解析

2024-03-04 08:21| 来源: 网络整理| 查看: 265

STP生成树协议笔记之(三) : 协议报文的抓包解析

  为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU(Bridge Protocol Data Unit)中。

 

BPDU的类型

  BPDU有两种类型:配置BPDU和TCN BPDU。

  配置BPDU描述本设备的配置信息,包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。

  TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。

 

 

STP帧格式

字段内容

说明

Protocol Identifier

协议ID=“0”

Protocol Version Identifier

协议版本标识符,STP为0,RSTP为2,MSTP为3。

BPDU Type

BPDU类型,MSTP为0x02。

0x00:STP的Configuration BPDU

0x80:STP的TCN BPDU(Topology Change Notification BPDU)

0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)

Flags

对于“标记域”(Flags),第一个bit(左边、高位bit)表示“TCA(拓扑改变响应)”,最后一个bit(右边、低位bit)表示“TC(拓扑改变)”。

Root Identifier

根桥的桥ID。网桥ID都是8个字节——前两个字节是网桥优先级,后6个字节是网桥MAC地址。

Root Path Cost

根路径开销,本端口累计到根桥的开销。

Bridge Identifier

发送者的桥ID,本交换机的桥ID。

Port Identifier

发送端口的PID,发送该BPDU的端口ID。

Message Age

配置BPDU在网络中传播的生存期。

Max Age

配置BPDU在设备中能够保存的最大生存期。

Hello Time

配置BPDU发送的周期(发送两个相邻BPDU间的时间间隔)。

Forward Delay

端口状态迁移的延时(控制Listening和Learning状态的持续时间)。

 

 

抓包分析BPDU数据包内容

 

  实验的拓扑图如上。一开始,所有的交换机都会认为自己是根桥,自己的所有端口都是指定端口,参与转发配置BPDU报文。

  图中红框内的是一些STP协议比较重要的时间参数:

  Hello Time是指运行STP协议的设备发送配置BPDU的时间间隔,用于检测链路是否存在故障。交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障。当网络拓扑稳定后,该值只有在根桥上修改才有效。默认的Hello Time的值是2秒。

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

  Max Age:是指BPDU报文的老化时间,可在根桥上通过命令人为改动这个值。Max Age通过配置BPDU报文的传递,可以保证Max Age在整网中一致。非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。默认的Max Age值是20秒。

    Forward Delay:当拓扑发生变化,新的配置消息要经过一定的时延才能传播到整个网络,这个时延称为Forward Delay,一般指从listening状态到learning状态,或是从leaning状态到Forwarding状态所需要的时间,协议默认的Forward Delay值是15秒。

 

(1)通过抓包点A(LSW4的G0/0/2端口)可知,此时LSW4默认认为自己是根桥,所以发送的BPDU中Root Identifier填写的是自己的桥ID,Root Path Cost(根路径开销)填的是0,Message Age中填的也是0。接着将这个BPDU发送给LSW2。其余的交换机也会重复这个操作。

 

 

 

 

(2)LSW2接收到LSW4的BPDU报文,查看报文中的Root Identifier字段,发现该报文优先级被他本身要高,所以将自己的BPDU报文中的Root Identifier字段从自身改为LSW4的桥ID,Message Time加一,同时计算根路径开销(端口开销默认为20000),再发给其他交换机。如图为抓包点B(LSW2的G0/0/12)的报文截图。

  

(3)等到所有的交换机都完成了选举,进入稳定的状态,则只会身为根桥的LSW4会每隔Hello Time时间发送配置一次配置BPDU,告知整个STP网络根桥正常运行。

如果拓扑发生了变化(如根桥故障,链路故障等),STP又是如何感知到且作出改变的呢?

 

 

 

STP拓扑发生变化时的处理方式

  情况一:根桥故障

   

  在稳定的STP拓扑里,非根桥会定期收到来自根桥的BPDU报文。如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。如果下游交换机一直收不到BPDU报文,Max Age定时器就会超时(Max Age的默认值为20秒,约为10次Hello Time默认值的时间),从而导致已经收到的BPDU报文失效,此时,非根交换机会互相发送配置BPDU报文,重新选举新的根桥。根桥故障会导致50秒左右的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。

  需要:Max Age + 2*Forward Delay = 50 秒

  验证:根桥已经重新选举为LSW1

   

 

 

 

  情况二:直连链路故障

   

  此例中,LSW1和LSW3使用了两条链路互连,其中一条是主用链路,另外一条是备份链路。生成树正常收敛之后,如果检测到LSW1的根端口(G0/0/15)链路发生物理故障,则其会按照STP协议规则重新选举根端口,则其Alternate端口(G0/0/8)会迁移到Listening、 Learning、Forwarding状态,经过2倍的Forward Delay后恢复到转发状态。

  需要: 2*Forward Delay = 30 秒

  验证:LSW1的根端口已重新选举为G0/0/8

   

 

 

 

  情况三:非直连链路故障

     

  如上图,根桥交换机LSW4与LSW3之间的链路发生了某种故障(非物理层故障),LSW3因此在Max Age时间内收不到来自LSW4的BPDU,则自己作为新的根桥开始发送BPDU。LSW2也会继续从原根桥LSW4接收BPDU报文,因此会忽略LSW3发送的BPDU报文。

  由于LSW2的预备端口(Alternate)端口再也不能收到包含原根桥ID的BPDU报文。其Max Age定时器超时后,LSW2会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给LSW3。LSW3在收到优先级比自己高的BPDU报文后,放弃宣称自己是根桥并开始收敛端口为根端口。非直连链路故障后,由于需要等待Max Age加上两倍的Forward Delay时间,端口需要大约50秒才能恢复到转发状态。

  需要:Max Age + 2*Forward Delay = 50 秒

 

  验证:我们对LSW3的G0/0/10端口进行抓包分析

  时间节点一:根桥宣告为LSW4,BPDU是从LSW4发送过来的。根路径为LSW4-LSW3,则根路径开销为20000。

   

  时间节点二:LSW3超时没有收到根桥的配置BPDU,所以宣告自己为根桥。

  

 

  时间节点三:LSW3收到来自LSW2发来的配置BPDU,发现自己的桥ID优先级较低,重新选举自己的根端口和指定端口。

   

 

 

 

  情况四:拓扑改变导致MAC地址表错误

   

  在交换网络中,交换机依赖MAC地址表转发数据帧。缺省情况下,MAC地址表项的老化时间是300秒。如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时MAC地址表中未及时老化掉的表项会导致数据转发错误,因此在拓扑发生变化后需要及时更新MAC地址表项。

  本例中,LSW6中的MAC地址表项定义了通过端口G0/0/3可以到达主机A,通过端口G0/0/2可以到达主机B。由于LSW7的根端口G0/0/2产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机A发往主机B的帧到达LSW6后,LSW6会继续通过根端口G 0/0/1转发该数据帧。

 

  拓扑变化过程中,根桥通过下游交换机的TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。

拓扑变更以及MAC地址表项更新的具体过程如下:

  1、LSW7感知到网络拓扑发生变化后,会不间断地向LSW6发送TCN BPDU报文。

  2、LSW6收到LSW7发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给LSW7,告知LSW7停止发送TCN BPDU报文。

  3、LSW6向根桥LSW5转发TCN BPDU报文。

  4、LSW5把配置BPDU报文中的Flags的TC位设置为1后发送,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forwarding Delay的时间(默认为15秒)。

  5、最多等待15秒之后,LSW6中的错误映射关系会被自动清除。此后,LSW6就能通过G0/0/2端口把从主机A到主机B的帧正确地进行转发。

 

补充Tips:

  关于BPDU的flags字段

  Flags字段占8bits(位)的空间,其中有效位只有高位(最左边)和低位(最右边)的1bit。

  TCN报文:Topology Change Notification报文,即拓扑改变通知报文,当设备A感知到STP拓扑发生了变化时,会向其他设备B发送TCN BPDU报文,代表:“我发现拓扑变化了,通知你一下”。

  低位的叫TC(Topology Change),即“拓扑改变”位,常用于根桥通知下游交换机拓扑发生了改变。代表:“我们STP的拓扑改变了,请下游交换机刷新一下MAC地址表”

  高位的叫TCA(Topology Change Acknowledge),即“拓扑改变响应”位,当设备B收到设备A发送过来的TCN BPDU报文,B知道拓扑发生了变化。然后B会:将此报文转发给根桥,然后生成一个TCA置为1的BPDU报文,回复给设备A,代表“我已确认收到你发的通知报文,你可以停止发了”。

 

  利用实验来验证:如图所示抓包点为LSW7的指定端口G0/0/1口

   

  Step 1:拓扑趋于稳定,此时LSW7会通过指定端口G0/0/1转发根桥的配置BPDU

            BPDU flags: 0x00 =》 配置 BPDU

    

 

  Step 2:此时,人工将LSW5和LSW7之间的链路删除,形成拓扑改变的现象。

            LSW7感知到拓扑的变化,则发送TCN BPDU报文通知对端交换机LSW6。

            BPDU flags:0x80 =》 TCN BPDU报文

    

  Step 3 :  LSW6收到TCN BPDU报文后,会回复一个响应报文(TCA=1)给LSW7,提示其已经收到了。

   

 

 

  Step 4:LSW6继续向根桥转发TCN BPDU报文,根桥收到后,向下游交换机发送将TC=1的报文,提示他们将MAC地址表的老化时间改为15秒,起到加速收敛的作用。

   

 

 

  Step 5:拓扑收敛后,网络重新稳定。

 

  最后的STP简单配置会在下一节给出。

 

 

 

STP协议笔记汇总:

 

STP生成树协议笔记之(一) : 背景和原理

 

https://www.cnblogs.com/zylSec/p/14615481.html

 

STP生成树协议笔记之(二) : 端口角色选举STP

 

https://www.cnblogs.com/zylSec/p/14618328.html

 

STP生成树协议笔记之(三) : 协议报文的抓包解析

 

https://www.cnblogs.com/zylSec/p/14627690.html

 

STP生成树协议笔记之(四) : 协议基础配置

 

https://www.cnblogs.com/zylSec/p/14628274.html

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3