当前位置: 首页 > news >正文

十.数据链路层——MAC/ARP

IP和数据链路层之间的关系

引言

在IP一节中,我们说IP层路由(数据转发)的过程,就像我们跳一跳游戏一样,从一个节点,转发到另一个节点
它提供了一种将数据从A主机跨网络发到B主机的能力
什么叫做跨网络???
本质是要经历很多子网或者局域网
图来自小林网络coding
在这里插入图片描述
也就是说节点与节点之间,不要看只是两台主机
更准确的说,它是同一个局域网内两台不同的主机(两两之间各属于一个子网)
假如我们想要将数据从主机B发送到主机C,我们说IP层为我们提供路径选择,即从哪个节点,跳到哪个节点(跨网络)
假如数据出现错误,我们有TCP层保证可靠性
现在还有一个很关键的问题
在同一个局域网内,为什么主机B会向路由器发消息,而不会向其它人发消息呢?
这就是数据链路层解决的问题——在同一个子网内,数据如何发送
所以我们之前说IP层拥有将数据从A主机跨网络发送到B主机的能力其实并不准确,只不过是讨论该层的时候,已经默认包含了下层的能力
IP层与数据链路层两者联合起来,才拥有将数据从A主机跨网络发送到B主机的能力!

数据链路层的定位和作用

我们可以举回上一次旅行的例子来进一步加深理解
假如我们要从广东东莞出发,去新加坡旅行,我们往往不是一步到位,直接坐飞机就可以到达
相反,我们制定了⼀个行程表,先乘坐公交车到深圳,再坐高铁到香港,然后从香港坐飞机到新加坡
公交车票和高铁票都是去往特定的地点的,每张票只能够在某⼀限定区间内移动,此处的「区间内」就如同通信网络中数据链路
在区间内移动相当于数据链路层,实现区间内两个节点传输的功能
为什么要先到深圳,再到香港,最后才到新加坡?
这些节点的选择是谁来决定的?
这就是我们IP层实现的功能,它就相当于我们的行程表
两者相互搭配,才可以实现从一个地方,跨不同区域到达另一个地方的目标!
总结一下,数据链路层的定位:
用于两个设备(同一种数据链路节点)之间进行传递

以太网

那我从东莞到深圳,除了坐车之外,可不可以坐地铁呢?或者你骑自行车都可以!在同一个区域内,一个节点到另外一个节点的方式有很多种
同样的,在同一个局域网内,一台主机到另外一台主机的方式有很多种,可以说是千差万别,这也是为什么数据链路层不可能被整合像我们的TCP/IP层一样,在OS操作系统内部实现
常见实现的局域网通信技术有下面三种:

以太网:
以太网是一种应用最普遍的计算机局域网技术
它不是一种具体的网络, 而是一种技术标准;
既包含了数据链路层的内容, 也包含了一些物理层的内容
例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等

令牌环网:
令牌环网常用于IBM系统中,在这种网络中有一种专门的帧称为“令牌”,在环路上持续地传输来确定一个节点何时可以发送包.

无线LAN/WAN:
无线局域网是有线网络的补充和扩展,现在已经是计算机网络的一个重要组织部分
像我们的手机连wifi,访问路由器,不用接线吧?都是无线进行操作的

但我们说不用担心,虽然数据链路层存在不同的局域网通信技术,但是我们的路由器可以替我们屏蔽底层网络之间的差异,达到无障碍适配
图来自博主2021dragon
在这里插入图片描述
路由器内部就自带对应不同局域网通信技术的驱动程序,假如根据查找对应的路由表,发现目的IP主机不在这个网络而且采用的是不同的通信技术,就会为我们重新进行对应的封装
这也是为什么我们手机明明采用的是无线LAN/WAN通信技术,但是可以将我们对应的数据发送给对应路由器,和其它底层使用以太网的有线设备进行数据交流.
(手机无线给QQ发消息,电脑端QQ可以收到;或者我们手机微信文件共享给台式电脑,在底层其实都是这个原理.)
类似的技术还有:
虚拟地址空间: 屏蔽了内存之间的差别,让所有的进程看到的都是同一块内存,并且这块内存的布局都是一样的。
一切皆文件: 通过文件结构体和函数指针的方案,让我们能够以对待文件的方式对待某些资源

局域网通信原理

MAC地址

