【Linux】MAC帧协议 + ARP协议

文章目录

  • 📖 前言
  • 1. 数据链路层
  • 2. MAC帧格式
  • 3. 再谈局域网
  • 4. ARP协议
    • 4.1 路由器的转发过程:
    • 4.2 ARP协议格式:
  • 5. 如何获得目的MAC地址

📖 前言

在学完网络层IP协议之后,本章我们将继续向下沉一层,进入到数据链路层的学习。
该层有两个重要的协议需要我们来学习,一个是ARP协议,另一个就是MAC帧协议,这二者都是处于数据链路层。
ARP协议在MAC帧协议的上一层,它们属于上下层的关系。老规矩,我们先来认识报头的各个字段,再来学习它们的作用。搬好小板凳,我们马上开讲啦…


1. 数据链路层

在内网(局域网)当中要进行转发的时候,首先要考虑的是,数据怎么从A主机送到出口路由器当中,这个工作就是数据链路层要解决的问题了。

IP地址的核心工作是提供一种能力,将数据从A主机经过路径选择交给B主机,一定是有目的IP不断地查路由表。

但是A和B根本就不在一个网段, 首先要解决的是将数据先从A主机送到下一跳的能力!!

当数据进行转发的时候,就是将数据从一个子网送到另一个子网的过程(重点):

因为路由器是横跨两个子网的,所以只要将数据报转发到子网的路由器,这个路由器集联到下个子网的话,我们把这种在局域网内转发的行为,也可以称之为跨网络转发。

交付到路由器是一个内网转发的行为,但是逻辑上相当于将数据包从一个子网交到了下一个子网。

数据链路层能够将数据发送到内网中的任一台主机,也一定能将数据送到内网当中的任意一台路由器。只要这台路由器横跨两个网段,把数据交给这个路由器的过程,就意味着将数据交给了另一个网段,也就实现了跨网络传输的功能。

小结:

  • 数据链路层: 提供了在内网中,从一点到另一点的能力。
  • 网络层: 提供了寻找路径的能力。

数据链路层 + 网络层就能提供把数据从A主机跨网络,经过路径选择送到B主机的能力。

  • 一旦此层转发有问题,传输层再继续让我们重发。
  • 这几层就提供了将数据从A主机经过路径选择可靠的送到B主机的能力。
  • 只要A主机能到B主机,那么就一定能从B主机到A主机。

所以传输,网络,链路核心解决的是数据包可靠传送的问题。


2. MAC帧格式

MAC帧(Media Access Control Frame)是在计算机网络中用于数据传输的基本单位。它包含了数据链路层的头部和尾部,用于在物理介质上传输数据。

在这里插入图片描述
目的地址和源地址: 目的MAC地址和源MAC地址。

  • 每一台主机在数据链路层当中都要有自己的身份标识,就是通过MAC地址标识的。
  • MAC地址通常是48位的植入到网卡当中的具有唯一性标识的地址。
  • 虽然全球唯一但是要求在局域网内唯一就可以了。

以太网或者令牌环网,是局域网当中所采用的标准:

  • 局域网转发这件事上,底层网络通信的方式是有差异的,我们重点讲的是以太网帧格式。
  • 底层网络有差异并不影响网络在全球的使用,原因就是有IP地址的存在,IP全球是唯一的。

报头和有效载荷如何分离:如何解包?

  • 目的地址,原地址和类型固定大小的,最后有个CRC也是固定大小的。
  • 所以以太网帧格式附加的相关的报头或者校验字段一共是18Byte。
  • 在对帧格式在做提取时,可以6 Byte,6 Byte,2 Byte提取报头,再将最后4Byte扔掉,剩下的就是有效载荷。
  • 所以能拆包也就一定能封装。

未来一个收到了MAC帧的主机,应该如何向上进行交付:如何分用?

  • 两个字节的类型,我们称之为帧类型,通常代表的是有效载荷应该向上交付给哪一个协议。
  • 例如:如果帧类型是0800对应的有效载荷就是IP数据包。
  • 其他的类型就是对应的不同的字段。
  • 所以就能知道数据载荷字段是什么类型,进一步再向上交付就可以了。

