[网络]数据链路层-MAC帧与ARP协议

目录

一、数据链路层

二、以太网

2.1 认识以太网

2.2 数据碰撞

2.3 交换机

2.4 MAC帧格式

2.5 局域网通信过程

2.6 认识 MAC 地址

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

2.8 认识 MTU

2.9 认识MSS

三、ARP 协议

3.1 了解ARP协议

3.2 ARP协议的工作流程

3.3 ARP 数据报的格式 


一、数据链路层

        数据链路层是计算机网络协议栈中的第二层,位于物理层之上,网络层之下,是OSI参考模型中的第二层。它主要用于两个设备(同一种数据链路节点)之间进行信息传递.,并具备一系列相应的功能

        传输层协议用于保证数据传输的可靠性,网络层提供了将数据跨网络路由的能力,而数据链路层解决的问题就是在一个局域网两台主机之间的通信问题

二、以太网

2.1 认识以太网

以太网(Ethernet)是一种常见的局域网(LAN)通信协议。

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

在一个局域网下,一台主机发送的数据该局域网的所有设备都能收到,这就像许多学生在一个教室上课一样,一个学生讲话所有人都能听见。

例如,主机A向主机B发送了一条数据,该数据会添加源mac地址、目的mac地址等信息,一个局域网下的主机都会收到这条消息,但是只有主机B收到该消息后会向上层交付,其他主机对报头解析发现目的地址不是自己,就会丢弃该数据。

2.2 数据碰撞

由于以太网中的所有的主机共享一个通信信道,因此在同一时刻只允许有一台主机发送数据,否则各个主机发送的数据就会相互干扰。站在系统的角度来看,这里各个主机所共享的通信信道就是一种临界资源,这个临界资源同一时刻只允许一台主机使用。

  • 对于这个问题,以太网的做法就是先不限制各个主机发送数据的能力,局域网中的每个主机想发数据的时候直接发就行了,但是只要发送出去的数据与其他主机发送的数据产生了碰撞,那就得执行碰撞避免算法。
  • 所谓的碰撞避免算法就是,当主机发送出去的数据产生碰撞时,该主机需要等待一段时间后再进行数据重发,在主机等待的时候就能够就能够尽可能让局域网当中的数据消散。
  • 一个局域网就是一个碰撞域。

这个问题就比如好几个班的同学一起在学校的机房上课,此时的网络会变得很卡顿,这是因为大家都连的同一个局域网,许多设备在上网时,就会发生大量数据碰撞,增加了数据在网络中传输的时间。

2.3 交换机

交换机内部维护了一张Mac地址表,用来记录每个端口连接设备的mac地址,比如主机A向主机E发送数据,此时交换机就知道主机A在左边,当主机E向主机A发送数据时,此时交换机发现主机E在右边,他就会将数据发送到左边的端口,不用在转发给全部主机。

当交换机接收到数据帧时,它会根据数据帧的目的MAC地址进行查找,找到对应的端口后,将数据帧直接转发到该端口,而不是广播到所有端口。通过划分冲突域(也称为碰撞域)减少了不必要的广播流量,降低了数据碰撞的风险。

2.4 MAC帧格式

MAC帧是数据链路层的一种协议数据单元,也被称为媒体访问控制帧。它主要用于在局域网(如以太网)中传递数据,是网络中数据交换的基本单位。

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

如何将报头与有效载荷分离?

MAC帧的帧头与帧尾都是采用固定的长度,所以当我们收到报文后,将固定长度的帧头与帧尾分离,剩下的就是有效载荷

MAC帧如何决定将有效载荷交付给上层的哪一个协议?

以太网MAC帧对应的上层协议不止一种,因此在将MAC帧的报头和有效载荷分离后,还需要确定应该将分离出来的有效载荷交付给上层的哪一个协议。

在MAC帧的帧头当中有2个字节的类型字段,因此在分离出报头和有效载荷后,根据该字段将有效载荷交付给对应的上层协议即可。

2.5 局域网通信过程

假设在同一个局域网下,主机A要向主机B发送数据,此时主机A封装的MAC帧报头中的目的地址就是MACB,源地址就是MACA,类型为0800。

该局域网下的主机都会收到这个报文,主机A也可以收到

  • 主机A收到该MAC帧后,可以对收到的MAC帧进行CRC校验,如果校验失败则说明数据发送过程中产生了碰撞,此时主机A就会执行碰撞避免算法,后续进行MAC帧重发。
  • 主机B收到该MAC帧后,提取出MAC帧当中的目的地址,发现该目的地址与自己的MAC地址相同,于是在CRC校验成功后就会将有效载荷交付给上层IP层(0800)进行进一步处理。
  • 局域网中的其他主机收到该MAC帧后,也会提取出MAC帧当中的目的地址,但发现该目的地址与自己的MAC地址不匹配,于是就会直接将这个MAC帧丢弃掉。

