计算机网络——数据链路层Mac帧详解

news2024/12/26 23:55:15

目录

前言

一、以太网

二、Mac帧

三、MTU——最大传输单元

四、Mac帧的传输过程

1.ARP协议

2.RARP协议


前言

在之前,我们学习过网络层的IP协议,了解到IP协议解决了从哪里来,到哪里去的问题,也就是提供了将数据从A到B的能力,他能指挥数据链路层应该往哪里去发送数据,但具体的执行,还得是数据链路层去干,那么数据链路层是怎样去进行数据传输的呢?

一、以太网

数据链路层中最重要也是最常用的就是以太网。

"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如: 规定了网络拓扑结构、访问控制方式、传输速率等。

其中以太网较为重要的内容就是Mac帧。

二、Mac帧

我们来看看Mac帧的格式

源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
帧协议类型字段有三种值,分别对应IP、ARP、RARP。(后面会将)
帧末尾是CRC校验码,用于确保数据的正确性。

Mac帧除了数据以外长度是固定的,因此将报头与有效载荷分离就可以通过读取固定长度,将数据交付给上层处理。具体交付给上层哪一个协议,就可以通过读取类型来进行指定协议的交付。

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

三、MTU——最大传输单元

MTU(Maximum Transmission Unit) 最大传输单元。

MTU相当于发快递时对包裹尺寸的限制。在以太网中,MTU 通常为 1500 字节,这意味着每个以太网帧的数据部分(即去掉以太网头部后)最大为 1500 字节。

在以太网的传统工作方式(半双工)下,多个设备可能会在同一时间尝试向网络发送数据。由于这些设备共享同一个通信信道,若多个设备同时发送数据,就会发生碰撞。当数据包过大,就会有更大的几率发送碰撞,影响通信的效率,因此规定在以太网传输的数据不能超过MTU。

如果一个数据包超过了网络链路的 MTU,IP 层 会负责对数据包进行分片,然后将每个分片交给数据链路层进行传输。

四、Mac帧的传输过程

既然Mac帧要在双绞线(网线)中进行传输,那么他该如何传输的呢?你现在只知道自己的Mac地址,IP地址还有要去的IP地址,你如何知道对方的Mac地址,再发送给对方呢?

这就要使用到ARP协议。

1.ARP协议

如下是ARP协议的字段

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

上面的内容我们都可以填写,而以太网目的地址怎么填写呢?

我们知道,网络协议中是存在广播的,也就是说当前局域网中所有的主机都会收到广播信号。因此我们可以将目标以太网地址给0XFFFFFFFFFFFF,代表广播。

这样该报文就会发送到局域网的所有主机,他们都会检查,目的IP地址是否为自己的IP地址,不是则丢弃不管了,若发现是自己的IP地址,再检查op字段,发现是1代表ARP请求,此时会重新填充op字段和其他字段,给源Mac发送ARP应答,源Mac主机收到了ARP应答,于是就知道了IP地址所对应的Mac地址,将内容缓冲起来,以后就知道对方的Mac地址了。

我们来举个例子

IPA在局域网广播询问谁是MacE,IPB IPC IPD 都收到了信息,但是目的IP不是自己,于是丢弃

MacE收到后,目的IP就是我的IP,于是会发送给MacA,我是IPE,我的mac地址为MacE。

并且在这过程中,MacA和MacE都会将对方的Mac地址进行缓存,建立起对方IP地址与Mac地址的映射,以便后续不需要再次询问能直接通信。 

ARP协议还有一些小细节,比如发送前还会通过网络号查询目标IP是否在本局域网内,在就进行ARP发送,得到对方的Mac地址,然后发送Mac帧。如果目标在其他网络,数据需要通过路由器 转发。

2.RARP协议

RARP(逆地址解析协议,Reverse Address Resolution Protocol) 也是一种网络协议,它与 ARP(地址解析协议)相反,用于根据设备的 MAC 地址 获取对应的 IP 地址。

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

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

相关文章

LabVIEW将TXT文本转换为CSV格式(多行多列)

在LabVIEW中,将TXT格式的文本文件内容转换为Excel格式(即CSV文件)是一项常见的数据处理任务,适用于将以制表符、空格或其他分隔符分隔的数据格式化为可用于电子表格分析的形式。以下是将TXT文件转换为Excel(CSV&#x…

响应式编程一、Reactor核心

目录 一、前置知识1、Lambda表达式2、函数式接口 Function3、StreamAPI4、Reactive-Stream1)几个实际的问题2)Reactive-Stream是什么?3)核心接口4)处理器 Processor5)总结 二、Reactor核心1、Reactor1&…

Vue3之弹窗

文章目录 第一步、引入JS第二步、弹框 在前端开发语言Vue3&#xff0c;在管理端如何进行弹窗&#xff1f;下面根据API实现效果。 Element API文档&#xff1a; Element-plus文档 搭建环境可参考博客【 初探Vue3环境搭建与nvm使用】 第一步、引入JS <script lang"ts&…

w~大模型~合集24

我自己的原文哦~ https://blog.51cto.com/whaosoft/12707697 #Time Travelling Pixels (TTP) 一种名为“时空旅行”&#xff08;TTP&#xff09;的新方法&#xff0c;该方法将SAM基础模型的通用知识整合到变化检测任务中。该方法有效地解决了在通用知识转移中的领域偏移问题…

git的简单使用与gdb

版本控制器git 为了能够更方便管理这些不同版本的文件&#xff0c;有了版本控制器&#xff0c;可以了解一个文件的历史&#xff0c;以及它的发展过程的系统&#xff0c;通俗的说就是一个可以记录工程的每一次改动和版本迭代的一个管理系统&#xff0c;同时也方便多人协作。 三…