有了上面的铺垫后,我们就可以开始讲解局域网通信原理
我们先来看一个小故事

假如今天大家都在教室内上课,老师突然喊了一句,张三,为什么你的作业昨晚没有按时提交?
张三听到后站了起来,回复道:“不对吧,我记得我昨天明明交了啊!”
老师听到后,给出对应的回复:“好的,那我回去再看看.”

上述故事其实就很好阐述了我们局域网通信的基本原理
第一,老师说话,同学们怎么知道老师叫的是谁呢?
答案是名字,并且此时每个人的名字都具有唯一性
第二,老师喊话张三的时候,其他同学听到消息了吗?
答案是听到了,只不过因为叫的不是自己,所以没有进行对应站起来回答问题的操作
类比到我们局域网通信当中来,每一台主机都有着自己的网卡,一张网卡上就对应有一个全球唯一的MAC地址,它就相当于我们每个同学的名字
在linux下,我们同样可以输入ifconfig指令,查看对应的MAC地址
其中ether是以太网的意思,总共48位
在这里插入图片描述
当一台主机在局域网内发消息时,所有人其实都收到消息了,只不过由于匹配自己的MAC地址后,发现它叫的不是自己,直接在数据链路层,将数据报文丢弃了而已

学习MAC报头

了解了MAC地址后,我们便可以看一下以太网的帧格式是如何的
图来自博主2021dragon
在这里插入图片描述

如何解包/交付

同样的,我们了解任何一个报头,都是从如何解包和向上交付说起
可以很直观的看出,以太网报头是一个定长报头,目的地址,源地址,类型,CRC四个字段加起来总共18个字节,直接分割,即可区分报头和有效载荷
那如何向上交付呢?我们知道网络层不一定用的是IP协议
答案是2个字节的帧类型字段
假如此时数据是IP报文,那对应填充为0800
在这里插入图片描述
PS:ARP,RARP都属于数据链路层,而不是网络层
假如此时数据是一个ARP报文,那对应填充0806
在这里插入图片描述
假如此时数据是一个RARP报文,那对应填充8035
在这里插入图片描述

具体过程

了解了MAC报头后,就可以具体细化我们上面讲述过的小故事了
现在在同一个局域网内,有很多台主机相连,包括我们的路由器也在其中
在这里插入图片描述
假如此时我们的主机A想要和主机E通信,则会发送对应的报文
对应的目的MAC地址填上E的,源目的MAC地址填上自己A的MAC地址即可
在这里插入图片描述
然后报文就会被发到网络当中,此时大家都会收到这个报文
不过大家都会对数据帧进行比对,看一下目的MAC地址和自己是不是一样,假如不一样,则网卡会直接舍弃对应的数据;假如一致,才会把对应的报文向上交付
在这里插入图片描述
那有没有办法,即便MAC地址不同,也会继续向上交付报文呢?
答案是有的!网卡中,可以被设置为混杂模式
设置为混杂模式后,主机就不会对报文的目标MAC地址进行认证,直接向上层交付,这也是我们大部分局域网抓包软件的原理
那我们说要对数据进行保护,是在数据链路层保护吗?
不是!而是我们之前提到过的应用层,对数据自己进行加密,这样别人获取到了,也无法对数据进行解读
假如此时主机A想要发送的数据对象不在这个局域网内,那目的端口MAC地址就填路由器的即可

数据碰撞

但是在一个局域网内,更多时候是多台主机相互发消息,但是这几台主机又是共享一个通信信道的,此时就会出现一个问题——数据相互干扰,更为专业一点的名词,我们称作为数据碰撞
在以太局域网中,任何时候,我们只能有一台主机在给另外一台主机发送数据帧,否则就会发送数据碰撞问题
那我们如何解决这个问题呢?
首先要有碰撞检测,也就是检测到数据的确发生了碰撞,出现了错误
所以我们会发现MAC报头里面有一个CRC字段,它就是用来解决这个问题的,A主机发消息,它自己也会收到,假如CRC校验不通过,说明此时数据发生了碰撞,反之,我们认为数据没有发生碰撞
检测到碰撞后,我们要进行碰撞避免
当主机发送出去的数据产生碰撞时,该主机需要等待一段时间后(sleep一下),再进行数据重发,这样就能够尽可能让局域网当中的数据消散
整体原则是什么?
其实就是采取碰一碰,试一试的策略
有人会说,这不会有点随意吗?
第一, 不要小看光速,实际数据碰撞的概率并不会很高
第二,它其实就是一种另类的重传机制而已,不仅仅TCP层有重传,我们的数据链路层也有!
第三,那我们还可以思考一个问题,数据相对越短,数据碰撞越少,还是相对越长,数据碰撞越少呢?
答案毋庸置疑,数据量一旦很长,横跨的时间段就会很大,一旦发生误码,TCP层会对整个数据进行重传,发生碰撞的概率就会进一步提高
因此我们数据量必须限制一定大小,这就是我们MTU的由来,上层交付的有效载荷不能超过1500字节