当主机收到MAC帧后,会根据MAC帧当中的目的地址来判断该MAC帧是否是发给自己的,如果是发送给自己的会对其进行CRC校验,如果校验成功则会根据该MAC帧的帧协议类型,将该MAC交付给对应的上层协议进行处理,如果不是发送给自己的则在数据链路层直接将数据丢弃。

2.6 认识 MAC 地址
  • MAC 地址用来识别数据链路层中相连的节点;
  • 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改,mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址).
2.7 对比理解 MAC 地址和 IP 地址
  • MAC地址用于在局域网(LAN)中唯一标识网络设备
  • IP地址用于在Internet上唯一标识网络设备
  • MAC地址位于OSI模型的底层,即数据链路层,是硬件层面的地址。
  • IP地址位于OSI模型的网络层,直接影响TCP/IP协议的选择和网络路由的决定。
  • MAC地址要用于局域网内的设备识别和通信,不能跨越不同的网络。
  • IP地址可以在全球范围内使用,支持跨网络通信,是互联网中设备定位和通信的基础

MAC地址和IP地址在网络通信中各自承担着不同的角色和功能。MAC地址作为硬件层面的唯一标识符,在局域网内起着至关重要的作用;而IP地址则作为逻辑层面的地址,是互联网中设备定位和通信的基础。两者相互配合,共同实现了网络设备的互联互通和数据的高效传输。

2.8 认识 MTU

MTU 相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层产生的限制.

  • 太网帧中的数据长度规定最小 46 字节,最大 1500 字节,ARP 数据包的长度不够 46 字节,要在后面补填充位;
  • 最大值 1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的 MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU 了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层标准的 MTU 是不同的;
2.9 认识MSS

由于数据链路层限制了单次数据传输的数据量(MTU),所以为了避免数据在网络层进行IP分片,我们应在传输层对向网络层交付的数据大小加以控制。

我们将TCP的单个数据报的最大报文长度,称为MSS(Max Segment Size)。

TCP通信双方在建立连接的过程中,就会进行MSS协商,最终选取双方支持的MSS值当中的较小值作为最终MSS。

三、ARP 协议

ARP协议,全称Address Resolution Protocol,即地址解析协议,是一个用于将网络层(IP层)地址解析为数据链路层(MAC层)地址的协议。

3.1 了解ARP协议

当两台主机在进行跨网络通信时,发送方可以根据目的IP找到目的主机所在的子网路由器,但是仅仅知道目的主机的IP地址与端口号,不知道目的主机的硬件地址(MAC地址),由于数据帧的传输是在数据链路层进行的,因此必须知道目标设备的MAC地址才能正确发送数据。而ARP协议可以通过目的主机的IP地址来确定他的MAC地址

ARP协议是位于MAC帧协议上层位于网络层下层的一个属于数据链路层的协议

3.2 ARP协议的工作流程

  1. 检查ARP表
    • 发送方首先在其ARP缓存(ARP表)中查找目标IP地址对应的MAC地址。
    • 如果找到了,就直接使用该MAC地址发送数据帧。
    • 如果没有找到,就进行ARP请求。
  2. 构造ARP请求
    • 发送方构造一个ARP请求数据包,该数据包包含以下内容:
      • 发送方的硬件地址(MAC地址)
      • 发送方的IP地址
      • 目标设备的IP地址(设备B的IP地址)
      • 目标设备的硬件地址(此处通常为全0或全F,表示未知)
    • ARP请求数据包还包含操作码,用于指示这是一个ARP(0806)请求。
  3. 广播ARP请求
    • 发送方将ARP请求数据包以广播的形式发送到局域网上的所有设备。
    • 在以太网中,广播地址的MAC地址通常为全F(即FF-FF-FF-FF-FF-FF)。

  1. 接收ARP请求
    • 局域网上的所有设备都会接收到这个ARP请求,但只有目标设备(设备B)会响应。其他设备在收到请求后,分离报头和有效载荷,如果发现是一个ARP请求,在看目的IP地址,发现不是自己,就会丢弃,要注意这个丢弃与局域网通信中讲的的丢弃不同,这个是在ARP层丢弃,而局域网通信讲的丢弃是直接查看MAC帧报头中的目的MAC地址,在MAC帧协议层丢弃的。
    • 设备B检查ARP请求中的目标IP地址,如果与自己的IP地址匹配,就准备发送ARP应答。
  2. 构造ARP应答
    • 目标设备(设备B)构造一个ARP应答数据包,该数据包包含以下内容:
      • 发送方的硬件地址(即设备A的MAC地址,从ARP请求中复制)
      • 发送方的IP地址(即设备A的IP地址,从ARP请求中复制)
      • 目标设备的硬件地址(设备B自己的MAC地址)
      • 目标设备的IP地址(设备B自己的IP地址,与ARP请求中的目标IP地址相同)
    • ARP应答数据包也包含操作码,但此时操作码表示这是一个ARP应答。

  1. 单播ARP应答
    • 目标设备(设备B)将ARP应答数据包单播发送给发送方(设备A)。
    • 发送方收到ARP应答后,将目标设备的MAC地址添加到自己的ARP缓存中。
  2. 发送数据帧
    • 现在,发送方(设备A)已经知道目标设备(设备B)的MAC地址,可以将数据帧封装并发送到目标设备。
  • 要注意每一台主机其实都是一个网络协议栈,在ARP层构建的请求或者应答也需要封装成mac帧才能发送。
  • 每台主机都会维护一个 ARP 缓存表,当再次向同一个主机通信时可以不用再发起ARP请求,直接查表,可以用 arp -a 命令查看。缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址

