【linux--->数据链路层协议】
文章目录
- @[TOC](文章目录)
- 一、数据链路层协议概念
- 二、以太网帧格式
- 1.字段分析
- 三、局域网通信原理
- 四、ARP协议
- 1.结构
- 2.作用
- 3.ARP通信过程
- 4.ARP协议相关命令
- 五、局域网内中间人原理
- 六、DNS系统(域名系统)
- 1.域名概念
- 2.DNS系统组成
- 3.DNS协议
- 3.浏览器输入域名后的通信过程
- 4.dig工具
- 七、ICMP协议
- 1.ICMP协议作用
- 2.协议格式
- 3.ping命令
- 4.traceroute命令
- 八、代理服务器
文章目录
- @[TOC](文章目录)
- 一、数据链路层协议概念
- 二、以太网帧格式
- 1.字段分析
- 三、局域网通信原理
- 四、ARP协议
- 1.结构
- 2.作用
- 3.ARP通信过程
- 4.ARP协议相关命令
- 五、局域网内中间人原理
- 六、DNS系统(域名系统)
- 1.域名概念
- 2.DNS系统组成
- 3.DNS协议
- 3.浏览器输入域名后的通信过程
- 4.dig工具
- 七、ICMP协议
- 1.ICMP协议作用
- 2.协议格式
- 3.ping命令
- 4.traceroute命令
- 八、代理服务器
一、数据链路层协议概念
链路:就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他交换结点。
数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
网络中主机间通信的路由是有IP协议策划的,但是具体通信实施是由数据链路层实施的,主要负责相邻设备之间的通信.数据链路层是以帧为单位传输和处理数据,所以要把数据封装成帧.
数据链路层协议会根据不同的网络驱动程序和网络硬件设施而变化。不同类型的网络硬件设施,如以太网、无线局域网(WLAN)、广域网(WAN)等,具有不同的特性和限制。因此,为了在特定的网络环境中实现高效的数据传输,数据链路层协议需要根据网络驱动程序和硬件设施进行相应的调整和优化。例如,以太网是一种常见的有线局域网技术,其数据链路层协议包括以太网帧格式、MAC地址分配、帧传输机制等。而无线局域网(WLAN)则涉及到无线信道管理、帧碰撞避免机制、信号强度控制等。这些协议的设计和实现都要考虑到底层网络驱动程序和硬件设施的特性,以保证数据传输的可靠性、效率和安全性。
二、以太网帧格式

