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

【网络编程】之数据链路层

【网络编程】之数据链路层

  • 数据链路层
    • 基本介绍
    • 基本功能
    • 常见协议
  • 以太网
    • 什么是以太网
    • 以太网协议帧格式
    • 数据链路层的以太网帧报文如何封装/解封装以及分用
    • 以太网通信原理
      • 传统的以太网与集线器
      • 现代以太网与交换机
      • 碰撞域的概念
    • Mac地址
      • 基本概念
      • 为什么要使用Mac地址而不是使用IP地址进行局域网间的通信
  • MTU
    • 认识MTU
    • 为什么存在MTU限制
    • MTU对上层一些协议的影响
  • ARP协议
    • 基本概念
    • 功能和工作范围、以及封装形式
    • 典型工作流程示例

数据链路层

基本介绍

数据链路层是TCP/IP五层协议和OSI七层协议中的倒数第二层,它主要负责在同一局域网之间的节点间进行可靠的数据帧的传输。

注意:在网络中我们将主机可以称之为节点。

基本功能

  1. 帧同步:确保发送方和接收方对帧边界的识别一致,防止数据丢失或错误。
  2. 差错检测与纠正:通过校验和等机制检测并可能纠正传输过程中的错误,保证数据完整性。
  3. 流量控制:调节数据发送速率以避免拥塞和数据丢失,确保接收方能够处理所有接收到的数据。
  4. 介质访问控制(MAC, Media Access Control):确定哪个设备在网络上有权限发送数据,特别是在共享介质如以太网中尤为重要。
  5. 逻辑链路控制(LLC, Logical Link Control):提供一种方法来标识上层协议,并管理不同协议之间的复用与分用。

常见协议

  • 以太网(Ethernet):最常用的局域网技术之一,支持高速度的数据传输。
  • 点对点协议(PPP, Point-to-Point Protocol):用于在点对点连接上传输多协议数据包的标准方法。
  • 高级数据链路控制(HDLC, High-Level Data Link Control):面向位的数据链路层协议,主要用于同步通信。
  • 帧中继(Frame Relay):高效的广域网协议,适用于企业站点间的连接。
  • 异步传输模式(ATM, Asynchronous Transfer Mode):虽然跨越了数据链路层和物理层,但以其在数据链路层的功能而知名。
  • IEEE 802.11系列:无线局域网协议,为Wi-Fi技术提供了基础。
  • ARP协议/RAP协议:在IPv4网络中将网络层(第三层)使用的IP地址转换为数据链路层使用的MAC地址。

我们重点介绍以太网协议。

以太网

什么是以太网

以太网是局域网技术的一种,常见的局域网技术还有令牌环网技术、WIFI技术(无线局域网)。以太网是最流行的局域网技术,使用物理电缆(如双绞线或光纤)连接网络设备。它支持从10Mbps100Gbps及以上的传输速率。

以太网协议帧格式

不同的局域网需要使用不同的协议,比如以太网使用以太网协议,它是数据链路层的一种:

image-20250216155836728

  • 目的地址:局域网中通信使用MAC地址,所以以太网协议又可以叫做MAC帧协议,这个6字节的字段对应通信主机的MAC帧地址。
  • 源地址:当前主机的MAC地址。
  • 类型:在以太网II帧格式中,该字段被解释为“类型”,用来标识封装在帧内的上层协议。常见的类型值包括但不限于以下几种:
    • 0x0800:表示网络层协议是IPv4。
    • 0x86DD:表示网络层协议是IPv6。
    • 0x0806:表示这是ARP(Address Resolution Protocol)报文。
    • 0x8035:RARP(Reverse Address Resolution Protocol)报文。
    • 0x8100:VLAN标签(IEEE 802.1Q),实际上这是一个扩展,它后面跟着一个额外的4字节VLAN标签,然后再跟类型字段。
    • 0x88CC:LLDP(Link Layer Discovery Protocol),用于设备发现。

对于上一层协议是是IPv4:

image-20250216161242810

如果数据部分是ARP报文:

image-20250216161926377

  • PAD:是填充字节,数据部分最少要有46字节,这些填充字节通常没有实际意义,仅用于物理层的要求,保证帧能够正确地被接收设备识别和处理。