为什么表项要有过期时间而不是一直有效?

ARP缓存表用于存储IP地址到MAC地址的映射关系。随着时间的推移,网络中的设备可能会发生变化,如设备关机、IP地址更改或网络拓扑变化等。如果ARP缓存表中的表项一直不过期,那么这些无效的表项将会持续占用缓存空间,导致资源浪费。设置过期时间可以确保缓存表中只保留有效的映射关系,从而节约资源。

另外设置过期时间还可以提高网络安全性,防止ARP欺骗

3.3 ARP 数据报的格式 

  • 硬件类型指链路层网络类型,1 为以太网;
  • 协议类型指要转换的地址类型,0x0800 为 IP 地址;
  • 硬件地址长度对于以太网地址为 6 字节;
  • 协议地址长度对于和 IP 地址为 4 字节;
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。
  • op字段存在的原因是因为每个主机都可能给别人发送ARP请求,也可能会收到别人的ARP请求

我们发现在ARP中就有一个MAC_A而在MAC帧的报头中,又有一个MAC_A,冲突吗?两个并不冲突,而且二者不但不冲突还处于不同的工作层次的,前面的是给MAC层看的,中间的是给ARP看的。所以这个冗余也是合理的,是通过数据冗余来实现两层协议的解耦合。

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

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

相关文章

火车票有电子发票吗?没纸质火车票怎么报销?

火车票有电子发票吗? 火车票、高铁票目前没有电子发票,但是现在已经实行电子客票,车票即购票证件,乘车时,只需购票证件原件(如身份证、护照、临时身份证等)即可乘车。 没纸质火车票怎么报销&am…

“AI+Security”系列第3期(五):AI技术在网络安全领域的本地化应用与挑战

近日,由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办的“AI Security”系列第 3 期技术沙龙:“AI 安全智能体,重塑安全团队工作范式”活动顺利举行。此次活动吸引了线上线下超过千名观众参与。 在活动中…

3D 模型GLTF、GLB格式文件介绍使用;FBX格式

一、GLTF、GLB介绍 GLTF(GL Transmission Format)和 GLB(GL Binary)是用于在 Web 和各种应用程序中传输和加载 3D 场景和模型的开放标准格式。它们由 Khronos Group 开发,旨在提供一种高效、可扩展且易于使用的 3D 内…

9.26号算法题

数组的遍历 414.第三大的数 题解&#xff1a; class Solution {public int thirdMax(int[] nums) {TreeSet<Integer>treeSet new TreeSet<Integer>(); //生成一个TreeSet对象&#xff0c;存储有序唯一整数for (int num : nums){//遍历数组treeSet.add(num);//将…

图书系统|图书个性化推荐系统|基于springboot的图书个性化推荐系统设计与实现(源码+数据库+文档)

图书个性化推荐系统目录 目录 基于springboot的图书个性化推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#x…

高级算法设计与分析 学习笔记9 跳表

单链表的样子我们很熟悉了&#xff1a; 怎么加快查找&#xff1f;&#xff1a; 查找的具体方法&#xff1a; 超过了就回头下去。 这条“快速路”最好是几个节点呢&#xff1f;&#xff1a; 假如我们弄好多层跳表呢&#xff1f;&#xff1a; 给弄成2叉树了&#xff01; 如何插入…

RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察

RabbitMQ 是一个功能强大且广泛使用的消息代理&#xff0c;它通过处理消息的传输、存储和交付来促进分布式应用程序之间的通信。作为消息代理&#xff0c;RabbitMQ 充当生产者&#xff08;发送消息的应用程序&#xff09;和使用者&#xff08;接收消息的应用程序&#xff09;之…

