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

车载以太网---数据链路层

        在上一章节中,我们讲解了数据链路层与物理层的接口MIIM,在本章中我们主要介绍车载网络中的数据链路层。

目录

数据链路层与网络层的区别

数据链路层:负责“同一链路”或“局域网/子网”内的可靠传输

传输范围:

主要功能:

通路的确定:

网络层(IP):负责整个网络范围(可能跨多个子网/链路)的寻址与路由

传输范围:

主要功能:

通路的确定:

数据链路层的主要功能

        1. 封装与解封装

        2.介质访问控制

        3. 差错检测与处理

        4. 与物理层交互

        5. 对上层的抽象与屏蔽

ARP协议

ARP协议在局域网内没有找到目标IP怎么办?

1. 目标 IP 不在同一个子网、需要通过网关(路由)转发

2. 目标 IP 在本地子网,但无人应答

3. 后续处理或错误信息

通路建立流程


        在传统的 IEEE 802 体系中,数据链路层被进一步拆分成了两层:

  • LLC(Logical Link Control,逻辑链路控制子层)
  • MAC(Media Access Control,介质访问控制子层)

     但是截止到目前,很多厂商可能可能只有MAC协议。这是因为在实践中,LLC 子层对于许多已经成熟的局域网(尤其是以太网)来说,常常已经被“弱化”或“合并”到 MAC 中去,或者直接由 上层协议栈(TCP/IP)来处理逻辑链路方面的控制和复用。对于车载网络而言,厂商通常更关注 底层总线访问、帧格式、仲裁、错误检测 等 MAC 级别的功能,而对 LLC 层的需求不大,或者说直接由其他高层协议代替了 LLC 的功能。至于 LLC 子层,大多厂商直接让 IP 层(OSI 第三层)去对接 MAC 报文,或者使用 VLAN/QoS 等扩展,实际上并不额外区分 LLC。

数据链路层与网络层的区别

        在 OSI 模型中,数据链路层网络层(IP 层) 都是把数据“送到对面”,但它们关注的 范围实现方式 不同,层次职责 也不同。

数据链路层:负责“同一链路”或“局域网/子网”内的可靠传输

  • 传输范围

    • 主要在 同一个物理链路同一个局域网(同一个子网/广播域) 内工作。
    • 典型场景:以太网交换机的某个端口到主机之间,或者共享介质上的多台主机之间(Wi-Fi、CAN总线等)。
  • 主要功能

    • 帧的封装/解封装(添加 MAC 地址、CRC 校验等)。
    • 介质访问控制(MAC)和错误检测纠正。
    • 确保在本链路里,数据能正确发送到目标MAC地址的设备上。
  • 通路的确定

    • 数据链路层不需要考虑跨越多个网络的转发和路由;
    • 只要“下一跳”或者“同网段”的设备能收到帧,就完成了它的使命。

换句话说,数据链路层 关注的是:“在同一个物理/局域链路上,A 怎么把数据帧送到 B”。如果要跨越多个路由器,数据链路层只负责“到下一跳”的那一段。

推理 持续 一秒

在 OSI 模型中,数据链路层网络层(IP 层) 确实都是把数据“送到对面”,但它们关注的 范围实现方式 不同,层次职责 也不同。一个简要的对比是:

网络层(IP):负责整个网络范围(可能跨多个子网/链路)的寻址与路由

  • 传输范围

    • 面向 整个互联网或更大范围 的网间互联;可以跨越多个局域网、路由器、运营商网络等。
  • 主要功能

    • 逻辑寻址(IP地址):给每个主机或网络接口分配全球唯一或私有的 IP 地址,方便路由转发。
    • 路由选择:根据路由表、路由协议决定 “下一跳”(要发给哪一个路由器或设备),直到数据包抵达目标 IP 所在子网。
    • 分片与重组(若链路层 MTU 不足时,IP 可做分片)。
  • 通路的确定

    • IP 协议层面会选出一条可能跨多个路由器/子网的路径,让包最终到达目标 IP;
    • 在每一跳内部,则调用数据链路层把包封装成帧,发送给下一跳设备。