如果数据部分是RARP报文:

image-20250216162205272

数据链路层的以太网帧报文如何封装/解封装以及分用

解封装:因为帧报文是固定报头,所以很轻松就可以将报头和有效载荷进行分离。封装将上层的有效载荷添加上报头和CRC校验码即可,CRC校验码有特定的算法,感兴趣的自行了解,是错误检测中的常见的算法。

分用:分用的过程就是如何提交给上层的问题,根据2字节的类型字段来分用,如果是字段的值是0x0800那就是IPv4报文,交给上层的IPv4协议。

以太网通信原理

传统的以太网与集线器

集线器(Hub):是一种物理设备,工作在物理层,它可以用来将局域网中要通信的计算机组织在一起,它工作在物理层,只能机械的广播报文到所有它连接的端口,它并不理解或更改传输的数据帧。

image-20250216195249374

由集线器组织起来的局域网:

image-20250216195804609

由于传统的集线器没有学习mac地址的功能,它不知道目的mac地址对应哪个端口,所以它只能将mac帧报文转发给所有端口,所以每一次发送数据,每个端口都要传输数据,就导致了都被占用,所以有主机在局域网中发送数据时就不能有其它主机发送数据,否则会导致冲突。

上述组网图也可以表示为:

image-20250216200300728

现代以太网与交换机

上面那种组网的方式有明显的缺陷,就是每一次局域网中的数据传输都要占用整个通信线路,冲突的概率很大,下面我们来简单学习一下交换机这种网络设备。

交换机(Switch):和集线器长的很像,也可以组网,但不同于集线器的是,交换机中可以维护一个表保存某个端口对应的设备的mac地址,也就是它可以学习mac地址,交换机工作在数据链路层。通过报文的目标mac地址,它的交换表中如何存储了该mac地址对应的端口信息,可以直接将其转发给该端口,而不需要将其发送给所有端口。

image-20250216202321055

所以交换机工作在数据链路层(第二层)的主要原因是其可以识别和处理数据帧中的信息,如MAC地址。它根据MAC地址来决定将数据转发到哪个端口,如果交换表中没有保存该mac地址对应的端口,它就会将其发送给剩下的端口。

并且每一次发送数据帧时,如果源主机的mac地址如果交换机的表中没有保存其相关信息或者mac地址发生变化(该端口接入交换机的设备更换了)的话,它也会更新交换表中的信息。

现代交换机网络示例

image-20250216202646490

  • 此时主机A->主机C,主机B->主机D发送数据就是并行的,如果mac表中保存了相关的信息的话,不会导致冲突,因为交换机可以识别帧头部信息做到根据mac地址定向端口转发数据帧报文
  • 每个端口支持全双工通信(也有些半双工模式),数据可以同时进行收发,而集线器只支持半双工通信。全双工模式下,每个端口都有独立的冲突域(只要该端口不同时发数据就行),整个网络的碰撞域其实不复存在,完全禁用冲突检测(CSMA/CD的消亡)。

为了保证向后兼容,协议层保留兼容性支持(半双工),但新部署网络必须强制配置全双工,因为半双工的网络性能实在是太慢了。

碰撞域的概念

碰撞域(collision domain)是以太网通信的核心概念,它定义了网络中可能发生数据冲突的物理范围。

共享同一物理信道的设备,在域中相同时刻,只能有一组设备发送数据成功,如果有多组设备同时发送数据,则会导致这些设备数据都发送失败。

传统的集线器所组的局域网,碰撞域几乎覆盖了整个通信信道,但由于交换机的出现,特别是全双工通信的支持,将大的独立的碰撞域分割为多个小的独立碰撞域,数据冲突几乎不存在。

特性传统网络现代网络
典型设备集线器(Hub)交换机(Switch)
冲突处理机制CSMA/CD(载波监听多路访问/冲突检测)无冲突
带宽共享方式竞争型(竞争发送数据的机会)专用型(根据mac地址定向转发数据帧)
最大理论设备数<= 30(100M网络)无限制

Mac地址

基本概念

