【Linux】MAC帧
目录
一、MAC帧
(一)IP地址和MAC地址
(二)MAC帧格式
(三)MTU对IP协议的影响、
(四)MTU对UDP协议的影响
(五)MTU对TCP协议的影响
二、以太网协议
(一)以太网MAC帧如何进行解包和分用
(二)局域网中转发原理
三、ARP协议
(一)ARP协议的作用
(二)ARP数据报的格式
(三)ARP协议的工作流程
(四)RARP协议
四、相关的技术与协议
(一)DNS协议
(二)ICMP协议
(三)代理服务器
一、MAC帧
(一)IP地址和MAC地址
通过上节我们了解一台入网的主机的IP地址是有可能发生变化的,例如该主机处于不同的网络或重新入网时路由器分配了新的IP地址,因此仅靠IP地址是无法完成网络中数据通信的,因此引入了MAC地址。
MAC地址用来区别数据链路层中相连的节点,MAC地址是网络接口卡的硬件标识符,全球唯一,主要作用于数据链路层,描述的是数据传输中每个区间的起点和终点。
MAC地址一共48位,全球任意一张网卡都有唯一的MAC地址。使用 ifconfig 命令可查看本机的MAC地址:
(二)MAC帧格式
目的地址:目的主机的MAC地址;
源地址:发送主机的MAC地址;
类型:MAC帧类型;
CRC:MAC帧校验码。
数据链路层的MAC数据帧协议规定了单帧有效载荷最大为1500字节,有效载荷的最大值称MTU最大传送单元。
在网络通信中,真正决定数据发送的是传输层,因此数据包的大小实际由传输层决定。若传输层向下交付的数据包过大,则需要IP层将数据进行分片以及重组,而数据链路层对此并不关心只负责数据包的发送。
在网络传输中,不仅仅只有主机采用MTU最大传输单元,对于中间节点的路由器同样也存在MTU最大传输单元,若报文大小超过了路由器的MTU最大传输单元且该数据报中的df = 0,那么路由器的IP层会再次对报文进行IP分片后发送报文,若df = 1 也就是禁止分片的话,路由器会将报文丢弃并通知发送端(ICMP报文)。
(三)MTU对IP协议的影响、
由于数据链路层MTU的限制,对于较大的IP数据包要进行分片:
当传输层交付的数据过大需要进行分片时,IP层首先将数据进行分割并填写相应的报头信息,其中被原始的数据报分配唯一的标识位,所有分片继承该标识,除了最后一个分片外,其他分片的标志位中的MF = 1,最后的标识位置0。置1表示后续还有分片,而置0表示后续没有分片即该数据报为最后一个分片。在分片的同时也需要填写片偏移大小,该字段用于表示该数据报的数据原处分配前数据的起始位置,其中除了最后一个分片以外,其他的分片的偏移量必须是8的整数倍。
当收到一个报文时,查看标志位的MF是否为1,若为1则说明该报文进行过分片操作并不是完整报文,若为0则需要查看该报文的偏移量,若偏移量不为0则说明该报文是被分片后的最后一个IP报文,若为0则说明该报文本身是个完整的报文;通过以上步骤即可验证该报文是否被分片,若没有进行分片该报文本身就是一个完整报文,若该报文进行过分片,需等到最后一个报文的到达。偏移量为数据处原始数据的起始地址。因此当收到最后一个报文后,只需要将各个报文按偏移量大小进行排序,验证各个相邻报文之间的是否连续即可判断收到的所有分片报文是否完整。若完整则重新组装后交付给上层。
在传输过程中,数据包进行分片后的小数据包中任意一个小包丢失,接受端的重组就会失败,若需要重新发送数据包,是需要将整个数据包重新进行分片后再此全部发给发送端的,IP层不服职责重新传输数据,由上层决定。因此在实际传输中,传输层会避免向下交付的数据包过大而导致IP分片的,IP分片不仅仅增加了网络层的负担,也增加了整个数据包重传的风险。
(四)MTU对UDP协议的影响
- 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报。
- 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了。
(五)MTU对TCP协议的影响
- TCP的数据不能过大,IP协议受制于MTU,同样的TCP协议也受制于MTU,TCP协议蛋哥数据报的最大消息长度称为MSS(Max Segment Size)
- TCP在建立连接时,通信双方会协商MSS大小:双方在发送SYN时会把自己能支持的最大MSS值写入TCP首部,一般取双方较小的作为最终MSS;
- 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度;
- MSS的值就在TCP首部的40字节变长选项中。
二、以太网协议
(一)以太网MAC帧如何进行解包和分用
MAC帧采用定长的策略,对于一个MAC帧而言,首部为 6+6+2 = 14字节以及有效载荷后的4字节CRC校验位,解包时去掉以上部分即为有效载荷。
在MAC帧首部由类型字段,根据该类型字段即可了解将有效载荷交付给上层的哪种协议,例如0800代表是IP数据报,0806为ARP协议。
(二)局域网中转发原理
当局域网内的一台主机发送了一个MAC帧后,局域网内的所有主机都可以收到该MAC帧,而只有其目的地址为本主机的MAC地址时,该主机数据链路层才会把该数据向上交付,而其他主机会直接将该MAC帧丢弃。在局域网中,网卡有一种“混杂模式”,该模式下不会放弃任何数据帧,物理MAC帧内的目的地址是否为主机的MAC地址,都会将MAC帧解包后向上交付,这也是局域网内抓包工具的原理。
因此在一个局域网内如果多个主机同时发送数据,那么总线上的信号会相互干扰产生碰撞冲突。所以在同一时刻只有一台主机能够发送数据。因此需要约定一些协议保证数据的正常发送:
令牌环:令牌环网络中有一个令牌(Token)在环路上循环传递。只有持有令牌的节点才能发送数据,其他节点则监听该链路以接收数据。当节点需要发送数据时,它会将数据附加到令牌上,并将令牌继续传递下去。每个节点在接收到令牌时检查是否有附加的数据,如果有,节点就将数据提取出来并处理。
以太网:以太网使用一种称为CSMA/CD(带冲突检测的载波侦听多路访问)的协议来管理和调度数据传输。在CSMA/CD中,每个节点都监听网络上的信道来检测是否有其他节点正在发送数据;如果检测到信道空闲,则节点可以开始发送数据;否则,节点会等待一段随机时间后再次尝试发送;当多个主机同时发送该数据导致冲突时,所有主机停止发送并发送阻塞清号,随后二进制指数退避算法重新尝试发送。
当局域网上的主机越多时,越容易发生数据碰撞冲突,因此可以在局域网中使用交换机。
交换机可以隔绝冲突域。正常情况下,交换机并不影响局域网内的通信,例如当主机A向主机E发送数据时,交换机会正常将数据进行转发;当主机A和主机B同时向主机D发送数据时发生冲突,当交换机左侧(如图)发生冲突时并不会将发生冲突的数据转发给右侧,而右侧也就是主机C和主机E之间仍然可以继续进行正常的通信不受左侧冲突的影响。
对于每条MAC的数据长度,数据越长,越有可能发生碰撞,这也是MAC帧协议限制有效载荷最大是1500字节的原因。
三、ARP协议
ARP协议是介于数据链路层和网络层之间的协议,用于使用IP地址来获取MAC地址。
在网络传输过程总,IP地址就相当于最终目的地,而MAC地址相当于中间途径的地址。数据报封装为MAC帧时需要目的MAC地址。当主机向服务器发送数据时,主机如何知道所处网段的公网路由器的MAC地址是多少?当报文到达目的网络时,路由器又怎么知道该数据包的目的地址的MAC地址是多少?这些实际都需要MAC地址。
(一)ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系
- 在网络通信中,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
- 数据包首先是呗网络接收到再去交给上层协议的,如果收到的数据包的目的硬件地址与本主机不符,则会直接丢弃数据包;
- 因此在通信前必须获得目的主机的硬件地址
(二)ARP数据报的格式
- 注意源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层为其他类型的网络则是有必要的;
- 硬件类型指的是链路层网络类型,以太网为1;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度对于以太网地址为6字节;
- 协议地址长度对于IP地址为4字节;
- op字段为1表示ARP请求,op表示为2表示ARP应答;
(三)ARP协议的工作流程
当主机A需要向主机E发送数据时,由于主机A只知道主机E的IP地址,因此需要通过ARP协议获取主机E的MAC地址。
首先主机A发送ARP请求报文,其中ARP报文中的以太网目的地址为全F,也就是为广播地址。局域网内的所有主机都会收到该请求报文,由于报文中的以太网目的地址为广播地址,对MAC帧首部进行解包后查看帧类型字段并将其交给ARP协议处理。首先读取ARP请求报文的op字段,若op字段为1即确认该报文为ARP请求报文,再查看目的IP地址是否为本主机的IP地址(目的以太网地址为全F),若不为本主机的IP地址则将该报文丢弃。
当主机E收到该ARP请求报文后,经过处理后向主机A回送ARP响应报文,其中MAC帧首部的目的地址为主机A的MAC地址,也就是单播地址。当其他主机收到该报文后查看MAC目的地址并不是本机的MAC地址后会将该报文进行丢弃。当主机A收到该ARP响应报文后对其进行解包,查看op字段,若op字段为2即该报文为ARP响应报文,再查看发送端以太网地址字段获取主机E的MAC地址。
除此之外,局域网内的设备实际还会维护一张ARP缓存表,用于映射IP地址和MAC地址的关系,每次封装MAC帧时首先会进行查表,若表中不存在目标条目的话才会进行ARP协议请求。
(四)RARP协议
RARP协议与ARP协议过程类似,不过其作用为MAC地址映射IP地址,也就是知道目的主机的MAC地址,但不知道其IP地址,因此需要通过RARP协议来获取目的主机的IP地址。
四、相关的技术与协议
(一)DNS协议
当我们通过网络访问服务器时,我们输入的往往是域名,例如我们访问百度时只需要搜索百度的域名而不是其IP地址,这是因为IP对人的记忆及使用不友好,域名网址就比较直观了,而由域名到IP地址的映射实际是由DNS来完成的。
DNS域名系统是互联网的核心基础设施之一,承担着将人类可读的域名转换为机器可识别的IP地址的关键任务。
百度的域名:www.baidu.com
com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等。
baidu: 二级域名, 公司名。
www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议。在浏览器输入域名时可以省略。
域名服务器一共有三类,根服务器、权威服务器和递归服务器。
根服务器:全球共13组。存储顶级域服务器地址;
权威服务器:管理特定域名的解析记录;
递归服务器:接收用户查询并完成全链路解析。
下面简单介绍下DNS解析的一般流程:
- 当用户访问www.baidu.com时,先检查本地缓存(浏览器/操作系统缓存),命中则直接返回IP;
- 未命中则向递归服务器发送请求,递归服务器依次查询根服务器、.com服务器、baidu.com权威服务器,最终获取IP并返回;
- 递归服务器缓存结果,其生存时间决定缓存有效期。
目前计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容。
(二)ICMP协议
IP协议并不是可靠的协议,如果在传输过程中丢包了,IP协议是无法得知是否出现了丢包。因此引入了ICMP协议。
ICMP互联网控制报文协议,TCP/IP协议族中的核心网络层协议,主要用于在IP主机和路由器之间传递控制消息,辅助网络通信的可靠性和诊断。
ICMP协议提供了以下功能:
差错报文:
- 目标不可达;
- 超时报文:TTL耗尽或分片重组超时;
- 重定向:通知发送端更有路由路径。
查询报文:
- Echo请求/应答:用于Ping等工具;
- 时间戳请求或应答:同步网络设备时间。
ICMP协议是基于IP协议的,但是它并不是传输层的功能,因此将其归于网络层协议,ICMP协议只能搭配IPv4协议使用,若是IPv6则需要ICMPv6.
PING命令实际就是基ICMP协议实现的。
Ping命令通过发送ICMP Echo请求并等待Echo应答,测试两台主机的连通性。
1、此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址;
2、ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期);
3、ping命令会先发送一个 ICMP Echo Request给对端;
4、对端接收到之后, 会返回一个ICMP Echo Reply;
ping命令是不关注端口的,因为ping命令是基于ICMP, 是在网络层;而端口号, 是传输层的内容。在ICMP中根本就不关注端口号这样的信息。
(三)代理服务器
正向代理:正向代理是客户端与目标服务器之间的中介,代理对象是客户端。客户端通过代理服务器间接访问目标服务器,隐藏自身真实信息。
反向代理:客反向代理是服务器端的中介,代理对象是服务器。客户端直接访问反向代理,由代理将请求分发到后端服务器。
采用反向代理可以实现负载均衡策略:客户端可能会发送大量的数据,反向代理服务器需要合理的将数据分配给服务器集群。
作为反向代理的服务器,需要配置较高,充当软件服务的可以是Nginx(Web服务器,不做业务处理,只做转发处理),当反向代理服务器中的服务器集群将请求处理完,可以通过代理服务器将结果发回给客户端,也可以直接发回给客户端。
NAT和代理服务器的区别:
1、从应用层面上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比 如通过代理服务器进行翻墙;
2、从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换,代理服务器往往工作在应用层;
3、从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
4、从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。
相关文章:
【Linux】MAC帧
目录 一、MAC帧 (一)IP地址和MAC地址 (二)MAC帧格式 (三)MTU对IP协议的影响、 (四)MTU对UDP协议的影响 (五)MTU对TCP协议的影响 二、以太网协议 &…...
企业入驻成都国际数字影像产业园,可享150多项专业服务
企业入驻成都国际数字影像产业园,可享150多项专业服务 全方位赋能,助力影像企业腾飞 入驻成都国际数字影像产业园,企业将获得一个涵盖超过150项专业服务的全周期、一站式支持体系,旨在精准解决企业发展各阶段的核心需求…...
飞速(FS)企业网布线解决方案:赋能能源行业客户高效网络部署与智能化管理
国家:中国 行业:能源与公用事业 网络类型:楼宇主干局域网 方案类型:企业网络布线 案例亮点 部署高密度、高性能飞速(FS)24口千兆企业级交换机,有效节省客户机房安装空间,提高并发…...
前端性能优化方案总结
首屏加载优化 把老版本的库替换成新版本,支持tree shaking的库,按需引入,只打包用到的部分,大大优化项目体积,加快项目的首屏渲染。 能不用第三方库,就不用第三方库,比如时间格式化,…...
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差(MMSE)检测算法 4.4 迫零(ZF)检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …...
[plugin:vite:import-analysis] Cannot find module ‘vuex\dist\vuex.esm-bundler
我的是升级了uview-plus版本,导致一直报错,即时将版本降回去也报错,需要将package-lock.json和package-lock.yaml文件删掉重新安装软件包...
用Deepseek + Kimi 快速生成高质量的ppt
AI系列文章: AWS AI认证考试中经常提及几个重要的工具介绍 简单理解机器学习中top_k、top_p、temperature三个参数的作用 用Deepseek Kimi 快速生成高质量的ppt 在职场,不管干什么,都少不了和 PPT 打交道:客户交流,…...
【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码
本章目录 1. sync.Mutex锁的基本用法2. sync.Mutex的核心原理自旋到阻塞的升级过程自旋CAS 饥饿模式 3. sync.Mutex底层源码Mutex结构定义全局常量Mutex.Lock()方法第一次CAS加锁能够成功的前提是?竞态检测 Mutex.lockSlow()lockSlow的局部变量自旋空转state新值构造…...
Maven入门
1、简介 Apache Maven是一个项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 2、作用 1)依赖导…...
SpringCloud Stream:消息驱动的微服务架构设计
文章目录 引言一、Spring Cloud Stream基础概念二、核心组件和架构三、消息生产者实现四、消息消费者实现五、消息分组与持久化六、消息分区与扩展七、函数式编程模型八、错误处理与重试机制九、测试与监控总结 引言 在当今复杂的分布式系统环境中,微服务架构已经成…...
进程通信(进程池的模拟实现) read write函数复习 Linux ─── 第23课
目录 进程池(process pool) 第一步: 创建并初始化processpool 第二步:主进程对子进程派发任务 补充: 第三步: 子进程执行完退出进程池 回收子进程 进程池的实现 Channel.hpp ProcessPool.hpp Task.hpp main.cc makefile 匿名管道的应用: 进程池 进程池(process po…...
Docker技术全景解析
一、Docker是什么 1.1 定义 Docker是一种容器化技术平台,它通过操作系统级别的虚拟化,将应用程序及其依赖打包成标准化的可移植单元(容器)。这种技术实现了: 环境一致性:消除“在我机器上能跑”的问题进…...
23种设计模式-状态(State)设计模式
状态设计模式 🚩什么是状态设计模式?🚩状态设计模式的特点🚩状态设计模式的结构🚩状态设计模式的优缺点🚩状态设计模式的Java实现🚩代码总结🚩总结 🚩什么是状态设计模式…...
【计算机网络运输层详解】
文章目录 一、前言二、运输层的功能1. 端到端通信2. 复用与分用3. 差错检测4. 流量控制5. 拥塞控制 三、运输层协议:TCP 和 UDP1. TCP:面向连接的可靠传输协议2. UDP:无连接的传输协议 四、端口号与进程通信1. 端口号分类2. 端口通信模型 五、…...
C# 多标签浏览器 谷歌内核Csharp
采用框架 :FBrowserCEF3lib 视频演示:点我直达 成品下载: https://wwms.lanzouo.com/iYOd42rl8vje...
分布式锁实战:Redis与Redisson的深度解析
一、分布式锁的必要性 在分布式系统中,当多个节点需要对共享资源进行读写操作时,传统的本地锁(如Java的synchronized或ReentrantLock)无法跨节点生效。此时,必须引入分布式锁来保证操作的原子性和一致性。分布式锁需满…...
【Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础05
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 5.zabbix监控HCL模拟网络设备 在保证zabbix-server与HCL网络相通的情况下进行如下操作。 5.1创建主机群 配置-主机群-创建主机群 图 19 取名,添加。 图 20 5.2 创建监控…...
如何在 Windows 上安装并使用 Postman?
Postman 是一个功能强大的API测试工具,它可以帮助程序员更轻松地测试和调试 API。在本文中,我们将讨论如何在 Windows 上安装和使用 Postman。 Windows 如何安装和使用 Postman 教程?...
Zabbix监控K8s集群
虽然 Prometheus 被认为是 监控的Kubernetes最合适的工具 ,但其配置复杂、存储成本高以及告警管理繁琐等问题,使得一些传统运维团队更倾向于使用 Zabbix 这样的成熟监控方案。Zabbix 凭借其强大的数据采集、灵活的告警机制和直观的图形化界面,…...
基于硅基流动平台API构建定制化AI服务的实践指南
在人工智能技术快速迭代的今天,硅基流动平台(SiliconFlow)凭借其高效的计算资源调度能力和开放的API接口,成为开发者快速实现AI服务落地的利器。本文将深入探讨如何通过硅基流动平台的API构建一个轻量级AI服务接口,并提…...
自动驾驶系统的车辆动力学建模:自行车模型与汽车模型的对比分析
在自动驾驶系统的车辆动力学建模中,自行车模型(Bicycle Model)和更复杂的汽车模型(如双轨模型或多体动力学模型)各有其适用场景和优缺点。以下是两者的详细对比及选择原因解析: 1. 模型定义与核心差异 特性自行车模型复杂汽车模型(如双轨模型)简化假设将四轮车辆简化为…...
element-ui messageBox 组件源码分享
messageBox 弹框组件源码分享,主要从以下两个方面: 1、messageBox 组件页面结构。 2、messageBox 组件属性。 一、组件页面结构。 二、组件属性。 2.1 title 标题,类型为 string,无默认值。 2.2 message 消息正文内容…...
洛谷题单1-B2025 输出字符菱形-python-流程图重构
题目描述 用 * 构造一个对角线长 5 5 5 个字符,倾斜放置的菱形。 输入格式 没有输入要求。 输出格式 如样例所示。用 * 构成的菱形。 输入输出样例 #1 输入 #1 输出 #1 **** *********方式-前半区推导,后半区逆序 代码 class Solution:static…...
23中设计模式-迭代器(Iterator)设计模式
迭代器设计模式 🚩什么是迭代器设计模式?🚩迭代器设计模式的特点🚩迭代器设计模式的结构🚩迭代器设计模式的优缺点🚩迭代器设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...
第十三章:优化内存管理_《C++性能优化指南》_notes
优化内存管理 一、内存管理基础概念二、自定义分配器三、智能指针优化重点知识代码示例:智能指针性能对比 四、性能优化关键点总结多选题设计题答案与详解多选题答案设计题示例答案(第1题) 一、内存管理基础概念 重点知识 动态内存分配开销…...
requestAnimationFrame和requestIdleCallback分别是什么,是用在什么场景下
深入解析 requestAnimationFrame 和 requestIdleCallback requestAnimationFrame (rAF) 和 requestIdleCallback (rIC) 都是浏览器提供的 异步调度 API,但它们的执行时机和用途完全不同。 API主要用途何时执行是否保证执行适合场景requestAnimationFrame高优先级 U…...
SAP-ABAP:SAP BW模块架构与实战应用详解
SAP BW模块架构与实战应用详解 目录导航 核心架构分层设计数据建模关键技术典型行业应用场景BW/4HANA革新特性实施路线图常见问题解决方案学习资源推荐一、核心架构分层设计 1. 数据仓库层(Data Warehousing Layer) 组件功能说明典型对象🔄 ETL引擎数据抽取、转换、加载Da…...
准确--配置服务器文件数
某些系统可能在 /etc/security/limits.d/ 目录下有额外配置覆盖全局设置。检查是否存在冲突文件: ls /etc/security/limits.d/如果有文件(如 90-nproc.conf 或 90-nofile.conf),需编辑或删除这些文件中的冲突配置。 确保系统启用…...
揭秘大数据 | 12、大数据的五大问题 之 大数据管理与大数据分析
书接上文,老夫讲到规划大数据战略、构建大数据的解决方案与体系架构、解决大数据问题及大数据发展历程中通常会依次涉及到大数据存储、大数据管理、大数据分析、数据科学、大数据应用这五大问题。上篇内容主要围绕的是大数据存储,今天主要聊一下大数据管…...
Java操作RabbitMQ
文章目录 Spring集成RabbitMQ1. AMQP&SpringAMQP2. SpringBoot集成RabbitMQ3. 模型work模型 4.交换机Fanout交换机Direct交换机Topic交换机 5.声明式队列和交换机基于API声明基于注解声明 6.消息转换器 Spring集成RabbitMQ 1. AMQP&SpringAMQP AMQP(高级消…...
【MySQL】实战篇—项目需求分析:ER图的绘制与关系模型设计
在软件开发中,数据库是信息系统的核心部分,合理的数据库设计能够显著提高系统的性能和可维护性。 ER图(实体-关系图)是数据库设计的重要工具,它通过图形化的方式描述了数据实体及其相互关系,帮助开发者和设…...
Apache Shiro 统一化实现多端登录(PC端移动端)
Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、密码学和会话管理等功能。它被广泛用于保护各种类型的应用程序,包括Web应用、桌面应用、RESTful服务、移动端应用和大型企业级应用。 需求背景 在当今数字化浪潮的推动下ÿ…...
es新增运算符
?? ( 空值合并运算符) ?. (可选链式运算符) ?? (空值合并赋值操作符) // ?? ( 空值合并运算符):这个运算符主要是左侧为null和undefined,直接返回右侧值 let result value ?? 默认值;. ??(空值合并运算符) ✅ 用于…...
数据库三级填空+应用(2)
sysadmin、dbcreator 数据是面向主题的(2)、集成的、非易失的、随时间不断变化的数据集合, 数据字典 【答案】完整性约束 数据模型成分 33【解析】顺序图主要用于描述系统内对象之间的消息发送和接收序列。 34如果把舍弃的元组也保存在结果关…...
贪心算法经典应用:最优答疑调度策略详解与Python实现
目录 引言:从现实场景到算法设计 一、问题背景与数学建模 1.1 现实场景抽象 1.2 时间线分析 二、贪心策略的数学证明与选择依据 2.1 贪心选择性质 2.2 证明过程 三、算法实现与代码解析 3.1 算法步骤分解 3.2 代码亮点解析 四、测试案例与结果验证 4.1 …...
把手搭建vue前后端管理系统-TAB标签通过pinia来进行管理(二十六)
目标:通过pinia的store来进行组件状态的统一管理,这样大家都可以共用到这个组件的状态信息,就可以实现组件的联动 一、添加侧边栏菜单的点击事件: 1、CommonAside.vue里面添加click的事件 <el-menu-itemv-for"item in …...
Python与数据库
目录 一、数据库 1、数据库的概念 2、数据库的表 3、字段详解 二、SQL数据库语句 1、了解SQL命令 2、CREATE命令 3、INSERT命令 三、数据库和SQL命令 四、数据库的查询与修改 1、SELECT命令 2、UPDATE命令 3、DELETE命令 4、DROP TABLE 5、SQL的注意事项 五、处…...
MyBatis中mapper.xml 的sql映射规则
一、SQL 映射文件核心元素 MyBatis 映射文件的顶级元素(按定义顺序): cache:命名空间的缓存配置。cache-ref:引用其他命名空间的缓存。resultMap:自定义结果集映射。sql:可重用的 SQL 片段。i…...
ubuntu22.04安装搜狗输入法保姆教程~
一、添加中文语言支持 1.首先打开设置,找到Language and Region 2.点击Manage Installed Languages 3.点击 Install/Remove Languages... 4.选中Chinese (simplified),点击Apply...
Jenkins 配置python项目和allure
Jenkins新建项目 新建ry-api-auto-test。 添加项目描述,选择gitee令牌。 源码管理,设置仓库地址和凭证。参考我上一篇文章的链接:配置gitee私人令牌和凭证 构建步骤,因为我Jenkins部署在Windows,因此选择batch。…...
keda基于postgresql伸缩dify-api服务
1 概述 dify-api使用postgresql来存储数据,在dify控制台每新建一个聊天机器的聊天框,就会在conversations表里新插入一条记录,并且不断地更新字段updated_at,示例如下: dify# select * from conversations limit 1; …...
蓝桥杯 拼正方形
问题描述 小蓝正在玩拼图游戏。他有: 7385137888721 个 22 的方块10470245 个 11 的方块 他需要从中挑出一些方块来拼出一个正方形。 例如: 用 3 个 22 和 4 个 11 方块可以拼出一个 44 的正方形;用 9 个 22 方块可以拼出一个 66 的正方…...
failed to load steamui.dll”错误:Steam用户的高频崩溃问题解析
当你满心欢喜地双击 Steam 图标,准备进入游戏世界时,屏幕上突然弹出 “failed to load steamui.dll” 的刺眼提示——这是全球数百万 Steam 用户最不愿见到的错误之一。作为 Steam 客户端的核心界面动态链接库文件,steamui.dll 的缺失或损坏会…...
Django之旅:第六节--mysql数据库操作增删改查(二)
前提条件(models.py已经设置好): from django.db import mmodelsclass UserInfo(models.Model):namemodels.CharFIeld(max_length32)passwordmodels.CharFIeld(max_length64)#agemodels.IntegerFIeld()操作数据语法(在views.py文件࿰…...
6. 使用VUE实现前端页面的分级嵌套
1. 说明 在UI设计中,页面中有些部分的占用空间位置是固定不动,有些部分的区域是根据情况进行动态切换的。比如,一个网页的菜单栏和主题内容展示,往往菜单栏区域的导航按钮占用的空间是固定不动的,当用户点击不同按钮时…...
(UI自动化测试web端)第三篇:元素的常用操作方法_浏览器操作
模拟浏览器的常见操作。 1、最大化浏览器窗口 driver.maximize_window()2、浏览器后退、前进、刷新、关闭、退出 # 调用浏览器的后退 driver.back() # 调用浏览器的前进 driver.forward() # 刷新页面 driver.refresh() # 关闭当前窗口 driver.close() # 退出浏览器 driver.q…...
Ubuntu软件包离线下载安装
1、下载软件包tcpd,并在/var/cache/apt/archives目录中查看。 rooteducoder:~# apt-get install -d tcpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed:tcpd …...
第十节 MATLAB逻辑运算
MATLAB逻辑运算都是针对元素的操作,运算结果是特殊的逻辑数组;在逻辑分析时,逻辑(真)用1表示,逻辑假用0表示,逻辑运算中所有的非零元素作为1处理。 注意: 使用MATLAB逻辑运算时的语…...
初识哈希表
一、题意 给定一个整数数组 nums 和一个目标值 target,要求你在数组中找出和为目标值的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums [2, 7, …...
Ajax与Axios,以及Apifox的入门使用
Ajax与Axios,以及Apifox的入门使用 作者:blue 时间:2025.3.20 文章目录 Ajax与Axios,以及Apifox的入门使用1.Ajax2.Axios3.Apifox的基本使用内容Path 参数定义语法用途 Query 参数定义语法用途 1.Ajax 概念:Asynchr…...