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

Linux网络之数据链路层协议

目录

数据链路层

MAC地址与IP地址

数据帧 

ARP协议 

NAT技术

代理服务器 

正向代理

反向代理 


        上期我们学习了网络层中的相关协议,为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址,从而指引了数据在网络中的一步步传输,而数据链路层作为网络层的下一层,在数据的传输过程中也扮演着重要的角色,具体扮演了什么样的角色,这是我们本期要学习的内容。

数据链路层

        通过上图,我们可以知道,主机B将报文沿着每个路由器,最终发送到了主机C。上期在学习IP协议时,我们已经知道当主机B发送数据到路由器F时,路由器会解析出数据中的目的IP地址,然后在自己的路由表中与路由表中子网掩码进行按位与得到目的IP主机对应的网络号再与路由表的目的网络的网络号进行比对,如果比对成功,再去判断路由表的flag字段中是否含有G,如果含有则当前路由器将数据发送给数据的下一跳路由器,如果不含有则证明当前数据要发送的目的IP所对应的主机与当前路由器在同一局域网,所以可以直接由当前路由器进行转发。

        所以上节课我们也得出了结论,数据中的目的IP指引数据在网络节点中一步步进行转发,直到将数据发送到目标主机上,上节课我们也提出了数据在网络中由一个节点转发至与之直接相连的下一个节点(数据的下一跳节点)时,数据的转发是通过数据帧进行转发的,接下来我们就要向大家讲述,这个数据帧究竟是什么,以及这个数据帧是如何进行转发的。  

MAC地址与IP地址

          我们再以上节课的用户手机与抖音服务器的图进行举例。图示如下。      

        当用户手机上的数据随着网络中的一个个节点传送逐渐的靠近抖音服务器,看似是横跨整个网络的传输,其实也被分成了多个局域网的传输,上述的一个红圈就是一个局域网。为什么这么说呢?

        以上图为例,以手机相连的最近的用户路由器会给手机这个主机设备分配一个与自身网络号相同的IP地址,那么手机就与与它最近的用户路由器处于了同一局域网中,后续的用户路由器又被与它最近的运营商路由器分配了与运营商相同网络号的IP,从而用户路由器又与运营商路由器处于同一局域网中,这样依次每两个相邻节点之间都形成了一个局域网,最终与抖音服务器相连的路由器我们称之为入口路由器,入口路由器又为抖音服务器分配了一个与自身网络号相同的IP地址,这样入口路由器又和抖音服务器处于同一局域网中。以上讲述并不是很准确,在后续ARP协议和NAT技术讲解之后,我们会为大家进一步补充数据依次传输的细节。

        所以上述图示,就被分成了多个局域网中主机之间的通信(一个圈就是一个局域网)。局域网之间的的主机是可以直接进行通信的。

        局域网之间的通信图示如下。

        处于同一局域网中的主机之间是可以直接互相通信的,且通信的内容可以被局域网中的其它主机获取到。正如在教室里上课,老师点名了张三,但是教室里的同学都听到了老师点名张三的话一样。

        我们规定,在局域网中,主机之间通过mac帧进行数据传输。 

        好了讲了这么多也妹有说明MAC地址和IP地址是个啥呀,别急,以上只是铺垫。

        何为MAC地址?

        简单来说MAC地址就是一个物理地址,任何一台主机一生产出来,就会在网卡中标识出唯一的地址,全球唯一,在局域网中通信时,两台主机使用mac帧进行数据传输,而mac帧的报头中需要使用到MAC地址,一个为源主机MAC地址,一个为目的主机MAC地址。

        何为IP地址?

        IP地址不是主机一生产出来就有的,而是后期相关的厂商进行分配的,IP地址分为私有IP和公网IP,私有IP在一个局域网中一定是唯一的,而在多个局域网中可以重复,公网IP是全网唯一的。在跨网络通信时,一般要使用到IP地址,IP报头中要封装目的主机的公网IP,我们称之为目的IP,目的IP指引了数据在网络中传输的主体方向。

        有了以上所有知识的铺垫,我们再来讲讲数据帧的报文。 