Mac(Media Access Control Address)地址是网络设备的物理地址,又称媒体访问控制地址,用于在局域网内进行设备间的通信,每一个网络接口都有一个全球唯一的MAC地址,这使得数据帧可以从一个设备准确的发送给局域网中的另外一个设备。Mac地址在设备生产的时候就已经固定了,不可改变

Windows中可以通过指令getmac获得本主机所有网络接口对应的mac地址:

image-20250216164220512

如果想获得与mac地址相关的其它网络接口配置信息,可以使用指令ipconfig /all

image-20250216164417508

为什么要使用Mac地址而不是使用IP地址进行局域网间的通信

这我相信是很多人的疑惑点之一,明明IPv4IPv6中的IP地址就已经可以标识网络中的唯一主机,为什么还要多次一举搞一个mac地址出来呢,理由如下:

  1. 网络分层的必然要求

    • 数据链路层与网络层的分工

      • mac地址:数据链路层的标识,用于同一物理网络的直接通信,如交换机的转发。

      • ip地址:网络层的标识,用于跨网络的路由寻址(如路由器决策路径需要靠IP地址)。

        image-20250216170636497

    • 硬件与逻辑的解耦

      • MAC地址固化在网卡硬件中,如E2-0A-F6-97-75-73,与物理设备绑定。
      • 但是IP地址可动态分配(DHCP算法), 仅仅作为逻辑标识,用于网络拓扑。
  2. 局域网通信的关键场景

    • 当设备刚刚接入某个局域网中,肯定是还没有IP地址的,那DHCP服务器想给它分配IP地址,只能通过先通过mac地址来与其通信,大致可以分为以下几个步骤:

      • DHCP服务器发现阶段:

        image-20250216172551649

        • DHCP服务器收到这个广播帧,会给客户端(也就是新设备)返回一个offer报文,不用担心是否会有其它设备发送报文给新设备,DHCP协议offer报文是有特定格式的,其它设备响应的错误报文会直接被丢弃,如果有多个DHCP服务器响应,新设备只会选择一个最优的(考虑网络等情况)。这个offer报文中有ip地址、子网掩码、网关地址等信息。

          image-20250216175924449

        • Request阶段:当DHCP服务器给新设备返回一个ip地址后,它并不会马上开始使用这个ip地址,而是先给所有DHCP服务器发送一个报文,告诉它们启用了哪个ip地址,防止局域网中有多DHCP服务器导致ip地址冲突问题。发送广播帧即可。

          image-20250216175935908

        • 响应阶段:最后新设备选择的DHCP服务器将会给它返回一个ACK报文,表示地址分配是有效的。其它设备在收到Request报文后,会回收租出去的ip地址,如果没有收到Request报文,ip地址也会自动过期回收:

          image-20250216180713490

    • 交换机工作原理:交换机通过存储不同设备的mac地址,决定应该将数据帧转发给哪个端口,而非使用ip地址。

  3. ip地址的局限性

    • ip地址可能因为DHCP租约过期,手动配置错误等经常发生变化,所以不适合稳定的通信。
    • ip地址属于网络层,需要网络层协议的支持,而某些底层工业设备可能仅支持mac通信。

所以mac地址和ip地址是各有各的优点和功能,两者都不可或缺。

MTU

认识MTU

MTU(Maximum Transmission Unit),即最大传输单元,是数据链路层对有效载荷也就是数据帧的数据部分的最大长度的限制。每个类型的网络对都有特定的MTU限制:

image-20250217115956976

为什么存在MTU限制

  1. 数据太大,重传的成本高。
  2. 接收设备(路由器、主机、交换机等)需要为接收到的数据帧分配缓冲区,如果帧过大导致缓冲区溢出,就会导致数据丢失。
  3. 数据链路层会对数据帧做数据校验(CRC算法),较小的帧长计算量也较小。

