「网络编程」数据链路层协议_ 以太网协议学习

「前言」文章内容是数据链路层以太网协议的讲解。

「归属专栏」网络编程

「主页链接」个人主页

「笔者」枫叶先生(fy)

目录

  • 一、以太网协议简介
  • 二、以太网帧格式(报头)
  • 三、MTU对上层协议的影响
  • 四、ARP协议
    • 4.1 ARP协议的作用
    • 4.2 ARP协议报头

一、以太网协议简介

以太网协议是TCP/IP体系中的数据链层协议

以太网协议位于数据链路层:
在这里插入图片描述

链路层解决的问题

  • 网络层解决的问题是:将数据从一台主机跨网络送到另一台主机,也就是数据的路由(路径选择)
  • 网络层的数据包封装成IP报文之后,依旧要继续向下交付,交付给下一层:数据链路层
  • 再由数据链路层把IP报文封装成数据帧,再由数据链路层发送到网络里。这时,所谓的“数据包”才真正意义的进入网络
  • 即在网络(网线)上跑的是数据帧,不是IP报文
  • 网络层的IP协议是为数据的路由提供决策(提供跨网络传输的能力,有能力不一定能做到),而真正的对数据进行转发的是数据链路层(正真做事的)
  • 把数据帧转发给与当前主机直接相连的下一跳主机(两台主机直接相连也就意味着这两台主机属于同一网段,因此将数据转发到下一跳主机实际是属于局域网通信范畴的,而这实际就是链路层需要解决的问题)

即数据链路层要解决的问题是:把数据帧转发给与当前主机直接相连的下一跳主机,即解决两台直接相连的主机之间的通信问题

:不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)

跨网络传输的本质是无数个子网(局域网)转发的结果
在这里插入图片描述

要彻底理解跨网络转发,首先要理解一个局域网中报文的转发原理

基本概念

  • “以太网”不是一种具体的网络,而是一种技术标准:既包含了数据链路层的内容,也包含了一些物理层的内容
  • 例如:以太网规定了网络拓扑结构,访问控制方式,传输速率等
  • 例如:以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等
  • 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等

局域网技术

不同局域网所采用的通信技术可能是不同的,常见的局域网技术有以下三种:

  • 以太网:以太网是一种局域网(LAN)技术,应用最普遍的局域网技术。以太网的特点是具有较高的数据传输速率和较低的成本
  • 令牌环网:令牌环网是一种早期的局域网技术,令牌环网使用了一种称为令牌传递的机制来控制数据传输(只有持有令牌的设备才能发送数据)
  • 无线局域网(WLAN)和无线广域网(WAN)是无线网络技术。WLAN使用无线电波代替有线电缆来连接设备,使设备可以无线访问局域网。

MAC地址

  • 在同一局域网的两台主机能够直接进行通信
  • 每一台主机都有自己的“名字”:每一台主机都有网卡,每一张网卡都有自己的地址,这个地址称为MAC地址,表明自己在局域网中的唯一性(主机唯一)
  • MAC地址长度为48位,6个字节,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19

在Linux查看自己的主机的MAC地址:使用ifconfig命令查看, ether对应就有”以太“的意思(但实际云服务器上的MAC地址可能不是真正的MAC地址,该MAC地址可能虚拟技术模拟模拟出来的)
在这里插入图片描述

以太网通信原理

以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据
在这里插入图片描述

  • 例如,当局域网中的主机A想要发送数据给主机E时,其实局域网当中的每一台主机都能收到主机A发出去的数据
  • 各个主机在对比自己的MAC地址和数据帧中的目的MAC地址,发现数据帧中的目的MAC地址与自己的MAC地址不匹配,就直接丢弃该报文,不进行向上交付(在数据链路层丢弃)
  • 只最终只有主机E会将主机A发来的数据向上进行交付

补充

  • 网络抓包工具(局域网抓包),不进能抓自己主机的数据报文,也能抓该局域网下其他主机的报文
  • 原理是:网卡有一种模式叫做混杂模式,被设置为混杂模式的网卡能够接收所有经过它的数据帧,不管该数据包是不是自己主机的,只要接收到数据帧就直接向上交付