1.字段分析
地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;帧协议类型字段有三种值,分别对应IP、ARP(地址解析协议)、RARP(逆地址解析协议);帧末尾是CRC校验码。其中ARP的作用是知道目标主机IP地址,用IP地址获取Mac地址,RARP作用是知道Mac地址,用Mac地址获取IP地址.
MAC地址用来识别数据链路层中相连的节点;长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址);IP地址描述的是路途总体的 起点 和 终点;MAC地址描述的是路途上的每一个区间的起点和终点
在极端情况下,如果数据帧的长度非常的长,数据帧传送过程中丢包,会造成这个数据帧重传,如果将这个很长的数据帧分割多个数据帧,发生丢包时丢包的数据就会减小.所以以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在PAD字段补充.
三、局域网通信原理
在局域网中一台主机发送消息,同网内的所有机器都会收到,目标主机通过Mac协议中的目的Mac地址确认报文是否是发给自己的,如果不是直接丢弃,如果是则向上解复用.
一个局域网中同一时间只允许一台主机在发消息,否则会造成数据碰撞,消息是本质是二进制码,二进制在传输媒介中以光波或者电波的形式传送,如果多个信号波同时在局域网中传送,势必会发生碰撞,造成信号波混乱,二进制码被打乱.所以局域网也成为碰撞域.
主机在局域网中发送消息,所有主机都会受到消息包括自己,在报文中有CRC报文检测字段,收到自己发出去的报文就检测报文有没有出错,如果出错了,说明当下有另一台主机也在发送消息,两台主机发生了碰撞,这叫做碰撞检测,主机会等待一个随机的时间段后,再向网络中发送消息,这个避免碰撞.如果局域网中有一台设备一直在想网络中发送数据,会影响其他设备的正常使用.
从数据碰撞的问题看,局域网就好像是线程间通信的临界资源,只不过没有锁的概念,而是换成了尝试找资源空隙的方法;令牌环网的局域网通信原理就是如同是给网络加了锁,主机A在发送消息给主机B,这时候只能主机A发送消息,当主机B收到消息时,就只能主机B发送消息.
局域网中主机的数量越少,发生碰撞的概率就会越低,所以网络中又引入了交换机设备,交换机可以划分碰撞域,连接在交换机一侧的主机之间发生碰撞,不会影响另一侧的主机.同侧的主机发送消息,不会扩散到另一侧的主机.
四、ARP协议
1.结构

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址;
硬件地址长度对于以太网地址为6字节;
协议地址长度对于和IP地址为4字节;
op字段为1表示ARP请求,op字段为2表示ARP应答。
2.作用
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;
3.ARP通信过程
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;所以需要向网络中发送ARP请求报文获取目标主机mac地址,ARP协议请求报文填充如下:帧类型字段0806,硬件类型为1,协议字段是0800,硬件地址就是Mac地址长度为6字节,协议地址就是IP地址为4字节,op为1响应,发送端以太网地址为为自己的Mac地址,发送端IP为自己的IP地址,目的以太网地址是全F(全F为站位符),目的IP填充目的IP地址.
局域网中的主机都会接收到ARP请求报文,所有主机由数据链路层直接向ARP层协议提交报文,目标主机收到请求报文首先会对比op字段,如果op是1,就再对比目的IP地址字段,如果与自己的IP地址不相同报文就在ARP协议层丢弃.
如果与自己的IP地址相同就返回ARP响应报文,响应报文填充报文帧类型字段0806,硬件类型为1,协议字段是0800,硬件地址就是Mac地址长度为6字节,协议地址就是IP地址为4字节,op为2响应,发送端以太网地址为为自己的Mac地址,发送端IP为自己的IP地址,目的以太网地址就是接收报文的发送端以太网地址,目的IP填充接收到的报文的发送端IP地址.
局域网内通信,不用每次都发送ARP请求报文,操作系统会在主机中将建立好的IP地址和mac地址的映射关系缓存在主机中一段时间.
4.ARP协议相关命令
arp -a命令:查看查看主机内维护的IP与Mac映射关系

ping命令:测试网络连通情况,间接获取局域网内目标主机IP与Mac的映射关系

五、局域网内中间人原理
局域网中间人的原理,就是利用主机无脑接收ARP响应的漏洞,例如中间人主机C攻击目标是主机A,C主机向网络中发送包含源Mac地址为MacC,源IP地址为IPR的请求报文,目的是在主机A中建立路由器IP地址和MacC地址的映射关系;然后再发送含源Mac地址为MacC,源IP地址为IPA的请求报文,目的是在路由器中建立主机AIP地址和MacC地址的映射关系.使得路由器与主机A的通信信息都会被主机C截胡.但是主机C需要不断的向网络中发送这两个请求报文,因为主机为了保持最新的IP和Mac地址映射关系,IP地址和Mac地址的映射关系在主机中的缓存时间是有限的.

如果主机C截胡主机A到路由器的报文而不转发主机A的报文到路由器,就会造成主机A访问不了网络.
六、DNS系统(域名系统)
1.域名概念
从编程的角度看,网络中用IP地址和端口号确定一个进程,但是对于用户来说这样的方式是不友好的,所以从为用户考虑的角度出发,有了用主机名代替IP地址的网站访问方式,并在主机的hosts文件中缓存主机名和IP地址的映射关系.如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.其他计算机也需要定期下载更新新版本的hosts文件才能正确上网;
cat /etc/hosts可以查看hosts文件信息

