没别的,就聊聊STP协议(一)

系列文章目录

“没别的,就聊聊自动驾驶网络”


零、前言

上一篇文章结尾提出疑问,交换机一边想着怎么把数据转发出去同时,二层网络的拓扑(Topology)又刚好是一个环状的该怎么办? 如果另外一端不断收到数据,并重复着转发数据的工作,那此时此刻发来一个目的不存在的数据会发生什么?答案是这个数据在这个环状网络中不断的转圈,直到交换机宕机,从而结束这循环。那有没有办法不成环呢?

确实,只要不成环就行,但想想,假如这一条链路出故障了该怎么办?所以一方面要保证有一条备份的链路,另一方面要保证数据不能在这中间无休止泛洪(无数广播报文在环路传输,从而形成网络风暴),这个时候就要介绍今天的主题——STP协议(Spanning Tree Protocol,生成树协议)


一、STP有什么作用?

在网络中部署生成树后,交换机之间会进行生成树协议报文的交互并进行无环拓扑计算,最终将网络中的某个(或某些)接口进行阻塞(Block),从而打破环路。

先看看下面这个图蛤,是不是就比较形象展现了上一篇说的“各个部门经理到处广播找人”的情景,一直泛洪,直到交换机承受不了网络风暴后宕机才结束:

环路

图1 二层环路

这个时候假如在这些交换机中配置了STP(生成树协议)就能防止这种环状拓扑的产生。其实就是将网络拓扑通过阻塞端口,从而实现虽然有两条链路,但只有一条能用,另外一条在主链路出问题之后才替换上去,听上去不仅能实现防止产生环路,同时还备份了一条链路。

这里还要聊的是这个协议的名字——生成树,这是通过阻塞端口形成一个树形结构的网络拓扑,所以可以理解通过阻塞端口来 生成树 状的网络拓扑。将配置完之后的网络拓扑形象化一点,就像下面这个逻辑拓扑一样。

形成树型

图2 树形拓扑(一)

再来张复杂一点的(这里的根端口、指定端口和阻塞端口,咱们接下来会聊到):
形成树型(二)

图3 树形拓扑(二)

二、交换机是怎么实现STP的?

网络中就是各种报文相互传输,所以想实现STP,就得去让交换机去发报文通知其他交换机,发送的报文里规定了一些STP协议中所需要的数据,这样才能让其他交换机知道自己的信息,然后才考虑要不要阻塞端口?阻塞哪个端口?什么时候才切换到备用链路?先来熟悉一些STP协议中的基本概念。

1.STP的基本概念

  1. 桥ID(Bridge ID,BID):这里的桥指的就是交换机,所以再看看桥ID,其实就是运行STP的交换机的ID,这个ID是唯一的,实际上BID=桥优先级+桥MAC地址,例如:4096.4c1f-abcd-123c。(这里的优先级是4096,MAC地址是4C-1F-AB-CD-12-3C,桥优先级可以自行配置,每个厂商的默认优先级以及优先级的判定方式不一样,这里就不细说了)
  2. 根桥(Root Bridge):按照上面说的,桥就是交换机,那么根桥是什么?就像树的根(上面的拓扑反过来看,上面是树根,下面是树的分支),一棵树只有一个根,但可以有无数分支,所以根桥就是逻辑上最顶端的那个交换机。
  3. 开销(Cost):怎么评判哪条链路最适合当树的树枝?这个时候就需要一个衡量标准了,假如一棵树的树枝左边长右边短的话,是不是每个树枝到树根的距离差距就很大呢?所以我们一般希望让这棵“树”长的均匀一些,就会根据一些计算方法来计算每个分支的花销,也就是树枝长度。花销小的链路优先作为“树”的“树枝”。(根路径开销有几种计算方式,一般使用IEEE 802.1t标准,除此之外,还有IEEE 802.1d-1998标准,以及厂商自己的计算方法,这里就不细说,根据情况查询相关计算公式)
  4. 根路径开销(RPC,Root Path Cost):这个就通俗一些了,就是设备到根桥所累计的总开销,也就是开销之和,叫做根路径开销。
  5. 接口ID(Port ID):迁移一下桥ID的概念,这里的接口ID也差不多,Port ID=接口优先级+接口编号,例如:128.24。(华为交换机的接口优先级默认为128,其他厂商优先级默认不一样,评判方式也不一样)
  6. 网桥协议数据单元(BPDU,Bridge Protocol Data Unit):BPDU分为两种:
    • 配置BPDU(Configuration BPDU):STP进行拓扑计算时就需要它。
    • TCN BPDU(Topology Change Notification BPDU):只有当网络拓扑发生变化时才会需要这个报文。

2.配置BPDU的报文格式

先看看配置BPDU长什么样吧,就长下面这样:
BPDU报文格式

图4 BPDU报文格式

实际抓包(抓取数据包,工具Wireshark),可以看到这样的数据格式(从第4行的BPDU类型可以看出来是配置BPDU):
抓包图

图5 捕获到的BPDU报文

来看看报文中各个字段的占用字节长度以及分别有什么作用,如下表所示:

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

3.配置BPDU的比较原则

这里先说说选举,就是选举一个代表,运行STP的交换机也要选举出一些“代表”,一个是交换机的代表,叫做根桥(Root Bridge)。然后还不够,还得选两个端口代表,一个叫根端口(Root Ports)。如果端口“离根最近”,再指定一个端口与下面的交换机通信,这里我们就叫指定端口(Designated Ports)。当然,既不是根端口,也不是指定端口的端口我们就叫阻塞端口。通俗的来说,在一棵生成树中,根端口就是连接上一级交换机的,指定端口就是连接下一级交换机的,根桥就是最顶端的交换机,它没有上一级,所以它的端口都是连接下一级的指定端口。

先说说选举基本流程:

  1. 首先选一个根桥
  2. 非根交换机选一个根端口
  3. 每条链路选举一个指定端口
  4. 阻塞非根非指定端口

这里提到三种端口:根端口指定端口阻塞端口,用下面这张图来解释一下这三个端口的区别,应该还是挺好理解的。

STP端口类型

图6 STP端口类型介绍

STP选举看什么?报文里的哪些字段参与了选举?(上面报文表格中加粗的字段就是需要在选举中关注的,可以结合上面的图与表格理解)

  1. 将最小的根桥ID的交换机作为根桥(也就是树根)
  2. 再将每个交换机的**最小RPC(根路径开销)**的端口当作根端口
  3. 然后将最小网桥ID的交换机端口作为指定端口
  4. 假如交换机的桥ID一样,那就选择最小接口ID的交换机接口作为指定端口
  5. 最后阻塞那个非根端口、非指定端口的端口,也就是阻塞端口

三、结尾

这篇文章稍微介绍了一下STP中的基本概念,配置BPDU中的报文格式,以及在生成树型拓扑时需要用到的四个字段与三个端口类型,这些之后的学习中会讲到STP的五种状态,以及上文提到的TCN BPDU在网络变动时的作用,这篇文章就介绍到这了,下篇文章咱们再继续深入了解STP。

上一篇 没别的,就聊聊以太网和交换机

下一篇 没别的,就聊聊STP协议(二)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫零NET

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值