也就是说,网络层 关注的是:“我在全网范围内,如何选择路由,把数据包一跳一跳地传到目的 IP 地址所在的网络”。每一跳之间再由数据链路层去完成“具体链路/局域网内”的传送。

数据链路层的主要功能

        在 OSI 七层模型 中,数据链路层(第2层)主要负责把来自网络层的 分组(packet) 再次包装(封装)为 帧(frame),并通过底层 物理层 发送到目标主机。它有以下关键职责:

        1. 封装与解封装

        从网络层(IP 层)接收 IP 包,在它前面加上 MAC 帧头(源 MAC、目的 MAC、Type/Length 等),并在帧末尾附加 CRC/FCS 校验,形成 以太网帧。在接收方向,去掉 MAC 帧头和 CRC,然后把还原后的 IP 包提交给网络层。详细的帧讲解可以移步这位博主的博客:https://blog.csdn.net/chendemingxxx/article/details/143323667

        2.介质访问控制

        数据链路层负责 控制 同一物理介质上 多个节点 的访问。在 无线网络车载总线 等场景,各种 仲裁、时隙分配、优先级 策略也属于数据链路层范畴。

        3. 差错检测与处理

        帧头或帧尾附带 CRC(循环冗余校验)或 FCS(帧检验序列),用来检测传输过程中可能出现的比特差错。出现校验错误时,通常 丢弃 该帧,并由上层(如 TCP)或链路层重传(某些协议提供)来保证可靠性。

        4. 与物理层交互

        数据链路层将成帧后的数据 送入物理层 进行实际信号发送,也从物理层接收比特流并组装成帧。不同物理介质(双绞线、光纤、无线)会对帧的 传输速率、调制方式、带宽 等有不同要求,数据链路层要与物理层相互适配。与此同时他还屏蔽不同物理媒介的实现差异,对上层而言提供 统一的“发送帧/接收帧” 功能。有兴趣的可以看看上一章

        5. 对上层的抽象与屏蔽

        上层(网络层)只需要知道如何处理 IP 分组,不必关心具体链路是 以太网无线局域网CAN 总线 还是 其它协议。数据链路层统一为网络层提供了 “发送/接收分组” 的接口,把底层介质访问与设备寻址、错误校验等复杂度都 封装 起来。

ARP协议

在局域网中,ARP(Address Resolution Protocol) 的工作原理是:

  1. 主机要向目标IP发送数据,先检查是否在本地子网内(根据子网掩码等判断)。
  2. 如果目标IP在同一个子网,则主机会 ARP广播 询问 “谁是 目标IP,请告诉我你的MAC地址。”
  3. 如果目标主机在网内并且在线,就会以单播方式回应自己的MAC地址。
  4. 如果长时间无人应答(因为目标IP确实不在网内、或主机离线等),则 ARP 请求 最终 超时;主机获取不到目标的MAC地址,发送 IP 分组也随之 失败

ARP协议在局域网内没有找到目标IP怎么办?

1. 目标 IP 不在同一个子网、需要通过网关(路由)转发

        如果 目标IP 不在本地子网,本机会根据 路由表 决定是否将数据发送给 默认网关(Default Gateway)。此时:

  1. 主机会去 ARP 解析 默认网关的 IP → MAC,得到网关的 MAC 地址。
  2. 把目标IP包封装到以太网帧(或其他二层帧)中,目的 MAC 填写的是 网关的 MAC
  3. 网关接收到帧后,再根据路由表进行进一步转发。

所以,如果目标 IP 不在本地子网范围,主机并不会直接 ARP 目标IP,而是 ARP 网关IP。只要网关IP可以解析到MAC地址(网关在线),即便目标IP不在本地,也能通过网关进行转发(至其他网络)。

2. 目标 IP 在本地子网,但无人应答

        若 目标 IP 确实在 同一子网,主机就会 ARP广播 目标IP请求。但如果对方设备不在线、或根本不存在这个IP:

  1. ARP 请求 发送后得不到任何应答。
  2. 操作系统会 重试 若干次,超过一定次数/时间后,ARP 请求超时。
  3. 主机在 IP 层会得到一个“不可达”或“ARP 超时”的结果,进而报错给应用程序或上层协议(如可能返回 host unreachable)。