从0开始学PHP面向对象内容之常用设计模式(策略,观察者)

PHP设计模式——行为型模式 PHP 设计模式中的行为模式&#xff08;Behavioral Patterns&#xff09;主要关注对象之间的通信和交互。行为模式的目的是在不暴露对象之间的具体通信细节的情况下&#xff0c;定义对象的行为和职责。它们常用于解决对象如何协调工作的问题&#xff…

解决windows下php8.x及以上版本,在Apache2.4中无法加载CURL扩展的问题

本文已首发于&#xff1a;秋码记录 若你也想搭建一个个人博客&#xff0c;可参考&#xff1a;国内 gitee.com Pages 下线了&#xff0c;致使众多站长纷纷改用 github、gitlab Pages 托管平台 在日新月异的信息化下&#xff0c;软件也在跟随着互联网的脚步&#xff0c;逐步推进…

git 常用命令及问题

一、常用命令 git add filename git add . git commit -m "messge" git commit --amend 修改最近一次的提交 git push origin HEAD:refs/for/master git clone url git checkout branchname 切换分支 git branch -r 查看远程仓库分支列表 git branch br…

【Gitlab】gitrunner并发配置

并发介绍 涉及到并发控制的一共有4个参数: concurrent , limit ,request_concurrency,parallel 全局的配置: [rootiZ2vc6igbukkxw6rbl64ljZ config]# vi config.toml concurrent 4 #这是一个总的全局控制&#xff0c;它限制了所有pipline&#xff0c;所有runner执行器…

利用Python爬虫精准获取淘宝商品详情的深度解析

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是在电子商务领域。淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的商品数据&#xff0c;对于研究市场趋势、分析消费者行为等具有重要意义。本文将详细介绍如何使用Python编写爬虫程序&#xff0c;精准获取…

NFT Insider #157:The Sandbox 开启新一期 VoxEdit 比赛

市场数据 加密艺术及收藏品新闻 Artnames 项目上线&#xff0c;将用户姓名转化为个性化 NFT 艺术品 由知名数字艺术家 Arrotu 发起的生成艺术项目「Artnames」正式上线&#xff0c;利用区块链技术将用户姓名转化为独一无二的 NFT 艺术品。该项目于 11 月 14 日启动&#xff0…

Mysql数据库基础篇笔记

目录 sql语句 DDL——数据库定义语言&#xff08;定义库&#xff0c;表&#xff0c;字段&#xff09; 数据库操作&#xff1a; 表操作&#xff1a; DML 增删改语句 DQL 语法编写顺序&#xff1a; 条件查询 DCL 用户管理&#xff1a; 权限管理&#xff1a; 函数 常见字符串内置函…

基于单片机的频率测量电路设计

摘 要&#xff1a; 传统的频率测量设备大多因硬件电路庞大&#xff0c;导致设备整体体积相对较大&#xff0c;且测量频率信号的精确度低&#xff0c;测量范围较小&#xff0c;运行速度较慢。 据此&#xff0c;介绍了一种以 AT89C51 单片机为控制核心&#xff0c;由放大整形模块…

解决Ubuntu DNS覆盖写入127.0.0.53

ubuntu22.04解析网址时报错如图所示&#xff1a; 因为/etc/resolve.conf中存在 nameserver 127.0.0.53回环地址造成循环引用 原因&#xff1a; ubuntu17.0之后特有&#xff0c;systemd-resolvd服务会一直覆盖 解决方法&#xff1a; 1、修改resolv.config文件中的nameserver…

IDEA报错: java: JPS incremental annotation processing is disabled 解决

起因 换了个电脑打开了之前某个老项目IDEA启动springcloud其中某个服务直接报错&#xff0c;信息如下 java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate. Use build process “jps.track.ap.depen…

C++20: 像Python一样逐行读取文本文件并支持切片操作

概要 逐行读取文本文件&#xff0c;并提取其中连续的几行&#xff0c;这对于 Python 来说是小菜一碟。 C 则很笨拙&#xff0c; 语言不自带这些。 这次我来拯救 C boys & girls&#xff0c; 在 C20 环境下&#xff0c;山寨一个 Python 下的逐行读文本文件、支持 slice 操作…

【NLP高频面题 - LLM架构篇】LLM对Transformer都有哪些优化?

【NLP高频面题 - LLM架构篇】LLM对Transformer都有哪些优化&#xff1f; ⚠︎ 重要性&#xff1a;★★★ &#x1f4af; NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、…

电脑还原重置Windows系统不同操作模式

电脑有问题,遇事不决就重启,一切都不是问题!是真的这样吗。其实不然,主机系统重启确实可以自动修复一些文件错误,或者是设置问题,但是,当你由于安装了错误的驱动或者中毒严重,亦或是蓝屏,那么重启这个方子可能就治不了你的电脑了。 那么,除了当主机出现异常故障现象…

深度学习模型: BERT(Bidirectional Encoder Representations from Transformers)详解

一、引言 自然语言处理&#xff08;NLP&#xff09;领域在过去几十年取得了显著的进展。从早期基于规则的方法到统计机器学习方法&#xff0c;再到如今基于深度学习的模型&#xff0c;NLP 不断向着更高的准确性和效率迈进。BERT 的出现为 NLP 带来了新的突破&#xff0c;它能够…

亚马逊开发视频人工智能模型,The Information 报道

根据《The Information》周三的报道&#xff0c;电子商务巨头亚马逊&#xff08;AMZN&#xff09;已开发出一种新的生成式人工智能&#xff08;AI&#xff09;&#xff0c;不仅能处理文本&#xff0c;还能处理图片和视频&#xff0c;从而减少对人工智能初创公司Anthropic的依赖…