主机名也叫域名,域名是由子域名构成的,以百度域名为例,www.baidu.com com是顶级域名,baidu是二级域名,www是三级域名.顶级域名大致可以分成两类:一类是通用顶级域名(gTLD),比如.com、.net、.edu、.org、.xxx等等,共有 700 多个。另一类是国家顶级域名(ccTLD),代表不同的国家和地区,比如.cn(中国)、.io(英属印度洋领地)、.cc( 科科斯群岛)、.tv(图瓦卢)等,共有 300 多个。二级域名一般是指域名注册人选择使用的网上名称
2.DNS系统组成
随着计算机的增多使用hosts文件管理域名的方式已经不适应时代发展了,就有了DNS系统,但是也保留了hosts文件,
DNS系统是一种分布式地址信息数据库系统,采用客户机/服务器模式,服务器中包含整个数据库的某部分信息,并供客户查询。DNS允许局部控制整个数据库的某些部分,但数据库的每一部分都可通过全网查询得到。
由三部分构成:域名数据库、域名服务器和地址解析器。地址解析器负责解释域名给服务器和解释IP地址给客户端.域名服务器负责查询域名与IP映射关系信息,域名数据库负责存储域名与IP地址映射关系.
域名服务器分为根域名服务器,顶级域名服务器,权限域名服务器,本地域名服务器;
根据域名服务器维护着一张根域名列表,里面记载着顶级域名和对应的托管商,其实根域名列表的正式名称是 DNS 根区(DNS root zone),保存 DNS 根区文件的服务器,就叫做 DNS 根域名服务器(root name server)。根域名服务器保存所有的顶级域名服务器的地址
顶级域名服务器管理注册在该顶级域名下的所有二级域名,记录这些二级域名的 IP 地址。
权限域名服务器如果一个二级域名或者一个三/四级域名对应一个域名服务器,则域名服务器数量会很多,我们需要使用划分区的办法来解决这个问题。那么权限域名服务器就是负责管理一个“区”的域名服务器。
3.DNS协议
DNS(Domain Name System)是一种协议。它是互联网的核心基础设施之一,用于将域名转换为对应的IP地址。DNS协议定义了域名解析的规则和过程,包括域名的层次结构、域名服务器的交互方式等。通过DNS协议,我们可以使用便于记忆的域名来访问互联网上的资源,而不必直接使用IP地址。
3.浏览器输入域名后的通信过程
当用户在浏览器中输入一个域名,从用户输入到最终访问目的网站的整个过程可以分为以下步骤:
- 用户在浏览器中输入域名(例如www.example.com)。
- 浏览器首先会检查本地缓存中是否存在该域名对应的IP地址。如果存在且尚未过期,浏览器将直接使用缓存的IP地址。
- 如果本地缓存中不存在或已过期,浏览器将向本地DNS服务器发送域名解析请求。
4.本地DNS服务器会查找自己的缓存,如果找到了对应的IP地址,它会将IP地址返回给浏览器,跳至第7 步。 - 如果本地DNS服务器的缓存中没有对应的IP地址,它会向根域名服务器发送请求。
- 根域名服务器会返回负责该顶级域名(如.com)的顶级域名服务器的地址给本地DNS服务器。递归服务器拿到地址以后,建立TCP连接;向IP地址,发送HTTP请求;服务器处理请求;返回响应结果;关闭TCP连接;
4.dig工具
安装 dig 工具可以查看域名解析过程:yum install bind-utils

- 开头位置是 dig 指令的版本号
- 第二部分是服务器返回的详情, 重要的是 status 参数, NOERROR 表示查询成功
- QUESTION SECTION 表示要查询的域名是什么
- ANSWER SECTION 表示查询结果是什么. 这个结果先将 www.baidu.com 查询成了 www.a.shifen.com, 再将
www.a.shifen.com 查询成了两个 ip 地址. - 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等.
七、ICMP协议
1.ICMP协议作用
一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因ICMP正是提供这种功能的协议; ICMP协议确认IP包是否成功到达目标地址.通知在发送过程中IP包被丢弃的原因.
ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;,ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此把它归结为网络层协议;
2.协议格式

类型(Type):4位,标明ICMP报文的作用及格式。
代码(Code):4位,标明报文的类型。
校验和:8位,检验报文是否有误
报文各种类型与代码含义描述

3.ping命令