MTU对上层一些协议的影响

  1. TCP协议(传输层)

    • TCP的一个报文不能无限大,因为TCP是传输层,也受限于数据链路层的MTU,双方在三次握手时会告知对方自己的MSS(Max Segment Size)。

    • 在理想的情况下MSS = MTU-IPheadersize-TCPheadersize。这是刚好网络层不会IP分片的TCP数据长度,如果没有其它额外选项的话。所以MSS和MTU有很大的关系。

      image-20250217121059313

  2. IP协议(网络层):

    • 由于数据链路层MTU的限制,对于较大的IP报文,网络层会将其进行IP分片(分成几个小的IP报文)。

    • IP分片的触发条件:IP包的数据长度 > MTU -20Byte(IP头的长度)。

    • 假设IP包的数据长度为3000Byte,它就会被分成下面形式的IP包(假设没有选项):

      image-20250217121930123

  3. UDP协议(传输层):如果UDP协议的数据部分超过:

    MTU(1500)-8Byte(UDPheader)-20Byte(IPheader)=1472字节
    
    • 那么在网络层,IP报文就会分片,这些多个IP数据报如果有一个丢失,都会导致接收主机网络层重组失败,则UDP报文的丢包率就大大提高。

ARP协议

基本概念

ARP协议的主要功能是通过主机的ip地址获得它的mac地址,因为局域网中通信要使用mac地址。

关于ARP协议工作在TCP/IP协议哪一层,一直备受争议,因为它处理的是ip地址,所以有人认为它工作在网络层,但是ARP并不使用ip协议,而是直接封装在数据帧中,所以我们可以认为它是数据链路层和网络层之间的一个协议,但更偏向于数据链路层。

在《计算机网络:自顶向下方法》中,ARP通常被放在链路层讨论,因为它不涉及路由,只在本地网络工作,帮助将IP地址解析为MAC地址,而MAC地址是链路层的地址。

功能和工作范围、以及封装形式

ARP协议的功能刚刚以及介绍,将IP地址解析为mac地址

它直接封装在数据帧中,封装形式如下:

image-20250217112054568

PAD是填充字节,达到最小帧长64字节的要求,最小帧长是早期网络技术限制和冲突检测机制的共同结果,现在随着全双工模式的普及,最小帧长已经失去意义,但是半双工模式仍然保留最小帧长的要求。

工作范围ARP仅在本局域网中生效,不跨越路由器,跨越路由器需要依赖其它协议(如代理ARP)。

典型工作流程示例

image-20250217113130761

相关文章:

【网络编程】之数据链路层

【网络编程】之数据链路层 数据链路层基本介绍基本功能常见协议 以太网什么是以太网以太网协议帧格式数据链路层的以太网帧报文如何封装/解封装以及分用以太网通信原理传统的以太网与集线器现代以太网与交换机碰撞域的概念 Mac地址基本概念为什么要使用Mac地址而不是使用IP地址…...

HTTP 和 TCP/IP-傻傻分不清

HTTP 和 TCP/IP 是计算机网络中不同层次的协议&#xff0c;它们的核心区别在于功能和所属的网络层次。以下是详细对比&#xff1a; 1. 所属网络层次 TCP/IP 定位&#xff1a;TCP/IP 是一个协议族&#xff08;包含多个协议&#xff09;&#xff0c;涵盖网络通信的传输层和网络层…...

【SQL】SQL约束

&#x1f384;约束 &#x1f4e2;作用:是用于限制存储再表中的数据。可以再创建表/修改表时添加约束。 &#x1f4e2;目的:保证数据库中数据的正确、有效性和完整性。 &#x1f4e2;对于一个字段可以同时添加多个约束。 &#x1f384;常用约束: 约束分类 约束 描述关键字非…...

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑧】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase08 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月17日 关键词&#xff1a;UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-008测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

解决vue-awesome-swiper 4.x + swiper 5.x 分页pagination配置不生效问题

这次给的需求需要实现几个轮播图&#xff0c;我打算用swiper来做。刚开始我参照同事之前实现的swiper&#xff0c;复制到我的新页面中&#xff0c;是可用的。但是这次的需求需要有底下的分页pagination&#xff0c;而且因为版本比较老&#xff0c;比较难找到配置项。这里说一下…...

Spring Boot 开发入门

文章来源&#xff1a;开发您的第一个 Spring Boot 应用程序 (Developing Your First Spring Boot Application) _ Spring Boot3.4.0中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 本节介绍如何开发一个小型的 “Hello World&#xff01;” Web 应用程序&…...