数据帧 

        数据帧又称作MAC帧,简单来说就是处于数据链路层的报文,一般情况下mac帧的有效载荷为IP报文,也可能为ARP报文(后续会讲到)。数据帧的报文图示如下。

  • 目的地址(6字节):局域网中数据帧要发送的目标主机的MAC地址。
  • 源地址(6字节):局域网中发送数据帧的主机的MAC地址。
  • 类型(2字节):数据帧的有效载荷一般情况下有三种,一种是IP报文,一种是ARP报文(通过IP地址获取MAC地址),一种是RARP报文(通过MAC地址获取IP地址)。如果是IP报文则2字节类型的值填充为0800,如果是ARP报文,则2字节类型的值填充为0806,如果是RARP报文,则2字节类型填充为8035。
  • 数据(有效载荷):46~1500字节,对于IP报文,如果大于1500字节就要进行分片。对于ARP报文和RARP报文,一般情况下为28字节,所以要在报文后加上PAD18字节的填充字段,保证报文的长度为46字节。
  • CRC:2字节,用于差错检验,接收端通过CRC检验数据帧的传送是否出现了差错。

ARP协议 

                主机B发送了一个数据到主机C。其实简单的来说确实是这样,准确的说法就是从主机B开始,一直到数据传送到主机C,是通过了多个局域网,最终才将数据传送到了主机C。更准确的说,其实就是主机B发送了数据帧给路由器F,路由器F先判断数据帧的报头,发送数据帧报头的目的MAC地址是自己所以进行了数据帧的解包,然后通过解包后的IP报文的目的IP地址,将这个IP地址在自己的路由表中进行查询,首先将该IP依次和路由表中的子网进行按位与,得到的主机号与路由表中的目标网络的网路号进行比对,对比成功,然后再去判断flag字段的选项,发现为G,所以当前路由器就对IP报文进一步进行封装成MAC帧,然后发送给下一跳路由器,因为当前路由器和下一条路由器都处于同一局域网(为什么处于同一局域网,在后续讲NAT技术时会讲到),所以可以直接发送MAC帧,后续的转发都依靠上述原则,逐步分析MAC帧报头和IP报文的目的IP,直到数据帧发送到了入口路由器D,路由器D对发送来的数据帧报头进行分析,发现报头中的目的MAC地址就是自己,所以对MAC帧进行了解包,然后对解包之后的IP报文的目的IP进行了分析,与自己的路由表中的子网掩码按位与得到的网络号与自己路由表中的目的网络的网络号进行对比,发现对比成功,然后判断flag标志位,发现标志位为U没有G,所以路由器D就认为目的IP主机与自己在同一局域网内,所以就将IP报文重新封装成了MAC帧,然后将MAC帧直接在局域网内发送给目的IP对应的主机。

        好了,那么此时问题来了,封装MAC帧是需要自己的MAC地址与目的主机的MAC地址的,此时路由器D此时只知道目的IP所对应的主机的IP地址,那么如何通过IP地址获取到MAC地址呢?

        此时ARP协议就登场了。

        ARP报文如下图中的以太网ARP字段所示。

  • 硬件类型:硬件类型指的是链路层的网络类型,1为以太网。
  • 协议类型:要转换的地址的类型,要转为IP地址,则填充0800。
  • 硬件地址长度:对于以太网而言为6字节。
  • 协议地址长度:对于要转换的IP地址而言,协议地址长度为4字节。
  • op:为1表示ARP请求,为2表示为ARP应答。        
  • 后面四个就不必多说了,分别为源主机MAC地址,源主机IP地址,目的主机MAC地址,目的主机IP地址。

        我们以图示简单的来讲解一下,怎么样通过ARP协议,将目的主机的IP地址转为MAC地址。        

        ARP协议也是处于数据链路层的协议,在局域网中,刚开始主机A不知道主机B的地址,所以主机A会向主机B发送ARP请求,然后对ARP的请求报文进行封装,封装成了MAC帧,然后在局域网中进行广播,然后局域网的每个主机都会接收这个MAC帧,都以为是发送给自己的,然后对MAC帧进行解包,得到了ARP报文,然后每个主机的ARP协议层首先分析ARP报文的OP字段,发现为1表明是一个请求,然后分析目的IP字段,发现目的IP地址并不是自己主机的IP地址,所以都对该ARP请求报文进行了抛弃,只有主机B发现目的IP与自己的IP地址一致,所以就会接收ARP请求,对主机A做出ARP响应,此时主机B已经通过主机A发送给自己的ARP请求获知了,主机A的MAC地址和IP地址,响应ARP报文中,会将OP字段设置为2,表示这是一个ARP响应报文,同时填充相应的字段,然后封装成MAC帧传递给同一局域网中的主机A,此时局域网中的其它主机也会接收到这个MAC帧,但是当前的MAC帧并不是以广播的形式进行传送的,它有明确的源MAC地址和目的MAC地址,所以当每个局域网中的主机分析到MAC帧的报头的目的MAC地址并不是自己时,就会直接在接收到MAC帧时进行抛弃,而不是解包成ARP报文发送到ARP协议层进行分析之后再抛弃,只有主机A发现MAC帧的目的地址是自己的主机MAC地址,所以会对MAC帧进行解包,解包之后的ARP相应报文会被发送至主机A的ARP协议层,然后会分析ARP协议,发现OP字段为2,表明这是一个响应报文,然后分析得到了源MAC地址,这个源MAC地址就是主机B的地址,所以此时主机A就通过主机B的IP地址得到了主机B的MAC地址。

        所以此时也就解释了为什么上图中的路由器D可以通过主机C的IP地址获知主机C的MAC地址从而向主机C发送MAC帧。与此同时,在上图由主机B到主机C,主机B可以通过路由器F给自己分配IP地址,因为DHCP协议,主机B也会获知路由器F的IP地址,所以也会通过类似的方法获知路由器的MAC地址,从而实现局域网MAC帧的传输。往后的路由器F和路由器G,也是会通过类似的方法实现MAC帧的传送,需要注意的是,一般情况下,与主机相连的我们称之为NAT路由器,不与主机相连的我们称之为ISP路由器。NAT路由器的LAN口用于给局域网中的主机分配私有IP,而WAN口会被ISP路由器分配公网IP,而ISP路由器的LAN口和WAN口一般情况下都为公网IP,所以NAT路由器的WAN口公网IP和ISP的LAN口的公网IP一般都是ISP分配的公网IP,切这两个公网IP处于同一局域网,可以发送MAC帧传送数据,WAN口的IP又会被下一个ISP路由器分配处于同一局域网的公网IP,直到到达了最后一个入口路由器,入口路由器一般情况下也为NAT路由器,NAT路由器的WAN口公网IP是上一跳ISP路由器分配的公网IP地址,LAN口是一个私有IP地址,用于为局域网主机分配IP地址。

