作者:网络之路一天  首发公众号:网络之路博客(ID:NetworkBlog)


怎么防止环路的产生呢

假设有这样一个功能

初级应该掌握的破环技术(STP选举过程)_链路

要想防止环路,又实现线路备份的效果,假设交换机支持这样的功能,它能够根据某种算法,交换机之间发现自己的有多条线路,并且存在环路,直接把某一根线给阻塞掉,这样就相当于只有一根线在使用,比如上图,默认情况下把办公区三到E0/0/4的线路阻塞掉,这样转发路径只能是办公区1----核心交换机----办公区3

 (每周日更新)公众号内容汇总归纳,数通基础入门、实战案例、模拟器工具

https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab=7ulgil

初级应该掌握的破环技术(STP选举过程)_链路_02

当这个路径中某一个线路出现问题后,自动启用备用线路,达到冗余的效果,这样是不是就能够防止掉环路了,那有没有这样的技术呢,有的,就是这篇要讲解的STP。

了解STP基础概念与选举

STP,全称Spanning Tree Protocol(生成树协议),它的出现就是为了解决二层环路问题,从最早开始的STP(802.1D)、到RSTP(802.1W)、最终主流的MSTP(802.1S)三个版本,这三个版本是IEEE组织公有化的标准,全部厂商都可以支持,STP是一个很庞大的知识点体系,所以对于新手朋友来说,特别的不友好,就不跟着厂家课程的思路来了,博主把初级阶段把重点挑出来,主要去明白它是如何防止环路的,然后配合工作中的一些经验分享,来帮助消化这部分,详细的体系就留到进阶课程里面,那时候大家对于整个网络框架的知识点有了一个不一样的理解,在来学习这个就轻松很多。

1、了解树的结构

先来看看大自然中树的结构的

初级应该掌握的破环技术(STP选举过程)_优先级_03

一棵树,有根、树干、树枝、叶子,其中树根作为树的“营养器官”将吸收的水分、通过树干输送到树枝、在到叶子,整个运输的过程中都是顺利抵达到不同树枝的叶子上面,并没有出现原地绕圈的情况发生,这正式因为树的物理结构就是发散的,从树干、树枝没有任何的物理交织起来,自然就是没有原地打环的问题。

2、回顾之前环路的产生

初级应该掌握的破环技术(STP选举过程)_RPC_04

对于上面这样的情形,他们IT最初的意愿是想着在原有线路的基础上面加一根线路,这样原本的线路出现问题后,这条线路能够直接替补上去,做一个很好的备份冗余作用,但这样却形成了一个封闭的物理环路,加上二层转发机制是除了源接口vlan以内的其他接口进行泛洪,这样就导致了发出去的流量无休止的在绕圈环路产生了。

3、STP需要了解的概念与术语

STP作为二层网络中主流的破环协议,接下来了了解下常见的一些概念跟术语。(交换机的前身是网桥,而STP的概念在网桥时代就有了,所以术语里面介绍的都是桥相关的)

(1)桥ID(Bridgeg ID ,BID)

每台交换机在出厂的时候都有一个不一样标识,就是桥MAC,在STP里面使用了桥ID来标识不同的交换机,每一台交换机运行了STP就有一个对应的桥ID,桥ID由两部分组成,一个2字节的桥优先级,默认32768(可以管理员自行修改),一个6字节的桥MAC,通常为默认VLAN1的MAC地址。STP引入两个参数组合成桥ID(简称BID),更方便管理员自由的调整(这句话先记住,下一篇实战会理解的透彻)

桥优先级(2字节)

桥MAC地址(6字节)


(2)根桥(Root Bridge,RB)

STP是仿生了树的结构来完成一个无环网络的构成,其中最关键的就是树根,在STP中根桥就是作为树的树根存在一样,当STP启动后,会第一时间选举出根桥,视为老大,其余设备作为非根桥,作为小弟。

(3)根路径开销(Root Path Cost,RPC)