如何理解数据碰撞

那我们应该如何看待数据碰撞呢?
局域网在同一个时刻,只允许一台主机向另外一台主机发消息
有没有觉得很熟悉?
局域网的本质,在系统看来其实就是一个临界资源,一台台主机就相当于一个个进程,在同一时刻,我们只允许一个进程访问对应的临界资源
但是,我们说两者采取的策略不同,在系统中,我们采取加锁,信号量等方式;但是网络中采取的是直接试探
令牌环网其实就是如此,它存在一个称作令牌的东西,只有拿到令牌的人,才有资格发消息,拿我们之前的故事举例,只有拿到麦克风的人才有资格说话,其他人暂时闭嘴,令牌本质对应的就是我们系统中的互斥锁
所以,我们说系统和网络不分家,思想贯穿一致
还有一点需要说明
局域网中,主机数目越多,碰撞的概率也会相应增多
这也是为什么我们在大学上大课的时候,人一多,数据就比较难发出去,网络比较卡;或者学校操场校运会时也是如此
本质就是由于不断发生数据碰撞,一直在丢包的缘故!
PS:那假如我们要黑掉一个局域网,其中一个方法便是发送大量垃圾数据,增大数据碰撞概率
为了解决这个问题,对应设备便应运而生
我们称之为网桥,或者说交换机
它的作用就是划分碰撞域
假如我A主机和C主机通信,而不和B主机通信,此时就不用把对应的报文发给B,然后再判断后丢弃
交换机会将两者隔开,分成两个区域,相当于交流的双方有了自己的对话空间,从而减少数据碰撞的概率
假如A主机想要直接向路由器发消息,B主机所在区域也不再需要收到A主机报文,交换机会将报文转给路由器
在这里插入图片描述

ARP协议

我们说同一个局域网内,主机A向主机B发消息,在数据链路层会封装MAC帧,这意味着需要知道对方的IP地址
但是我们只知道对方的IP地址,在套接字socket编程的时候,也仅仅是提供对应的IP而已
那么如何根据对方的IP,得到对方的MAC地址,从而封装我们的MAC帧呢?
这就是我们ARP(Address Resolution Protocol,ARP)协议解决的问题.
它不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;
整体的框架如下图所示:
在这里插入图片描述

小故事

我们还是以我们之前的故事作为引入
现在老师同样要在班上点名回答问题,但是学校只发给老师对应学生的学号,而不是姓名
在老师点学生姓名回答问题之前,老师先要在班里大喊一句:“xxxx学号是哪位同学?你叫什么名字?”
对应的同学会站起来,然后回复老师自己的名字,比如说小明
老师知道他叫小明后,以后就能够通过直接叫小明,然后小明就会站起来回答问题了
同样的,学号其实就是我们的IP地址,姓名其实就相当于我们的MAC地址
在同一个局域网内,双方进行局域网通信之前,可以通过ARP协议,从对应的IP获取到对应的MAC地址
然后再进行局域网通信

协议格式

协议的整体格式如下图所示:
在这里插入图片描述

以太网目的地址/源地址

当想要获取对应接收端的MAC地址时,由于不知道对方的MAC地址,所以以太网的目的地址填充为FFFFFF,代表向整个局域网广播,对应以太网源地址填充上自己的MAC地址即可
当接收端给发送端对应的回应时,以太网MAC地址就可以填充上发送端的MAC地址,源地址此时填上自己接收端的MAC地址
这样一来一回,接收端便知道了目标主机的MAC地址
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的.

帧类型

这在我们之前讲解封装时已经讲过
之前数据是IP报文,那对应填充为0800
但此时是ARP报文,则填充对应的0806
在这里插入图片描述

