学习日记Day19:STP(生成树协议)

文章目录

        • 一、为什么要使用STP。
          • 1、二层交换机网络的冗余性与环路。
          • 2、人为导致的环路。
          • 3、二层环路带来的问题。
            • 3.1、广播风暴。
            • 3.2、MAC地址漂移。
          • 4、初识生成树。
        • 二、STP的基本概念。
          • 1、桥ID(BID)。
          • 2、根桥。
          • 3、开销(Cost)。
          • 4、根路径开销(RPC)。
          • 5、接口ID(PID)。
          • 6、桥接协议数据单元(BPDU)。
        • 三、STP的工作原理。
          • 1、端口角色。
          • 2、最优的BPDU。
          • 3、STP的计算过程举例。
            • 3.1、选举根桥。
            • 3.2、选举RP。
            • 3.3、选举DP。
            • 3.4、选举AP。
          • 4、STP的接口状态和状态迁移。

一、为什么要使用STP。

1、二层交换机网络的冗余性与环路。

                                学习日记Day19:STP(生成树协议)_第1张图片
        随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如图,接入层交换机单链路上联,则存在单链路故障,也就是如果这根上联链路发生故障,交换机下联用户就断网了。另一个问题的单点故障,也就是交换机如果宕机,交换机下联用户也就断网了。
                        学习日记Day19:STP(生成树协议)_第2张图片
        为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。冗余链路虽然增强了网络的可靠性,但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。

2、人为导致的环路。

                        学习日记Day19:STP(生成树协议)_第3张图片
       在现实中,一些二层环路可能是由于人为的疏忽导致的,例如错误地连接设备之间的互联线缆等。
                        学习日记Day19:STP(生成树协议)_第4张图片
       另一些二层环路可能是由于人为的配置错误导致的,在本例中,网络管理员未将SW1与SW2之间的链路绑定到一个逻辑链路(聚合链路)上,从而引入了二层环路。

3、二层环路带来的问题。
3.1、广播风暴。

               学习日记Day19:STP(生成树协议)_第5张图片        根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。
       本例中,SW3收到了一个广播帧将其进行泛洪,SW1和SW2也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SW3,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。下面是抓包图:
学习日记Day19:STP(生成树协议)_第6张图片
       可以看到大量的广播帧和未知单播帧在链路中泛洪,导致通信受阻。
学习日记Day19:STP(生成树协议)_第7张图片

3.2、MAC地址漂移。

               学习日记Day19:STP(生成树协议)_第8张图片
        交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。本例中,SW3收到一个广播帧泛洪,SW1从GE0/0/3接口接收到广播帧后学习且泛洪,形成MAC地址5489-98EE-788A与GE0/0/3的映射;SW2收到广播帧后学习且泛洪,SW1再次从GE0/0/2收到源MAC地址为5489-98EE-788A的广播帧并进行学习,5489-98EE-788A会不断地在GE0/0/1与GE0/0/2接口之间来回切换,这被称为MAC地址漂移现象。如下图:
学习日记Day19:STP(生成树协议)_第9张图片

4、初识生成树。

        在网络中部署生成树后,交换机之间会进行生成树协议报文的交互并进行无环拓扑计算,最终将网络中的某个(或某些)接口进行阻塞(Block),从而打破环路。
学习日记Day19:STP(生成树协议)_第10张图片
        STP通过构造一棵树来消除交换网络中的环路。运行STP算法,判断网络中存在环路的地方并阻断冗余链路,将环路网络修剪成无环路的树型网络,从而避免了数据帧在环路网络中的增生和无穷循环。
        生成树还能够动态响应网络拓扑变化调整阻塞接口,交换机上运行的生成树协议会持续监控网络的拓扑结构,当网络拓扑结构发生变化时,生成树能感知到这些变化,并且自动做出调整。因此,生成树既能解决二层环路问题,也能为网络的冗余性提供一种方案。
学习日记Day19:STP(生成树协议)_第11张图片
        如上图,交换机上运行STP协议,会通过报文监控网络的拓扑结构,正常情况下是将SW3上的一个接口进行阻塞(Block),从而打破环路,当监控到SW1与SW3之间出现链路故障,则恢复阻塞端口进入转发状态。

二、STP的基本概念。

1、桥ID(BID)。

       在STP中,每一台交换机都有一个标示符,叫做BID或者桥ID,IEEE 802.1D标准中规定BID由桥优先级(Bridge Priority)与桥MAC地址构成。每一台运行STP的交换机都拥有一个唯一的BID。BID桥优先级占据高16bit,其余的低48bit是桥MAC地址。在STP网络中,BID最小的设备会被选举为根桥。
              学习日记Day19:STP(生成树协议)_第12张图片
       华为设备默认的桥优先级是32768,查看BID的方法如下图:
学习日记Day19:STP(生成树协议)_第13张图片

