当前位置: 首页 > 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 来封装帧、发送物理信号,但对于应用程序而言,这些底层过程被操作系统和网络设备透明地处理了。


http://www.kler.cn/a/528700.html

相关文章:

  • 14-9-1C++STL的set容器
  • Qt常用控件 输入类控件
  • 【VM】VirtualBox安装CentOS8虚拟机
  • 新鲜速递:DeepSeek-R1开源大模型本地部署实战—Ollama + MaxKB 搭建RAG检索增强生成应用
  • 【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理
  • SQLAlchemy 2.0的简单使用教程
  • Spark SQL读写Hive Table部署
  • SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言
  • 10:预处理
  • C++,vector:动态数组的原理、使用与极致优化
  • 回溯算法理论基础
  • 递归练习七(floodfill 算法)
  • C#属性和字段(访问修饰符)
  • 代码随想录-训练营-day17
  • 自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)
  • 代码随想录算法训练营第四十二天-动态规划-股票-188.买卖股票的最佳时机IV
  • JVM运行时数据区域-附面试题
  • 笔记:同步电机调试时电角度校正方法说明
  • Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
  • 《逆向工程核心原理》第三~五章知识整理
  • MATLAB实现多种群遗传算法
  • SQLAlchemy通用分页函数实现:支持搜索、排序和动态页码导航
  • 可视化相机pose colmap形式的相机内参外参
  • MySQL各种日志详解
  • 32.Word:巧克力知识宣传【32】
  • 基于STM32的电动窗帘控制器