硬件类型/协议类型

硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址;
硬件地址长度对于以太网地址为6字节;
协议地址长度对于和IP地址为4字节;
对于以太网中发送的ARP报文来说,这四个字段通常是固定的

OP字段

op字段为1表示ARP请求
op字段为2表示ARP应答

具体发送过程

了解协议格式后,我们便可以看一下具体发送过程是怎样的
在这里插入图片描述
假如此时我们的主机A依旧想要和主机E通信,不过在具体两者通信之前,还需要获取到对于主机E的MAC地址
于是A主机就会向局域网当中发送一个ARP报文
其中对于目的MAC地址,由于我们不知道,所以填充上对应的FFFFFF即可。代表广播
在这里插入图片描述
于是所有人都会收到对应的ARP报文,并进行对应的目的IP地址匹配,假如是自己,则可以填充对应的ARP报文返回给主机A;如果不是,则直接在ARP层将对应报文抛弃
在这里插入图片描述
返回的时候,就不用广播地址了,而是直接填上对应的MAC地址,毕竟我们收到对应的ARP报文,是已经知道对方的MAC地址的
此时的op也要从1改为2,代表应答报文
在这里插入图片描述
这是两台主机相互交换的情况,但是实际局域网内,是有很多台主机相互交换的
我们说一台主机,在局域网内部,不要有主人翁意识,大家都一样
任何一台主机都有可能向别人发起ARP请求,或者收到别人给你发的ARP请求
这也正是OP选项字段出现的必要性
所以,任何一台主机,在收到一个ARP报文时,优先看OP,再看对应的目的IP地址
假如OP是1,即这是一个请求报文

假如不是请求自己,直接在ARP层丢弃
假如是请求自己,则构建对应的回应ARP报文返回

假如OP是2,即这是一个回复报文

假如不是请求自己,则直接在MAC帧层丢弃,根本不会往上交付给ARP层
假如是请求自己,才会向上交付给对应的ARP层

还有一个细节需要注意,ARP也是报文,所以经常发ARP报文询问对应的MAC地址,这样也同样可能导致数据碰撞
所以,不是每一次都要ARP,可以将IP地址与对应的MAC地址之间的映射,暂时缓存起来
我们可以在linux系统(windows)下,输入arp -a指令查看我们对应自己的IP地址和MAC地址映射
在这里插入图片描述
当然这种映射是有时间限制的,不然我们每次连wifi,路由器都会随机分配一个动态IP地址给我们,我们的IP地址是会发生改变的,此时映射之间就会发生错误
那有IP地址得到对应MAC地址的协议,有没有MAC地址得到IP地址的协议呢?
答案是有的!它就是我们前面提到过的RARP协议(R代表reverse逆转),也被称为逆地址解析协议,由于IP是直接就知道的,所以不难猜想,它的整个过程和我们的ARP协议类似,但是要简单很多.

ARP欺骗

在之前我们的HTTPS协议中,我们曾经提到过中间人盗取我们数据的知识,具体是怎么利用ARP成为中间人呢?
在这里插入图片描述
同样是我们的局域网,此时存在一个主机M,它想成为中间人的方法很简单
我们说有对应的ARP请求,就会给出对应的ARP回复
但是不妨碍没有请求时,也可以给出对应的ARP回复报文
主机M只要给对应的主机A构建假的ARP应答,告诉主机A,我是E主机,对应IP地址是IP E,MAC地址是MAC M
给对应的主机E构建假的ARP应答,告诉主机E,我是A主机,对应IP地址是IP A,MAC地址是MAC M
在这里插入图片描述
那在主机A和主机E数据交流时,它们以为双方都在和对面直接通信,但其实都经过主机M,这种做法在任何子网,公网都是可以存在的,因为IP地址是公开的.
同样的,我们说假如要使一个局域网暂时瘫痪,也可以发送无效的垃圾ARP报文,想要定向攻击一台主机,也可以发送大量错误的ARP应答等等.

相关文章:

十.数据链路层——MAC/ARP

IP和数据链路层之间的关系 引言 在IP一节中,我们说IP层路由(数据转发)的过程,就像我们跳一跳游戏一样,从一个节点,转发到另一个节点 它提供了一种将数据从A主机跨网络发到B主机的能力 什么叫做跨网络??&a…...

