文章目录

  • STP介绍
    • STP相关术语
    • STP比较原则
    • STP BPDU报文格式
  • STP工作原理
    • STP初始化角色选举过程
    • STP拓扑变化角色选举过程
  • RSTP介绍
    • RSTP端口角色
    • RSTP端口状态
    • RSTP BPDU报文变化
    • RSTP拓扑变化角色选举过程
    • 处理BPDU报文的变化(相较于STP)
    • P/A快速收敛机制
  • MSTP介绍
    • MSTP相关术语
    • MSTP端口角色
    • CIST角色比较原则
    • CIST计算原理
    • MSTI计算原理
    • MSTP BPDU报文结构

STP介绍

STP(Spanning Tree Protocol,生成树协议)是用于消除环形网络的广播风暴(数据包在网络中不断循环转圈)和MAC地址表不稳定(MAC地址表不断更改学习到的MAC地址条目)问题,从而实现既能解决环路问题,也能形成备份;STP是IEEE 802.1D标准;

STP相关术语

STP协议中涉及了很多术语,例如:根桥、根桥ID、桥ID、路径开销、端口ID、根端口、指定端口、阻塞端口等;

  • 根桥:整个生成树的根,全网只有一个根桥(根交换机),便于后续相关角色的选举;
  • 根桥ID/桥ID(RID/BID):由优先级与MAC地址两部分组成,优先级范围为0-61440,优先级默认为32768,MAC地址为交换机面板的MAC地址,而非端口上的MAC地址;
  • 端口ID(PID):由端口优先级与端口编号两部分组成,优先级范围为0-255,默认为100
  • 路径开销:端口参数,端口到达根桥的开销,根桥的端口开销为0;
  • 根端口:负责向根桥发送报文或接受根桥发送的报文,每个交换机只有一个根端口
  • 指定端口:负责发送根桥报文,每一个端口到端口的链路都会选出一个指定端口
  • 阻塞端口:除根端口和指定端口以外的所有端口;

STP端口状态:

端口状态 说明
Disabled 不接收不转发BPDU报文,不进行MAC地址学习,不转发用户流量
Blacking 只接收BPDU报文,不进行MAC地址学习,不转发用户流量
Listening 接收并转发BPDU报文,不进行MAC地址学习,不转发用户流量
Learning 接收并转发BPDU报文,进行MAC地址学习,不转发用户流量
Forwarding 接收并转发BPDU报文,进行MAC地址学习,转发用户流量


注:指定端口和根端口选举后,需要两倍转发延迟后才能到转发状态;

注:Hello Time(Hello定时器):STP设备发送配置BPDU报文的时间间隔,缺省为2s,TCN BPDU不受该定时器控制;
Forwarding Delay(转发延迟):STP设备在listening和Learning端口状态各自停留的时间,缺省为15s用于防止交换网络在不同状态间频繁切换(例如:在一个时间间隔内频繁的增减设备,使得端口角色不断发生变化,端口状态也不断发生变化;存在转发延迟后,就不会频繁的从Forwarding状态到Blocking,再到Forwarding状态);
Max Age(最大生存时间):端口的BPDU的老化时间,缺省为20s,收到BPDU报文后,会比较**Message Age(消息生存时间)**和Max Age,如果Message Age小于或等于 Max Age,就非根桥设备继续转发,如果Message Age大于 Max Age,就丢弃该报文;
配置BPDU每经过一个桥设备,Message Age数值就会增加1;

STP比较原则

根桥选举是比较桥ID,根端口和指定端口是按照下述的比较方式比较的;

  • 比较根桥ID(RBID),数值越小越优;
  • 如果RBID相同,就比较到达根桥的路径开销(Cost),数值越小越优;
  • 如果路径开销相同,就比较发送方的桥ID(中继BID),数值越小越优;
  • 如果发送方BID相同,就比较发送方的端口ID(PID),数值越小越优;
  • 如果发送方的PID相同,就比较接收方的PID,数值越小越优;(适用于RSTP和MSTP)

STP BPDU报文格式

BPDU报文分为配置BPDU和TCN BPDU;

配置BPDU是用于计算和维护生成树的报文,是初始阶段中各交换机发送的BPDU;

TCN BPDU是用于生成树拓扑发生变化的报文,下游设备通过该报文通知上游设备拓扑结构发生了变化;

配置BPDU报文格式:

报文字段 说明
Protocol ID 协议ID字段,数值为0;
Protocol Version 协议版本字段,数值“0”表示STP,数值“2”表示RSTP,数值为“3”表示MSTP;
Message Type 消息类型字段,标识BPDU报文类型,“0x00”表示配置BPDU,“0x02”表示RST BPDU或MST BPDU,“0x08”表示TCN BPDU
Flags 标识字段,用于表示字段发生了变化,TC为置1表示通知下游设备删除发生变化的MAC地址,TCA位置1表示已确认拓扑发生了变化
Root ID 根桥ID字段,标识当前根桥设备的RID;
Root Path COST 根路径开销字段,标识发送给BPDU报文的端口累计到跟根桥的开销;
Bridge ID 桥ID字段,标识发送BPDU报文的BID;
Port ID 端口ID字段,标识发送该报文端口的PID,即“发送者端口ID
Message Age 消息生存时间字段,标识该BPDU已存在的时间,从根桥接收报文,数值为“0”;实际实现时,配置BPDU每经过一个桥设备,Message Age就会增加1;
Max Age 最大生存时间字段,标识报文的最大生存时间,缺省为20s,即老化时间;*
Hello Time 发送时间间隔字段,标识配置BPDU发送的时间间隔,缺省为2s
Forwarding Delay 转发延迟字段,控制listening和learning的持续状态,缺省为15s;

TCN BPDU报文格式:

TCN BPDU报文格式很简单只有上述报文的前三段:协议ID、协议版本和信息类型

STP工作原理

STP的角色选举都遵循STP比较原则。整个STP可以分为初始阶段角色选举和拓扑变化后角色选举。

STP初始化角色选举过程

  • 初始状态(未标记为默认值),网络没有根桥;
  • 网络中的所有交换机都认为自己是根桥,开始发送配置BPDU报文,Switch1与Switch2会收到交互BPDU报文,发现Switch1的BID数值更小,优先级更大,认为Switch1为根桥,Switch1与Switch3比较的时候,Switch1的BID优先级更大,Switch1为根桥;
    注:STP中只有根桥设备才会发送配置BPDU,RSTP和MSTP的所有STP设备都会发送配置BPDU报文;
  • 根桥设备选举出来之后,每个非根桥设备要选举出一个根端口;Switch2有两个端口,比较两个端口收到的配置BPDU报文(RID相同,G0/0/1的Cost路径开销小于G0/0/2[角色选举的比较原则]),发现Switch2的G0/0/1为根端口,同理Switch3的G0/0/2为根端口;
  • STP设备选举出根端口后,开始为每条端到端链路选举一个指定端口;Switch1与Switch2链路两端端口通过角色选举的比较原则(RID相同,Switch1的COST更小),发现Switch1的G0/0/1为指定端口,同理Switch1与Switch2之间Switch1的G0/0/2为指定端口;
  • Switch2与Switch3两路两端通过角色选举比较原则(RID相同,COST开销相同,Switch2的中继BID更小),发现Switch2的G0/0/2为指定端口,其他非根端口和非指定端口的为阻塞端口(Switch3的g0/0/1为阻塞端口);
    注:生成树拓扑结构稳定后,根桥设备会按照Hello Time周期性发送配置BPDU报文;

STP拓扑变化角色选举过程

生成树拓扑结构发生变化后,下游设备就会向上游设备发送TCN BPDU报文,告知上游设备拓扑发送了变化。下游设备会不断发送TCN BPDU报文,只有指定端口接收到该报文才会处理

拓扑变化后角色选举过程(MAC地址表项重新学习):

  • 当下游设备发生拓扑变化时,下游设备会不断向上游设备发送TCN BPDU报文,上游设备的指定端口收到TCN BPDU报文后,会向下游设备回复配置BPDU报文(Flags字段TCA置为1),告知下游设备已知道拓扑发生变化,并且设备会复制TCN BPDU报文,然后发送给上游设备,如此往复,直至发送将TCN BPDU报文发送给根桥设备;
  • 根桥设备收到TCN BPDU报文,根桥设备会向下游设备回复配置BPDU报文(flags字段TC置为1),要求下游设备直接删除发生故障端口或发生变化端口的MAC地址表项(删除接收到TCN BPDU报文的指定端口的MAC地址表项),进而达到快速收敛的目的;

