【LInux网络】数据链路层 - 深度理解以太网和APR协议

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、认识以太网
    • 1.1 以太网帧格式
    • 1.2 认识 MAC 地址
    • 1.3 对比理解 MAC 地址和 IP 地址
    • 1.4 认识 MTU
    • 1.5 MTU 对 IP 协议的影响
    • 1.6 MTU 对 UDP 协议的影响
    • 1.7 MTU 对于 TCP 协议的影响
    • 1.8 查看硬件地址和 MTU
  • 🏳️‍🌈二、ARP 协议
    • 2.1 ARP 协议的作用
    • 2.2 ARP 协议的工作流程
      • 2.2.1 查询ARP缓存
      • 2.2.2 发送ARP请求
      • 2.2.3 接收并处理ARP请求
      • 2.2.4 发送ARP响应
      • 2.2.5 接收并处理ARP响应
      • 2.2.6 数据传输
      • 2.2.7 ARP缓存的更新和管理
    • 2.3 ARP 数据报的格式
  • 👥总结


11111111
11111111
11111111
11111111
**** 11111111

数据链路层

用于两个设备(同一种数据链路节点)之间进行传递.

🏳️‍🌈一、认识以太网

  • 以太网不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有 10M, 100M, 1000M 等;
  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN 等;

1.1 以太网帧格式

以太网的帧格式如下所示:
在这里插入图片描述

  • 源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址), 长度是 48 位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应 IPARPRARP;
  • 帧末尾CRC 校验码。

1.2 认识 MAC 地址

  • MAC 地址用来识别数据链路层中相连的节点;
  • 长度为 48 位, 长 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的
  • 虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址

1.3 对比理解 MAC 地址和 IP 地址

  • IP 地址描述的是路途总体的 起点 和 终点;
  • MAC 地址描述的是路途上的每一个区间的起点和终点;

在这里插入图片描述

1.4 认识 MTU

  • MTU 相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.
  • 以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,,ARP 数据包的长度不够 46 字节,要在后面补填充位;
  • 最大值 1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层标准的 MTU 是不同的;

1.5 MTU 对 IP 协议的影响

由于数据链路层 MTU 的限制, 对于较大的 IP 数据包要进行分包.

  • 将较大的 IP 包分成多个小包, 并给每个小包打上标签(分包和加标签);
  • 每个小包 IP 协议头的 16 位标识(id) 都是相同的(标签原则);
  • 每个小包的 IP 协议头的 3 位标志字段中, 第 2 位置为 0, 表示允许分片, 第 3 位来表示结束标记(当前是否是最后一个小包, 是的话置为 1, 否则置为 0)(标签原则);
  • 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层(合并小包);
  • 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是 IP 层不会负责重新传输数据;(丢包情况)

在这里插入图片描述

在这里插入图片描述

1.6 MTU 对 UDP 协议的影响

让我们回顾一下 UDP 协议:

  • 一旦 UDP 携带的数据超过 1472(1500 - 20(IP 首部) - 8(UDP 首部)), 那么就会在网络层分成多个 IP 数据报.
  • 这多个 IP 数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果 UDP 数据报在网络层被分片, 整个数据被丢失的概率就大大增加了.

1.7 MTU 对于 TCP 协议的影响

让我们再回顾一下 TCP 协议:

  • TCP 的一个数据报也不能无限大, 还是受制于 MTU. TCP 的单个数据报的最大消息长度, 称为 MSS(Max Segment Size);
  • TCP 在建立连接的过程中, 通信双方会进行 MSS 协商.
  • 最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU).
  • 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值.
  • 然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS.
  • MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2);

MSS 和 MTU 的关系

在这里插入图片描述

1.8 查看硬件地址和 MTU

使用 ifconfig 命令, 即可查看 ip 地址, mac 地址, 和 MTU;

在这里插入图片描述

🏳️‍🌈二、ARP 协议

虽然我们在这里介绍 ARP 协议, 但是需要强调, ARP 不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;

​ARP 请求主要发生在局域网中,用于同一子网内的设备通信

2.1 ARP 协议的作用

在这里插入图片描述