这种情况下,ARP 表中永远没有记录下这条 IP→MAC 映射,后续网络层对这个目标的发送也都会失败。

3. 后续处理或错误信息

  • 当 ARP 请求失败,主机往往会在应用层或传输层产生错误,例如 ICMP “Destination Host Unreachable” 或者底层返回“ARP 超时”等。
  • 具体行为由操作系统网络栈和路由配置决定。通常你在 ping 一个不存在的 IP 时,过一段时间就会看到 “Request timed out”“Destination Host Unreachable”

通路建立流程

        当客户端想连接到某个远程服务器(例如 IP= 10.0.0.2, 端口=80)时,首先由操作系统检查 目标 IP 是否和自己位于同一子网:

  • 如果在同一子网,则会 ARP 查询该 目标 IP 的 MAC 地址;
  • 如果不在同一子网,则根据 路由表 选择下一跳(一般是 默认网关),对 网关的 IP 进行 ARP,获取 网关 MAC。随后,客户端将 TCP 数据(带有 SYN 标志) 封装进 IP 包,并用 数据链路层帧头 标明“目的 MAC=网关的 MAC”(若跨网)或“目的 MAC=目标主机”,然后通过物理层送出。

当数据包(含 SYN)到达下一跳(例如网关)后,网关会根据其 路由表 判断下一跳是谁、ARP 获取下一跳 MAC 地址、重新封装成新的帧,再转发出去。经过若干路由器/交换机,最终 目标服务器 收到该 IP 包,解析出其中的 TCP SYN。

服务器看见客户端要建立连接(SYN),随即发回一个 SYN+ACK 报文:此时服务器同样需要检查路由表,若客户端 IP 不在本地网,就将 SYN+ACK 发给其网关,再逐跳转发回到客户端。客户端收到后再发送最终的 ACK。这一来一回完成 TCP 三次握手,至此双方的 TCP 连接在逻辑上正式建立。

有了这个连接后,客户端与服务器后续的数据交换(如 HTTP 请求与响应)就可以基于此 TCP 连接 进行;在链路层,依旧会不断根据 下一跳 MAC 来封装帧、发送物理信号,但对于应用程序而言,这些底层过程被操作系统和网络设备透明地处理了。

相关文章:

车载以太网---数据链路层

在上一章节中,我们讲解了数据链路层与物理层的接口MIIM,在本章中我们主要介绍车载网络中的数据链路层。 目录 数据链路层与网络层的区别 数据链路层:负责“同一链路”或“局域网/子网”内的可靠传输 传输范围: 主要功能: 通路…...

文本复制兼容方案最佳实现落地。

文章目录 一、navigator.clipboard.writeText二、方案落地总结 一、navigator.clipboard.writeText navigator.clipboard.writeText 是一个Web API,它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的,并且设计用于提高安全性和用户体验&a…...

ArkTS高性能编程实践

文章目录 概述声明与表达式函数数组异常 概述 本文主要提供应用性能敏感场景下的高性能编程的相关建议,助力开发者开发出高性能的应用。高性能编程实践,是在开发过程中逐步总结出来的一些高性能的写法和建议,在业务功能实现过程中&#xff0…...

阿里新发的大模型Qwen2.5-max如何?

阿里新发布的大模型Qwen2.5-Max是一款性能卓越、技术先进的大型语言模型,其在多个方面展现了突出的表现。以下是基于我搜索到的资料对Qwen2.5-Max的详细评价: 技术特点 超大规模预训练数据:Qwen2.5-Max采用了超过20万亿tokens的超大规模预训…...

吴晓波 历代经济变革得失@简明“中国经济史” - 读书笔记

目录 《历代经济变革得失》读书笔记一、核心观点二、主要内容(一)导论(二)春秋战国时期(三)汉代(四)北宋(五)明清时期(六)近现代&…...

SQL GROUP BY 详解

