首页 > 其他分享 >STP 的机制

STP 的机制

时间:2024-03-30 18:56:54浏览次数:25  
标签:BPDU 根桥 端口 发送 STP 网桥 机制

什么是 STP 协议?

STP 在最初被设计出来的时候,主要是用于防止二层环路导致的广播风暴,是一个破环协议。最初是在IEEE 802.1d中被定义。

STP 的 三种计时器

hello: hello 时间是在端口上发送的每个 BPDU 之间的时间。默认情况下,此时间为 2 秒。

Forward delay:Forward delay 是在 Listening 和 Learning 状态下花费的时间。默认情况下,此时间为 15 秒。

max age: max age 控制网桥端口保存其 BPDU 信息之前经过的最长时间。默认情况下,此时间为 20 秒。

每个配置 BPDU 都包含这三个参数。此外,每个 BPDU 配置都包含另一个与时间相关的参数,该参数称为 message age (消息期限)。message age 不是固定值。message age 包含自根网桥最初发起 BPDU 以来经过的时间长度。根网桥发送其 BPDU 的 message age 的值为 0,所有后续交换机都会将这个值加 1。实际上,这个值包含了有关网桥接收 BPDU 时离根网桥有多远的信息。

STP 的 其它参数

DIA (Diameter of the STP domain, STP域直径) : 此值是网络中根桥与末端网桥之间最大网桥数。IEEE 的建议是,在默认 STP 计时器的 STP 网络中最大直径为 7。

transit delay(传输延迟): 此值是网桥接收和传输帧之间经过的时间。从逻辑上讲,这是通过网桥的延迟。IEEE 的建议是,将 1 秒视为 STP 最大传输延迟。

bpdu_delay(BPDU 传输延迟):此值是在端口上接收 BPDU 与传输 BPDU 到另一个端口之间的延迟。IEEE 建议将 1 秒作为最大 BPDU 传输延迟。

msg_overestimate(消息期限过度估计):此值代表在转发 BPDU 之前,每个网桥为 message age(消息期限)添加的增量。大部分交换机在转发 BPDU 之前会为 message age 添加 1 秒的增量。这种增加的时间被认为是一种过度估计,即在实际转发前为 message age 增加了额外的时间。这种做法有助于防止潜在的网络环路问题。

lost_msg(丢失消息):此值是当 BPDU 从桥接网络的一端移动到另一端时可能丢失的 BPDU 数。IEEE 的建议是,使用 3 作为可能丢失的 BPDU 数量。

Tx_halt_delay(传输停止延迟):此值是在确定端口需要被阻塞后,网桥有效将端口移动到阻塞状态所需的最长时间。IEEE 建议是,此参数设置为 1 秒。

med_access_delay(介质访问延迟):这个值表示设备获取媒介进行初始传输所需的时间。它是指从 CPU 决定发送帧到帧实际开始离开桥接站之间的时间。IEEE 建议将最大时间设置为 0.5 秒。

需要增大网络最大直径时,同时需要调整这些参数,但是目前流行的设备可以直接配置直径,无需去复杂地计算这些参数,所以了解就好。

STP 选举过程

1.在网络中选出一个根桥(Root Bridge):对于 STP 网络来说,根桥在全网中只有一个,一般来说会将最核心的设备配置为根桥。根桥会根据网络拓扑的变化而变化。

2.在每个非根桥上选取一个根端口(Root Port),根端口是去往根桥路径开销最小的端口,根端口负责向根桥转发数据,在非根桥上,必须有且只有一个根端口,用来与根桥交换信息。

3.选举指定端口(Designated port):指定转发 BPDU 的端口。在 STP 网络中,每条链路上必须有且只有一个指定端口。指定端口是根路径开销(cost)最小的端口。指定端口/根端口的选举:根路径开销值最小的优先,如果有相同的根路径开销值,先比对 BID(桥 ID),再比对 PID(端口 ID)

4.阻塞非指定端口(Non-Designated port):所有端口选举完毕后,剩下的端口成为非指定端口(阻塞端口),非指定端口将被阻塞,从而打破二层环路。被阻塞的非指定端口不会发送 BPDU 报文,更不会发送业务数据,但会持续侦听 BPDU 报文。