NAT技术

        在学习网络层的IP协议时,我们知道了IP协议的地址是有限的,所以为了解决IP地址不足的问题,我们引入了一个NAT技术,何为NAT技术呢?     

        如上图,主机A要发送数据帧到服务器。如果主机A发送数据时将数据帧中的IP报文的源IP写成了自己的私有IP,那么将来服务器接收到了数据帧对数据帧进行解包之后,得到了IP报文,发现IP报文的源IP是一个私有IP,那么此时服务器就蒙了,因为私有IP是可以重复的,那么此时服务器就不知道是给哪个子网的这个私有IP对应的主机发送响应MAC帧。

        基于以上问题,我们产生了NAT技术,因为我们上文已经说到了,NAT路由器的WAN接口是一个由ISP路由器分配的公网IP地址,也就是全网唯一的,所以说,当NAT路由器的LAN口给客户端A主机分配了子网IP之后,客户端主机A先将MAC帧发送至NAT路由器,然后NAT路由器对MAC帧进行解包,然后将解包之后的IP报文的源IP替换成了自己的的WAN口公网IP,因为公网IP是唯一的,所以当服务器发送响应MAC帧时会将响应MAC帧的有效载荷IP报文的目的IP地址填充成NAT路由器的WAN口公网IP。

        说的挺好,将源IP替换成了自己的WAN口的公网IP,那么将来服务器将响应MAC帧通过NAT路由器的WAN口公网IP发送至NAT路由器时,NAT路由器怎样将收到的MAC真发送给局域网中的客户端A呢?这就又引申了一个概念,就是在NAT路由器将客户端A的私有IP替换成自己的公有IP时,会生成一个对照表,大致图示如下。

        即将来NAT路由器接收到响应MAC帧时,会将响应的MAC帧通过对照表发送给局域网中的私有IP对应的主机。

        那么如果上图中的客户端主机A和客户端主机B都向服务器发送了MAC帧,那么经过NAT路由器将私有IP转为公网IP之后,就会有两个对照的记录,那么将来NAT路由器接收到响应MAC帧时,究竟发送给哪一个局域网中的主机呢,此时又诞生了NAPT技术,即就是给私有IP和公有IP都带上了端口号,这样就产生了一一对应的关系,简单图示如下。