SQL GROUP BY 详解 引言 在数据库查询中,GROUP BY 子句是一个非常有用的工具,它允许我们对查询结果进行分组,并基于这些分组进行聚合计算。本文将详细介绍 GROUP BY 的用法、注意事项以及在实际应用中的场景。 什么是 GROUP BY? GROUP BY 子句用于对查询结果进行分组。…...

走向基于大语言模型的新一代推荐系统:综述与展望

HightLight 论文题目:Towards Next-Generation LLM-based Recommender Systems: A Survey and Beyond作者机构:吉林大学、香港理工大学、悉尼科技大学、Meta AI论文地址: https://arxiv.org/abs/2410.1974 基于大语言模型的下一代推荐系统&…...

6 Flink 状态管理

6 Flink 状态管理 1. State-Keyed State2. State-Operator State3. Broadcast State 我们前面写的 wordcount 的例子,没有包含状态管理。如果一个task在处理过程中挂掉了,那么它在内存中的状态都会丢失,所有的数据都需要重新计算。从容错和消…...

第1章 量子暗网中的血色黎明

月球暗面的危机与阴谋 量子隧穿效应催生的幽蓝电弧,于环形山表面肆意跳跃,仿若无数奋力挣扎的机械蠕虫,将月球暗面的死寂打破,徒增几分诡异。艾丽伫立在被遗弃的“广寒宫”量子基站顶端,机械义眼之中,倒映着…...

爬虫基础(六)代理简述

目录 一、什么是代理 二、基本原理 三、代理分类 一、什么是代理 爬虫一般是自动化的,当我们自动运行时 爬虫自动抓取数据,但一会就出现了错误: 如,您的访问频率过高! 这是因为网站的反爬措施,如果频…...

前端 Vue 性能提升策略

一、引言 前端性能优化是确保 Web 应用快速响应和流畅用户体验的关键。对于使用 Vue.js 构建的应用,性能优化不仅涉及通用的前端技术,还包括针对 Vue 特性的特定优化措施。本文将从多个方面探讨如何全面提升前端和 Vue 应用的性能。 二、前端性能优化基础 1. 减少初始加载…...

