【Linux从青铜到王者】数据链路层(mac,arp)以及ip分片
局域网通信
通过之前的学习,我们了解了应用层,传输层,网络层的协议和作用,这里先做个总结
- 应用层——http,https协议,也可以自己定义一套,作用是进行数据的处理
- 传输层——tcp,udp协议。保证数据传输的可靠性,提供了一个可靠的能力
- 网络层——ip协议。解决了a主机如何在错综复杂的网络世界中找到b主机,发送的报文可能丢失,但是上层tcp提供可靠性,所以tcp/ip协议可以实现a,b主机之间可靠地互发信息
a主机到b主机之间,必然是经过多次的一层一层的局域网转发的,局域网内是如何转发的,这就是数据链路层要解决的事情
局域网通信就如石头丢进湖里激起的波纹,一个主机要向另一台主机发送消息,就要向局域网里所有的主机都发送信息,主机收到后解析ip是否是自己的,是的话就继续向上解析,不是则丢弃
这里就要用到mac协议了,mac地址是48位的,14亿x2^16,足够大,可以实现全球唯一,不像ip地址一样不够使用
ip协议+路由器+nat只解决了确定目标主机的问题,具体一个局域网里是怎么传送的呢?
a主机要在一个局域网里发送给b主机,此时a拿着自己的ip报文,里面有目标主机的ip,但是不知道b的mac地址,只有知道了才能在mac协议中填写b的mac地址,然后向一个局域网内所有主机发送,b收到后解析发现是传给自己的,就继续解包分用了
mac
mac协议=目的mac(6字节)+源mac(6字节)+帧类型(2字节)+有效载荷+CRC(碰撞检测)
mac的有效载荷可以分为三种:ip报文,arp请求/arp应答,rarp请求/rarp应答,通过帧类型判断
- 0800为ip报文
- 0806位arp请求/应答
- 8035位rarp请求/应答
如何将报头和有效载荷进行分离?固定长度
有效载荷如何向上交付?两字节帧类型,判断是交给数据链路层上层的arp还是网络层ip
上面场景中,我们说了a要在局域网中要和b通信,必须要先知道b的mac地址,此时需要arp
arp是处于数据链路层上层一点的,mac是数据链路层下层一点的,所以arp是夹在ip和mac之间的
假设我们通过arp获得了b的mac地址(发起arp请求的时候目的mac填为全f,表示广播)
此时a,b进行通信的时候,就会将帧类型填位0800,表示有效载荷为ip报文,向局域网里每个主机发送,b收到后先取出报头,发现目的ip是macb,且有效载荷为ip报文,此时就会向上交付给ip层处理,不会交给arp了。
这大概就是mac的传输流程,下面我们再来了解一下arp协议
arp
arp夹在网络层和数据链路层之间
下面借用了一下龙哥的文章,自己写出来总感觉不通顺
原文链接:https://blog.csdn.net/chenlong_cxy/article/details/124788397
arp请求,广播报文
arp应答
arp发送请求
arp报文的请求字段
- 硬件类型指链路层的网络类型,1为以太网。
- 协议类型指要转换的地址类型,0x0800为IP地址。
- 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的。
- 协议地址长度对于IP地址为4字节,因为IP地址是32位的。
- op字段为1表示ARP请求,op字段为2表示ARP应答。
前四个请求和应答填的都是一样的,根据第五个来区分是arp请求还是arp应答
arp的完整流程(路由器D向B主机发送信息)
根据ip与子网掩码确认和B的网络号一致,在同一局域网中,准备获得B的mac地址,进行通信
路由器D构建arp请求,向同一局域网里的所有主机发送
首先,因为路由器a构建的是ARP请求,因此ARP请求当中的op字段设置为1。
- ARP请求当中的硬件类型字段设置为1,因为当前使用的是以太网通信。
- ARP请求当中的协议类型设置为0800,因为路由器是要根据主机B的IP地址来获取主机B的MAC地址。
- ARP请求当中的硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位。
- ARP请求当中的发送端以太网地址和发送端IP地址,对应就是路由器D的MAC地址和IP地址。
- ARP请求当中的目的以太网地址和目的IP地址,对应就是主机B的MAC地址和IP地址,但由于路由器D不知道主机B的MAC地址,因此将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播
ARP请求构建完成后,为了能将ARP请求发送到以太网当中,还需要将ARP数据包向下交付给MAC帧协议,封装成MAC帧
- 封装MAC帧报头时,以太网目的地址和以太网源地址,对应分别是主机B和路由器D的MAC地址,但由于路由器D不知道主机B的MAC地址,因此MAC帧报头当中的以太网目的地址的二进制序列也只能设置为全1,表示在局域网中进行广播。
- 因为这里封装的是一个ARP请求数据包,因此MAC帧当中的帧类型字段设置为0806。
- 由于ARP请求数据包的长度只有28字节,不足46字节,因此还需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验即可。
- 此时该局域网中的所有主机都收到该mac帧,发现目的ip为全f,且帧类型为0806,为arp请求或应答,则交给arp
- 当ARP层收到这个数据包后,发现ARP数据包当中的op字段为1,于是判定这是一个ARP请求,然后再提取出ARP数据包当中的目的IP地址字段,虽然局域网当中的所有主机都会将该数据包交给自己的ARP层,但最终只有主机B发现ARP数据包当中的目的IP地址与自己相同,因此只有主机B会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的IP地址与自己不匹配后,就会直接将这个ARP请求报文丢弃。
需要注意的是,局域网当中其他不相干的主机在收到这个ARP请求报文后,不是在MAC帧层丢弃的,而是在ARP层发现该ARP数据包的目的IP与自己的IP不匹配后丢弃的。
总结:
发起方构建ARP请求,以广播的方式发送给每一个主机。
每台主机都能识别接收,然后根据MAC帧的帧类型字段将有效载荷交付给每个主机的ARP层。
其他不相关主机立马根据目的IP,在自己的ARP协议内部丢弃ARP请求,只有目标主机会处理请求
arp发送应答
主机B在应答时首先需要构建ARP应答。
- 首先,因为主机B构建的是ARP应答,因此ARP协议当中的op字段设置为2。
- ARP应答当中的硬件类型、协议类型、硬件地址长度、协议地址长度的值与ARP请求当中设置的值相同。
- ARP应答当中的发送端以太网地址和发送端IP地址,对应就是主机B的MAC地址和IP地址。
- ARP应答当中的目的以太网地址和目的IP地址,对应就是路由器D的MAC地址和IP地址,因为路由
此时ARP请求就被封装成MAC帧了,如下:
- 此时局域网当中的每台主机在底层都能收到这个MAC帧,但局域网当中的不相干的主机,在发现该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,而不会交付给上层ARP层,最终只有路由器D会将解包后MAC帧的有效载荷向上交付给自己的ARP层。
- 当路由器D的ARP层收到这个数据包后,发现ARP数据包当中的op字段为2,于是判定这是一个ARP应答,然后就会提取出ARP数据包当中的发送端以太网的地址和发送端IP地址,此时路由器D就拿到了主机B的MAC地址。
至此,路由器D知道了B的mac地址,就可以进行局域网通信了
arp缓存表
如果每次通信前都要进行arp请求应答那也太麻烦,所以在第一次arp请求的时候,会将对应的信息进行保存一段时间,第二次发送信息就可以直接发送了
结论:
- 主机得到arp应答,会将arp应答缓存起来(有时间限制),如果收到许多同类型的,会将最新的缓存起来
- 任何一台主机,都可能即会收到arp应答,又会收到arp请求
碰撞问题
因为局域网中任何一个主机要发消息,所有主机都要收到,如果这个时候又有另一台一起发,就会产生碰撞
所以局域网中,任何时候只允许一台主机发送数据,如果同时发送会产生数据碰撞的问题
mac帧最后的crc用来检测是否发生碰撞,如果发生则执行碰撞避免算法,简单理解就是发生碰撞的主机等待一段时间后再发
数据分片
tcp中我们讲到将缓冲区理解成一个一个的环形字节数组,是因为数据链路层的原因
受限于物理底层各种因素,如果要传送的数据太大,是会分片的,也就是将一个大的数据分成几个小的数据来发送
ip协议第二行字段就是用来分片用的
上面根据mac帧报文我们知道,MAC帧携带的有效载荷的最大长度是有限制的,也就是说IP交给MAC帧的报文不能超过某个值,这个值就叫做最大传输单元(Maximum Transmission Unit,MTU),这个值的大小一般是1500字节。
由于MAC帧无法发送大于1500字节的数据,因此IP层向下交付的数据的长度不能超过1500字节,这里所说的数据包括IP的报头和IP的有效载荷
如果IP层要传送的数据超过了1500字节,那么就需要先在IP层对该数据进行分片,然后再将分片后的数据交给下层MAC帧进行发送
如果发送数据时在IP层进行了分片,那么当这些分片数据到达对端主机的IP层后就需要先进行组装,然后再将组装好的数据交付给上层传输层。
分片一定是不好的,提高了数据的发送个数,增加了丢包概率
如何做到不分片呢?将每次发送的数据限制在规定大小内,这也是之前为什么tcp发送缓冲区画成一小格一小格的原因
分片和组装都是在ip层完成的,传输层和数据链路层不需要关心
- 传输层只负责为数据传送提供可靠性保证,比如当数据传送失败后,传输层的TCP协议可以组织进行数据重传。
- 当TCP将待发送的数据交给IP后,TCP并不关心该数据是否会在IP层进行分片,即TCP并不关心数据具体的发送过程。
- 当TCP从IP获取到数据后,TCP也不关心该数据是否在IP层经过了组装。
而链路层的MAC帧只负责,将数据从一个节点传送到和自己相连的下一个节点。
- 当IP将待发送的数据交给MAC帧后,MAC帧并不知道该数据是IP经过分片后的某个分片数据,还是一个没有经过分片的数据,MAC帧只知道它一次最多只能发送MTU大小的数据,如果IP交给MAC帧大于MTU字节的数据,那MAC帧就无法进行发送。
- 当MAC帧从网络中获取到数据后,MAC帧也不关心这个数据是否需要进行组装,MAC帧只需要将该数据的MAC帧报头去掉后直接上交给上层IP就行了,而至于该数据的组装问题则是IP需要解决的。
因此,数据的分片和组装完全是由IP协议自己完成的,传输层和链路层不必关心也不需要关心。
分片的过程
ip的第二行字段
- 16位标识:唯一标识主机发送的报文,如果数据在IP层进行了分片,那么每一个分片报文的16位标识是相同的。
- 3位标志:第一位保留,表示暂时没有规定该字段的意义。第二位表示禁止分片,表示如果报文长度超过MTU,IP模块就会丢弃该报文。第三位表示“更多分片”,如果报文没有进行分片,则该字段设置为0,如果报文进行了分片,则除了最后一个分片报文设置为0以外,其余分片报文均设置为1。
- 13位片偏移:分片相对于原始数据开始处的偏移,表示当前分片在原数据中的偏移位置,实际偏移的字节数是这个值× 8 \times 8×8得到的。因此除了最后一个报文之外,其他报文的长度必须是8的整数倍,否则报文就不连续了
假设IP层要发送4500字节的数据,由于超过MTU,IP需要先将该数据进行分片,然后再将一个个的分片交给MAC帧进行发送
分片报文 | 总字节数 | IP报头字节数 | 数据字节数 | 16位标识 | “更多分片” | 13位片偏移 |
---|---|---|---|---|---|---|
1 | 1500 | 20 | 1480 | 123 | 1 | 0 |
2 | 1500 | 20 | 1480 | 123 | 1 | 185 |
3 | 1500 | 20 | 1480 | 123 | 1 | 370 |
4 | 80 | 20 | 60 | 123 | 0 | 555 |
分片的组装
MAC帧交给iP层的数据可能来自世界各地,这些数据可能是经过分片后发送的,也可能是没有经过分片直接发送的,因此IP必须要通过某种方式来区分收到的各个数据。
- IP报头当中有32位源IP地址,源IP地址记录了发送端所对应的IP地址,因此通过IP报头当中的32位源IP地址就可以区分来自不同主机的数据。
- IP报头当中有16位标识,未分片的数据各自的16位标识都是不同的,而由同一个数据分片得到的各个分片报文所对应的16位标识都是相同的,因此通过IP报头当中16位标识就可以判断哪些报文是没有经过分片的独立报文,哪些报文是经过分片后的分片报文。
- 因此IP可以通过IP报头当中的32位源IP地址和16位标识,将经过分片的数据各自聚合在一起,聚合在一起后就可以开始进行组装了。
对于各个分片报文来说:
- 第一个分片报文中的13位片偏移的值一定为0。
- 最后一个分片报文中的“更多分片”标志位一定为0。
- 对于每一个分片报文来说,当前报文的13位片偏移加上当前报文的数据字节数 ÷ \div÷ 8所得到的值,就是下一个分片报文的所对应的13位片偏移。
- 根据分片报文的这三个特点就能够将分片报文合理的组装起来。
先找到分片报文中13位片偏移为0的分片报文,然后提取出其IP报头当中的16位总长度字段,通过计算即可得出下一个分片报文所对应的13位片偏移,按照此方式依次将各个分片报文拼接起来。
直到拼接到一个“更多分片”标志位为0的分片报文,此时表明分片报文组装完毕。
分片报文丢包的问题
片后的报文在网络传输过程中也可能会出现丢包问题,但接收端有能力判断是否收到了全部分片报文,比如假设某组分片报文对应的16位标识值为x:
- 如果分片报文中的第一个分片报文丢包了,那么接收端收到的分片报文中就找不到对应16位标识为x,并且13位片偏移为0的分片报文。
- 如果分片报文中的最后一个分片报文丢包了,那么接收端收到的分片报文中就找不到对应16为标识为x,并且“更多分片”标志位为0的分片报文。
- 如果分片报文中的其它分片报文丢包了,那么接收端在进行分片报文的组装时就会找不到对应13位片偏移为特定值的分片报文。
- 需要注意的是,未分片报文的“更多分片”标志位为0,最后一个分片报文的“更多分片”标志位也为0,但当接收端只收到分片报文中的最后一个分片报文时,接收端不会将其识别成一个未分片的报文,因为未分片的报文所对应的13位片偏移的值也应该是0,而最后一个分片报文所对应的13位片偏移的值不为0。
因此只有当一个报文的13位片偏移为0,并且该报文的“更多分片”标志位也为0时,该报文才会被识别成一个没有被分片的独立报文,否则该报文就会被识别成一个分片报文。
相关文章:
【Linux从青铜到王者】数据链路层(mac,arp)以及ip分片
局域网通信 通过之前的学习,我们了解了应用层,传输层,网络层的协议和作用,这里先做个总结 应用层——http,https协议,也可以自己定义一套,作用是进行数据的处理传输层——tcp,udp协…...
MyBatis注解开发
1.配置MyBatis_ssm配置mybits-CSDN博客 2.Mybaits实现增删改查-CSDN博客 3.MyBatis构建动态SQL-CSDN博客 目录 一、注解开发的定义 二、SQL常用注解 三、使用注解完成CRUD 1.查找所有 2.通过id查询 3.增加 4.更新 5.删除 6.查询数量 7.模糊查询 一、注解开发的定义 …...
Unity引擎UI滚动列表——滚动复用扩展应用
大家好,我是阿赵。 之前介绍了滚动复用的基础用法。上一个例子里面,是一个竖向单列的滚动列表展示。这一次来扩展一下用法。如果不知道上一次例子的,可以先往前翻一下,上面有例子的详情、原理解释和代码。 一、 多列的滚动复…...
MySQL 死锁排查
私人博客传送门 MySQL 死锁排查...
AI - 浅聊一下基于LangChain的AI Agent
AI - 浅聊一下基于LangChain的AI Agent 大家好,今天我们来聊聊一个很有意思的主题: AI Agent ,就是目前非常流行的所谓的AI智能体。AI的发展日新月异,都2024年末了,如果此时小伙伴们对这个非常火的概念还不清楚的话&a…...
校园综合服务小程序+ssm
摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园综合服务被用户普遍使用,为方便用户能够可…...
RPC设计--TcpConnection和TcpServer
TcpConnection 对于服务端来说用来封装clientfd,对于client端来说,就是封装connect函数返回后的fd. 处理此fd上的读写,因此需要为其提供read\write方法,其方法内部调用系统的read\write函数,从fd中读写数据。 当Fd上…...
Mysql 的 B+ 树是否包含行数据?
在 MySQL 中,是否在 B树 的叶子节点上存储完整的行数据,取决于使用的 存储引擎 和 索引类型: 聚簇索引 (Clustered Index) 叶子节点包含完整的行数据。 适用场景:MySQL InnoDB 存储引擎的主键索引(或聚簇索引…...
CSS系列(2)-- 盒模型精解
前端技术探索系列:CSS 盒模型精解 📦 致读者:深入理解盒模型的本质 👋 前端开发者们, 今天我们将深入探讨 CSS 盒模型,这是构建网页布局的核心概念。通过本文,你将全面理解盒模型的工作原理及…...
Matlab在信号处理领域有哪些典型的设计实例?
以下是Matlab在信号处理领域的一些典型设计实例: 一、信号生成与频谱分析 正弦信号生成与频谱分析 - 题目:生成一个频率为 f 10 H z f 10Hz f10Hz,采样频率为 f s 100 H z f_s100Hz fs100Hz,时长为 T 5 s T 5s T5s的正弦…...
frida(objection)中x.ts到x.py封装路径
objection run "android hooking list classes" 基于sensepost/objection.git/1.11.0 sensepost/objection.git/e7eb1 简版路径: android hooking list classes --> show_android_classes --> android_hooking_get_classes androidHookingGetClasses --&g…...
python学习笔记—1—基础环境配置和字面量
1. 字面量 在代码中被写下来的固定值称为字面量 (1)整数字面量 666 (2)浮点字面量 6.66 (3)字符串字面量 "supercarrydoinb" 2. python中的数据类型 3. 打印字面量 print("666") …...
【Windows11系统局域网共享文件数据】
【Windows11系统局域网共享文件数据】 1. 引言1. 规划网络2. 获取必要的硬件3. 设置网络4. 配置网络设备5. 测试网络连接6. 安全性和维护7. 扩展和优化 2. 准备工作2.1: 启用网络发现和文件共享2.2: 设置共享文件夹 3. 访问共享文件夹4. 小贴士5. 总结 1. 引言 随着家庭和小型办…...
包管理器npm, cnpm, yarn 和 pnpm 的命令
npm (Node Package Manager) 安装与更新 npm install 或 npm i: 安装项目依赖:根据 package.json 文件安装所有列出的依赖。参数: -S, --save:保存到 dependencies(默认行为)。-D, --save-dev:…...
MATLAB 最小二乘平面拟合(90)
MATLAB 最小二乘平面拟合(90) 一、算法介绍二、算法实现1.代码2.结果:一、算法介绍 平面方程: ax+by+cz+d = 0 执行任务:读取一组点云(这里用自定义生成的平面模拟点云代替,在其中添加了噪声来模拟真实的数据),使用最小二乘拟合平面,来输出平面参数,并可视化显示拟…...
kubesphere服务报错 页面无法登陆
kubesphere的页面无法访问 查看pod服务,发现ks-apiserver的pod一直在重启 在所在node节点,执行dmesg -T 发现内存溢出 修改deploy的memory的配置 原本的request memory的值为100M 调整为2G 修改之后,服务正常启动,页面访问正常…...
filezilla连接不上虚拟机的解决方案
现象 解决过程 虚拟机终端输入ip addr 输出: 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever p…...
番茄钟与Todo List:用Go构建高效的时间管理工具
引言 在当今快节奏的世界中,时间管理和任务组织变得越来越重要。为了帮助用户提高效率,我开发了一个基于Golang的开源项目,基于fyne的ui,它结合了经典的番茄工作法(Pomodoro Technique)和功能丰富的待办事…...
vim实用命令整理(常用的命令)
本章教程,总结自己平时使用vim过程中,经常使用的命令,分享给大家。 一、高频使用 i:进入插入模式(光标处插入) a:进入插入模式(光标后插入) esc:返回普通模式 ::进入命令模式 :w:保存 :q:退出 :wq:保存并退出 :q!:强制退出不保存 :e filename:打开文件 :set n…...
METAGPT
METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORK MetaGPT:面向多代理协作框架的元编程 1. 引言 近年来,基于大型语言模型(LLMs)的多智能体系统在自动问题解决方面取得了显著进展。然而,现有的…...
LabVIEW调用Thorlabs的动态库进行开发
Thorlabs 产品在科研与生产领域中的应用广泛,当需要基于LabVIEW 进行二次开发时,可按照以下方法操作,以充分发挥设备性能并满足特定的项目需求。 创建 Kinesis LabVIEW 项目文件和文件夹 更详细的说明参见附件 在 LabVIEW 的启动界面中选择…...
Lua使用点号和冒号的区别
首先建立一个table,再分别定义两个方法,如下: local meta {}function meta:test1(...)print(self)print("")for k,v in pairs({...}) doprint(v)end endfunction meta.test2(...)print(self)print("")for k,v in pairs…...
Rust学习笔记_13——枚举
Rust学习笔记_10——守卫 Rust学习笔记_11——函数 Rust学习笔记_12——闭包 枚举 文章目录 枚举1. 定义1.1 无值变体1.2 有值变体1.3 枚举与泛型的结合 2. 使用2.1 和匹配模式一起使用2.2 枚举作为类型别名 3. 常用枚举类型 在Rust编程语言中,枚举(enum…...
集合框架(1)
集合框架(1) 1、数组的特点与弊端 (1)特点: 数组初始化以后,长度就确定了。数组中的添加的元素是依次紧密排列的,有序的,可以重复的。数组声明的类型,就决定了进行元素初…...
【Docker系列】Docker 构建多平台镜像:arm64 架构的实践
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
软件工程 概述
软件 不仅仅是一个程序代码。程序是一个可执行的代码,它提供了一些计算的目的。 软件被认为是集合可执行的程序代码,相关库和文档的软件。当满足一个特定的要求,就被称为软件产品。 工程 是所有有关开发的产品,使用良好定义的&…...
汽车产业数字化转型:协同创新破解挑战,平衡安全与流通
在数字经济时代的浪潮中,数据资源和数据信息已成为驱动各行各业转型升级的“新石油”。汽车产业,作为国民经济的重要支柱,正经历着前所未有的变革。随着数字化创新和转型的深入,数据在汽车全产业链中的作用和价值日益凸显。在这个…...
Oracle EBS PAC 如何复修非标任务单生产生非常大的PAC成本?
系统环境 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状 非标准任务单组件和装配相同物料A,俗称投入A产A。该物料A的期初数量为0。 上期成本假设为20,而本期成本爆增至563.674234。关键问题点: 由于该物料没有期初数量,无法通过“更新定期成本”指定“新期本…...
Docker 学习总结(84)—— Docker 常用运维命令
版本与信息查询 docker --version:查看安装的Docker版本。 docker info:获取Docker系统的详细配置信息。 镜像管理 docker images:列出本地所有镜像。 docker search IMAGE_NAME:搜索Docker Hub上的镜像。 docker pull IMAGE_NAME[:TAG]:从仓库下载指定镜像。 docker rmi …...
【MySQL】存储过程和触发器
MySQL存储过程和触发器 一、存储过程的介绍二、存储过程的相关操作2.1创建存储过程2.2查看存储过程2.4调用存储过程2.5删除存储过程 三、变量3.1系统变量3.2用户定义变量3.3局部变量 四、存储过程中的关键字4.1 if4.2参数4.3case4.4 while4.5repeat4.6 loop4.7游标4.8条件处理程…...
透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
本篇的实例基于Maven IDE (VS Code) 运行 在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行使用Mockito 注解 ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。 不使用注…...
《掌握Nmap:全面解析网络扫描与安全检测的终极指南》
nmap # 简介(帮助) 用法:nmap [扫描类型] [选项] {目标指定内容} 简介(帮助) 用法:nmap [扫描类型] [选项] {目标指定内容} 一、目标指定: 可以传入主机名、IP 地址、网络等。 例如&a…...
Thonny IDE + MicroPython + ESP32 + LU-ASR01语音识别
LU-ASR01是一款采用深度学习算法的离线语音识别开发板,无需联网即可独立运行。它具备自动识别中文语音输入并进行相应处理的能力。此开发板拥有1路输出的串口TX。该开发板需在天问Block IDE(http://twen51.com/new/twen51/index.php)中开发&a…...
关闭模组的IP过滤功能
关闭模组的IP过滤功能 关闭模组的IP过滤功能 本脚本用于关闭模组的IP过滤功能,关闭后, 源地址不是终端IP的数据包,也可以被模组转发给网络 关闭模组的IP过滤功能 cat > /usr/bin/ipfilter << "EOF"echo -e "ATCFUN…...
免费下载 | 2024数据资源入表年度发展报告
《2024数据资源入表年度发展报告》的核心内容包括以下几个方面: 总体发展概述: 数据被正式列入五大生产要素之一,标志着中国进入数据要素红利释放阶段。 “数据入表”是指将企业数据资源按会计准则确认、计量,并在财务报表中反映…...
【全网最新】使用 1panel面板 部署若依系统( springboot 和 vue)项目
使用 1panel面板 部署 springboot 和 vue_1panel部署vue项目-CSDN博客 准备工作: 准备好的网站后台代码文件准备好的网站前端页面安装好1panel1panel中安装好mysql1panel中安装好redis1panel中安装好Openresty部署后台接口 在application.yml中修改后台端口,这里…...
基于遗传优化算法的带时间窗多车辆路线规划matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的带时间窗多车辆路线规划matlab仿真,通过输入各个节点坐标,以及出发点到节点的时间窗,来进行优化࿰…...
MCU、ARM体系结构,单片机基础,单片机操作
计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备:将其他信号转换为计算机可以识别的信号(电信号)。输出设备:将电信号(0、1)转为人或其他设备能理解的…...
黑马点评项目测试总结
黑马点评项目测试面经总结: 一,怎么使用使用Postman进行接口测试? 1,安装Postman 2. 创建请求: 打开Postman,点击"New"按钮创建一个新的请求。在弹出的窗口中,选择请求的类型&#x…...
YOLOv8-ultralytics-8.2.103部分代码阅读笔记-loaders.py
loaders.py ultralytics\data\loaders.py 目录 loaders.py 1.所需的库和模块 2.class SourceTypes: 3.class LoadStreams: 4.class LoadScreenshots: 5.class LoadImagesAndVideos: 6.class LoadPilAndNumpy: 7.class LoadTensor: 8.def autocast_list(source…...
Ubuntu Linux 图形界面工具管理磁盘分区和文件系统(八)
本文为Ubuntu Linux操作系统- 第八弹~~ 今天接着上文的内容,讲Linux磁盘分区存储的相关知识~ 上期回顾:命令行-管理磁盘分区和文件系统 今天看酷酷的雪獒铠甲!!雪獒铠甲合体~ 文章目录 磁盘管理器GNOME Disks主要功能安装命令 磁盘…...
Windows系统修改文件的默认打开方式的3种方式
文章目录 1.右键打开方式2.属性3.设置-按文件类型打开 1.右键打开方式 2.属性 3.设置-按文件类型打开 word文档 excel表格...
2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别
2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别 一、背景 财务数据是指企业经营活动和财务结果的数据记录,反映了企业的财务状况 与经营成果。对行业、企业的财务数据进行分析,就是要评价其过去的经营业绩、 衡量现在的财务状况、预测…...
数据分析系列---requests的使用
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 主环境和虚拟环境 主环境是电脑上安装的python环境 虚拟环境在项目中可以实现环境的隔离,假设DemoA和DemoB分别用到了某个三方库1.0和2.0版本,那么在一个…...
sql删除冗余数据
工作或面试中经常能遇见一种场景题:删除冗余的数据,以下是举例介绍相应的解决办法。 举例: 表结构: 解法1:子查询 获取相同数据中id更小的数据项,再将id不属于其中的数据删除。-- 注意:mysql中…...
ElementUI 问题清单
1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为,给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…...
uniapp 微信小程序webview 和 h5数据通信
项目是uniapp编写,因为是先开发了h5和app,小程序是突然要用的,做兼容开发已经来不及,由于微信小程序webview载入h5 因为通信必须要特殊限制(网页向小程序 postMessage 时,会在以下特定时机触发并收到消息&a…...
3D 生成重建021-LRM基于大模型的生成式3D生成模型
3D 生成重建021-LRM基于大模型的生成式3D生成模型 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 论文提出了一种名为大型重建模型 (LRM) 的新型模型,该模型可在短短 5 秒内根据单张输入图像预测物体的 3D 模型。与许多先前仅在 ShapeNet 等小型数据集上进行…...
12.6深度学习_模型优化和迁移_整体流程梳理
七、整体流程梳理 1. 引入使用的包 用到什么包,临时引入就可以,不用太担心。 import time import osimport numpy as np import pandas as pd import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvisio…...
CCF-GESP 编程能力认证 C++ 七级 2024年9月份判断题详细解析
链接:CCF-GESP 编程能力认证 C 七级 2024年9月份选择题详细解析-CSDN博客 目录 第 1 题 第 2 题 第 3 题 第 4 题 第 5 题 第 6 题 第 7 题 第 8 题 第 9 题 第 10 题 第 1 题 表达式 a << 1 的结果为 a(错误) 【a是字符常…...