配置 BPDU(configuration BPDU)与 TCN BPDU

1.配置 BPDU(configuration BPDU)

网桥在初始状态下,都默认为自己是根桥,并向自己所有的活动端口定期发送(默认 2 秒)配置 BDPU。但在网络拓扑稳定以后,只有根桥主动发送配置 BPDU,其他桥在收到上游传来的配置 BPDU 后,才会发送自己的配置 BPDU。网桥会将从根端口收到的具有更高优先级的 BDPU,从它的指定端口转发出去。

2.TCN BPDU

TCN BPDU 的格式非常简单,只有协议 ID,协议版本 ID 以及 BPDU 类型三个字段。TCN BPDU 用于在网络拓扑发生变化时向根桥通知变化的发生。当网络拓扑发生变化时,远离变化点的交换机无法直接感知变化的发生,其 MAC 地址表项也就无法快速刷新。故 STP 需要一种机制,用于在网络拓扑发生变化时,促使全网交换机尽快老化自己的 MAC 地址表项(FDB 表)。

当不是根的⽹桥发生拓扑更改时,它会向其根端⼝发送 TCN BPDU。重复此传输,直到⽹桥收到来⾃该 LAN 的指定⽹桥的确认(TCA BPDU)。如果根网桥收到这样的通知,或者自己改变了拓扑结构,它会在⼀段时间内在 BDPU 中设置⼀个 TC 标志,发送给下游网桥。设置此标志后,收到的⽹桥会使⽤Forwarding Delay来快速老化 FDB(Forwarding DataBase)。当标志再次重置时,网桥恢复 FDB 的⽼化时间。

当网桥的一个自认为是指定端口的端口,收到优先级更低的 BDPU(指定端口通常不会收到 BPDU),会将带有自己信息的 BDPU 发送出去进行回应,告知其根桥的信息。举个例子,当一个优先级低的桥接入 STP 域中的时候,默认自己是根桥,泛洪发送 BPDU。接下来它会收到回复的 BPDU,BPDU 包含真正的根桥ID,经过对比后它会明白自己是非根桥,会重新调整计算自己的端口状态。随后它向其根端⼝发送 TCN BPDU,通知上游网络拓扑发生改变,重复此传输,直到⽹桥收到来⾃该 LAN 的指定⽹桥的确认(TCA)。如果根网桥收到这样的通知,它会在⼀段时间内在 BDPU 的 flags 中设置⼀个 TC=1 的标志,发送给下游网桥。设置此标志后,所有收到的⽹桥会使⽤Forwarding Delay来⽼化动态条⽬。当标志再次重置时,网桥恢复 FDB 的⽼化时间。

只有在以下情况会发送 TCN BPDU:

  • 主动发送:当网络中的拓扑发生变化时(比如某个端口的状态发生改变或者某个链路出现故障),设备向其根端⼝发送 TCN BPDU(Bridge Protocol Data Unit)。

  • 被动发送:在检测到或收到⾮根桥的 TCN BPDU 之后,该网桥向根端口发送 TCN BPDU;

STP 的五种状态

在 Blocking 状态中,处于这个状态的端口不能够参与转发数据,但是可以接收 BPDU,并交给 CPU 进行处理。不过不能发送 BPDU,也不进行 MAC 地址学习。

在 Listening 状态中,设备将接收到的 BPDU 数据包保存并处理,但是不会转发这些数据包,也不会将收到的帧的 MAC 地址保存到 FDB 中。此时设备会注意到配置变更,但尚未开始重新计算树的结构。

在 Learning 状态中,设备将接收到的 BPDU 数据包保存并且处理,同时也会学习哪些端口可以转发数据帧。学习过程会使设备了解到网络拓扑结构的变化,会将收到的帧的MAC地址保存到 FDB 中,但仍不会转发数据帧。

在 Forwarding 状态中,设备正常转发数据,同时也会进行 MAC 地址学习和 BPDU 的接收、处理和发送。

BPDU 格式