MATLAB算法实战应用案例精讲-【数模应用】空间插值(附MATLAB、R语言和python代码实现)

目录 前言 算法原理 什么是插值? 为什么要插值? 常见插值方法 插值方法选择 GIS中常用的空间分析方法 一、空间插值 二、缓冲区分析 三、空间统计 四、领域分析 五、网络分析 六、多标准决策 插值分析 插值应用示例 空间插值的类型 不同工具箱中的空间插值工…...

碰一碰发视频@技术原理与实现开发步骤

碰一碰发视频系统&#xff1a;技术原理与实现方案解析 引言 近年来&#xff0c;随着移动支付和近场通信技术&#xff08;NFC&#xff09;的普及&#xff0c;“碰一碰”功能逐渐成为商家与用户交互的新入口。通过“碰一碰加盟”模式&#xff0c;企业可以快速赋能线下商户&…...

14.学成在线开发小结

1.统计两张表的数据&#xff0c;表1和表2是一对多的关系&#xff0c;如果既要统计表1又要统计表2的数据&#xff0c;要分开进行统计&#xff0c;否则表1一条数据在表2中可能有多条数据对应&#xff0c;导致表1的数据被多次统计。 2.nacos配置文件的数据读取不到可能原因有&…...

图像处理之CSC

CSC 是 Color Space Conversion&#xff08;色彩空间转换&#xff09;的缩写&#xff0c;它涉及图像处理中的亮度、饱和度、对比度和色度等参数的调整。这些参数是图像处理中的核心概念&#xff0c;通常用于描述和操作图像的颜色信息。 以下是亮度、饱和度、对比度和色度与 CS…...

数据结构:顺序表(Sequence List)及其实现

什么是顺序表&#xff1f; 顺序表是一种最简单的数据结构&#xff0c;它就像一排连续的小房子&#xff0c;每个房子里都住着一个数据元素。这些房子是按顺序排列的&#xff0c;每个房子都有一个门牌号&#xff08;下标&#xff09;&#xff0c;我们可以通过门牌号快速找到对应…...

微信云开发小程序音频播放踩坑记录 - 从熄屏播放到iOS静音

在开发小程序冥想功能时,我们遇到了几个棘手的问题:用户反馈手机熄屏后音频停止、iOS设备播放没声音、冥想音频没有访问计数和CDN缓存优化等。本文将分享这些问题的解决过程和实践经验。 微信小程序简称&#xff1a;Moodo 微信小程序全程&#xff1a;AIMoodo心情日记系统 简…...

Python基础

https://www.w3schools.com/https://docs.python.org/3/ Python 介绍 Python是跨平台的&#xff0c;它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序&#xff0c;放到Linux上也是能够运行的。 要开始学习Python编程&#xff0c;首先就得把Python安装…...

基于Go语言 XTA AI聊天界面实现

项目开源地址: XTA-AI-SDK 人工智能技术的迅速发展&#xff0c;AI聊天应用变得越来越流行。本文将介绍如何使用Go语言和LCL库&#xff08; Lazarus Component Library&#xff09;创建一个功能丰富的AI聊天界面。项目主要包含以下模块&#xff1a; 项目背景 本项目旨在为开发…...

线上项目报错OOM常见原因、排查方式、解决方案

概述 OutOfMemoryError&#xff08;OOM&#xff09;是 Java 应用程序中常见的问题&#xff0c;通常是由于应用程序占用的内存超过了 JVM 分配的最大内存限制。在 Spring Boot 项目中&#xff0c;OOM 问题可能由多种原因引起。 1. OOM 的常见原因 OOM 通常由以下几种情况引起&…...

AI大模型零基础学习(6):多模态大模型实战——让AI看懂世界

从“文字交互”到“全感官认知”的维度突破 一、多模态大模型&#xff1a;AI的“五感觉醒” 1.1 基础概念重塑 单模态局限&#xff1a;传统大模型仅处理文本&#xff08;如ChatGPT&#xff09; 多模态进化&#xff1a; 输入&#xff1a;支持文本、图像、音频、视频、3D模型 …...