令牌环网(简单赘述)

  • 在令牌环网中,令牌按照固定的顺序在节点之间传递。每个节点在拥有令牌时可以访问共享资源,然后将令牌传递给下一个节点。当一个节点完成对共享资源的访问后,它将令牌传递给下一个节点(按顺序传递)
  • 在令牌环网中,只有持有令牌的主机才能发送数据(令牌相当于互斥锁)

二、以太网帧格式(报头)

以太网帧格式如下:
在这里插入图片描述
字段解释:

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应IP协议、ARP协议和RARP协议
  • 帧末尾是CRC校验码

MAC帧如何将报头与有效载荷进行分离??

  • 简单粗暴:固定字长
  • 以太网MAC帧的帧头和帧尾都是固定长度的(18字节),因此当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了

MAC帧如何决定将有效载荷交付给上层的哪一个协议?(如何分用)

  • MAC帧的帧头当中有2个字节的类型字段,该字段填写有协议的编号,如果是0800就是交付给IP协议,0806就是交付给ARP协议,0838交付给RARP协议
  • 因此在分离出报头和有效载荷后,根据该字段将有效载荷交付给对应的上层协议即可

数据碰撞

  • 由于以太网中的所有的主机共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰
  • 站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用
  • 在同一局域网中,如果多台主机同时发生数据(同一时刻),发送的数据就会互相干扰,就会造成数据碰撞,这些数据就变成了无效的数据,只能被丢弃
  • 每一个局域网都可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞

如何知道发生数据碰撞了??

  • 通过碰撞检测算法进行检测,发生碰撞了通过碰撞避免算法解决

  • 如果检测到发生碰撞了,在数据链路层的协议就会触发策略,发生数据碰撞的主机就不发数据了,等一段时间再进行发送

  • 数据碰撞发生的概率比较低,如果局域网中的主机过多或者发送数据过多,也会容易发生碰撞

一个局域网不能很大,为什么??

  • 局域网太大,就意味着主机多,任何时刻发生碰撞的概率就增加了

如果一个局域网过大,就要引入一种设备,叫做交换机,交换机是工作在数据链路层的

  • 交换机的作用之一就是隔离,交换机可以识别局部性的碰撞,对碰撞的数据不进行转发
  • 例如,主机A和主机D发生了数据碰撞,交换机识别到了数据碰撞,就对该碰撞的数据不进行转发到右边的网络里,右侧的网络在一定程度上发生碰撞的概率就降低了
  • 交换机有效的对碰撞域进行了分割(划分碰撞域)

在这里插入图片描述

一台主机发送数据的时候,发送数据量长了好,还是短了好??

  • 数据量长了容易发生碰撞,数据量短了效率也低
  • 所以,对发送的数据帧要有一定的范围大小,既不能太大,也不能太小
  • 在以太网协议里,就有对发送数据的有效载荷大小有规定,有效载荷最小46字节,最大1500字节
  • 如果发送数据量小于46字节,则需要在数据后面补填充位,超过1500字节无法发送

在这里插入图片描述

最大传输单元 MTU

最大发送的有效载荷1500字节,1500字节就是MTU

  • 最大传输单元(Maximum Transmission Unit,MTU)是指在网络通信中,数据链路层能够传输的最大有效载荷的大小。MTU的大小通常由网络设备或网络协议规定,它限制了一次可传输的数据量
  • MTU默认的大小一般是1500字节,不同的数据链路层标准的MTU是不同的
  • 如果一次要发送的数据超过了MTU,则需要在IP层对数据进行分片

在Linux下使用ifconfig命令可以查看对应的MTU
在这里插入图片描述

三、MTU对上层协议的影响

MTU对IP协议的影响

  • 由于数据链路层MTU的限制,对于较大的IP数据包要进行分片
  • 分片已经在IP协议谈过了,不再赘述