MCU内部ADC模块误差如何校准

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、ADC误差校准引言 MCU 片内 ADC 模块的误差总包括了 5 个静态参数 (静态失调,增益误差,微分非线性…...

Spring MVC消息转换器

在Spring MVC框架中,extendMessageConverters 通常与消息转换器(Message Converters)相关。消息转换器是Spring MVC用于将HTTP请求和响应主体(body)转换为Java对象和字符串的组件。它们在处理不同的媒体类型&#xff0…...

手写防抖函数、手写节流函数

文章目录 1 手写防抖函数2 手写节流函数 1 手写防抖函数 函数防抖是指在事件被触发n秒后再执行回调,如果在这n秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。 function debou…...

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.4.1. Drop trait的意义 类型如果实现了Drop trait,就可以让程序员自定义当值离开作用域时发生的操作。例如文件、网络资源…...

【Block总结】CPCA,通道优先卷积注意力|即插即用

论文信息 标题: Channel Prior Convolutional Attention for Medical Image Segmentation 论文链接: arxiv.org 代码链接: GitHub 创新点 本文提出了一种新的通道优先卷积注意力(CPCA)机制,旨在解决医学图像分割中存在的低对比度和显著…...

信息学奥赛一本通 1607:【 例 2】任务安排 2 | 洛谷 P10979 任务安排 2

【题目链接】 ybt 1607:【 例 2】任务安排 2 洛谷 P10979 任务安排 2 注:ybt1607中n最大达到 1 0 4 10^4 104,洛谷P10979中n最大达到 3 ∗ 1 0 5 3*10^5 3∗105,本题解统一认为n最大达到 3 ∗ 1 0 5 3*10^5 3∗105。 【题目考点…...

AI(计算机视觉)自学路线

本文仅用来记录一下自学路线方便日后复习,如果对你自学有帮助的话也很开心o(* ̄▽ ̄*)ブ B站吴恩达机器学习->B站小土堆pytorch基础学习->opencv相关知识(Halcon或者opencv库)->四类神经网络(这里跟…...

OFDM系统仿真

1️⃣ OFDM的原理 1.1 介绍 OFDM是一种多载波调制技术,将输入数据分配到多个子载波上,每个子载波上可以独立使用 QAM、PSK 等传统调制技术进行调制。这些子载波之间互相正交,从而可以有效利用频谱并减少干扰。 1.2 OFDM的核心 多载波调制…...

torch numpy seed使用方法

1 import numpy as np np.random.seed(500) np.random.rand(5)array([0.69367953, 0.06171699, 0.6666116 , 0.55920894, 0.08511062])import torch torch.manual_seed(500) torch.rand(5)为了能够复现数据,我们可以使用seed 来控制生成的随机数。设置seed数据来设…...

【Go语言圣经】第四节:复合数据类型

第四章:复合数据类型 本节主要讨论四种类型——数组、slice、map和结构体。 数组和结构体都是有固定内存大小的数据结构。相比之下,slice 和 map 则是动态的数据结构,它们可以根据需要动态增长。 4.1 数组 数组是一个定长的由特定类型元素…...

【Vite + Vue + Ts 项目三个 tsconfig 文件】

Vite Vue Ts 项目三个 tsconfig 文件 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件?首先我们先了解什么是 tsconfig.json ? 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件? 在使用 Vite 创建 vue-ts 模板的项目时,会发现除了 ts…...

论文和代码解读:RF-Inversion 图像/视频编辑技术

Diffusion Models专栏文章汇总:入门与实战 前言:Rectified Flow的反演和DDIM这些不太一样,上一篇博客中介绍了腾讯提出的一种方法《基于Rectified Flow FLUX的图像编辑方法 RF-Solver》,主要就是用泰勒展开和一阶导数近似来分解反演公式。这篇博客介绍谷歌提出的方法RF-Inv…...

完美还是完成?把握好度,辨证看待

完美还是完成? 如果说之前这个答案有争议,那么现在,答案毋庸置疑 ■为什么完美大于完成 ●时间成本: 做事不仅要考虑结果,还要考虑时间和精力,要说十年磨一剑的确质量更好,但是现实没有那么多…...

Many Whelps! Handle It! (10 player) Many Whelps! Handle It! (25 player)

http://db.nfuwow.com/80/?achievement4403 http://db.nfuwow.com/80/?achievement4406 最少扣你50DKP! 第二阶段 当奥妮克希亚升空后,在10秒内引出50只奥妮克希亚雏龙,随后击败奥妮克希亚。 World of Warcraft [CLASSIC][80猎人][Grandel][最少扣你5…...

3.4 Go函数作用域(标识符)

只有精准分析每个标识符的作用域范围,才能编写出优质、健壮的代码,避免逻辑错误的发生。 作用域标识符 简单来说,作用域指的是标识符可以起作用的范围,即其可见范围。将标识符的可见性限制在一定范围内,这个范围就是…...

【React】PureComponent 和 Component 的区别

前言 在 React 中,PureComponent 和 Component 都是用于创建组件的基类,但它们有一个主要的区别:PureComponent 会给类组件默认加一个shouldComponentUpdate周期函数。在此周期函数中,它对props 和 state (新老的属性/状态)会做一…...

MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)

使用 mongosh cd mongsh_bin_path mongosh “mongodb://user:passip:port/db”这样就直接进入了对应的db 直接输入: 这样 role “read_only_role" 就获得了3个 action, 分别是 查询,列举集合,集合元数据查询 P.S: 如果没有 …...

fastadmin中require-form.js的data-favisible控制显示隐藏

只要在任意元素上添加data-favisible属性就可以轻松的控制显示隐藏了 其中reportype是php传到前端的一个变量??? <div class"form-group" data-favisible"reportype6"><label class"control-label col-xs-12 col-sm-2">{:__(Ove_…...

Day51:type()函数

在 Python 中&#xff0c;type() 是一个内置函数&#xff0c;用于返回对象的类型。它可以用于检查变量的类型&#xff0c;也可以用于动态创建新的类型。今天&#xff0c;我们将深入了解 type() 函数的使用方法。 1. 使用 type() 获取变量的类型 最常见的使用方式是将一个对象…...