STP上的交换机每一个接口都有对应的一个开销值,用于表示数据通过该端口发送时的开销,开销值越小表示带宽越高,技术发展到现在有2个公有标准,华为华三自己一个私有版本。

接口速率

IEEE 802.1D

IEEE 802.1t

华为华三私有标准

10Mbps

100

2000000

2000

100Mbps

19

200000

200

1Gbps

4

20000

20

10Gbps

2

  2000

2

40Gbps

1

500

1


华为华三设备默认运行的是公有标准最新的802.1t,也是为对接其他设备兼容性更好,当然如果是学过思科的,很多教材里面引用的是802.1D的标准(最新的不太确定有没有改过来),这里要注意下。非根桥到达根桥存在多条路径,每条路径都有对应的开销进行累计,方便计算出哪条路径距离根桥最近,另外开销的计算是数据通过端口发出的时候才开始计算,入端口不会计算开销。对于根桥来说,根就是自己,路径开销就是0。

(4)端口ID(Port ID,PID)

运行了STP的交换机每个接口都有一个端口ID,端口ID由2个部分组成,第一部分端口优先级(4比特),第二部分端口编号(12个比特),端口编号是无法改变的,优先级可以自由调整,默认是128。

端口优先级(4比特)

端口编号(12比特)

(5)BPDU(桥协议数据单元)

交换机毕竟是一个独立的个体,想要把一个二层网络里面的交换机形成一颗大树一样的树状结构,那就少不了需要相互“沟通”,来了解整个二层网络的结构拓扑,正是依赖BPDU,它包含了STP协议里面相关的所有信息,通过这些信息来完成生成树的计算,这里要注意,BPDU发送的是组播帧,目的地址为 0180-C200-0000,运行了STP交换机会产生、发送、接收、处理BPDU,其余未运行的则不参与。(组播的意思是只有运行特定协议发送的组播MAC、设备才能识别与处理,比如这个STP用的,自然启用了STP的才会处理它,而其他未运行的直接会丢弃,而广播则是所有设备都会进行处理,拆开里面内容,相当于组播是运行了特定协议的设备接受处理的范围,广播是整个能收到的范围内都需要处理)。

BPDU分为两种类型

  • 配置BPDU(Configuration     BPDU):用于生成树计算和维护的报文
  • 拓扑变化通知BPDU(Topology Change     Notification BPDU),简称TCN BPDU:在网络拓扑发生了改变,用来通知整个STP网络中的交换机。

4、STP树的生成过程

初级应该掌握的破环技术(STP选举过程)_RPC_05



STP的原理就是在运行STP的交换机之间通过STP算法构建出一个无环的网络拓扑,被称为STP树。STP树生成的过程中会选举一个唯一的根桥,其他非根桥选举根端口和指定端口,负责转发数据,剩下没有角色的端口就被阻塞,不转发数据。

选举角色

 参选

选举范围

根桥

交换机

整个二层网络

根端口

端口

每台交换机

指定端口

端口

每条链路


入门篇我们主要掌握它的选举过程,以及一些注意的地方即可,我们就以上面的拓扑来开始。

(1)选举根桥

生成一颗STP树,首先需要必须要确认一个根桥,这个根桥作为整个二层网络的逻辑中心(老大)。但是需要考虑这样一个问题,在每台交换机都接入到网络的时候,是不知道整个二层网络有多少交换机存在的,也不知道对方的桥ID是多少,所以呢,每台交换机在接入网络的时候都认为自己是根桥,从所有链路发送BPDU,告诉其他交换机,我是根桥。收到BPDU的交换机会比较BPDU中的根桥ID与自己的ID,把其中最小值的根桥ID记录在自己的BPDU的根桥ID里面,最终通过不停的交互BPDU,整个二层网络选出一台根桥ID最小的交换机作为根桥,选举完毕后,根桥会固定间隔发送BPDU,其他设备对根桥发送的BPDU进行转发, 保证网络拓扑的稳定性。

对于华为设备有三个办法查看桥MAC地址的方法,