基于Spring Boot+Vue的宠物服务管理系统(源码+文档)

项目简介 宠物服务管理系统实现了以下功能&#xff1a; 基于Spring BootVue的宠物服务管理系统的主要使用者分为用户管理模块&#xff0c;由于系统运行在互联网络中&#xff0c;一些游客或者病毒恶意进行注册&#xff0c;产生大量的垃圾用户信息&#xff0c;管理员可以对这些…...

简要分析LeetCode树经典题目(Java)

目录 开场白 实战环节 准备工作 遍历问题 LeetCode144. 二叉树的前序遍历 方法一 方法二 LeetCode94. 二叉树的中序遍历 LeetCode145. 二叉树的后序遍历 方法一 方法二 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 LeetCode107. 二叉树的…...

vue3开发打年兽功能

1.效果 WeChat_20250217192041 2.代码 2.1 index.vue <template><div class"pages"><TopNavigationYleftTitle"打年兽"ruleIconColor"#fff"backgroundImage""svgIpcn"backIcon4"gradientBackgroundColor&q…...

动手学Agent——Day2

文章目录 一、用 Llama-index 创建 Agent1. 测试模型2. 自定义一个接口类3. 使用 ReActAgent & FunctionTool 构建 Agent 二、数据库对话 Agent1. SQLite 数据库1.1 创建数据库 & 连接1.2 创建、插入、查询、更新、删除数据1.3 关闭连接建立数据库 2. ollama3. 配置对话…...

如何在 GitHub 中创建一个空目录 ?

GitHub 是开发人员必不可少的工具&#xff0c;它提供了存储、共享和协作代码的平台。一个常见的问题是如何在 GitHub 存储库中创建一个空目录或文件夹。GitHub 不支持直接创建空目录。但是&#xff0c;有一种解决方法是使用一个虚拟文件&#xff0c;通常是一个 .gitkeep 文件。…...

3. 导入官方dashboard

官方dashboard&#xff1a;https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注&#xff1a;有网络的情况想可以使用ID&#xff0c;无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…...

前端知识速记--HTML篇:HTML5的新特性

前端知识速记–HTML篇&#xff1a;HTML5的新特性 一、语义化标签 HTML5引入了许多新的语义化标签&#xff0c;如 <header>、<footer>、<article>、<section> 等。这些标签不仅提高了网页的可读性和结构性&#xff0c;还有助于SEO&#xff08;搜索引擎…...

【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全球气象站…...

鸿蒙面试题

1.0penHarmony的系统架构是怎样的? 2.电话服务的框架? 3.OpenHarmony与HarmonyOS有啥区别?...

pdf-extract-kit paddle paddleocr pdf2markdown.py(效果不佳)

GitHub - opendatalab/PDF-Extract-Kit: A Comprehensive Toolkit for High-Quality PDF Content Extraction https://github.com/opendatalab/PDF-Extract-Kit pdf2markdown.py 运行遇到的问题&#xff1a; 错误&#xff1a; -------------------------------------- C Tra…...

基于STM32、HAL库、RX8025T(I2C接口)驱动程序设计

一、简介: RX8025T 是一款低功耗、高精度的实时时钟芯片,具有以下特性: I2C 接口通信 内置 32.768 kHz 晶振 提供秒、分、时、日、月、年等时间信息 支持温度补偿,提高时间精度 低功耗设计,适合电池供电的应用 二、I2C初始化: #include "stm32l4xx_hal.h&…...

基于Ubuntu+vLLM+NVIDIA T4高效部署DeepSeek大模型实战指南

一、 前言&#xff1a;拥抱vLLM与T4显卡的强强联合 在探索人工智能的道路上&#xff0c;如何高效地部署和运行大型语言模型&#xff08;LLMs&#xff09;一直是一个核心挑战。尤其是当我们面对资源有限的环境时&#xff0c;这个问题变得更加突出。原始的DeepSeek-R1-32B模型虽…...

【Go语言快速上手】第二部分:Go语言进阶之并发编程