MTU对UDP协议的影响

  • IP报头当中如果不携带选项字段,那么IP报头的长度就是20字节,而UDP采用的是定长的8字节报头
  • 因此如果UDP一次携带的数据超过了 1500 − 20 − 8 = 1472字节,此时数据就需要在IP层进行分片
  • 那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了

MTU对于TCP协议的影响

对于TCP来说,分片也会增加TCP报文丢包的概率,但与UDP不同的是TCP丢包后还需要进行重传,因此TCP应该尽量减少因为分片导致的数据重传

  • TCP的一个数据报也不能无限大, 还是受制于MTU
  • TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size)
  • TCP在建立连接的过程中,通信双方会进行MSS协商
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP报头写入自己能支持的MSS值
  • 然后双方得知对方的MSS值之后,选择较小的作为最终MSS
  • MSS的值就是在TCP首部的40字节变长选项中

MSS和MTU的关系如下:
在这里插入图片描述

  • 假设IP报头当中如果不携带选项字段,那么IP报头的长度就是20字节;TCP报头当中如果不携带选项字段那么IP报头的长度就是20字节
  • 即TCP的有效载荷最多1500-20-20 = 1460字节,即MSS的最大值

四、ARP协议

4.1 ARP协议的作用

ARP(Address Resolution Protocol)是一种根据IP地址获取MAC地址的协议,ARP是一个介于数据链路层和网络层之间的协议

例如:
在这里插入图片描述

  • 比如,数据从主机B经过各种路由转发到达主机C
  • 每两个相连的节点隶属于同一个子网,但是想给另一个节点发送数据,就必须知道对方的MAC地址
  • 但是每个节点只知道下一个直接相连节点的IP地址,因此每个主机必须通过某种方式得到下一个主机的MAC地址,只有知道了对方的MAC地址,才能给对方发数据

实际大部分情况下我们只知道对方的IP地址,因此需要通过ARP协议来根据IP地址来获取目标主机的MAC地址
: ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议

ARP协议的定位

介于数据链路层和网络层之间
在这里插入图片描述

4.2 ARP协议报头

ARP协议报头如下:
在这里插入图片描述
字段解释:

  • 硬件类型:指链路层的网络类型,1为以太网
  • 协议类型:指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度:对于以太网地址为6字节,因为MAC地址是48位的
  • 协议地址长度:对于IP地址为4字节,因为IP地址是32位的
  • op字段:为1表示ARP请求,op字段为2表示ARP应答

从ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段

ARP请求的过程

同一局域网内,主机A想给主机B发送数据(知道IP地址),但是主机A不知道主机B的MAC地址,此时主机A就会触发ARP请求,把ARP请求广播到该局域网中,然后等待主机B发送ARP应答给主机A,最后得知主机B的MAC地址

主机A构建ARP请求流程如下:

  • 主机A构建的是ARP请求,所以ARP请求当中的op字段设置为1
  • ARP请求当中的硬件类型字段设置为1,表示以 以太网通信
  • ARP请求当中的协议类型设置为0800,代表的是使用另一台主机的IP地址来获取另一台主机的MAC地址
  • ARP请求当中的硬件地址长度和协议地址长度分别设置为6和4字节,因为MAC地址的长度是48位,IP地址的长度是32位
  • ARP请求当中的发送端以太网地址和发送端IP地址,对应就是主机A自己的MAC地址和IP地址
  • ARP请求当中的目的以太网地址和目的IP地址,对应就是主机B的MAC地址和IP地址,但由于主机A不知道主机B的MAC地址,因此将目的以太网MAC地址的二进制序列设置为全1,表示在局域网中进行广播

ARP请求构建完成,如下:
在这里插入图片描述

ARP请求构建完成后,需要向下交付给以太网协议,进行封装MAC帧,然后才能发送到以太网里

  • 封装MAC帧报头时,以太网源MAC地址对应主机A的MAC地址,以太网目的MAC地址对应主机B的MAC地址
  • 但由于主机A不知道主机B的MAC地址,因此MAC帧报头当中的以太网目的地址的二进制序列也只能设置为全1(16进制全F),表示在局域网中进行广播
  • 封装的是一个ARP请求数据包,因此MAC帧当中的帧类型字段设置为0806,代表ARP请求
  • 由于ARP请求数据包的长度只有28字节,不足46字节,因此还需要在MAC帧的有效载荷当中补上18字节的填充字段(PAD)