通过display  bridge      mac-address查看

初级应该掌握的破环技术(STP选举过程)_链路_06

通过display  interface  Vlanif  1  查看

初级应该掌握的破环技术(STP选举过程)_RPC_07

通过display stp查看

初级应该掌握的破环技术(STP选举过程)_RPC_08

初级应该掌握的破环技术(STP选举过程)_RPC_09

初始化的状态,三台交换机都认为自己是根桥,并且从自己激活的口把BPDU发送出去。(默认情况下只要全局开了STP,全部接口都会运行,这里激活的口指的是物理线路up的口),注意你如果是自己搭建的环境,可能跟我的桥MAC不一样,所以需要自己记录

初级应该掌握的破环技术(STP选举过程)_RPC_10

开启抓包,我们来看下

[Core]stp  enable                   //开启STP功能
[Core]stp  mode stp              //模式运行在STP(802.1D)
Warning: The global  STP state will be changed. Continue? [Y/N]y
Info: This operation  may take a few seconds. Please wait for a moment...done.
#
[bg1]stp enable
[bg1]stp mode  stp 
Warning: The global  STP state will be changed. Continue? [Y/N]y
Info: This operation  may take a few seconds. Please wait for a moment...done
#
[bg3]stp enable
[bg3]stp mode stp
Warning: The global  STP state will be changed. Continue? [Y/N]y
Info: This operation  may take a few seconds. Please wait for a moment...done.


之前我们已经关闭了STP,默认情况下 华为华三的设备大部分是开启的,并且运行的是MSTP,但是我们学习先讲讲STP,所以切换到了STP。

初级应该掌握的破环技术(STP选举过程)_RPC_11

由于抓取的是核心的G0/0/1口,所以能看到自己发出去的以及收到办公区一的,这个就是BPDU,我们来看下包含了什么

初级应该掌握的破环技术(STP选举过程)_RPC_12

  • IEEE 802.3  Ethernet,这个是不是觉得跟平时的以太网有点不一样,这里就要提及一下,在以太网协议中,有两个版本,一个是IEEE     802.3的Ethernet,还一个EthernetⅡ, 其中EthernetⅡ作为我们平时PC、服务器等终端常用的版本,而IEEE 802.3的Ethernet常被用于二层协议中,比如这里的STP。
  • 802.1d中,protocl 标识跟版本都是0,就是指的运行的802.1d
  • BPDU Type:类型为配置BDPU
  • Root identifier:根桥的BID,默认都认为自己是根桥
  • Root Patch Cost:根路径开销,默认根桥的的cost都为0
  • Brideg Identifier:发送交换机的BID
  • Port Identifier:发送BPDU端口的ID(接口编号+优先级)

初级应该掌握的破环技术(STP选举过程)_链路_13

三台交换机通过BPDU比较以后,发现办公区一的桥ID最小,因为1<2<b,所以它成为了根桥。

初级应该掌握的破环技术(STP选举过程)_优先级_14

当根桥出现以后,整个STP二层网络正常情况下就只有根桥在发送BPDU,其余的非根交换机作为传递者,转发给自己连接的其他交换机。

<Core>display  stp
-------[CIST Global Info][Mode STP]-------
CIST Bridge         :32768.4c1f-ccb3-26da
Config Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
Active Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
CIST Root/ERPC      :32768.4c1f-cc1d-1983 / 2000
<bg1>display  stp
-------[CIST Global
Info][Mode STP]-------
CIST Bridge         :32768.4c1f-cc1d-1983
Config Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop
20
Active Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop
20
CIST Root/ERPC      :32768.4c1f-cc1d-1983/ 0
<bg3>display  stp   
-------[CIST Global
Info][Mode STP]-------
CIST Bridge         :32768.4c1f-cc24-1670
Config Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop
20
Active Times        :Hello 2s MaxAge 20s FwDly 15s MaxHop
20
CIST Root/ERPC      :32768.4c1f-cc1d-1983/ 200000