type STP_BDPU struct {
	Root_Identifier # 根桥 ID
	Root_Path_Cost # 根路径开销
	Bridge_Identifier # 桥 ID
	Port_Identifier # 端口 ID
}

BPDU 被封装在以太网数据帧中,目的 MAC 是组播 MAC:01-80-C2-00-00-00

桥 ID 由桥优先级和 MAC 地址组成,桥优先级的默认值为 32768,值可以修改为 0 - 65535,但必须是 4096 的整数倍。

总结

STP 协议收敛的时间较长,响应速度慢,处于 Blocking 状态的端口进入 Forwarding 状态至少要需要经历 2 倍的 Forward Delay 时间,默认是 30 秒。于是在 2001 年,IEEE 推出了快速生成树协议(RSTP)作为 802.1w。RSTP 在网络更改时提供了更快的收敛速度,并引入了新的收敛行为和新的端口角色。所以从今天来看,大部分的厂商的交换机默认使用的都是 RSTP 协议。

标签:BPDU,根桥,端口,发送,STP,网桥,机制
From: https://www.cnblogs.com/desireroot7/p/17409922.html

相关文章

  • 【Java系列】-- 双亲委派机制
    原创:mikechen双亲委派机制......
  • openGauss 数据库认证机制
    数据库认证机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介提供基于客户端/服务端(C/S)模式的客户端连接认证机制。客户价值加密认证过程中采用单向Hash不可逆加密算法PBKDF2,有效防止彩虹攻击。特性描述openGauss采用基本的客户端连接认证机制,客户端发起连接请......
  • openGauss 动态数据脱敏机制
    动态数据脱敏机制可获得性本特性自openGauss1.1.0版本开始引入。特性简介数据脱敏是行之有效的数据库隐私保护方案之一,可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化制定脱敏策略从而实现对隐私数据保护的一种技术,可以有效地在保留原始......
  • 中间件 ZK分布式专题与Dubbo微服务入门 6-2 zk会话重连机制
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12718 1重点关注1.1本节内容验证了使用sessionid和sessionPassword重连的session和之前的session一致,详见3.1   2课程内容2.1扩展之:echodump|nclocalhost2181......
  • 深入解析Java继承机制:面向对象编程的核心探究【Java面试题】
    作为一名对技术充满热情的学习者,我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代,我远非专家,而是一位不断追求进步的旅行者。通过这篇博客,我想分享我在某个领域的学习经验,与大家共同探讨、共同成长。请大家以开放的心态阅读,相信你们也会在这段知识之......
  • 探索新技术机制
    我所在的团队主要负责基础架构相关的工作,了解技术趋势,熟悉业界动态,并跟进、引进和推广适合的新技术是我们团队的一项重要职责。然而,由于团队成员的日常研发工作繁重,业余空闲时间有限,对新技术的关注往往是断断续续的。因此,我们制定了一套"新技术探索机制",每周会抽出固定的工作时间......
  • Python装饰器实战:实现优雅的重试机制
    重试机制在编程中是比较常见的场景,主要被用于处理那些可能由于临时性故障或网络波动等原因而失败的操作。本文介绍如何通过Python装饰器来实现重试机制,从而能够在尽量少修改现有代码的基础上,给其中某些函数加上重试机制。1.概要关于Python的装饰器,只是一个语法糖,原理也比较简......
  • 【计算机网络篇】数据链路层(4.2)可靠传输的实现机制
    文章目录......
  • 在Linux中,心跳机制在Linux高可用集群中作用是什么?
    在Linux高可用(HighAvailability,HA)集群中,心跳机制发挥着至关重要的作用,主要体现在以下几个方面:节点状态监测:节点间连通性确认:心跳机制允许集群中的各个节点周期性地向其他节点发送心跳信号(通常是简单的消息或数据包),以此表明自己处于正常运行状态。接收节点通过及时响应或确......
  • 包机制、JavaDoc
    包机制*代表导入这个包下所有的类!JavaDocJava的api帮助文档:https://docs.oracle.com/javase/8/docs/api/index.html/***@authorxqstudy*@version1.0*@since3.28*/publicclassDoc{Stringname;/****@paramname*@retur......