注:TCN BPDU报文是用于告知上游设备,生成树拓扑结构发生了变化;
Flags字段的TCA置为1的配置BPDU报文,是上游设备用来告知下游设备已经知道拓扑结构发生了变化;
Flags字段的TC置为1的配置BPDU报文,是根桥设备用来告知下游设备拓扑发生变化,要求下游设备删除发生故障端口或发生变化变化端口的MAC地址表项(删除接收到TCN BPDU报文的指定端口的MAC地址表项);

RSTP介绍

RSTP(Rapid STP,快速生成树协议)是STP的升级版本,用于解决STP收敛速度慢(Listening和Learning有转发延迟、只有根桥才会发送配置BPDU报文)、端口状态和端口角色划分不合理(某些端口状态功能类似,端口角色与端口状态关联性不强)等问题;RSTP是IEEE 802.1w标准;

RSTP端口角色

RSTP将端口角色更加细化,将阻塞端口划分为Alternate(替代)端口和Backup(备份)端口,新加了Edge(边缘)端口;

端口角色 解释说明
根端口 每个非根桥设备都会有一个;用于接收配置BPDU报文;
指定端口 每条端到端链路都会有一个;用于发送配置BPDU报文;
替代端口 用于无延时进入转发状态代替根端口,是对根端口的备份,相当于多了一条接收配置BPDU报文的路径;
备份端口 用于无延时进入转发状态代替指定端口,是对指定端口的备份,相当于多了一条发送配置BPDU报文的路径;
边缘端口 用于主机与STP设备相连的端口;不参与RSTP计算,直接是转发状态;防止主机频繁切换(断开或连接)造成网络拓扑震荡;

RSTP端口状态

RSTP将STP中某些功能相似的状态合并,使其STP的五个状态合并为RSTP的三个状态,提高了RSTP的收敛速度(状态少了,切换时间也会相应变短);

端口角色 角色说明
Discarding 不进行MAC地址学习,不转发数据流量
Learning 进行MAC地址学习,不转发数据流量
Forwarding 进行MAC地址学习,转发数据流量

RSTP BPDU报文变化

RSTP的RST BPDU报文基本与STP的配置BPDU报文相似,较为不同的是Flags字段。

RSTP将Flags字段中没有用上的位数统统利用了起来;

报文字段 解释说明
TCA 用于告知设备已知道拓扑结构发生了变化;
Agreement P/A(提议/确认)机制中的确认快速收敛,Agreement报文;
Forwarding 发送报文的端口处于转发状态;
Learning 发送报文的端口处于学习状态;
Port Role 端口角色,“00”为端口角色未知;“01”为替代端口或备份端口;“10”为根端口;“11”为指定端口
Proposal P/A机制中发起快速收敛的提议报文,Proposal报文;
TC 根桥告知下游设备拓扑发生变化并要求删除相应的MAC地址表项;

常见的Flags数值(仅供了解):

  • 2c即0010 1100,表示发送BPDU报文的端口为转发状态,端口角色为指定端口;
  • 0e即0000 1110,表示有指定端口发送的Proposal报文;
  • 6c即0110 1100,表示发送Agreement报文的端口为转发状态,端口角色为指定端口;
  • 2d即0010 1010,表示发送Proposal报文的端口为转发状态,端口角色为根端口;

RSTP拓扑变化角色选举过程

RSTP取消了TCN BPDU报文,采用更加快捷的方式到达拓扑变化后快速收敛的目的;

RSTP虽然没有TCN BPDU报文,在与STP兼容模式中仍然能够发送和接收TCN BPDU报文(此时RSTP和STP的工作原理为STP),当STP设备完全脱离后,RSTP设备会自动切换为RSTP工作原理,开始快速收敛;

拓扑变化后角色选举的工作过程(MAC地址表项重新学习):

  • 当RSTP检测到拓扑结构发生变化(非边缘端口切换到转发状态),本设备就会启动TC While定时器(数值为Hello Time定时器的两倍),在该定时器内,清空发生变化的端口上学习到的MAC地址表项,并由这些发生变化的端口发送**RST BPDU报文(Flags字段的TC置为1)**给其他RSTP设备,TC while超时就停止发送;
  • 其他RSTP设备的指定端口收到RST BPDU报文(Flags字段的TC置为1)后,清空所有端口学习到的MAC地址表项,除了接收RST BPDU报文的端口,并为所有非边缘端口启动TC While定时器,重复上述过程直至所有RSTP设备都进行MAC地址表重新学习,提高了收敛速度;

注:接收到RST BPDU报文(Flags字段的TC置为1)的端口,不会再从该端口发送RST BPDU报文(Flags字段的TC置为1);