封装好的数据帧如下:
在这里插入图片描述

封装好MAC帧之后,就可以发送到局域网中了

  • 局域网中的每台主机都收到该数据帧,每台主机都会对该数据帧进行解包
  • 这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP协议
  • ARP协议对该ARP请求进行解包,首先查看OP字段,于是判定这是一个ARP请求
  • 然后再提取出ARP数据包当中的目的IP地址字段,与自己主机的IP地址进行匹配,不匹配直接丢弃该报文
  • 只有IP地址匹配的主机,才会构建ARP应答

ARP应答的过程

主机B进行构建ARP应答:(相同的地方就不再赘述)

  • ARP应答当中的op字段设置为2,代表ARP应答
  • ARP应答当中的源MAC地址和源IP地址,对应就是主机B的MAC地址和IP地址
  • ARP应答当中的目的以太网地址和目的IP地址,对应就主机A的MAC地址和IP地址(从ARP请求里获取)

ARP应答构建完成如下:
在这里插入图片描述

ARP应答构建完成后,需要向下交付给以太网协议,进行封装MAC帧,然后才能发送到以太网里

  • 封装MAC帧报头时,以太网源MAC地址对应主机B的MAC地址,以太网目的MAC地址对应主机A的MAC地址
  • 封装的是一个ARP应答数据包,因此MAC帧当中的帧类型字段设置为0835,代表ARP应答
  • 由于ARP请求数据包的长度只有28字节,不足46字节,因此还需要在MAC帧的有效载荷当中补上18字节的填充字段(PAD)

封装好的数据帧如下:
在这里插入图片描述
MAC帧封装完毕后,主机B就可以将封装好的MAC帧发送到局域网当中了

  • 局域网当中的每台主机在底层都能收到这个MAC帧,只有主机A将解包后MAC帧的有效载荷向上交付给ARP协议
  • ARP收到这个数据包后,发现ARP数据包当中的op字段为2,于是判定这是一个ARP应答,然后就会提取出ARP数据包当中的源MAC地址和源IP地址
  • 此时主机A就拿到了主机B的MAC地址

ARP缓存表

ARP缓存表(Address Resolution Protocol Cache Table)是一种用于存储IP地址与MAC地址之间映射关系的缓存表

  • 当一台主机需要与另一台主机通信时,首先会检查自己的ARP缓存表,看是否已经有目标主机的IP地址与MAC地址的映射关系
  • 如果有,则直接使用该映射关系进行通信
  • 如果没有,则会发送一个ARP请求广播,询问局域网中的其他主机,以获取目标主机的MAC地址
  • 目标主机收到ARP请求后,会发送一个ARP回应,将自己的IP地址与MAC地址发送给请求方,请求方将这个映射关系存储到自己的ARP缓存表中

也就是说,一台主机需要与另一台主机通信时,并不是每次都会进行ARP请求,而是先去ARP缓存表里面查看是否有另一台主机的MAC地址

注意:ARP缓存表中的映射关系有一定的有效期限,如果在有效期限内没有再次使用该映射关系,系统会自动删除该条目,以保持ARP缓存表的更新和有效性(即ARP缓存表会不断更新,覆盖老的映射关系)

在Linux查看ARP缓存表,使用命令arp -a
在这里插入图片描述

ARP欺骗