注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址.
ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).ping命令会先发送一个 ICMP Echo Request给对端;
对端接收到之后, 会返回一个 ICMP Echo Reply;
ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息
4.traceroute命令
也是基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器

八、代理服务器
代理服务器可以分为正向代理和反向代理。
-
正向代理(Forward Proxy):
正向代理是位于客户端和目标服务器之间的代理服务器。当客户端需要访问目标服务器时,请求首先发送到正向代理服务器,然后由代理服务器转发请求给目标服务器,并将响应返回给客户端。客户端不直接与目标服务器通信,而是通过代理服务器进行通信。正向代理隐藏了客户端的真实身份和位置信息,可以用于访问被封锁的网站、提供缓存功能、加速访问等。游戏加速等就是因为使用了正向代理服务器. -
反向代理(Reverse Proxy):
反向代理是位于目标服务器和客户端之间的代理服务器。当客户端发送请求到目标服务器时,请求首先到达反向代理服务器,然后由代理服务器根据一定的策略将请求转发给目标服务器,并将目标服务器的响应返回给客户端。客户端不知道实际提供服务的是目标服务器,而是与反向代理进行通信。反向代理可以实现负载均衡、提供安全性、缓存静态内容、减轻目标服务器压力等。翻墙要通过反向代理服务器才能实现.
总结:
正向代理是客户端通过代理服务器访问目标服务器,隐藏了客户端的身份信息;
反向代理是客户端通过代理服务器访问目标服务器,隐藏了目标服务器的身份信息。
相关文章:
【linux--->数据链路层协议】
文章目录 [TOC](文章目录) 一、数据链路层协议概念二、以太网帧格式1.字段分析 三、局域网通信原理四、ARP协议1.结构2.作用3.ARP通信过程4.ARP协议相关命令 五、局域网内中间人原理六、DNS系统(域名系统)1.域名概念2.DNS系统组成3.DNS协议3.浏览器输入域名后的通信过程4.dig工…...
如何在pytest接口自动化框架中扩展JSON数据解析功能?
开篇 上期内容简单说到了。params类类型参数的解析方法。相较于简单。本期内容就json格式的数据解析,来进行阐述。 在MeterSphere中,有两种方式可以进行json格式的数据维护。一种是使用他们自带的JsonSchema来填写key-value表单。另一种就是手写json。…...
哪些年,我们编程四处找的环境依赖
基于Maven,快速构建SSM项目 <properties><!-- 将spring和有关的升级版本,设置为5.0.5--><spring.version>5.0.5.RELEASE</spring.version><!-- 将mybatis和有关的升级版本,设置为3.1.1--><my…...
物联网工程开发实施,应该怎么做?
我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 物联网工程的概念 物联网工程是研究物联网系统的规划、设计、实施、管理与维护的工程科学,要求物联网工程技术人员根 据既定的目标,依照国家、行业或企业规范,制定物联网…...
mysql使用SUBSTRING_INDEX拆分字符串,获取省、市、县和详细现住址
mysql使用SUBSTRING_INDEX拆分字符串,获取省、市、县和详细现住址 一、如何把"江西-上饶市-广丰县-大南镇古村村张家82号"拆分为省、市、县和详细现住址二、mysql的解决办法 一、如何把"江西-上饶市-广丰县-大南镇古村村张家82号"拆分为省、市、…...
Kubernetes中的就绪(readinessProbe)和存活(livenessProbe)探针
目录 案例一 案例二 readinessProbe就绪探针 readinessProbe就绪探针的作用 livenessProbe存活探针 livenessProbe存活探针的作用 探针的几种类型 探针的几个参数...
docker端口映射详解(随机端口、指定IP端口、随意ip指定端口、指定ip随机端口)
目录 docker端口映射详解 一、端口映射概述: 二、案例实验: 1、-P选项,随机端口 2、使用-p可以指定要映射到的本地端口。 Local_Port:Container_Port,任意地址的指定端口 Local_IP:Local_Port:Container_Port 映射到指定地…...
俄罗斯方块
俄罗斯方块简单实现 使用 pygame 模块实现俄罗斯方块的简单实现,这里没有使用pygame 自带的碰撞检测,而是自定义的方法实现边界碰撞和方块间碰撞检测。 代码实现 import random import pygame import time # 初始化游戏 pygame.init()# 设置游戏窗口大…...
web服务
静态网页与动态网页的区别 在网站设计中,静态网页是网站建设的基础,纯粹 HTML 格式的网页通常被称为“静态网页”,静态网页是标准的 HTML 文件,它的文件扩展名是 .htm、.html,可以包含文本、图像、声音、FLASH 动画、…...
【Rust 基础篇】Rust类型别名:为类型赋予新的名字
导言 Rust是一种以安全性和高效性著称的系统级编程语言,其设计哲学是在不损失性能的前提下,保障代码的内存安全和线程安全。在Rust中,类型别名是一种常见的编程特性,它允许为现有类型赋予新的名字,从而提高代码的可读…...
【机器学习】 贝叶斯理论的变分推理
许志永 一、说明 贝叶斯原理,站在概率角度上似乎容易解释,但站在函数立场上就不那么容易了;然而,在高端数学模型中,必须要在函数和集合立场上有一套完整的概念,其迭代和运算才能有坚定的理论基础。 二、贝叶…...
Flink之RedisSink
在Flink开发中经常会有将数据写入到redis的需求,但是Flink官方并没有对应的扩展包,这个时候需要我们自己编译对应的jar资源,这个时候就用到了bahir,barhir是apahce的开源项目,是专门给spark和flink提供扩展包使用的,bahir官网,这篇文章就介绍下如何自己编译RedisSink扩展包. 下…...
STM32CubeMx学习与K210串口通信+识别橘色色块——点亮小灯
K210模块的串口发送代码 引入模块 import sensor, image,time,lcd,utime import KPU as kpu import gc, sys from fpioa_manager import fm from machine import UART 锁定引脚 和 申明串口 fm.register(9, fm.fpioa.UART1_TX, forceTrue) fm.register(10, fm.fpioa.UART1_R…...
睿讯微带你深度了解汽车交流充电桩
这几年随着新能源汽车的普及,充电桩也越来越多的出现在我们的视野中。新能源纯电汽车就好比一种大号的电子产品,而充电桩则是它不可缺少的子系统,是新能源车主们的必要选择。 汽车充电桩分为直流和交流两种,2022年底全国公共充电桩…...
word怎么压缩到10m以下?文件压缩很简单
Word文档是我们工作和学习中一直需要用到的,但有时候Word文档体积过大,给存储和传输带来了不便,这时候我们可以做的就压缩Word。 通常情况下,影响Word文档过大的主要因素主要是图片过多、音视频插入、格式的设置、文字内容的增多以…...
I.MX6ULL_Linux_驱动篇(43)linux通用LED驱动
前面我们都是自己编写 LED 灯驱动,其实像 LED 灯这样非常基础的设备驱动, Linux 内核已经集成了。 Linux 内核的 LED 灯驱动采用 platform 框架,因此我们只需要按照要求在设备树文件中添加相应的 LED 节点即可,本章我们就来学习如…...
OPTEE之sonarlint静态代码分析实战二——optee_client
ATF(TF-A)/OPTEE之静态代码分析汇总 目录 一、optee_client源码下载及分析 二、扫描类型归类...
c++调用ffmpeg api将视频文件内容进行udp推流
代码及工程见https://download.csdn.net/download/daqinzl/88156926 开发工具:visual studio 2019 播放,采用ffmpeg工具集里的ffplay.exe, 执行命令 ffplay udp://238.1.1.10:6016 主要代码如下: #include "pch.h" #include <iostream&g…...
助力工业物联网,工业大数据之服务域:油站主题分析【二十六】
文章目录 07:服务域:油站主题分析08:服务域:油站主题实现 07:服务域:油站主题分析 目标:掌握油站主题的需求分析 路径 step1:需求step2:分析 实施 需求:统计…...
MySql之索引
MySql之索引 1.索引概述 MySql官方对索引的定义为:索引是帮助MySql高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