Linux主机安全可视化运维(免费方案)

本文介绍如何使用免费的主机安全软件,在自有机房或企业网络实现对Linux系统进行可视化“主机安全”管理。 一、适用对象 本文适用于个人或企业内的Linux服务器运维场景,实现免费、高效、可视化的主机安全管理。提前发现主机存在的安全风险,全方位实时监控主机运行时入侵事…...

Vite + Vue 3 前端项目实战

一、项目创建 npm install -g create-vite #安装 Vite 项目的脚手架工具 # 或者使用yarn yarn global add create-vite#创建vite项目 create-vite my-vite-project二、常用Vue项目依赖安装 npm install unplugin-auto-import unplugin-vue-components[1] 安装按需自动导入组…...

python-字符替换

[题目描述] 给出一个字符串 s 和 q 次操作,每次操作将 s 中的某一个字符a全部替换成字符b,输出 q 次操作后的字符串输入 输入共 q2 行 第一行一个字符串 s 第二行一个正整数 q,表示操作次数 之后 q 行每行“a b”表示把 s 中所有的a替换成b输…...

团队项目开发使用git工作流(IDEA)【精细】

目录 开发项目总体使用git流程 图解流程 1.创建项目仓库[组长完成] 2. 创建项目,并进行绑定远程仓库【组长完成】 3.将项目与远程仓库(gitee)进行绑定 3.1 创建本地的git仓库 3.2 将项目添加到缓存区 3.3 将项目提交到本地仓库&#…...

爬虫案例实战

文章目录 一、窗口切换实战二、京东数据抓取 一、窗口切换实战 案例实战:使用selenium实现打开百度和腾讯两个窗口并切换 知识点:用到selenium中execute_script()执行js代码及switch_to.window()方法 全部代码如下: import time import war…...

uniapp uni-popup内容被隐藏问题

今天开发新需求的时候发现uni-popup 过一会就被隐藏掉只留下遮罩(css被更改了),作者进行了如下调试。 1.讲uni-popup放入其他节点内 失败! 2.在生成dom后在打开 失败! 3.uni-popup将该节点在包裹一层 然后将统计设置样式,v-if v-s…...

leetcode155 最小栈

题目 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。i…...

在Ubuntu乌班图上安装Docker

最近在学习乌班图相关的内容,找了一些文档安装的都是报错的,于是记录一下学习过程,希望也能帮助有缘人,首先查看乌班图的系统版本,我的是如下的: cat /proc/version以下是在Ubuntu 20.04版本上安装Docker。…...

【Redis数据库百万字详解】数据持久化

文章目录 一、持久化1.1、什么是持久化1.2、持久化方式1.3、RDB优缺点1.4、AOF优缺点 二、RDB持久化触发机制2.1、手动触发2.2、自动触发 三、RDB持久化配置3.1、配置文件3.2、配置查询/设置3.3、禁用持久化3.4、RDB文件恢复 四、RDB持久化案例4.1、手动持久化4.2、自动持久化案…...

echarts legend. icon的展示

默认展示 icon展示circle圆形rect矩形roundRect圆角矩形triangle三角形diamond菱形pin水滴arrow箭头none不显示...

PHPstudy情况下上传图片马需要的.htaccess文件

网上的方法是无效的&#xff1a; <FilesMatch "test.jpg">SetHandler application/x-httpd-php</FilesMatch>原因是新版本的phpstudy使用了cgi模式,而网上的方法只适用于linux模式。 <FilesMatch "tpm.png"> AddHandler fcgid-script …...

基于最大重叠离散小波变换的PPG信号降噪(MATLAB 2018)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测&#xff0c;如血压、血氧饱和度等&#xff0c;但采集过程中极易受到噪声干扰&#xff0c;对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展&#xff0c;可穿戴监测设备对于PPG信号的质量…...

Gradio中Button用法及事件监听器click方法使用

Gradio中Button用法及事件监听器click方法使用 瞎想乱记 事情是这样的&#xff1a;入职时面试的是Java&#xff0c;简历中写了会python&#xff0c;刚好最近有个小项目需要用Python实现&#xff0c;老板就将这个项目交给了我&#xff0c;我… 项目中还真遇到了好几个坑&#…...

【Qt秘籍】[005]-Qt的首次邂逅-创建