代理服务器 

正向代理

        正如大学里的校园网,一般情况下,当学生在使用互联网时访问的其实并不是访问的软件对应的企业服务器,而是校园内的代理服务器。

        

        为什么要有校园代理服务器呢,主要有两个原因?

  1. 校园内可能同时有大量相同的请求服务,比如都同时观看爱奇艺体育中的球赛,所以如果没有代理服务器,那么此时就会有大量相同功能的请求发送,需要多次频繁的访问外网。但是有了代理服务器之后,代理服务器进行分析,发现大量的请求都是为了获取相同的一个资源,所以代理服务器就会发送相同的请求,将获取的球赛资源缓存到自己代理服务器中,多个主机请求相同的资源时,直接就可以从代理服务器中获取相应的资源。
  2. 处于安全性考虑,如果没有代理服务器,那么此时就相当于校园内的主机可以直接与外部的服务器进行数据交换,那么如果有了恶意分子,恶意分子就直接可以攻击校园内的主机,而校园内的主机大部分的拥有者都是学生,并不具备对于恶意攻击的访问能力。所有有了代理服务器之后,与外网服务器之间直接进行交互的就是代理服务器,代理服务器有专业的认识进行管理,可以有效的对不法攻击进行防范。 

        给发送端,建立的代理服务器,我们称为正向代理。 

反向代理 

        反向代理就类似于给企业端配置了一个企业端代理服务器。

        为什么要在企业端配置这样一个代理服务器呢?主要原因还是两个。

        1.我们知道主机与服务器之间的通信是要贯穿TCP/IP网络协议栈的,特别是TCP协议为了保证可靠传输要建立连接,那么如果有多个客户主机去访问了同一企业服务器,那么当企业服务器就会获取大量的连接,而维护连接又要创建大量的数据结构,所以如果大量的客户主机访问了同一企业服务器,就会导致这个企业服务器创建大量的维护连接的数据结构,从而增加了服务器的负载。有了企业代理服务器之后,代理服务器会合理的对用户的请求进行分配,从而不会导致某一个企业服务器的负载过大,我们称之为负载均衡。

        图示如下。

        2.同样在企业端配置企业代理服务器是为了保护企业服务器的安全,因为有了企业代理服务器,客户主机不会与企业服务器直接进行通信,而是会与企业代理服务器进行交互,企业代理服务器会对每个客户请求进行甄别,能够有效的组织非法客户的恶意请求,这样就保证了企业服务器的安全,有人会说难道不能为企业服务器配置一些有效的防护策略吗,当然有,但是加上企业代理服务器之后安全级别会更高。

        在接收端我们配置了相应的代理服务器,我们称之为反向代理。 

        以上便是数据链路层的所有重点内容。

        本期内容到此结束^_^

相关文章:

Linux网络之数据链路层协议

目录 数据链路层 MAC地址与IP地址 数据帧 ARP协议 NAT技术 代理服务器 正向代理 反向代理 上期我们学习了网络层中的相关协议,为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址,从而指引了数据在网络中的一步…...

数据结构第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…...

【大模型知识点】位置编码——绝对位置编码,相对位置编码,旋转位置编码RoPE

由于Transformer 中的自注意模块具有置换不变性(不关心输入序列的顺序),因此需要使用位置编码来注入位置信息以建模序列,使模型能够区分不同位置的 token,并捕捉序列的顺序关系。 在介绍一些位置编码方法前&#xff0…...

【大模型篇】推理模型大作战(QwQ-32B vs DeepSeek-R1)

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 写在前面 当我让QwQ-32B vs DeepSeek-R1 写一封未来自己的信 大家更喜欢哪种风格? QwQ-32B 模…...