文章目录 一、并发编程1. goroutine&#xff1a;创建和调度 goroutine2. channel&#xff1a;无缓冲 channel、有缓冲 channel、select 语句2.1 无缓冲 channel2.2 有缓冲 channel2.3 select 语句 3. sync 包&#xff1a;Mutex、RWMutex、WaitGroup 等同步原语3.1 Mutex&#x…...

《机器学习数学基础》补充资料:四元数、点积和叉积

《机器学习数学基础》第1章1.4节介绍了内积、点积的有关概念&#xff0c;特别辨析了内积空间、欧几里得空间&#xff1b;第4章4.1.1节介绍了叉积的有关概念&#xff1b;4.1.2节介绍了张量积&#xff08;也称外积&#xff09;的概念。 以上这些内容&#xff0c;在不同资料中&…...

蓝桥杯篇---IAP15F2K61S2矩阵键盘

文章目录 前言简介矩阵键盘的工作原理1.行扫描2.检测列状态3.按键识别 硬件连接1.行线2.列线 矩阵键盘使用步骤1.初始化IO口2.扫描键盘3.消抖处理4.按键识别 示例代码&#xff1a;4x4矩阵键盘扫描示例代码&#xff1a;优化后的矩阵键盘扫描注意事项1.消抖处理2.扫描频率3.IO口配…...

通过小型语言模型尽可能简单地解释 Transformer

介绍 在过去的几年里&#xff0c;我阅读了无数关于 Transformer 网络的文章&#xff0c;观看了许多视频。其中大部分都非常好&#xff0c;但我很难理解 Transformer 架构&#xff0c;而其背后的主要直觉&#xff08;上下文敏感嵌入&#xff09;则更容易掌握。在做演讲时&#…...

GcExcel

GcExcel 简述:GcExcel Java 是一款基于 Java 平台,支持批量创建、编辑、打印、导入/导出Excel文件的服务端表格组件,能够高性能处理和高度兼容 Excel。功能特性(图1)文档查询(图2)...

封装红黑树实现map和set

" 喜欢了你十年&#xff0c;却用整个四月&#xff0c;编织了一个不爱你的谎言。 " 目录 1 源码及其框架分析 2 模拟实现map和set 2.1 实现出复用红黑树的框架 2.2 支持iterator迭代器的实现 2.2.1 代码实现和--这两个运算符 2.3 map支持[ ] Hello&#xff0c;大家…...

Redis进阶使用

在日常工作中&#xff0c;使用Redis有什么需要注意的&#xff1f; 设置合适的过期时间。尽量避免大key问题&#xff0c;避免用字符串存储过大的数据&#xff1b;避免集合的数据量太大&#xff0c;要定期清除。 常用的数据结构有哪些&#xff1f;用在什么地方&#xff1f; 按…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第四节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;Read DTC Information0x19服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年2月13日 关键词&#xff1a;UDS诊断协议、0x19服务、DTC信息读取、ISO 14229-1:2023、ECU测试 一、服务功能…...

使用Node.js进行串口通信

目录 一、 安装 serialport 库二.、实现方法1.打开串口并配置参数2. 向串口传递信息3. 接收串口信息4. 处理错误5. 关闭串口6. 使用解析器7. 获取串口列表 三、 完整示例代码 一、 安装 serialport 库 首先&#xff0c;需要安装 serialport 库。可以通过 npm 安装&#xff1a;…...

vue3+elementplus新建项目

更新node.js和npm node.js官网更新指南 可以根据自己的操作系统进行选择 我的电脑操作系统是mac os所以我的步骤如下 # Download and install nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash# in lieu of restarting the shell \. &…...

【网络安全 | 漏洞挖掘】跨子域账户合并导致的账户劫持与删除

未经许可,不得转载。 文章目录 概述正文漏洞成因概述 在对目标系统进行安全测试时,发现其运行着两个独立的域名——一个用于司机用户,一个用于开发者/企业用户。表面上看,这两个域名各自独立管理账户,但测试表明它们在处理电子邮件变更时存在严重的逻辑漏洞。该漏洞允许攻…...

VLSM基础知识