帧类型:

  • 在MAC(媒体访问控制)帧协议中,类型字段(Type Field)是用来指示数据帧中所携带的上层协议类型的字段。
  • 它位于MAC帧的报头部分,并占据2个字节(16位)。
  • 类型字段的作用是告诉接收方如何解析数据帧的有效载荷部分。
  • 通过读取类型字段的值,接收方可以确定上层协议的类型,并将数据帧传递给相应的协议栈进行进一步处理。

类型字段可以是:

  • 0x0800:表示IPv4协议。
  • 0x86DD:表示IPv6协议。
  • 0x0806:表示ARP(地址解析协议)。
  • 0x8100:表示VLAN(虚拟局域网)标记协议。

3. 再谈局域网

局域网内,一个主机如何知道自己的报文应该交给哪台主机呢?是由报文所要去的目的IP地址决定的!!

将报文丢在局域网当中,每台主机都要收到这个报文:

  • 凡是在局域网中的所有主机,无时无刻都要从局域网当中抓数据。
  • 因为随时随地都要从局域网中拿数据。
  • 主要局域网中有数据了,所有的主机都必须将报文拿到自己的主机里面。
  • 因为只有拿到才能确认这个数据是不是发给自己的。
  • 不管是不是发给自己的对于这台主机来讲都是有意义的。

数据在局域网中传输:

  • 每一个主机都要获取。
  • 每一个主机的哪一层协议先获取这个数据帧呢?
    • 数据链路层(不考虑物理层),网络永远都是终于链路层始于链路层的。
  • 每一个主机数据链路层协议的解析(解包 + 分用)。
  • 对比目的mac地址和自己的mac地址是否相同。
    • 相等:向上交付(根据类型),分用。
    • 不相等:丢弃,一旦底层将数据包丢弃了,上层就不知道有这个数据包的存在了。

抓包:

  • 网卡有一种模式可以被设置叫做混杂模式。
  • 网卡就不做数据筛选,直接将局域网读到的数据一股脑网上交付,这个就叫做抓包。

数据碰撞:

  • 当多台主机同时向局域网内发送数据时,冲突吗?—— 冲突!!
  • 因为在网络中走的都是一些光电信号,会互相进行干扰,那么谁发送的数据都没办法处理。
  • 所以就要让冲突的几台主机,随机休眠上一段时间,再进行在局域网当中对数据做重发。
  • 我们把这个局域网也叫做一个碰撞域。

交换机:

  • 因为交换机这样的设备存在,将大的局域网划分成小的区域。
  • 这个小的区域当中,合法请求转发,再小的区域中就能完成的通信过程就不要往外面却散了。
  • 进而可以减少一个一个碰撞域的体积。
  • 交换机除了在局域网当中进行数据帧转发(不转也能发送),核心工作:划分碰撞域。
  • 在一定程度上,减缓主机之间碰撞的可能性。

要明确几点:

  • 主机越多越好,还是越少越?
    • 好肯定是越少越好了,发生碰撞的概率越低
  • 交换机或网桥:划分碰撞域(硬件上)。
    • 网卡和交换机都是工作在数据链路层的设备。
  • 软件上减少局域网内碰撞的概率:
  • 一般MAC帧一般体积不要过大,要对得上MTU的要求。

网络层IP报文分片的原因:

  • 一旦碰撞了就是否定了之前所做的工作,曾经花费的成本就付之东流了。
  • 所以MAC帧的体积不要太大,就要对上层提要求。
  • 要求IP层发送的数据包不要太大,所以IP层才会分片,才有了MTU这样的概念。
  • MAC帧规定上层交给它的数据(IP报文)不能超过1500Byte

碰撞域在物理上减少主机的个数,在软件上减少报文的大小,进而就可以减少碰撞,还有一些碰撞避免的算法。

数据包的大小体积不由MAC帧决定(它只提标准),更不由网络层决定(它只是个跑腿的),而是由传输层(TCP/UDP) 决定,传输层决定了IP报文要不要分片的问题。


4. ARP协议

4.1 路由器的转发过程:

在这里插入图片描述

  • 当路由器接收到一个数据包时,它首先会解析以太网帧,提取出其中的MAC地址信息。
  • 然后,路由器会根据目标IP地址在路由表中查找下一跳的信息。
  • 接下来,路由器会封装数据包为新的以太网帧,更新目标MAC地址为下一跳的MAC地址,并将数据包发送到下一个路由器。这个过程被称为数据包的转发。
  • 在下一个路由器上,类似的过程会再次发生。该路由器会解析以太网帧,提取出目标IP地址,并根据路由表确定下一跳的信息。
  • 然后,它会封装数据包为新的以太网帧,更新目标MAC地址,并将数据包发送到下一个路由器或目标主机。

这样,数据包通过一系列的路由器转发,最终到达目标主机所在的网络。每个路由器都负责解析和封装以太网帧,以便在不同网络节点之间进行数据包的转发和路由选择。

4.2 ARP协议格式:

当我们数据包到了对方子网入口路由器时,怎么将数据包给指定主机呢?

在这里插入图片描述
路由器D只知道它收到的报文,将来是要给IP为主机C的IP的主机,并不知道主机C的MAC地址,所以没办法发送。

—— 所以有了ARP协议。

  • 同层协议也有上下关系,ARP协议是MAC帧协议的上层。
  • MAC帧协议数据除了是IP报文,也可能有ARP这样的协议充当MAC帧的有效载荷。

当路由器D收到了报文之后,并不知道目的主机的MAC地址:

  • 那么能否确定该要找的主机就在这个局域网里呢?
    • 能知道!!因为当前是根据目的IP地址来判断的。
    • 具体来说就是根据网络号判断的。
  • 只要判断在这个局域网,那么就在通信之前先进行ARP请求,得到主机C的MAC地址。
  • 然后再路上封装MAC帧,将报文准确的一对一交给主机C。
  • 至此就完成了数据包转发。

在这里插入图片描述
假设有主机A和主机B,主机A只知道主机B的IP地址,但是并不知道主机B的MAC地址。

硬件类型: 指链路层网络类型,1为以太网。

协议类型: 指要转换的地址类型,0x0800为IP地址。

硬件地址长度: 6个字节。

协议地址长度: 4个字节(IPv4)。

发送端以太网地址: MAC A

发送端IP地址: IP A

目的以太网地址:F

目的IP地址: IP B

路由器然后将整个报文封到了MAC帧的有效载荷,然后将数据帧转出去。

而数据帧在转的时候也不知道要转给谁,所以目的地址填的也是全F。
所以这个数据帧在转发的时候,在局域网当中就全部被转发,以播的形式被每个主机都收到了。


5. 如何获得目的MAC地址

路由器MAC帧将ARP封装到了自己的有有效载之后,就要在局域网内广播:

  • 那么每个主机都要提取,目的地址是全F,每一台主机都要处理(目的地址广播所有主机都要处理)。
  • 每一台主机都要提取MAC帧的帧类型,帧类型是0806发现是ARP。
  • 每一个主机都要将报文解开,将有效载荷交给上层ARP协议。
  • ARP层接收到了先看目的IP地址,所有的主机都会拿着目的IP地址与自身的IP地址对比。
  • 如果请求不是自己的,就在ARP层将数据包丢弃了。
  • 这时是在ARP层丢弃的,并不是在MAC帧层丢弃的,但也是在数据链路层。

op字段为1表示ARP请求,op字段为2表示ARP应答。

  1. 任何一台主机,可能同时在向别的主机发起ARP,也在接受别的主机给他的ARP应答!
  2. 任何一台主机,都可能被发起ARP请求。

对于任何一台主机(重点):

  • 发出:
    • 一定发出的是ARP的请求。
  • 接收:
    • 别人向我发起的ARP请求。
    • 我向别人发起ARP请求时,得到的ARP响应。

假设局域网内从A主机发送给B主机具体流程:

主机A要发起ARP了,填写报文的相应字段。主机A构建了一个ARP请求,并不是直接发过去的,而是交付给下一层。

在这里插入图片描述
局域网内,发出去的数据包一定能被主机B收到!!