处理BPDU报文的变化(相较于STP)

  • 每台RSTP的设备指定端口都可以发送配置BPDU报文;
  • 如果一个端口连续3倍hello定时器内没有收到上游发送的RST BPDU报文,就认为邻居之间协商失败;

P/A快速收敛机制

Proposal/Agreement机制是为了实现快速收敛,减少端口状态切换的时间;P/A是在点到点链路里;

P/A的端口变量协商过程:

  • Proposing(请求提议):当一个设备的指定端口处于discarding或learning状态时,端口的proposal变量置位,并向下游设备发送RST BPDU报文(Flags字段的Proposal置为1),用于请求快速切换到转发状态;
  • Proposed(请求采纳):当下游设备的根端口收到上述RST BPDU报文(Flags字段的Proposal置为1),接收报文的端口proposed变量置位,表示本链路的指定端口希望尽快进入转发状态;
  • Sync(同步请求):当根端口proposed变量置位,本设备的其他端口都要将sync变量置位,使得非边缘端口都进入discarding状态(阻塞其他非边缘端口),准备重新同步;
  • Synced(同步完成):当非边缘端口处于discarding状态,其他端口都将synced变量置位,根端口监测到所有非边缘端口都将synced置位后,也会将自己的synced变量置位,然后向上根端口所连接的链路发送RST BPDU(flags字段的Agreement置为1);
  • Agreed(提议确认):上游设备收到RST BPDU(flags字段的Agreement置为1)后,会将接收到该报文的端口agreed变量置位,并立即进入Forwarding转发状态;

按照上述步骤,依次将非边缘端口(处于discarding状态)快速切换到Forwarding状态,直至整个RSTP网络都调整完毕;

MSTP介绍

MSTP(Multiple STP,多生成树协议)是可以实现快速收敛,又能使不同VLAN的流量按照不同的路径转发,从而为冗余链路提供更好的负载分担机制;每一个区域叫做MST域(多生成树域),每个域中包含的多颗生成树叫MSTI(多生成树实例),每一颗生成树采用RSTP算法生成;

注:MSTP仅需了解基本概念,以及同一MST域下不同MSTI配置。BPDU报文也只需要了解即可

MSTP相关术语

  • VLAN映射表(MSTP):描述VLAN与MST域中对应的MSTI之间的映射关系;一个MSTI可以对应多个VLAN,一个VLAN只能对应一个MSTI;
  • IST(Internal Spanning Tree,内部生成树):每个MST区域只会生成一个IST生成树,MST区域内的所有设备都属于该IST;IST对应的实例号为0(MSTI ID为0)
  • CST(Common Spanning Tree,公共生成树):是计算整个MSTP网络的生成树,但是将IST这个整体作为生成树的一个节点,即每个MSTP网络只有一个CST,每个MST域的IST是整个MSTP网络的CST生成树的节点;
  • CIST(Common and Internal Spanning Tree,公共和内部生成树):是通过STP或RSTP协议计算生成的,连接整个MSTP网络的所有交换机生成的单生成树,是由IST和CST共同组成的,即CIST是计算MSTP网络的所有交换机组成的(CIST的生成树节点为单个交换机),CST是计算MSTP网络所有IST组成的(CST的生成树节点为IST);
  • SST(Single Spanning Tree,单生成树):运行STP或RSTP的生成树;MST域中只有一个交换机;
  • 总根:CIST的根桥(一个MSTP网络只有一个根桥);
  • 域根:IST域根(IST的根桥,MST区域的根桥,一个MST域对应一个根桥)和MSTI域根(MST域中多生成树实例的根桥,一个实例对应一个MSTI域根);

MSTP端口角色

MSTP协议相对于RSTP协议多了Master(主)端口和域边缘端口;

端口角色 解释说明
根端口 每个非根桥设备都会有一个;用于接收配置BPDU报文;
指定端口 每条端到端链路都会有一个;用于发送配置BPDU报文;
替代端口 用于无延时进入转发状态代替根端口,是对根端口的备份,相当于多了一条接收配置BPDU报文的路径;
备份端口 用于无延时进入转发状态代替指定端口,是对指定端口的备份,相当于多了一条发送配置BPDU报文的路径;
边缘端口 用于主机与STP设备相连的端口;不参与RSTP计算,直接是转发状态;防止主机频繁切换(断开或连接)造成网络拓扑震荡;
主端口 MST域和总根之间最短路径的端口,MST域内的报文去往总根都需要经过该端口;主端口是特殊的域边缘端口,也是CST/CIST的根端口;
域边缘端口 位于MST域边缘且与其他MST域或SST相连的端口;域边缘端口的角色在MSTI和CIST上保持一致,即该端口在CIST里是Master端口,则该端口在所有MSTI内都是Master端口;