通过display stp查看当前的根桥与自己桥ID,当然如果你是自己搭建的

(2)选举根端口(Root Port ,RP)

根桥选举出来后,其他交换机被称为非根桥(非根交换机),STP会为每个非根桥选举出来一个根端口(在每一台所有接口中选取),在STP树稳定后,根桥后定期发送BPDU,而非根桥的根端口就是用于接收BPDU的,所以根端口选取一个离根交换机最近的接口 。

选举规则为

  • 非根桥所有接口中到根交换机Path Cost值最小的链路
  • 如果相同则比较,上一跳交换机Bridge-id最小的链路
  • 如果相同则比较,对端端口ID最小的链路

初级应该掌握的破环技术(STP选举过程)_链路_15

这里先说明下,根桥发送自己发送出去的开销为0(因为自己是根桥),而其他非根桥是发出的时候才计算开销,进入是不计算的,然后根据接口

带宽的不一样,开销也不一样

接口速率

IEEE 802.1D

IEEE 802.1t

华为华三私有标准

100Mbps

19

200000

200

1Gbps

4

20000

20

核心交换机是千兆的,所以RPC=20000,而办公区的是百兆线路,所以PRC=200000,那么这个就好计算了。

核心交换机到根桥有两个接口
G0/0/1到根桥的开销是20000
G0/0/3到根桥的开销是20000+200000
G0/0/1到根桥的开销最小,G0/0/1当RP口(根端口)
办公区三交换机到根桥有两个口


E0/0/1口到根桥的开销是200000+20000
E0/0/4口到根桥的开销是200000
E0/0/4到根桥的开销最小,E0/0/4当RP口(根端口)
<Core>display  stp brief
MSTID Port                       Role  STP State     Protection
0   GigabitEthernet0/0/1        ROOT FORWARDING      NONE
<bg3>display stp brief
MSTID Port                       Role  STP State     Protection
0   Ethernet0/0/4              ROOT  FORWARDING      NONE

通过display  stp brief查看端口的角色,核心是G0/0/1为根端口,办公三为E0/0/4。

这里直接第一个条件通过RPC就比较下去了,那其他的情况有没有呢?是有的,待会我们特别举例两个来看看,这里我们先把整个选举走完。

(3)选举指定端口(Designated Port ,DP)

根端口确保了交换机到根桥的路径是唯一的,也最优的。同样交换机上有多条链路到达根桥时,也必须确定出一个唯一的指定端口,该端口也是到根桥最优的,它的作用是向链路内转发BPDU。(可以发现根端口是每台交换机来都要选择出一个最优的,而指定端口是每个交换机上的链路进行选择出来一个最优的)

它的选举规则与根端口选举是一样的

  • 选择根路径开销(RPC)最小的端口
  • 如果RPC相同,选择对端桥ID最小的端口
  • 如果对端桥ID相同,选择对端ID最小的端口

初级应该掌握的破环技术(STP选举过程)_RPC_16


根桥交换机的两个口

  • 根桥交换机的RPC都是0,根据选举原则,根桥的所有接口都是指定接口

剩下的接口就只有核心交换机的G0/0/3与办公区三的E0/0/1需要进行选举了

核心的G0/0/3从自己的G0/0/1到达根交换机的RPC是20000

办公区三的E0/0/1从自己的E0/0/4到达根交换机的PRC是200000

所以核心的G0/0/3成为DP

(4)阻塞备用端口(Alternate port,AP)

初级应该掌握的破环技术(STP选举过程)_RPC_17

在所有交换机的根端口和指定端口号确认完毕后,剩下的端口全部阻塞,作为根端口或者指定端口的备份,这个也是打破环路的关键,STP会将该接口逻辑的阻塞掉,阻塞后不会发送任何数据帧,会监听BPDU,当网络链路或者结构发生变化的时候,备用接口会重新选举角色,用于恢复网络的正常通信。(AP这个角色在标准的STP中并没有,只是华为、华三中它的角色命名是以RSTP来的,包括状态)