主机B除外的其他主机收到报文后:

  • 其他主机也能拿到这个报文,因为是广播,目的MAC地址全F。
  • 于是其他主机就开始处理这个报文,在MAC帧层解包,然后将有效载荷交付给上一层(ARP层)。
  • ARP层首先要提取出op字段,先根据op来判断这次的ARP报文是请求还是响应。
  • 然后立马再看目的IP,一看填的是IPB和自己不一样,所以其他主机直接将报文丢弃。

主机B收到报文后:

  • 与此同时,主机B也要做同样的工作,MAC帧层也要将报文的有效载荷交给ARP层。
  • 主机B也要先提取op,发现是1,那就是请求。
  • 然后立马再看目的IP,一看填的是IPB和自己的一样。
  • 再看是哪个主机要请求主机B的MAC地址,提取出发送端以太网地址,和发送端IP地址。

主机B再下来就要构建一个ARP应答:

在这里插入图片描述
然后MAC帧就封装好了发送到局域网里,其他的主机也能收到,只不过在MAC帧层提取以太网目的地址时,发现和自己不一样,直接就将报文丢弃了。

所以第一次丢弃(发送时)和第二次丢弃(响应时)是不一样的!!第一次是在ARP层丢弃的,第二次是在MAC帧层丢弃的。

主机A收到报文后:

  • 于是主机A收到了报文,在MAC帧层提取报头中的以太网目的地址,发现数据就是发给主机A的。
  • 帧类型是0806是ARP,所以解包将报文直接向上交付给自己的ARP层。
  • 接下来ARP层先看op,值为2代表的是应答。
  • 就意味着主机A曾经向别的主机发起过ARP请求,这个时候请求的那个主机给我应答了。
  • 这时主机A才获取发送端的以太网地址,发送端的IP地址。

所以主机A就得到了主机B,IP为B的主机的MAC地址。然后再将报文重新封装成MAC帧再定向的发送给主机B,此时就能正常的进行通信了。

衍生问题:

如果远方的发送主机,非常高频的向主机B发数据的话,难道每次发送每一个报文的时候都要遵守先ARP得到MAC地址,然后再向主机B发送的过程吗?

  • 这是不是有点挫了?这样效率太低了!!
  • ARP肯定不是每一次都要发起的,需要被缓存起来!谁请求?谁缓存!!
  • 缓存的是目的IP和目的MAC的映射关系。
  • 一旦经过一次ARP得到目的IP和目的MAC地址对的映射关系,在系统层面上缓存起来。
  • 往后的再发的报文直接拿着目的IP去查表查到MAC地址就好了,然后再将报文发过去。

万一主机B的MAC地址发生变化了:

  • 比如说这个主机不联网退出了,重新又接入了一台主机。
  • 那么这个IP地址就被新主机拿到了(动态分配IP)。
  • 所以这个缓存是暂时缓存,一般是15 ~ 20分钟(可以配置)。

这个缓存有个特点,因为MAC地址一直在变,所以就注定了这个缓存要保存最新的MAC地址。只要ARP比较新,就会重新更改缓存数据。

查看ARP缓存表:

Linux指令:arp -a

补充:

ARP的过程不是只在一个局域网内发生的, 而是在每一个局域网中发生,也可以在路由的路上进行ARP。

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

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

相关文章

深入浅出排序算法之希尔排序

目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后&#xf…

详解预处理(1)

目录 预定义符号 预处理指令#define #define定义符号 #define定义宏 #define替换规则 #和##(C语言预处理操作符) # ## 带副作用的宏参数 宏和函数的对比 命名约定 在之前我们学习了一个文本文件.c生成一个可执行程序。今天我们详细讲解其中的…

01 # 手写 new 的原理

new 做了什么? 在构造器内部创建一个新的对象这个对象内部的隐式原型指向该构造函数的显式原型让构造器中的 this 指向这个对象执行构造器中的代码如果构造器中没有返回对象,则返回上面的创建出来的对象 手写 new 的过程 new 是一个运算符,只能通过函…

CSS隐藏元素的N种方法,你知道哪一种最适合你?

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、前…

Camtasia2024永久激活码

真的要被录屏软件给搞疯了,本来公司说要给新人做个培训视频,想着把视频录屏一下,然后简单的剪辑一下就可以了。可谁知道录屏软件坑这么多,弄来弄去头都秃了,不过在头秃了几天之后,终于让我发现了一个值得“…