2、根桥。

       STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。根桥是一个STP交换网络中的“树根”。STP开始工作后,会在交换网络中选举一个根桥,根桥是生成树进行拓扑计算的重要“参考点”,是STP计算得出的无环拓扑的“树根”。在STP网络中,桥ID最小的设备会被选举为根桥。在BID的比较过程中,首先比较桥优先级,优先级的值越小,则越优先,拥有最小优先级值的交换机会成为根桥;如果优先级相等,那么再比较MAC地址,拥有最小MAC地址的交换机会成为根桥。
              学习日记Day19:STP(生成树协议)_第14张图片
       对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化,即根桥具备抢夺性。网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。

3、开销(Cost)。

       每一个激活了STP的接口都维护着一个Cost值,接口的Cost主要用于计算根路径开销,也就是到达根的开销。接口的缺省Cost除了与其速率、工作模式有关,还与交换机使用的STP Cost计算方法有关。接口带宽越大,则Cost值越小。用户也可以根据需要通过命令调整接口的Cost。
              学习日记Day19:STP(生成树协议)_第15张图片
       关于Cost的计算方法有三种标准:IEEE 802.1d-1998标准、IEEE 802.1t标准、华为计算方法。华为交换机支持多种STP的路径开销计算标准,提供多厂商场景下最大程度的兼容性。缺省情况下,华为交换机使用IEEE 802.1t标准来计算路径开销。三种标准的详细计算数据见下表:
学习日记Day19:STP(生成树协议)_第16张图片
        在一个STP网络中所有的交换机的Cost计算标准应该保持一致。两台交换机的对端接口的Cost值建议保持一致。 下图是在华为交换机上查看接口开销和计算标准:
学习日记Day19:STP(生成树协议)_第17张图片

4、根路径开销(RPC)。

       在STP的拓扑计算过程中,一个非常重要的环节就是“丈量”交换机某个接口到根桥的“成本”,也即RPC。一台设备从某个接口到达根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost累加。在下例中,SW3从GE0/0/1接口到达根桥的RPC等于接口1的Cost加上接口2的Cost。
              学习日记Day19:STP(生成树协议)_第18张图片
下图是在华为交换机上查看设备RPC,可以看到此设备到根桥的RPC为0,这表示自己就是根桥:
学习日记Day19:STP(生成树协议)_第19张图片

5、接口ID(PID)。

       运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口。接口ID由两部分构成的,高4 bit是接口优先级,低12 bit是接口编号。激活STP的接口会维护一个缺省的接口优先级,在华为交换机上,该值为128。用户可以根据实际需要,通过命令修改该优先级。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。
              学习日记Day19:STP(生成树协议)_第20张图片
       下图是在华为交换机上查看设备PID,从上到下依次是接口编号和接口优先级:
学习日记Day19:STP(生成树协议)_第21张图片

6、桥接协议数据单元(BPDU)。

       BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。STP交换机之间会交互BPDU报文,这些BPDU报文携带着一些重要信息,正是基于这些信息,STP才能够顺利工作。BPDU分为两种类型:

  • 配置BPDU(Configuration BPDU)
  • TCN BPDU(Topology Change Notification BPDU)

       配置BPDU是STP进行拓扑计算的关键,在一个稳定的网络中你只能抓到配置BPDU;TCN BPDU只在网络拓扑发生变更时才会被触发,网络拓扑发生改变时才会抓到TCN BPDU。下表是配置BPDU的报文格式及其字段含义:

PID PVI BPDU Type Flags Root ID RPC Bridge ID Port ID Message Age Max Age Hello Time Forward Delay
子节 字段 描述
2 PID 协议ID ,对于STP而言,该字段的值总为0
1 PVI 协议版本ID,对于STP而言,该字段的值总为0
1 BPDU Type 指示本BPDU的类型,若值为0x00,则表示本报文为配置BPDU;若值为0x80,则为TCN BPDU
1 Flags 标志,STP只使用了该字段的最高及最低两个比特位,最低位是TC(Topology Change,拓扑变更)标志,最高位是TCA(Topology Change Acknowledgment,拓扑变更确认)标志
8 Root ID 根网桥的桥ID
4 RPC 根路径开销,到达根桥的STP Cost
8 Bridge ID BPDU发送桥的ID
2 Port ID BPDU发送网桥的接口ID(优先级+接口号)
2 Message Age 消息寿命,从根网桥发出BPDU之后的秒数,每经过一个网桥都加1,所以它本质上是到达根桥的跳数
2 Max Age 最大寿命,当一段时间未收到任何BPDU,生存期到达最大寿命时,网桥认为该接口连接的链路发生故障。默认20s
2 Hello Time 根网桥连续发送的BPDU之间的时间间隔,默认2s
2 Forward Delay 转发延迟,在侦听和学习状态所停留的时间间隔,默认15s

下面是对应的抓包图:
学习日记Day19:STP(生成树协议)_第22张图片
       关于STP中Max Age的处理:当非根桥收到根桥的BPDU后,将BPDU中的Message Age+1后,如果等于Max Age直接忽略此BPDU,并且不会在转发此BPDU,通过Max Age配置可以控制STP网络的规模。

三、STP的工作原理。