【汇编语言】单片机程序执行过程

一、任务需求 指示灯LED4闪烁,亮0.5秒,灭0.5秒,无限循环 二、针对硬件的编程 1、确定原理图2、确定硬件的物理关系 三、设计步骤 1.用自己的语言描述工作流程 1.1指示灯LED4亮1.2延时0.5秒1.3指示灯LED4灭1.4延时0.5秒1.5跳转到1.1步 …...

MYSQL之创建数据库和表

创建数据库db_ck (下面的创建是最好的创建方法,如果数据库存在也不会报错,并且指定使用utf8mb4) show databases命令可以查看所有的数据库名,可以找到刚刚创建的db_ck数据库 使用该数据库时,发现里面没有…...

MybatisPlus

1.增删改查入门案例&#xff1a; 首先导入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency> 然后这些增删改查…...

HCIE云计算学什么?怎么学?未来职业发展如何?

随着云计算成为IT行业发展的主流方向&#xff0c;HCIE云计算&#xff08;华为认证云计算专家&#xff09;作为华为认证体系中的高端认证之一&#xff0c;逐渐成为了许多网络工程师和IT从业者提升职业竞争力的重要途径。 那么&#xff0c;HCIE云计算究竟学什么内容&#xff0c;如…...

小程序 -- uni-app开发微信小程序环境搭建(HBuilder X+微信开发者工具)

目录 前言 一 软件部分 1. 微信开发者工具 2. HBuilder X 开发工具 二 配置部分 1. 关于 HBuilder X 配置 2. 关于 微信开发工具 配置 三 运行项目 1. 新建项目 2. 代码编写 3. 内置浏览器 编译 4. 配置小程序 AppID获取 注意 四 实现效果 前言 uni-app开发小程…...

多线程-线程本地变量ThreadLocal

简介 ThreadLocal是线程本地变量&#xff0c;用于存储独属于线程的变量&#xff0c;这些变量可以在同一个线程内跨方法、跨类传递。每一个ThreadLocal对象&#xff0c;只能为当前线程关联一个数据&#xff0c;如果要为当前线程关联多个数据&#xff0c;就需要使用多个ThreadLo…...

MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模

2025-03-05&#xff0c;由华为诺亚方舟实验室、捷克技术大学和帝国理工学院联合开发的MuBlE&#xff08;MuJoCo and Blender simulation Environment&#xff09;模拟环境和基准测试。通过结合MuJoCo物理引擎和Blender高质量渲染&#xff0c;为机器人操作任务规划提供了逼真的视…...

计算机网络笔记(一)——1.1计算机网络在信息时代中的作用

21世纪的一些重要特征是数字化、网络化和信息化&#xff0c;它是一个以网络为核心的信息时代。要实现信息化就必须依靠完善的网络&#xff0c;因为网络可以迅速地传递信息。网络现在已经成为信息社会的命脉和发展知识经济的重要基础。 有三大类网络大家应该很熟悉&#xff0c;即…...

第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)

客观试题: 01.典型的BUCK电源电路包含哪些关键器件(ABCD) A. 电容 B. 二极管 C. 电感 D. MOSFET 解析: 典型的 BUCK 电源电路是一种降压型的直流-直流转换电路,它包含以下关键器件: A.电容:电容在电路中起到滤波的作用。输入电容用于平滑输入电压的波动,减少电源噪声对…...

计算机组成与体系结构-存储系统

主存编址 存储单元&#xff1a;最小存储单元&#xff0c;一般为4bit。每个存储单元有自己的二进制编号 存储器&#xff1a;多个存储单元排布而成。常见的有8*4存储器&#xff08;8个4bit的存储单元&#xff09; 编址内容&#xff1a; 按字编址&#xff1a;存储体的最小存储单…...

better-sqlite3之exec方法

在 better-sqlite3 中&#xff0c;.exec() 方法用于执行包含多个 SQL 语句的字符串。与预编译语句相比&#xff0c;这种方法性能较差且安全性较低&#xff0c;但有时它是必要的&#xff0c;特别是当你需要从外部文件&#xff08;如 SQL 脚本&#xff09;中执行多个 SQL 语句时。…...

WinUI 3 支持的三种窗口 及 受限的窗口透明