ARP 协议建立了主机 IP 地址MAC 地址 的映射关系.

  • 在网络通讯时,源主机的应用程序知道目的 主机的 IP 地址端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址;

2.2 ARP 协议的工作流程

在这里插入图片描述

在这里插入图片描述

  • 源主机发出 ARP 请求,询问“IP 地址是 192.168.0.1 的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播);
  • 目的主机接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;
  • 每台主机都维护一个 ARP 缓存表,可以用 arp -a 命令查看。缓存表中的表项有过期时间 (一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址

ARP协议具体工作流程:

ARP(地址解析协议)的工作流程是一个用于在同一局域网内根据 IP地址 解析出对应 MAC地址 的过程。

2.2.1 查询ARP缓存

主机A 需要向 主机B 发送数据时,它首先会在自己的ARP缓存中查找是否已经有主机B的IP地址与MAC地址的映射关系。

  • 如果在ARP缓存中找到了主机B的MAC地址,那么主机A会直接使用该MAC地址进行数据封装和发送,跳过后续的ARP请求和响应步骤。
  • 如果在ARP缓存中没有找到主机B的MAC地址,那么主机A会进行下一步的ARP请求

2.2.2 发送ARP请求

主机A构造一个ARP请求报文,该报文包含了以下内容:

  • 源主机IP地址MAC地址(即主机A的IP地址和MAC地址)。
  • 目标主机IP地址(即主机B的IP地址),但目标主机的 MAC 地址字段通常填充为全0,表示未知

然后,主机A会广播 的方式将ARP请求报文发送到本地网络上的所有主机。这个广播报文会被网络上的每一台主机接收到。

2.2.3 接收并处理ARP请求

网络上的 每一台主机 都会检查接收到的ARP请求报文中的 目标IP地址 是否自己的IP地址 匹配

  • 如果不匹配,该主机将丢弃ARP请求报文,不做任何处理。
  • 如果匹配(即该主机是主机B),那么主机B会进行下一步的ARP响应

在响应之前,主机B 还会将ARP请求报文中的源主机的IP地址和MAC地址(即主机A的IP地址和MAC地址)添加到自己的ARP缓存中,以备将来使用。

2.2.4 发送ARP响应

主机B构造一个ARP响应报文,该报文包含了以下内容:

  • 源主机的IP地址和MAC地址(即 主机BIP地址MAC地址)。
  • 目标主机的IP地址和MAC地址(即 主机AIP地址MAC地址,但这里的MAC地址是已知的,因为是从ARP请求报文中获取的)。
  • 然后,主机B 会以 单播 的方式将ARP响应报文发送回主机A。

2.2.5 接收并处理ARP响应

主机A 接收主机B 发送的ARP响应报文后,会从中提取出主机B的MAC地址,并将其添加到自己的ARP缓存中,与主机B的IP地址形成映射关系。

至此,主机A 已经成功获取到了 主机BMAC地址,可以开始进行数据的封装和发送了。

2.2.6 数据传输

一旦获得了目标MAC地址,主机A 就可以将数据封装成帧,并将其发送到网络上。这个帧包含了源MAC地址(主机A的MAC地址)、目标MAC地址(主机B的MAC地址)以及要传输的数据。

2.2.7 ARP缓存的更新和管理

ARP缓存 中的条目通常有一个生存时间(TTL),过期后会被自动删除。这样,当网络拓扑结构发生变化时(例如,主机B的MAC地址发生变化),ARP缓存中的旧条目会被自动清除,新的ARP请求和响应过程会重新进行,以确保数据的正确传输。

此外,ARP缓存还可以手动清除或刷新,以适应网络环境的变化。

综上所述,ARP协议的工作流程是一个动态的过程,它通过ARP请求和响应来解析IP地址与MAC地址的映射关系,从而实现数据的正确传输。

2.3 ARP 数据报的格式

在这里插入图片描述

  • 注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 硬件类型指链路层网络类型,1 为以太网;
  • 协议类型指要转换的地址类型,0x0800 为 IP 地址;
  • 硬件地址长度对于以太网地址为 6 字节;
  • 协议地址长度对于 IP 地址为 4 字节;
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。

👥总结

本篇博文对 【LInux网络】数据链路层 - 深度理解以太网和APR协议 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【零基础入门】ASP.NET Core快速搭建第一个Web应用

一、为什么选择ASP.NET Core? 跨平台支持:可在Windows/macOS/Linux系统运行 高性能:比传统ASP.NET框架快10倍以上 开源生态:活跃的开发者社区和丰富的NuGet包 云原生支持:完美适配Docker和Kubernetes部署 二、开发…

AT2401C与RFX2401C问题处理资料

1、AT2401C 可以 PIN 对 PIN 替代 RFX2401C 吗? 答:AT2401C 可以 PIN 对 PIN 替换 RFX2401C;同时 CB2401 也可以 PIN 对 PIN 替换 RFX2401C;我们主要推 AT2401C 这款芯片,如果客户产 品需要过认证或者应用于音频产品建…

Redis-缓存应用 本地缓存与分布式缓存的深度解析

Redis缓存场景与策略:本地缓存与分布式缓存的深度解析 在当今高并发、低延迟的互联网架构中,缓存技术是优化系统性能的核心手段之一。Redis作为分布式缓存的标杆,与本地缓存共同构成了缓存体系的两大支柱。然而,两者的适用场景与…

LinuxAgent开源程序是一款智能运维助手,通过接入 DeepSeek API 实现对 Linux 终端的自然语言控制,帮助用户更高效地进行系统运维工作

一、软件介绍 文末提供程序和源码下载 LinuxAgent 开源程序是基于LLM大模型的Linux智能运维助手。通过接入DeepSeek API实现对Linux终端的自然语言控制,帮助用户更高效地进行系统运维工作。 二、版本特性对比 特性v1.4.1 1.4.1 版v2.0.3 2.0.3 版v2.0.4 2.0.4…

Shadertoy着色器移植到Three.js经验总结

Shadertoy是一个流行的在线平台,用于创建和分享WebGL片段着色器。里面有很多令人惊叹的画面,甚至3D场景。本人也移植了几个ShaderToy上的着色器。本文将详细介绍移植过程中需要注意的关键点。 1. 基本结构差异 想要移植ShaderToy的shader到three.js&am…

StarRocks SRCA 考试心得总结

文章目录 前言0 什么是StarRcoks?1. 关于 SRCA 考试2. 备考资料与学习方式2.1 官方文档与教程2.2 在线培训课程2.3 实战演练 3. 重点考试内容3.1 StarRocks 架构与原理3.2 数据导入与导出3.3 SQL 查询优化3.4 性能调优 4. 备考建议4.1 多做实操4.2 注重考试中的细节…

什么是 Spring Profiles 以及如何在 Spring Boot 中使用:配置与实践指南

在现代应用开发中,应用程序通常需要在不同环境(如开发、测试、生产)中运行,每个环境可能有不同的配置(如数据库、日志级别、消息队列)。Spring Profiles 是 Spring 框架提供的一项功能,用于根据…

Spring Cloud Gateway限流:基于Redis的请求限流实现

文章目录 引言一、Spring Cloud Gateway限流基础1.1 限流机制概述1.2 Redis分布式限流原理 二、实现基于Redis的限流方案2.1 环境准备与依赖配置2.2 配置限流策略2.3 自定义限流响应 三、高级应用与最佳实践3.1 动态限流规则调整3.2 优先级与降级策略3.3 监控与告警 总结 引言 …

keil修改字体无效,修改字体为“微软雅黑”方法

在网上下载了微软雅黑字体,微软雅黑参考下载链接 结果在Edit->Configuration中找不到这个字体 这个时候可以在keil的安装目录中找到UV4/global.prop文件 用记事本打开它进行编辑,把字体名字改成微软雅黑 重新打开keil就发现字体成功修改了。 这个…

CSS文字特效实例:猜猜我是谁

CSS文字特效实例:猜猜我是谁 引言 在之前的文章中,我们分别实现了空心文字、文字填充、文字模糊、文字裂开等效果。本文将使用一个小实例,组合使用相关特效:当鼠标悬停在图片上时,其余图片模糊,且文字会上…

美团社招一面

美团社招一面 做题 1、面试题 <style> .outer{width: 100px;background: red;height: 100px; }.inner {width: 50px;height: 50px;background: green; }</style> <div class"outer"><div class"inner"></div> </div>…

InitializingBean接口和@PostConstruct-笔记

1. InitializingBean 简介 1.1 功能简介 InitializingBean 是 Spring 框架中的一个接口&#xff0c;用在 Bean 初始化后执行自定义逻辑。它提供了 afterPropertiesSet() 方法&#xff0c;该方法在以下时机被 Spring 容器自动调用&#xff1a; 属性注入完成后&#xff08;即所…

《代码整洁之道》第9章 单元测试 - 笔记

测试驱动开发 (TDD) 是一种编写整洁代码的“规程”或“方法论”&#xff0c;而不仅仅是测试技术。 JaCoCo 在运行测试后生成详细的覆盖率报告的工具&#xff0c; maven 引用。 测试驱动开发 测试驱动开发&#xff08;TDD&#xff09;是什么&#xff1f; TDD 不是说写完代码…

openGauss新特性 | DataKit支持PostgreSQL到openGauss的迁移能力

Postgresql-\>openGauss迁移工具debezium-connector-postgres 可获得性 本特性自openGauss 7.0.0-RC1版本开始引入。 特性简介 debezium-connector-postgres工具是一个基于Java语言的Postgresql到openGauss的复制工具。该工具提供了初始全量数据及对象&#xff08;视图、…

在MySQL Shell里 重启MySQL 8.4实例

前一段时间看到MySQL官方视频的Oracle工程师在mysql shell里面重启mysql实例&#xff0c;感觉这个操作很方便&#xff0c;所以来试试&#xff0c;下面为该工程师的操作截图 1.MySQL Shell 通过root用户连上mysql&#xff0c;shutdown mysql实例 [rootmysql8_3 bin]# mysqlshMy…

truffle

文章目录 truffle目录结构各文件作用在本地测试合约 truffle 项目来自https://github.com/Dapp-Learning-DAO/Dapp-Learning/blob/main/basic/04-web3js-truffle/README-CN.md Truffle 是基于 Solidity 语言的一套开发框架&#xff0c;它简化了去中心化应用&#xff08;Dapp&…

SpringCloud核心组件Eureka菜鸟教程

关于Spring Cloud Eureka的核心概念 Eureka 是 Netflix 开源的一款基于 REST 的服务发现工具&#xff0c;主要用于中间层服务器的云端负载均衡。它通过维护一个服务注册表来实现服务之间的通信1。在 Spring Cloud 中&#xff0c;Eureka 提供了一个高可用的服务注册与发现机制&a…

职业教育新形态数字教材的建设与应用:重构教育生态的数字化革命

教育部新时代职业学校名师(名匠)名校长培养计划专题 四川省第四批职业学校名师(名匠)培养计划专题 在某职业院校的智能制造课堂上&#xff0c;学生佩戴VR设备&#xff0c;通过数字教材中的虚拟工厂完成设备装配训练&#xff0c;系统实时生成操作评分与改进建议。这一场景折射出…

基于Python的携程国际机票价格抓取与分析

一、项目背景与目标 携程作为中国领先的在线旅行服务平台&#xff0c;提供了丰富的机票预订服务。其国际机票价格受多种因素影响&#xff0c;包括季节、节假日、航班时刻等。通过抓取携程国际机票价格数据&#xff0c;我们可以进行价格趋势分析、性价比评估以及旅行规划建议等…

Windows 图形显示驱动开发-初始化WDDM 1.2 和 PnP

(WDDM) 1.2 及更高版本显示微型端口驱动程序的所有 Windows 显示驱动程序都必须支持以下行为&#xff0c;以响应即插即用 (PnP) 基础结构启动和停止请求。 根据驱动程序返回成功或失败代码&#xff0c;或者系统硬件是基于基本输入/输出系统 (BIOS) 还是统一可扩展固件接口 (UEF…