一、如何创建文件&#xff1f; 当我们打开Qt Creator&#xff0c;你会发现整个界面类目繁多。现在&#xff0c;让我们直接开始新建一个项目。 1.点击左上角的“文件”>点击“新建文件或项目” 2.如图&#xff0c;选择“Application”>“Qt Wifgets application”> “…...

亚信安慧AntDB:值得信任的数据产品

AntDB的一个显著特点是其高度的容错性和可靠性。AntDB采用了先进的冗余和备份机制&#xff0c;确保在面对硬件故障或系统异常时仍能保持数据的完整性和可用性。这种稳定性不仅为运营商的核心业务提供了持久的保障&#xff0c;也提升了用户的信任和满意度。 AntDB的容错性和可靠…...

超越传统AI 新型多智能体系统MESA,探索效率大幅提升

探索多智能体强化学习的协同元探索 —— MESA 算法深度解读在多智能体强化学习&#xff08;MARL&#xff09;的征途中&#xff0c;如何高效探索以发现最优策略一直是研究者们面临的挑战。特别是在稀疏奖励的环境中&#xff0c;这一问题变得更加棘手。《MESA: Cooperative Meta-…...

[SWPU 2019]神奇的二维码、buuctf部分web题

目录 [SWPU 2019]神奇的二维码 [LitCTF 2023]Http pro max plus [SWPUCTF 2021 新生赛]finalrce ​[鹏城杯 2022]简单包含 [SWPUCTF 2022 新生赛]ez_ez_php(revenge) [GKCTF 2020]cve版签到 cve-2020-7066&#xff1a; [SWPU 2019]神奇的二维码 解码看看&#xff0c;是…...

Python正则表达式匹配中文:深入解析与实战应用

Python正则表达式匹配中文&#xff1a;深入解析与实战应用 在Python编程中&#xff0c;正则表达式是一种强大的工具&#xff0c;它可以用来处理和分析字符串数据。对于需要处理包含中文字符的文本数据的场景&#xff0c;掌握如何使用正则表达式匹配中文就显得尤为重要。本文将…...

实例Python对比两个word文档并找出不同

首先确保已经有了安装包docx 与 difflib&#xff0c;如果没有先用pip命令安装如下 pip install python-docx案例代码 import docx import difflib import os 在文件目录中存在两个待对比的word文档,必须是docx格式 # 获取文档对象 # path input(请输入文件目录&#xff1a;…...

2.1 QT随手简记(三)

新建QT工程 1.方法 第一种&#xff1a;点击new project按钮&#xff0c;弹出对话框&#xff0c;新建即可 第二种&#xff1b;点击文件菜单&#xff0c;选择新建文件或者工程 2.QT工程文件介绍 (1).pro文件 --》QT工程配置文件 QT …...

TechM-技术网站

介绍 你将为⼀个技术社区设计并实现⼀个官⽹。该社区旨在为软件⼯程师、开发⼈员和技术 爱好者提供⼀个交流平台&#xff0c;分享最新的技术动态、⽂章、项⽬案例。 项目模块 项目分为三个模块 &#xff1a; 主页展示模块&#xff0c;文章详情模块&#xff0c;文章专栏模块…...

SpringBoot: 使用GraalVM编译native应用

曾今Go语言里让我最艳羡的两个特性&#xff0c;一个是Goroutine&#xff0c;一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持&#xff0c;现在Spring Boot也能打包成native文件了。 这一篇文章的目标是用一个案例讲解如…...

9. MySQL事务、字符集

文章目录 【 1. 事务 Transaction 】1.1 事务的基本原理1.2 MySQL 执行事务的语法和流程1.2.1 开始事务1.2.2 提交事务1.2.3 回滚&#xff08;撤销&#xff09;事务实例1&#xff1a;一致性实例2&#xff1a;原子性 【 2. 字符集 和 校对规则 】2.1 基本原理2.2 查看字符集查看…...

为什么要学习数据结构和算法

前言 控制专业转码学习记录&#xff0c;本科没学过这门课&#xff0c;但是要从事软件行业通过相关面试笔试基础还是要打牢固的&#xff0c;所以通过写博客记录一下。 必要性 1.越是厉害的公司&#xff0c;越是注重考察数据结构与算法这类基础知识 2.作为业务开发&#xff0c…...