我的目标 希望能够熟悉 WinUI 3 窗口的基本使用方式&#xff0c;了解可能出现的问题 。 WinUI 3 支持三种窗口模式&#xff0c;分别为&#xff1a;常规窗口模式、画中画模式、全屏模式。 窗口模式&#xff1a;常规 即我们最常见的普通窗口。 支持&#xff1a;显示最大化按钮…...

【运维笔记】Navicat中删除mongo 某个时间之前的数据

【运维笔记】Navicat中删除mongo 某个时间之前的数据 一、场景与需求1.1、场景1.2、需求 二、解决方案三、实战3.1、【Navicat】使用sql语句 &#xff08;推荐&#xff09;Step 1&#xff1a;使用查询窗口 - 查询Step 2&#xff1a;确认第一步的数据是否是需要删除的数据Step 3…...

java2025年常见设计模式面试题

1. 请解释建造者模式&#xff08;Builder Pattern&#xff09;及其应用场景。 答案&#xff1a; 建造者模式用于创建一个复杂的对象&#xff0c;同时允许用户只通过指定复杂对象的类型和内容就能构建它们&#xff0c;隐藏了复杂的构建逻辑。 示例&#xff1a; public class C…...

Docker部署Ragflow(完美解决502 bad gateway)

Docker快速启动Ragflow:Dev 系统准备 ubuntu server 24.04 CPU ≥ 4 cores (x86);RAM ≥ 16 GB;Disk ≥ 100 GB; 更新系统 sudo apt update 下载源码 git clone https://github.com/infiniflow/ragflow.git cd ragflow/docker # 切换稳定版本分支 git checkout -f v0.17.…...

算法中的背包问题详解:部分背包与0-1背包

1. 背包问题概述 背包问题是组合优化中的经典问题&#xff0c;其核心目标是&#xff1a;在给定容量的背包中装入一组物品&#xff0c;使得物品的总价值最大化。根据物品是否可分割或重复选择&#xff0c;背包问题分为多个变种&#xff0c;其中最常见的两种是&#xff1a; 部分…...

Stream特性(踩坑):惰性执行、不修改原始数据源

在日常开发中&#xff0c;Stream API 提供了一种高效且易于使用的工具集来处理集合数据。 本文主要讲解 Stream 的两个特性&#xff1a;惰性执行&#xff0c;不修改原始数据源。 为什么说这两个、而不讲下其他的特性呢&#xff1f;主要是因为在开发中如果忽略这两个特性的话&…...

Varlens(手机上的单反)Ver.1.9.3 高级版.apk

Varlens 是一款专业级手机摄影软件&#xff0c;旨在通过丰富的功能和高自由度参数调节&#xff0c;让手机拍摄效果媲美微单相机。以下是核心功能总结&#xff1a; 一、核心功能 专业拍摄模式 支持手动/自动/程序模式&#xff0c;可调节ISO、快门速度、EV、白平衡等参数27 提供…...

【无监督学习】层次聚类步骤及matlab实现

层次聚类 &#xff08;四&#xff09;层次聚类1.算法步骤2.MATLAB 实现参考资料 &#xff08;四&#xff09;层次聚类 层次聚类是一种通过逐层合并或分裂数据点构建树状结构&#xff08;树状图&#xff0c;Dendrogram&#xff09;的聚类方法。它分为两种类型&#xff1a; 凝聚…...

uploadlabs通关思路

目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一&#xff1a;直接修改或删除js脚本 方法二&#xff1a;修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程&#xff1a; 文件上传 pass-04 代码审计 文件上传 p…...

doris:Elasticsearch

Elasticsearch Catalog 除了支持自动映射 ES 元数据外&#xff0c;也可以利用 Doris 的分布式查询规划能力和 ES(Elasticsearch) 的全文检索能力相结合&#xff0c;提供更完善的 OLAP 分析场景解决方案&#xff1a; ES 中的多 index 分布式 Join 查询。 Doris 和 ES 中的表联合…...

JetBrains学生申请

目录 JetBrains学生免费授权申请 IDEA安装与使用 第一个JAVA代码 1.利用txt文件和cmd命令运行 2.使用IDEA新建项目 JetBrains学生免费授权申请 本教程采用学生校园邮箱申请&#xff0c;所以要先去自己的学校申请校园邮箱。 进入JetBrains官网 点击立即申请&#xff0c;然…...