1、端口角色。

       STP中定义了三种端口角色:

  • 指定端口(DP):负责在链路上转发根桥的最好BPDU的端口,一般情况下根桥的所有端口都是DP。在每条链路(每个冲突域)上都会选举一个DP。
  • 根端口(RP):接收来自根桥最优BPDU的端口,根桥,根桥上没有根端口。在每个非根桥设备上都会选举一个RP。
  • 预备/阻塞端口(AP):既不是非根桥的RP,也不是链路的DP,则该端口为block port即阻塞端口。
2、最优的BPDU。

       对于STP而言,最重要的工作就是在交换网络中计算出一个无环拓扑。在拓扑计算的过程中,一个非常重要的内容就是配置BPDU的比较。在配置BPDU中,有四个字段非常关键,它们是“根桥ID”、“根路径开销”、“网桥ID”以及“接口ID”,这四个字段便是交换机进行配置BPDU比较的关键内容。STP按照如下顺序选择最优的配置BPDU:

字段 比较规则
根桥ID 最小的根桥ID
根路径开销(RPC) 最小的RPC
网桥ID 最小的网桥ID
接口ID 最小的接口ID

       在这四条原则中(每条原则都对应配置BPDU中的相应字段),第一条原则主要用于在网络中选举根桥,后面的原则主要用于选举根接口及指定接口。

3、STP的计算过程举例。

       使用人的思维,快速确定去下面拓扑的端口角色。在开始分析之前先将S1、S2、S3、S4四台交换机的桥优先级依次修改为0、4096、8192、32768。
学习日记Day19:STP(生成树协议)_第23张图片

3.1、选举根桥。

       交换机在刚启动时都认为自己是根桥,互相发送配置BPDU进行STP运算。最后发现桥优先级最的是S1所以S1成为根桥。

3.2、选举RP。

       以S2为例,因为RP是接收来自根桥最优BPDU的端口,所以首先列出S2两个接口接收的BPDU的关键四字段的值。如下图:
学习日记Day19:STP(生成树协议)_第24张图片
       S2的两个接口接收的BPDU分别是S1和S4发送。因为S2的G0/0/1接口接收的是根桥S1的G0/0/1接口直接发送给他的BPDU,所以RPC等于0,BID等于0,PID等于128.1。S2的G0/0/2接口接收的是,根桥S1的G0/0/2接口发送给S2又转发给S4,S4的G0/0/24接口直接发送给它的BPDU,所以RPC需要做一个累加20000+20000=40000,BID等于S4的值为32768,PID等于128.24。
       然后再根据上面的四个字段依次比较:RID相同都是0,RPC G0/0/1接口接收到的为0,G0/0/2接口接收到的为40000。G0/0/1 < G0/0/2,G0/0/1成为RP。根据这个规则可以快速选举去其余非根桥交换机的RP。
学习日记Day19:STP(生成树协议)_第25张图片
       值得注意的S4在进行RP选举的时候两个接口上接收的BPDU的RPC都是20000,RPC相同接着比较BID。G0/0/24接口接收BPDU的BID是S2的4096,G0/0/22接口接收的BPDU的BID是S3的8192。所以G0/0/24的更小成为RP。

3.3、选举DP。

       以S1和S2这条链路为例,因为DP是负责在链路上转发根桥的最好BPDU的端口。首先列出S1和S2这条链路上两个接口发送的BPDU的关键四字段的值。
       学习日记Day19:STP(生成树协议)_第26张图片
       和选举RP相同的道理,因为S1是根桥所以它的G0/0/1接口直接发送BPDU,它的RPC等于0,BID等于0,PID等于128.1。S2的G0/0/1接口发送的的BPDU是,根桥S1的G0/0/2接口发送给S2又转发给S4,S4发送给它,它再发送。所以RPC需要做一个累加20000+20000+20000=60000,BID等于自己的值为4096,PID等于128.1。所以很容易比较出S1的G0/0/1接口是DP。根据这个规则可以快速选举去其余非根桥交换机的DP。
       学习日记Day19:STP(生成树协议)_第27张图片

3.4、选举AP。

       S4的G0/0/22端口自动成为AP。查看交换价端口角色,验证推算。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
       推算正确,至此S3和S4之间的链路堵塞,环路被打破。

4、STP的接口状态和状态迁移。

       STP有五种接口状态如下表:

状态名称 状态描述
禁用(Disable) 该接口不能收发BPDU,也不能收发业务数据帧,例如接口为down
阻塞(Blocking) 该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习
侦听(Listening) 当接口处于该状态时,表明STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习
学习(Learning) 当接口处于该状态时,会侦听业务数据帧(但是不能转发业务数据帧),并且在收到业务数据帧后进行MAC地址学习
转发(Forwarding) 处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态

       关于接口状态的迁移参考下图:
学习日记Day19:STP(生成树协议)_第28张图片
       接口从阻塞状态进入到侦听状态的时间可以忽略不记,从侦听状态进入到学习状态需要15s,从学习状态到转发状态需要15s,所以一个接口如果需要从阻塞状态到转发状态需大概30s。从侦听、学习、转发状态进入到阻塞状态的时间也是忽略不计。

你可能感兴趣的:(学习日记)