CANoe仿真工程Switch控件关联dbc信号出现的问题及解决思路

小白学习CANoe仿真&#xff0c;参考CANoe-第2个仿真工程-XVehicle—1总线数据库设计&#xff08;思路&#xff09;_canoe vehicle-CSDN博客 CANoe-第2个仿真工程-XVehicle1总线数据库设计&#xff08;操作&#xff09;_canoe factor 参数什么意思-CSDN博客CANoe-第2个仿真工程…...

用开源模型MusicGen制作六一儿童节专属音乐

使用的是开源模型MusicGen&#xff0c;它可以根据文字描述或者已有旋律生成高质量的音乐(32kHz)&#xff0c;其原理是通过生成Encodec token然后再解码为音频&#xff0c;模型利用EnCodec神经音频编解码器来从原始波形中学习离散音频token。EnCodec将音频信号映射到一个或多个并…...

Ps:批处理

Ps菜单&#xff1a;文件/自动/批处理 Automate/Batch 批处理 Batch命令可以对一个文件夹中的文件执行事先创建的动作 Actions&#xff0c;从而快速地完成大量的重复性操作&#xff0c;提升工作效率。 提示 1&#xff1a; 可以从 Adobe Bridge 中调用 Photoshop 的批处理命令。 …...

前端框架中的虚拟DOM和实际DOM之间的关系

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的虚拟DOM和实际DOM之间的关系1. 实际DOM&#xff08;Real DOM&#xff09;1.1 定义1.2 特点 2. 虚拟DOM&#xff08;Virtual DOM&#xff09;2.1 定义2.2 特点 3. 虚拟DOM的工作流程3.1 创建虚拟DOM3.2 比较虚拟DOM&…...

MySQL进阶——SQL性能分析

在上篇文章我们学习了MySQL进阶——存储引擎&#xff0c;这篇文章学习MySQL进阶——SQL性能分析。 SQL性能分析主要是从SQL语句执行频率、耗时时间、CPU使用情况和执行时表连接情况进行分析&#xff0c;常用的方法工具有&#xff1a;SQL执行频率、慢查询日志、profile详情和ex…...

dedecms网站logo/推广产品最好的方式

作者&#xff1a;桂。 时间&#xff1a;2017-05-05 21:45:07 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6815217.html 前言 主要总结一下常用的音频特征&#xff0c;并给出具体的理论分析及代码。 一、过零率 过零率的表达式为&#xff1a; 其中N为一帧的长度&am…...

自己做的网站什么时候可以赚钱/策划方案

解决iview中标签报错的方法参考文章&#xff1a; &#xff08;1&#xff09;解决iview中标签报错的方法 &#xff08;2&#xff09;http://www.cnblogs.com/lanyb009/p/9246712.html 备忘一下。...

衡阳做淘宝网站建设/什么是网站优化

在Android应用中&#xff0c;当对图片本身进行操作时&#xff0c;应该尽量不要是使用setImageBitmap、setImageResource、BitmapFactory.decodeResource来设置一张大图&#xff0c;因为这些方法在完成Decode后&#xff0c;最终都是通过java层的createBitmap()方法来完成的&…...

上海网店代运营外包/seo快速推广窍门大公开

在一个高并发的网站中&#xff0c;多线程是必不可少的。下面先说一下多线程在程序中的作用。 1、提高前端请求的响应速度。当我们执行一个比较耗时的方法时&#xff0c;http请求得不到响应甚至会超时&#xff0c;这时如果业务上允许数据的延迟&#xff0c;我们可以使用多线程来…...

广宁城乡建设网站/代码编程教学入门

点击上方“AI派”&#xff0c;选择“设为星标”最新分享&#xff0c;第一时间送达&#xff01;作者&#xff1a;郑明卓&#xff0c;Python研发工程师&#xff0c;在Python开发与爬虫方面涉猎较广&#xff0c;拥抱新技术。目前负责应用技术调研与开发维护。Now is better than n…...

电子邮件无法发送wordpress/sem管理工具

1 神经元模型&#xff1a; 上一节神经网络不算完整,因为计算公式应该是yadd (xi*wi b) 2、激活函数 引入非线性激活因素&#xff0c;提高模型的表达力。 常用的激活函数有&#xff1a; 3、神经网络的复杂度 可以用神经网络的层数和神经网络待优化的参数个数来表示 4、…...