[bg3]display  stp brief
MSTID Port                       Role  STP State     Protection
0   Ethernet0/0/1               ALTE  DISCARDING      NONE


(5)实际测试

初级应该掌握的破环技术(STP选举过程)_RPC_18



实际测试下,可以跟博主一样,把参数、角色可以写上去,这样大家看起来清晰很多。

初级应该掌握的破环技术(STP选举过程)_优先级_19


访问就没问题了,正式因为办公区三的E0/0/1被逻辑阻塞了 不会转发数据包,所以避免了环路的产生。

初级应该掌握的破环技术(STP选举过程)_链路_20

(1)PC2发起访问,查看ARP表没有关于server的缓存,于是发起ARP请求

(2)办公区1交换机收到以后打上VLAN10的tag,执行二层转发,首先把学习记录PC2的MAC、接口、VLAN信息,发现目的MAC是全F,于是泛洪出去(除源接口以外的VLAN内所有接口),从工E0/0/1、E0/0/4口,接口属于trunk,透传发送。

(3)核心交换机与办公区三都会收到这个ARP请求,同样执行二层转发,先把学习记录PC2的MAC、接口、VLAN信息,发现目的MAC是全F,于是泛洪出去(除源接口以外的VLAN内所有接口),核心会从G0/0/3发出,接入从E0/0/3,E0/0/1发出,其中E0/0/3是access口,剥离标签发送出去,而E0/0/1则是阻塞接口,所以数据会被丢弃,同样从G0/0/3过来的,E0/0/1也不会接收,直接丢弃,这样就避免数据在打环,形成环路。


(6)稳定后的状态

初级应该掌握的破环技术(STP选举过程)_链路_21

当STP树一切稳定后,只有根桥会定期的发送BDPU来维护维系整个二层网络,这个定期发送也叫做hello,告诉下面的非根桥设备老大还活着,另外是确认某个链路是否有故障发生,非根桥从根端口号收到BPDU后,更新自己的配置BDPU,再从指定端口发送出去。

从上面的图可以看到办公区一作为根桥,自己所有接口处于指定端口,把BPDU发送出去,办公区三以及核心非根桥设备从根端口号收到后,更新自己的配置BPDU,然后在从指定接口发送出去,其中办公区三除了根端口号以外没有指定端口,阻塞端口是不转发BPDU的,另外核心交换机从指定端口G0/0/3发送出来的BPDU,办公区三会进行接收。

端口名称

发送BPDU

接收BPDU

发送数据

接收数据

根端口

指定端口


备用端口


另外几个端口在转发数据上面也有区别,根端口与指定端口同时发送、接收BPDU以及收发数据,但是备用端口(阻塞)是不发送BPDU,同时不发送跟接收数据,因为它逻辑被阻断了,如果这个还发送数据,环路就会出现了

根端口与指定端口其他选举情况

上面的讲解了选举过程,在根端口跟指定端口都是直接通过路径开销就选举出来了,其他规则比较的情况都没遇到过,正好也没讲解华三上面的配置,那么这里我们来看看华三。

(1)准备环境(这个课程有打包,记得下载)


初级应该掌握的破环技术(STP选举过程)_RPC_22


首先先启动,然后都切换成STP模式(华三、华为默认都是运行在MSTP模式)

[H3C]sysname SW1

[SW1]stp mode  stp

[H3C]sysname  SW2

[SW2]stp  mode   stp

[H3C]sysname  SW3

[SW3]stp mode   stp

[H3C]sysname  SW4

[SW4]stp mode   stp


华三修改的命令跟华为是一样的

初级应该掌握的破环技术(STP选举过程)_RPC_23


接下来通过display stp 来查看每个的桥ID (华三VLANIF1用的不是桥MAC)

(2)选举根桥

BID最小的称为根桥,这里列出来的来看SW1的最小,所以它是根桥(SW4它是accd,SW1是accc,其余的SW2与SW3虽然是accc开头,但是中间是a开始,而SW1是9)