ARP欺骗(ARP spoofing)是一种网络攻击技术,也被称为ARP缓存投毒(ARP cache poisoning

攻击者通过伪造ARP回应,将自己的MAC地址与其他主机的IP地址进行映射,从而欺骗网络中的其他主机

大致如下:

  • ARP协议是将IP地址转换为MAC地址的协议,它在局域网中进行通信时使用。当一台主机需要与另一台主机通信时,会发送一个ARP请求广播,询问目标主机的MAC地址
  • 目标主机收到ARP请求后,会发送一个ARP回应,将自己的IP地址与MAC地址发送给请求方
  • 目标主机收到ARP请求后,会发送一个ARP回应,将自己的IP地址与MAC地址发送给请求方
  • 在ARP欺骗攻击中,攻击者会发送伪造的ARP回应,将自己的MAC地址与其他主机的IP地址进行映射
  • 这样,当其他主机需要与目标主机通信时,会通过ARP缓存表中的映射关系发送数据给攻击者,而不是真正的目标主机
  • 攻击者可以利用这种方式进行数据窃取、中间人攻击等恶意行为

RARP协议

  • RARP(Reverse Address Resolution Protocol,逆地址解析协议)是一种与ARP相对应的协议
  • 与ARP协议将IP地址解析为MAC地址相反,RARP协议将MAC地址解析为IP地址

--------------------- END ----------------------

「 作者 」 枫叶先生
「 更新 」 2023.10.28
「 声明 」 余之才疏学浅,故所撰文疏漏难免,
          或有谬误或不准确之处,敬请读者批评指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/107258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的IC卡门禁系统设计

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、主要研究内容及总体设计方案1.1 系统方案设计1.2系统工作原理 二、硬件设计2.1 主控电路 三、软件设计3.2主程序设计实物附录1 原理图附录2 源程序清单 四、 结论五、 文章目录 概要 本论文重点通过对射频技术…

小米14系列, OPPO Find N3安装谷歌服务框架,安装Play商店,Google

10月26号小米发布了新款手机小米14,那么很多大家需求问是否支持谷歌服务框架,是否支持Google Play商店gms。因为毕竟小米公司现在安装的系统是HyperOS澎湃OS。但是我拿到手机之后会发现还是开机初始界面会显示power by android,证明这一点他还是支持安装谷歌,包括最近一段时间发…

公司电脑如何限制安装软件

公司电脑如何限制安装软件 安企神终端管理系统下载使用 在企业环境中,电脑已经成为企业中必不可少的办公工具,确保员工的生产力和公司的信息安全是至关重要的。为了实现这一目标,公司可能会限制员工在某些情况下安装软件或者由管理员来为终…

一个Entity Framework Core的性能优化案例

概要 本文提供一个EF Core的优化案例,主要介绍一些EF Core常用的优化方法,以及在优化过程中,出现性能反复的时候的解决方法,并澄清一些对优化概念的误解,例如AsNoTracking并不包治百病。 本文使用的是Dotnet 6.0和EF…

TVRNet网络PyTorch实现

文章目录 文章地址网络各层结构代码实现 文章地址 An End-to-End Traffic Visibility Regression Algorithm文章通过训练搜集得到的真实道路图像数据集(Actual Road dense image Dataset, ARD),通过专业的能见度计和多人标注,获得…

Qt QWebEngine 更换语言

背景 使用Qt QWebEngine开发的应用,在一些场景下,会显示英文文本,比如右键、JS弹出的对话框,所以需要进行汉化,更改语言。 准备翻译文件 Qt有提供翻译好的ts文件,我们可以直接下载ts文件qtwebengine_zh_…

世界前沿技术发展报告2023《世界航空技术发展报告》(二)军用飞机技术

(二)军用飞机技术 1.作战飞机1.1 美俄对第五代战斗机进行升级改进1.2 美欧第六代战斗机技术取得新进展1.3 美国B-21隐身轰炸机正式亮相 2.支援飞机2.1 美国空军拟研制翼身融合布局运输/加油机2.2 美欧厂商积极参加北约未来预警机技术研究项目2.3 美国空军…

1817_ChibiOS的RT线程

全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 关于线程,有几个概念需要弄清楚:声明、生命循环、延迟、线程引用、线程队列、线程时间、优先级管理、调度。 2. 两个声明…

线性表的定义和基本操作

线性表的定义和基本操作 一、线性表的定义 线性表(Linear List)是具有相同数据类型的n(n>0)个数据元素的有限序列,其中n为表长,当n0时线性表是一个空表。若用L命名线性表,则其一般表示为 L (a1,a2,...,ai,ai1,.…

JMeter + Ant + Jenkins持续集成-接口自动化测试

需要安装的工具: jdk1.8jmeter3.2ant1.9jenkins2.1 1、Jdkwin7系统如何安装jdk及环境变量的配置-百度经验 安装包安装设置环境变量验证是否安装正确 Java -version检查,如下就代表安装成功了,环境变量设置就去搜索了,网上很多…

TimeGPT:时间序列预测的第一个基础模型

时间序列预测领域在最近的几年有着快速的发展,比如N-BEATS、N-HiTS、PatchTST和TimesNet。 大型语言模型(llm)最近在ChatGPT等应用程序中变得非常流行,因为它们可以适应各种各样的任务,而无需进一步的训练。 这就引出了一个问题:时间序列的…

File相关方法2

一.获取当前目录下所有一级文件名称 1.代码 package org.example;import java.io.File;public class day03 {public static void main(String[] args) {//获取当前目录下所有一级文件名称final File f1 new File("d:/temp");final String[] name f1.list();for (…

VDA到Excel方案介绍之自定义邮件接收主题

VDA标准是德国汽车工业协会(Verband der Automobilindustrie,简称VDA)制定的一系列汽车行业标准。这些标准包括了汽车生产、质量管理、供应链管理、环境保护、安全性能等方面的规范和指南。VDA标准通常被德国和国际上的汽车制造商采用&#x…

学习笔记:二分图

二分图 引入 二分图又被称为二部图。 二分图就是可以二分答案的图。 二分图是节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 性质 如果两个集合中的点分别染成黑色和白色&am…

目录和文件操作

在自己电脑任一盘符中新建以OS_Test命名的文件夹,并在该文件夹中新建新建3个以.txt,3个 .xlsx为扩展名的文件(文件名由代码随机生成,长度为8,由字母数字组成)。,请写一个程序,删除掉…

stm32的ADC采样率如何通过Time定时器进行控制

ADC采样率是个跟重要的概念. 手册上说可以通过Timer定时器进行触发ADC采样. 可我这边悲剧的是, 无论怎么样. ADC都会进行采样. 而且就算是TIM停掉也是一样会进行采样. 这就让我摸不着头脑了… 我想通过定时器动态更改ADC的采样频率. 结果不随我愿… 这到底是什么问题呢? 一…

el-table(vue2中)滚动条被固定列盖住

一、项目场景: vue2 el-table 二、问题描述 1、现场图片: 2、全局css环境配置了滚动条高度为6px /* 全局滚动条配置 */ ::-webkit-scrollbar {width: 6px;height: 6px; }::-webkit-scrollbar-track {background-color: #f1f1f1; }::-webkit-scrollbar-…

STM32 定时器配置不当导致误差(精度)偏大的问题发现与解决

通用定时器TIM2/3/4/5,PWM输出1Khz的波形 一开始初始化代码如下: void MX_TIM2_Init(void)//1kHz {TIM_ClockConfigTypeDef sClockSourceConfig {0};TIM_MasterConfigTypeDef sMasterConfig {0};TIM_OC_InitTypeDef sConfigOC {0};htim2.Instance T…

AI与Prompt:解锁软件开发团队的魔法咒语,在复杂任务上生成正确率更高的代码

AI与Prompt:解锁软件开发团队的魔法咒语 写在最前面论文:基于ChatGPT的自协作代码生成将团队协作理论应用于代码生成的研究自协作框架原理1、DOL任务分配2、共享黑板协作3、Instance实例化 案例说明简单任务:基本操作,生成的结果1…

【MySQL架构篇】逻辑架构

逻辑架构 文章目录 逻辑架构1. 服务器处理客户端请求2. Connectors3. 第一层:连接层4. 第二层:服务层5. 第三层:存储引擎6. 存储层7. 小结 1. 服务器处理客户端请求 首先 MySQL 是典型的 C/S 架构,即 Client/Server 架构&#xf…