“类型名称”在Go语言规范中的演变

Go语言规范&#xff08;The Go Programming Language Specification&#xff09;[1]是Go语言的核心文档&#xff0c;定义了该语言的语法、类型系统和运行时行为。Go语言规范的存在使得开发者在实现Go编译器时可以依赖一致的标准&#xff0c;它确保了语言的稳定性和一致性&#…

Acwing 154. 滑动窗口

滑动窗口 输入: 8 3 1 3 -1 -3 5 3 6 7 输出&#xff1a; -1 -3 -3 -3 3 3 3 3 5 5 6 7 思路&#xff1a; 使用双端队列&#xff08;deque&#xff09;来维护一个区间的最值 具体做法&#xff1a; 双端队列里面存储元素的下标&#xff0c;我们先考虑如何维护区间里的数&#xf…

Elasticsearch讲解

1.Elasticsearch基本知识 1.基本认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术&#xff0c;它是elastic技术栈中的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1a;用于数据存储、计算和搜索 Logstash/Beats&#xff1a;用于数据收集 Kib…

Harbor的安装与使用

任务分析 一、规划节点 IP地址 主机名 节点 192.168.20.20 master 容器master节点 192.168.20.21 node 容器worker节点 二、基础准备 镜像使用CentOS7.9&#xff08;主机配置自定义&#xff0c;推荐配置4vCPU/12G内存/100G硬盘&#xff09;&#xff0c;使用这两台云…

【软设】计算机网络

【软设】计算机网络 一.OSI/RM七层模型 (七层模型还是要知道的&#xff0c;后面再去记一些协议&#xff0c;知道每一层应用在哪些方面&#xff0c;给你个东西或者协议你要能看得出来) OSI/RM&#xff08;Open Systems Interconnection Reference Model&#xff09;是国际标准…

63.HDMI显示器驱动设计与验证-彩条实验

&#xff08;1&#xff09;常见的视频传输接口有三种&#xff1a; VGA 接口、 DVI 接口和 HDMI 接口&#xff0c;目前的显示设备都配有这三种视频传输接口。三类视频接口的发展历程为 VGA→DVI→HDMI。其中 VGA 接口出现最早&#xff0c;只能传输模拟图像信号&#xff1b; 随后…

【libp2p——NAT】

1. 什么是NAT NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是指一种网络技术&#xff0c;它允许多个设备通过一个公共IP地址连接到互联网。NAT通常被用在家庭或小型办公室的路由器上&#xff0c;以允许多台计算机共享一个互联网连接。这种…

深入理解函数【JavaScript】

在 JavaScript 中&#xff0c;函数作为一种重要的基本结构&#xff0c;承载着编程中的许多关键概念。下面是与函数相关的内容介绍&#xff1a; 1. 函数定义 JavaScript 中有多种方式定义函数&#xff1a; 1.1 函数声明&#xff08;Function Declaration&#xff09; functi…

C# 委托(Delegate)一

一.Delegate的定义说明&#xff1a; C# 中的委托&#xff08;Delegate&#xff09;就是类似于 C 或 C 中函数的指针。Delegate 是存有对某个方法引用的一种引用类型变量&#xff0c;引用可在运行时是可以被改变的&#xff0c;特别适用于实现事件和回调方法。所有的Delegate都是…

C# 委托(Delegate)二

一.委托的多播&#xff08;Multicasting of a Delegate&#xff09;&#xff1a; 委托对象&#xff0c;使用 "" 运算符进行合并&#xff0c;一个合并委托调用它所合并的两个委托。使用"-" 运算符从合并的委托中移除组件委托。 注&#xff1a;只有相同类型…

linux文件下载分类

在下载图片时各个网站命名不统一&#xff0c;管理起来很麻烦&#xff0c;想要写一个脚本将下载的图片或者其他资源实现格式统一&#xff0c;方便管理 $0&#xff1a;表示脚本路径。运行 ./myscript.sh&#xff0c;$0 将会保存 ./myscript.sh。 $1&#xff1a;表示传递给脚本的…

Leetcode 968. 监控二叉树 树形dp、状态机 C++实现

问题&#xff1a;Leetcode 968. 监控二叉树 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 /*** Definition for a binary tree node.* struct TreeNo…

数据结构 ——— 移除元素(快慢指针)

目录 题目要求 代码实现&#xff08;快慢指针&#xff09; 题目要求 编写函数&#xff0c;给你一个数组 nums 和一个值 val&#xff0c;你需要在 nums 数组 原地 移除所有数值等于 val 的元素&#xff0c;并且返回移除后数组的新长度 不能使用额外的数组空间&#xff0c;要…