(3)选举根端口

初级应该掌握的破环技术(STP选举过程)_链路_24

首先把RPC都列出来,这次都是千兆口,所以除了根桥发出的为0以外,其余的都是20000的开销

回顾选举规则

  • 非根桥所有接口中到根交换机Path Cost值最小的链路
  • 如果相同则比较,上一跳交换机Bridge-id最小的链路
  • 如果相同则比较对端端口优先级最小的链路

SW2根端口选举

  • G0/1到达根桥RPC=20000
  • G0/0/3到达根桥RPC=20000+20000
  • G0/0/2到达根桥RPC=20000+20000+20000
  • 最终G0/0/1的Patch cost最小

SW3同样的选举方式

SW4的根端口选举

  • G0/0/2与G0/0/4接口到达根端口RPC都是20000+20000,Path Cost都是一样的,比较不出来
  • 比较上一跳交换机的BID,SW2的为accc-a66d-0300 ,SW3为accc-a0d9-0200,SW3的相对小,所以G0/0/4成为根端口。

初级应该掌握的破环技术(STP选举过程)_RPC_25

最终根端口选择就是这样。

初级应该掌握的破环技术(STP选举过程)_RPC_26

如果把SW4的G0/0/4线路也接到SW2上面去,这个时候比较上一跳的交换机就不管用了,因为都是从同一台设备来的,BID都一样,接着比端口优先级

最后比较对端端口ID,小的优先,端口ID分为两个部分,优先级默认是128,所以是一样的,然后端口ID是不可改变的,G0/0/2比G0/0/4编号小,自然G0/0/2对接的口成为根端口

<SW2>display  stp interface  g1/0/2
 Port ID             : 128.3
-----
<SW2>display  stp interface  g1/0/4
 Port ID             : 128.5

通过display stp interface 对应接口查看,其中有一个port ID,优先级128+端口ID

<SW4>display  stp br
 MST ID    Port                                 Role  STP State   Protection
 0         GigabitEthernet1/0/2                 ROOT  FORWARDING   NONE

当然这个只是一个极端的例子,实际环境中很少这样的情况发生,我们在还原之前的拓扑,把SW4的G0/0/4接回SW3。

(4)选举指定端口

根桥、根端口都选举了,剩下的就是指定端口

回顾指定端口的选取,其实与根端口是一样

  • 选择根路径开销(RPC)最小的端口
  • 如果RPC相同,选择对端桥ID最小的
  • 如果对端桥ID相同,选择对端ID最小的端口


SW2、SW3、SW4的指定端口选取

SW2与SW3 的G1/0/3互联,其中从RP到达自己根桥的路径都是20000,RPC相同选取不出来,对比对端桥ID,SW2是accc-a66d-0300,SW3是accc-a0d9-0200,SW3的桥ID最小,所以SW3的G0/0/3为指定端口

SW2与SW4通过G1/0/2互联,其中SW2到根桥的开销20000,SW4到根桥的开销是20000+20000,SW2的G1/0/2小,成为指定端口

SW3到SW4通过G1/0/4互联,SW4的G1/0/4是根端口,那SW3的G1/0/4没必要进行选举,自然是指定端口。

初级应该掌握的破环技术(STP选举过程)_链路_27


剩下没有角色的接口,自然就成为了备用阻塞接口(AP)

初级应该掌握的破环技术(STP选举过程)_RPC_28

初级应该掌握的破环技术(STP选举过程)_链路_29


最终的结果跟分析的一样,这里大家做个了解,能够知道整个STP的选举过程就OK了,这个也是STP的核心,入门级别最需要掌握的,上面就是以华为、华三来举例了解的STP的选举过程,下一篇我们需要来来了解下STP的状态以及对RSTP、MSTP的简单了解。

初级应该掌握的破环技术(STP选举过程)_链路_30

作者:网络之路一天,公众号:网络之路博客(ID:NetworkBlog)。让你的网络之路不在孤单,一起学习,一起成长。