VLSM&#xff08;Variable Length Subnet Mask&#xff0c;变长子网掩码&#xff09;是一种更灵活的子网划分技术&#xff0c;允许在同一网络中使用不同长度的子网掩码&#xff0c;以满足不同子网对主机数量的需求&#xff0c;最大化IP地址利用率。 一、基础概念 传统子网划分…...

小小小病毒(3)(~_~|)

一分耕耘一分收获 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 欢迎来到小小小病毒&#xff08;3&#xff09; 感谢大家的支持 还是那句话&#xff1a;上代码&#xff01; …...

WebRTC与EasyRTC:开启智能硬件音视频通讯的全新旅程

在当今数字化时代&#xff0c;音视频通讯技术正以前所未有的速度革新着我们的生活与工作方式。WebRTC与EasyRTC作为这一领域的佼佼者&#xff0c;正携手为智能硬件的音视频通讯注入强大动力&#xff0c;开启全新的篇章。 一、WebRTC与智能硬件融合的崭新趋势 WebRTC技术&…...

Lua 数据库访问

Lua 数据库访问 引言 Lua 是一种轻量级的编程语言,因其简洁性和高效性,常被用于游戏开发、嵌入系统和应用程序开发。在许多情况下,数据库访问是应用程序的核心功能之一。本文将深入探讨在 Lua 中如何进行数据库访问,包括连接数据库、执行查询、处理结果以及异常处理等。 …...

rtsp rtmp 跟 http 区别

SDP 一SDP介绍 1. SDP的核心功能 会话描述&#xff1a;定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商&#xff1a;明确媒体流的类型&#xff08;如音频、视频&#xff09;、传输协议&#xff08;如RTP/UDP&#xff09;、编码格式&#xff08;如H.264、Op…...

蓝桥杯篇---IAP15F2K61S2串口

文章目录 前言简介串口通信的基本参数1.波特率2.数据位3.停止位4.校验位 串口相关寄存器1.SCON2.SBUF3.PCON4.TMOD5.TH1/TL1 串口使用步骤1.配置波特率2.配置串口模式3.使能串口中断4.发送数据5.接收数据6.处理中断 示例代码&#xff1a;串口发送与接收示例代码&#xff1a;串口…...

Linux 远程文件复制传输-----scp/rsync/sftp

scp&#xff08;Secure Copy Protocol&#xff09;是基于 SSH 的安全文件传输工具&#xff0c;可用于在本地和远程计算机之间复制文件或目录。 1. scp&#xff08;基于 SSH 复制文件&#xff09; a. 复制文件到远程 从本地复制到远程 scp localfile.txt userremote_host:/remo…...

企业文件安全:零信任架构下的文件访问控制

在企业数字化转型的进程中&#xff0c;传统的文件访问控制模型已难以满足日益复杂的网络安全需求。零信任架构作为一种新兴的安全理念&#xff0c;为企业的文件安全访问提供了全新的解决方案。 一、传统文件访问控制的局限性 传统的文件访问控制主要基于网络边界&#xff0c;…...

用deepseek学大模型05-线性回归

deepseek.com:多元线性回归的目标函数&#xff0c;损失函数&#xff0c;梯度下降 标量和矩阵形式的数学推导&#xff0c;pytorch真实能跑的代码案例以及模型,数据&#xff0c;预测结果的可视化展示&#xff0c; 模型应用场景和优缺点&#xff0c;及如何改进解决及改进方法数据推…...

2009年下半年软件设计师上午真题的知识点整理(附真题及答案解析)

以下是2009年下半年软件设计师上午真题的知识点分类整理&#xff0c;涉及定义的详细解释&#xff0c;供背诵记忆。 1. 计算机组成原理 CPU与存储器的访问。 Cache的作用: 提高CPU访问主存数据的速度&#xff0c;减少访问延迟。存储器的层次结构: 包括寄存器、Cache、主存和辅存…...

Element Plus table 去除行hover效果

需求&#xff1a; 给table的指定行设置高亮背景色且去除掉这些行的hover效果 思路&#xff1a; 给指定行设置css类名选择需要设置高亮的行的单元格&#xff0c;设置鼠标禁用属性让高亮行继承父元素的背景色 考虑到表格的第一列是勾选框&#xff0c;因此仅选择 tr 下除了第一…...