arp 协议

数据链路层

我们之前学习到的 IP 协议解决的是数据跨网络传输的问题。 数据链路层解决的是:直接相连的主机,进行数据交付的问题! 直接相连的设备包括我们的电脑,路由器等等哈!

我们在网络基础那篇文章中讲过什么是以太网,这里可以来复习一下:

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

以太网的帧格式

img

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是 48 位,是在网卡出厂时固化的;

  • 帧协议类型字段有三种值,分别对应 IP、ARP、RARP;

  • 帧末尾是 CRC 校验码。用于在数据通信中检测传输过程中可能出现的错误。它是一种错误检测码,通过对数据进行多项式计算来生成校验值,并将该校验值附加到数据中一起发送。接收方在接收数据时也进行相同的计算,并与接收到的 CRC 值进行比较,以检查数据是否在传输过程中发生了损坏。

太网帧格式的报文也叫做 Mac 帧哈!

  • Mac 帧如何做到解包呢?很简单,就是定长报文,掐头去尾就得到有效载荷啦!头:14 字节,尾:4 字节。
  • Mac 帧的有效载荷应该交给上层的那个协议呢?类型字段用来表示将有效载荷交给上层的那个协议!
    • 类型字段为 0x0800 就是将有效子啊喝交给 IP 协议。
    • 类型字段为 0x0806 就是将有效子啊喝交给 ARP 协议。
    • 类型字段为 0x0835 就是将有效子啊喝交给 RARP 协议。

局域网的通信原理

这里还是以以太网为例哈,这个部分在网络基础的那篇文章中已经详细讲解过了,这里简单提一下!

img

如上图所示:假设一个局域网中的 H1 要发送一条数据给同一局域网中的 H7 主机!H1 主机进行 Mac 帧的封装,然后发送发哦局域网,然后整个局域网的主机都会收到这个 Mac 帧,收到 Mac 帧的主机会读取报文中的目的 Mac 地址,如果和自己的 Mac 地址不相同,报文就会被直接丢弃!如果和自己的 Mac 地址相同,就会继续进行解包和向上交付!

路由器也是 有网络层和数据链路成的,路由器收到报文的时候,先解包,再查路由表,然后再进行封转,转发!直到到达目标主机所在的局域网!

分析这个解包和封转的过程不难看出,Mac 帧只在局域网中有效。路由器进行转发的过程中,源 Mac 地址和 目标 Mac 地址是不端变化的!

ARP 协议

不知道你有没有这样一个疑问:在局域网中通信的两台主机,最开始的时候我们怎么知道目标主机的 Mac 地址呢?这就要引出 ARP 协议啦!

什么是 ARP 协议

ARP(Address Resolution Protocol,地址解析协议)是一种用于将IP地址映射到MAC地址的协议。ARP 不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。就是说 ARP 协议本身是被划分到了数据链路层的,但是 ARP 协议是 Mac 帧的上层协议!

ARP协议的作用

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

ARP 协议的数据报格式

img

  • 硬件类型指链路层网络类型, 1 为以太网;
  • 协议类型指要转换的地址类型, 0x0800 为IP地址,即将 IP 地址转换为 Mac 地址。
  • 硬件地址长度对于以太网地址为 6 字节,填 6 就行。
  • 协议地址长度对于 IP 地址为 4 字节,填 4 就行。
  • op字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。

不难发现,对于 IP 地址到 Mac 地址的转化大部分的字段都是固定的写法!

模拟一次 ARP 请求获得目标主机 Mac 地址的过程

img

如上图所示,在局域网 A 中,主机 R 想要给主机 C 发送一条数据,但是主机 R 并不知道主机 C 的 Mac 地址。因此需要进行 ARP 请求获取主机 C 的Mac 地址!

  1. 首先在主机 R 的 ARP 软件层进行 ARP 报文的封装:

img

  • 硬件类型,协议类型,硬件地址长度,协议地址长度都是固定填法。

  • 发送的是 ARP 请求 OP 字段填写 1。

  • 目的以太网地址现在我们还不知道,直接填上全 F 就行!

  1. APR 请求报文封转完毕之后,就会交付给下层,构建 Mac 帧:

img

  • 目的以太网地址不知道,填全 F 表示广播地址,任何收到这个 Mac 帧的主机都需要进行解包向上交付。
  • 以太网源地址是填写 MacR 哈,上面的图有一点小错误。
  • 帧类型是 0x0806 表示有效载荷是 ARP 报文。将来需要交给 ARP 的软件层。
  1. Mac 帧构建完毕之后,就会通过网卡发送到局域网。因为目的 Mac 地址是广播地址,局域网中的任何主机都会收到这个 Mac 帧并进行解包,那么就会有两种情况:

    1. 除了主机 C 之外的其他主机收到了这个 Mac 帧,假设就是主机 B。

      • 主机 B 收到这个 Mac 帧之后,进行固定长度地掐头去尾,发现帧的类型是 0x0806,也就是 ARP 协议,就会将有效载荷交付给 ARP 的软件层。
      • ARP 的软件层收到这个报文之后,首先会取出 OP 字段,发现 OP 字段为 1 ,即该报文是 ARP 请求。然后再去取目的 IP 地址,发现目的 IP 地址和自己的 IP 地址不相同,那么就会直接将报文在 ARP 层丢弃。
    2. C 主机收到了这个 Mac 帧。

      • 主机 C 收到这个 Mac 帧之后,进行固定长度地掐头去尾,发现帧的类型是 0x0806,也就是 ARP 协议,就会将有效载荷交付给 ARP 的软件层。

      • ARP 的软件层收到这个报文之后,首先会取出 OP 字段,发现 OP 字段为 1 ,即该报文是 ARP 请求。然后再去取目的 IP 地址,发现目的 IP 地址和自己的 IP 地址相同,那么主机 C 就会进行 ARP 应答!

      • 在主机 C 的 ARP 软件层进行 ARP 应答的封装:

        222.jpg

        • 同样地,硬件类型,协议类型,硬件地址长度,协议地址长度都是固定填法。
        • op 字段填写 2 表示这是 ARP 应答!
        • 站在主机 C 的视角,发送端以太网地址,发送端 IP 地址,目的以太网地址,目的 IP 地址都是清楚的!
      • ARP 应答封装完成之后,就会向下交付,封装 Mac 帧。

        img

        • 目的以太网地址,源以太网地址主机 C 都已经知道了。
        • 帧的类型是 0x0806 表示有效载荷是 APR 报文。将来需要交给 ARP 的软件层。
      • Mac 帧封装完毕之后,就会将他发送到局域网,此时也有两种情况:

        1. 除了主机 R 以外的其他主机收到了这个 Mac 帧。这个主机发现目的以太网地址不是自己,会将报文直接丢弃,
        2. 主机 R 收到了这个 Mac 帧,发现目的以太网地址是自己,那么机会接收这个报文,从而获取到主机 B 的 Mac 地址,就这样,完成了一次 ARP 请求和响应的过程。

    通过以上模拟的 ARP 通信过程,我们不难得出结论:

    1. ARP 收发的过程中,收到的任何 ARP 报文都是先看 OP 字段。
    2. OP 字段决定了 ARP 报文的种类,是 ARP 请求报文还是 ARP 响应报文呢?不同类型的 ARP 报文又决定了接下来是看目的 IP 地址还是发送端的 Mac 地址。

在局域网中的主机每次进行通信之前都要进行 ARP 是不是有点麻烦,好在操作系统会帮我们缓存主机的 Mac 地址和 IP 地址的映射关系!我们可以使用 arp -a 命令查看缓存的映射数据!下图是在 Windows 操作系统中查看到的结果:

img

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

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

相关文章

音频怎么转换成二维码?1分钟在线生成音频二维码

音频是现在很常见一种内容展现方式,很多人会通过音频文件来做推广传播,在很多的应用场景中,音频用来为用户提供内容,从而提升用户体验效果。 为了方便用户能够快速的获取音频文件,通过将音频生成二维码之后&#xff0…

基于单片机的便携式瓦斯检测仪系统设计

**单片机设计介绍,基于单片机的便携式瓦斯检测仪系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的便携式瓦斯检测仪系统设计是一个针对煤矿等工业环境中瓦斯气体浓度检测的重要项目。以下是该设计…

【单调栈】力扣84.柱状图中最大的矩形