CIST角色比较原则

  • 比较总根桥ID,数值越小越优;
  • 如果总根桥ID相同,就比较到达总根桥的外部路径开销(ERPC),数值越小越优;
    注:外部开销是计算MST域外主端口到总根的开销(MST域内部设备到达域根桥的开销不计算);内部路径开销是计算MST域内非域根桥到达域根桥的开销;
  • 如果外部路径开销相同,就比较域根桥ID(RBID),数值越小越优;
  • 如果RBID相同,就比较到达根桥的内部路径开销(IRPC),数值越小越优;
  • 如果路径开销相同,就比较发送方的桥ID(中继BID),数值越小越优;
  • 如果发送方BID相同,就比较发送方的端口ID(PID),数值越小越优;
  • 如果发送方的PID相同,就比较接收方的PID,数值越小越优;(适用于RSTP和MSTP)

CIST计算原理

首先在经过配置BPDU报文比较后,在整个MSTP网络中选举出BID数值最小的交换机作为CIST的总根,然后在MST域内通过MSTP算法计算出IST的所有端口角色,同时MSTP网络将每个MST域作为单独的节点通过STP或RSTP算法计算出CST,最终CST和IST组合成整个MSPT网络的CIST;

MSTI计算原理

每个MSTI当做单独RST或STP计算出生成树;

MSTP BPDU报文结构

报文字段 字节/Bytes 解释说明
Version1 length=0 1 Version1的BPDU报文长度,固定为0;
Version3 length 1 Version3的BPDU报文长度;
MST configuration Identifier 51 MST域配置标识符字段,表示MST域的标签;只有配置相同的MST标识符才会处于同一个MST域;下列有该字段的详细内容;
CIST interval Root Path Cost 4 CIST内部路径开销字段,标识发送配置BPDU报文的端口到达根桥(Master端口)的累积路径开销;
CIST Bridge ID 8 CIST桥ID字段,标识CIST的指定桥ID,相当于BridgeID字段;
CIST Remaining Hops 1 CIST保持跳数字段,BPDU报文在CIST的剩余字段(每经过一个桥设备数值减一);
MSTI Configuration Message 16 MSTI配置信息字段,每个MSTI的详细信息,用于告知总根该MST域中配置的所有MSTI详细信息;可以包含多个MSTI,下列有该字段的详细内容;

报文字段 解释说明
Configuration ID Format Selector 配置标识符格式选择器,固定为0;
Configuration Name MST域名,每个MST域有唯一的域名;
Revision Level MST配置修订级别;
Configuration Digest 配置摘要,利用HMAC-MD5算法将VLAN与实例的映射关系加密为16字节的摘要;

报文字段 解释说明
MSTI Flags MSTI标识字段,与上面Flags字段一样;
MSTI Regional Root Identifier MSTI域根桥ID字段,表示实例中根桥的ID;
MSTI Interval Root Path Cost MSTI内部路径开销字段,表示发送BPDU报文的端口到实例根桥积累的路径开销;
MSTI Bridge Priority MSTI桥优先级,表示本设备的桥优先级;
MSTI Port Priority MSTI端口优先级,表示本设备的端口优先级;
MSTI Remaining Hops BPDU在MSTI中的剩余跳数;