PDFMathTranslate安装使用

PDF全文翻译&#xff01;&#xff01;&#xff01;&#xff01; PDFMathTranslate安装使用 它是个啥 PDFMathTranslate 可能是一个用于 PDF 文件的数学公式翻译 工具。它可能包含以下功能&#xff1a; 提取 PDF 内的数学公式 将数学公式转换成 LaTeX 代码 翻译数学公式的内…...

清华北大推出的 DeepSeek 教程(附 PDF 下载链接)

清华和北大分别都有关于DeepSeek的分享文档&#xff0c;内容非常全面&#xff0c;从原理和具体的应用&#xff0c;大家可以认真看看。 北大 DeepSeek 系列 1&#xff1a;提示词工程和落地场景.pdf  北大 DeepSeek 系列 2&#xff1a;DeepSeek 与 AIGC 应用.pdf  清华 Deep…...

2025-03-09 学习记录--C/C++-PTA 练习11-4 字符定位(最后一次找到的字符)

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h> char *match(char *s, char ch); int main(void …...

C语言数据结构之顺序表

目录 1.线性表 2.顺序表 2.1.静态顺序表 2.2.动态顺序表 2.2.1.初始化 2.2.2.清空顺序表 2.2.3.扩容&#xff0b;尾插 2.2.4.尾出函数 2.2.5.头插函数 2.2.6.头出函数 2.2.7.在中间位置插入 2.2.8.删除中间位置数据 2.2.9.查找函数 2.2.10.总结 3.OJ例题 3.1.合…...

【Git】合并冲突

合并冲突 可是&#xff0c;在实际分支合并的时候&#xff0c;并不是想合并就能合并成功的&#xff0c;有时候可能会遇到代码冲突的问题。 为了演示这问题&#xff0c;创建一个新的分支 dev1 &#xff0c;并切换至目标分支&#xff0c;我们可以使用 git checkout -b dev1 一步…...

【每日学点HarmonyOS Next知识】Web跨域资源、Web长按菜单、Web拦截请求、禁止录屏、Base64图片宽高

1、HarmonyOS Web组件本地资源跨域问题&#xff1f; 关于资源跨域问题的解决&#xff0c;可以参考以下官网文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-cross-origin-V5 方法一 为了使Web组件能够成功访问跨域资源&#xff0c;开…...

高效数据分析实战指南:Python零基础入门

高效数据分析实战指南 —— 以Python为基石&#xff0c;构建您的数据分析核心竞争力 大家好&#xff0c;我是kakaZhui&#xff0c;从事数据、人工智能算法多年&#xff0c;精通Python数据分析、挖掘以及各种深度学习算法。一直以来&#xff0c;我都发现身边有很多在传统行业从…...

【语料数据爬虫】Python爬虫|批量采集征集意见稿数据(1)

前言 本文是该专栏的第5篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 在本文中,笔者将主要来介绍基于Python,来实现批量采集“征集意见稿”数据。同时,本文也是采集“征集意见稿”数据系列的第1篇。 采集相关数据的具体细节部分以及详细思路逻辑…...

电力场景绝缘子缺陷分割数据集labelme格式1585张4类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;1585 标注数量(json文件个数)&#xff1a;1585 标注类别数&#xff1a;4 标注类别名称:["broken part","broken insulat…...

《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》

类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit&#xff0c;而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的&#xff08;符合规定的显示表达式&#xff09; 注&#xff1a;一般情况下…...

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了&#xff0c;为了找出这个bug, 星期六的晚上我从9点查到0点多&#xff0c;此时我心中一万个草泥马在崩腾&#xff0c;超级想骂人&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; uniCloud 不想…...

【论文阅读】VAD: Vectorized Scene Representation for Efficient Autonomous Driving

一、介绍 VAD是华科团队设计的一个端到端无人驾驶框架&#xff0c;针对传统的无人驾驶框架的模块化设计的问题&#xff0c;该算法使用向量化的策略进行了端到端的实现。传统的模块化设计使得感知模块完全依赖于感知模块的计算结果&#xff0c;这一解耦实际上从规划模块的角度损…...

uniapp版本加密货币行情应用

uniapp版本加密货币行情应用 项目概述 这是一个使用uniapp开发的鸿蒙原生应用&#xff0c;提供加密货币的实时行情查询功能。本应用旨在为用户提供便捷、实时的加密货币市场信息&#xff0c;帮助用户随时了解市场动态&#xff0c;做出明智的投资决策。 应用采用轻量级设计&a…...

使用 Java 执行 SQL 语句和存储过程

使用 Java 执行 SQL 语句和存储过程&#xff0c;通常有两种主要的方式&#xff1a;使用 JDBC&#xff08;Java Database Connectivity&#xff09;或者通过框架如 Spring Data JPA、MyBatis 等。 1. 使用 JDBC 执行 SQL 语句 JDBC 是 Java 操作数据库的标准 API。以下是通过 …...

算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式

在算法学习中&#xff0c;深度优先搜索&#xff08;DFS&#xff09;是一种常用的图搜索算法&#xff0c;通过递归或栈实现&#xff0c;适合路径搜索、连通性、拓扑排序、回溯、生成、环路检测、强连通分量和可达性等问题。本文将介绍如何利用深度优先搜索解决“妖怪和尚过河问题…...

大白话JavaScript闭包实现原理与在实际开发中的应用场景

大白话JavaScript闭包实现原理与在实际开发中的应用场景 答题思路 解释闭包的概念&#xff1a;先简单直白地说明闭包是什么&#xff0c;让读者对闭包有一个初步的认识。阐述闭包的实现原理&#xff1a;详细讲解闭包是如何形成的&#xff0c;涉及到函数作用域、变量的生命周期…...

【redis】数据类型之geo

Redis的GEO数据类型用于存储地理位置信息&#xff08;如经纬度&#xff09;&#xff0c;并提供高效的地理位置查询功能&#xff08;如计算两地距离、搜索附近地点等&#xff09;。其底层基于Sorted Set&#xff08;有序集合&#xff09;实现&#xff0c;通过Geohash编码将经纬度…...

C++后端服务器开发技术栈有哪些?有哪些资源或开源库拿来用?

一、 C后台服务器开发是一个涉及多方面技术选择的复杂领域&#xff0c;特别是在高性能、高并发的场景下。以下是C后台服务器开发的一种常见技术路线&#xff0c;涵盖了从基础到高级的技术栈。 1. 基础技术栈 C标准库 C11/C14/C17/C20&#xff1a;使用现代C特性&#xff0c;如…...

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码 第二道&#xff08;easy&#xff09;思路及AC代码solution 1solution 2 第三道&#xff08;mid&#xff09;思路及AC代码&#xff08;mid&#xff09; 第一道&#xff08;easy&#xff09; 题目链接 思路及…...

tcp udp区别

TCP&#xff08;传输控制协议&#xff09; 和 UDP&#xff08;用户数据报协议&#xff09; 是两种常用的传输层协议&#xff0c;它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别&#xff1a; 1. 连接方式 TCP&#xff1a;面向连接的协议。通信前需…...

驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来

智慧浪潮崛起&#xff1a;AI与边缘计算的时代 正悄然深植于我们的日常生活之中&#xff0c;无论是火热的 ChatGPT 与 DeepSeek 语言模型&#xff0c;亦或是 Meta 智能眼镜&#xff0c;AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇&#xff0c;而是进一步催生了更高…...

【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】

&#x1f48c; 所属专栏&#xff1a;【单片机开发软件技巧】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xff1…...

Linux 进程管理工具 Supervisor

介绍 Supervisor 是一个用 Python 编写的进程管理工具&#xff0c;旨在帮助你监控和控制多个进程。它特别适用于需要确保某些服务在服务器启动时自动运行&#xff0c;并且在崩溃时自动重启的场景。 写在前面&#xff1a; 因为现在很多第三方的包的最新版本都是基于 python3了…...

问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘text‘

项目环境&#xff1a; 我的环境&#xff1a;Window10&#xff0c;Python3.12&#xff0c;Anaconda3&#xff0c;Pycharm2024.3.4 问题描述&#xff1a; 找不到’text’这个对象 部分代码&#xff1a; Traceback (most recent call last):File "D:\IT DateFiles\PyDate\FQ…...