上篇文章我们介绍了使用 无重复值 单调栈代码解决 含有重复值 的问题,在文章的最后,留下了一道考察相同思想的题目,今天我们来看看如何套路解决该题。 (还没看过前几篇介绍的小伙伴赶快关注,在 「单调栈」 集合里查看…

启信宝商业大数据助力全国经济普查

近日,合合信息旗下启信宝收到中国青年创业就业基金会感谢信,对启信宝协同助力全国经济普查和服务青年创业就业研究表达感谢。 第五次全国经济普查是新时代新征程上一次重大国情国力调查,是对国民经济“全面体检”和“集中盘点”,…

2024年最受欢迎的视频号小店,怎么做才能月入过万?两步教会你

大家好,我是电商花花。 要说现在最火的项目,我觉得是视频号小店,现在视频号小店经过两年时间的沉淀,让更多人看到了视频号强大私域转化和高利润空间。 抖音小店我们应该也都知道,现在现在的抖音小店利润是不是变小了…

ESCTF-密码赛题WP

*小学生的爱情* Base64解码获得flag *中学生的爱情* 社会主义核心价值观在线解码得到flag http://www.atoolbox.net/Tool.php?Id850 *高中生的爱情* U2FsdG开头为rabbit密码,又提示你密钥为love。本地toolfx密码工具箱解密。不知道为什么在线解密不行。 *大学生的爱情* …

lua脚本在redis集群中哈希槽分片问题

上文说到,通过用redis lua脚本实现时间窗分布式限流 可以操作redis lua脚本来实现时间窗限流,在执行lua脚本的时候,参数中有个keys列表,当lua脚本中如果有操作多个key的情况,就可以传个key列表了。通常情况下&#xff…

java 抠取红色印章(透明背景)

一个亲戚让我帮他把照片里的红色印章抠出来,,,记录下处理过程,代码如下,可直接用: public static void signatureProcess(String sourceImagePath, String targetImagePath) {Graphics2D graphics2D null…

Nginx_简介 + Linux系统下详细安装教程指路

安装教程指路 可参看该视频【尚硅谷Nginx教程(亿级流量nginx架构设计)】 https://www.bilibili.com/video/BV1yS4y1N76R/?p2&share_sourcecopy_web&vd_source4c2f33f3ba1a0dd45bfdf574befd0069 的p2-p7。从安装centos虚拟机到在虚拟机上安装ng…

JVM(一)——内存结构

一. 前言 1、什么是 JVM? 1)定义: Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 2)好处: 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越…

C++从入门到精通——函数重载

函数重载 前言一、函数重载概念二、函数重载的分类参数类型不同的函数重载参数个数不同的函数重载参数类型顺序不同的函数重载 三、函数重载的具体代码展示main.cpp 四、为什么为什么C支持函数重载,而C语言不支持函数重载呢 前言 函数重载是指在同一个作用域内&…

.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案

目录(结尾附加项目代码资源地址) 引言: 1. SAGA事务模式 2. 拆分为子事务 3. 失败回滚 4. 如何做补偿 4.1 失败的分支是否需要补偿 5. 异常 6. 异常与子事务屏障 6.1 NPC的挑战 6.2 现有方案的问题 6.3 子事务屏障 6.4 原理 7. 更多高级场景 7.1 部分…

30-3 越权漏洞 - 水平越权(横向越权)

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、定义 攻击者可以访问和操作与其拥有同级权限的用户资源。 示例: 学生A在教务系统上正常只能修改自己的作业内容,但由于不合理的权限校验规则等原因,学生A可以修改学生B的内…

element-ui autocomplete 组件源码分享

紧接着 input 组件的源码,分享带输入建议的 autocomplete 组件,在 element-ui 官方文档上,没有这个组件的 api 目录,它的 api 是和 input 组件的 api 在一起的,看完源码之后发现,源码当中 autocomplete 组件…

Linux部分命令

目录 1.文件介绍 2.ls命令 3.目录命令 4.相对路径以及绝对路径 5.命令创建目录(文件夹) 6.which命令 7.find命令 8.grep命令 9.wc命令 10.echo、tail、重定向符 1.文件介绍 和window不同,Linux没有盘路径,所有的文件都存…

Linux部署Kafka2.8.1

安装Jdk 首先确保你的机器上安装了Jdk,Kafka需要Java运行环境,低版本的Kafka还需要Zookeeper,我此次要安装的Kafka版本为2.8.1,已经内置了一个Zookeeper环境,所以我们可以不部署Zookeeper直接使用。 1、解压Jdk包 t…

OSPF GTSM(通用TTL安全保护机制)

目录 GTSM的定义 使用GTSM的目的 GTSM的原理 配置OSPF GTSM实例 组网需求 配置思路 操作步骤 1. 配置各接口的IP地址 2.配置OSPF基本功能 3.配置OSPF GTSM 4. 验证配置结果 GTSM的定义 GTSM(Generalized TTL Security Mechanism),…

1.Mysql基础入门—MySQL-mysql 8.0.11安装教程

1.Mysql基础入门—MySQL-mysql 8.0.11安装教程 摘要个人简介下载Mysql安装Mysql配置环境变量 摘要 MySQL 8.0.11的安装过程涉及几个关键步骤,首先访问MySQL官方网站下载页面,选择操作系统相对应的MySQL版本进行下载。对于Windows用户,启动下…

element-ui inputNumber 组件源码分享

今日简单分享 inputNumber 组件的实现原理,主要从以下四个方面来分享: 1、inputNumber 组件的页面结构 2、inputNumber 组件的属性 3、inputNumber 组件的事件 4、inputNumber 组件的方法 一、inputNumber 组件的页面结构。 二、inputNumber 组件的…

【动手学深度学习-pytorch】-9.3深度循环神经网络

到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而,对一个单层来说,这可能具有…