交换基础之生成树协议相关推荐

  1. 网络基础之生成树协议(STP)基础理论及华为ENSP基础配置

    网络基础之STP理论基础 一.STP的引入 拓扑冗余 在上面的拓扑图中,PC1的数据在经过接入层交换机,汇聚到汇聚交换机上后,到达核心交换机之后,最终,流量到达服务器.但是这样的网络是存在问题的.这个 ...

  2. 《网安学习之道》第一季计算机基础18_生成树协议STP

    第十八章.生成树协议STP的工作原理和配置 一.目的 1.理解生成树的原理 理解STP的选举过程 问题1.为什么是交换机0的f0/1的端口堵塞? 2.配置PVSTP+ 二.STP概念 生成树协议是在数 ...

  3. 生成树协议实验报告_【网络技术联盟站】从原理到实验再到优化剖析STP生成树协议...

    STP技术背景 STP基本概念 1. 简单地说STP采用四个步骤来解决二层环路问题: 2. 关键字段及比较原则 STP操作 1. 在交换网络中选举一个根桥 2. 在每个非根桥上选举一个根端口 3. 为 ...

  4. 【网络技术联盟站】从原理到实验再到优化剖析STP生成树协议

    STP技术背景 STP基本概念 1. 简单地说STP采用四个步骤来解决二层环路问题: 2. 关键字段及比较原则 STP操作 1. 在交换网络中选举一个根桥 2. 在每个非根桥上选举一个根端口 3. 为 ...

  5. 交换机生成树协议配置

    一.实验目的 理解生成树STP及快速生成树RSTP的工作原理,掌握如何在交换机上配置快速生成树协议. 二.实验原理 各公司都在寻找1天24小时,1周7天都能正常运行的计算机网络.达到100%正常运行是 ...

  6. 华为网络生成树协议-STP

    大家好,今天和大家讲述一下华为路由交换中的生成树协议,在目前的中大型企业的网络架构中,为了保障网络的可靠性,一般都会设计冗余链路,冗余链路就会产生一个问题就是会有环路,环路就会造成出现广播风暴从而导致 ...

  7. 华为路由交换学习篇-STP生成树协议

    目录 STP STP的选举 根桥选举 根端口选举 指定端口选举 替代端口选举 边缘端口的选举 STP的端口状态 测试 实验拓扑图 实验流程 STP 生成树协议,用于解决二层交换网络环路的协议,在二层交 ...

  8. 生成树协议基础—Vecloud微云

    首先介绍一下SIP的工作原理 生成树协议(Spanning-Tree Protocol,以下简称STP)是一个用于在局域网中消除环路的协议.运行该协议的交换机通过彼此交互信息而发现网络中的环路,并适当 ...

  9. 学习笔记之七_第2层交换和生成树协议(STP)(CCNA知识考点)

    1.交换机的3种功能.地址学习.转发/过滤决定和避免环路是交换机的3种功能. 2.命令show mac address-table.命令show mac address-table将显示LAN交换机上 ...

  10. STP(生成树协议)基础(1)

    文章目录 思维导图 冗余 二层环路 STP简介 工作过程 报文格式 配置BPDU TCN BPDU 角色选举规则 根网桥 根端口 指定端口 思维导图 冗余 在通信工程当中,冗余指出于系统安全和可靠性等 ...

最新文章

  1. 最近很火的最新一代国际视频标准 VVC 到底是什么?阿里专家为你揭秘
  2. 每日一皮:程序员新手尝试新框架的时候
  3. 【Linux】一步一步学Linux——egrep命令(50)
  4. uva 1203—— Argus
  5. mysql模糊查询LIKE、REGEXP(正则)的详解(在可视化工具navicat下)
  6. 【码云周刊第 3 期】来自国内开发者的实战项目,开源让通讯从未如此简单!...
  7. JDK API 1.6.0中文版直接下载
  8. STM32学习笔记1:STM32ZET6配置蓝牙模块
  9. 报错: chaser.rb:35 in `join': No live threads left.
  10. Linux设备驱动开发基础
  11. 数据库原理—数据查询
  12. python延迟实现
  13. python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(一)
  14. bootstrap调整Glyphicons图标大小
  15. 584. 寻找用户推荐人
  16. C#Winform+SqlServer仓库管理系统
  17. 智慧城市时代,哈啰出行定点停车正成为城市共享单车运维新标准
  18. 把枫叶和GLOBAL3 AI 3D相机放进口袋—北京香山之旅
  19. 华为OD机试 - 最优资源分配(Python) | 机试题算法思路 【2023】
  20. 如何把压铸模做得好?

热门文章

  1. 组成计算机网络必备的条件是什么,要组成计算机网络必须具备的三要素
  2. Windows 中包括的 USB 设备类驱动程序
  3. 嵌入式实验 之 DMA控制器实验
  4. spy——[1220] SPY
  5. 【视觉-摄像机3】}摄像机镜头--焦距与视角(选相机和镜头)
  6. 相机和镜头选型计算公式
  7. python背单词代码实现
  8. 电脑技巧:电脑内存不足怎么办?看完你就会了!
  9. TeXStudio 中如何调用Gnuplot
  10. 大龄程序员的出路究竟在何处?从369个过来人问答贴里,我们得到了答案