【Linux】gdb调试

目录 进入调试查看代码运行代码断点打断点查断点删断点从一个断点转跳至下一个断点保留断点但不会运行该断点 退出调试逐过程逐语句监视跳转至指定行运行结束当前函数 进入调试 指令:gdb 【可执行文件】: 查看代码 :l 【第几行】如果输入指…

安全设备

一.防火墙 5层应用层 防火墙 4层 udp tcp 协议 华为 厂商 华为 h3 1.区域划分 Dmz 停火区 Untrust 不安全区域 Trust 安全区域 防火墙 默认禁止所有 二.Waf Web 应用防火墙 放到web前面 产品 雷池 绿盟 软件 安…

递归神经网络 (RNN)

弗朗西斯科佛朗哥 一、说明 循环神经网络非常有趣,因为与前馈网络不同,在前馈网络中,数据只能在一个方向上传播,每个神经元可以与连续层的一个或多个神经元连接,在这种类型的网络中,神经元还可以环回自身或…

安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)

技术背景 实时位置(MobilePosition)订阅和上报,对GB28281设备接入终端尤其重要,如移动单兵设备、执法记录仪、智能安全帽、车载终端等,Android国标接入设备通过获取到实时经纬度信息,按照一定的间隔上报到…

竞赛选题 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…

如何使用 VuePress 搭建博客网站并 Vercel 部署

先来看一下网站截图: 快速上手 1.创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter2.使用你喜欢的包管理器进行初始化 yarn init # npm init3.将 VuePress 安装为本地依赖 yarn add -D vuepress # npm install -D vuepress4.创建你…

【LeetCode:2520. 统计能整除数字的位数 | 模拟 | HashMap】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Sentinel授权规则和规则持久化

大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。 白名单:来源(origin)在白名单内的调用…

面试必考精华版Leetcode994. 腐烂的橘子

题目&#xff1a; 代码&#xff08;2023年10月26日 首刷自解&#xff09;&#xff1a; class Solution { public:int orangesRotting(vector<vector<int>>& grid) {/*统计grid二维数组中有多少新鲜橘子和多少烂橘子&#xff0c;将所有的烂橘子存入一个三元队列…

C++类模板再学习

之前已经学习了C类模板&#xff1b;类模板的写法和一般类的写法有很大的差别&#xff1b;不容易熟悉&#xff1b;下面再做一遍&#xff1b; 做一个椭圆类&#xff0c;成员有长轴长度和短轴长度&#xff1b; // ellipse.h: interface for the ellipse class. // //#if !define…

图论基础和表示

一、概念及其介绍 图论(Graph Theory)是离散数学的一个分支&#xff0c;是一门研究图(Graph)的学问。 图是用来对对象之间的成对关系建模的数学结构&#xff0c;由"节点"或"顶点"(Vertex&#xff09;以及连接这些顶点的"边"&#xff08;Edge&a…

2023年中国医疗器械供应链服务平台发展趋势分析:向国家高端化市场发力[图]

医疗器械供应链服务主要分为全流程供应链服务与院内SPD服务&#xff0c;同时全流程供应链服务主要分为市场、仓储物流与金融三大服务。在SPD数字化赋能下&#xff0c;大数据、云计算等技术支撑促进一站式数字化供应链业务协同平台&#xff0c;带动了整体医疗器械供应链服务的发…

730. 机器人跳跃问题--二分

题目&#xff1a; 730. 机器人跳跃问题 - AcWing题库 思路&#xff1a; 二分 1.当起始能量E大于最大建筑高度1e5 时&#xff0c;E的能量在整个条约过程中全程递增&#xff0c;则大于E的初始能量也必然成立&#xff08;满足二段性&#xff09;。故最小初始能量范围为[0,1e5]&a…

windows如何查看电脑IP地址

介绍两种查看电脑IP的方式 一、第一种方式 1、在电脑左下角搜索网络连接 2、鼠标右键你目前连接的网络&#xff08;wifi就点wifi 网线就点以太网&#xff09;&#xff1b;选择里面的状态。 3、点击详细信息&#xff0c;这里的IPv4地址就是你电脑的IP。 二、第二种 1、win…