ARP协议

news2025/1/16 2:02:19

ARP协议

文章目录

  • ARP协议
      • ARP协议的作用
      • ARP协议的定位
      • ARP数据报的格式
      • ARP协议的工作流程
      • ARP缓存表
      • RARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。

ARP协议的作用

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

在网络通信中,知道目标主机的IP地址,可以将数据报文发送到目标主机所在的局域网,实际上是将数据报文发送到管理该局域网的路由器。然后由路由器将数据报文转发到目标主机上。在局域网中通信需要先知道目标主机的物理地址,而此时数据报文内只包含目标主机的IP地址,并不包含该主机的mac地址。因此在局域网中正式通信之前,需要根据目标主机的IP地址,获取到mac地址,然后才能将数据报文封装成mac帧,转发到目标主机。ARP协议就是通过IP地址获取mac地址这样的一个协议

ARP协议的定位

ARP协议即知道IP地址,也能通过IP地址获取到mac地址,因此ARP协议是处于网络层和数据链路层之间的协议。准确来说是处于以太网协议的上层。

在TCP/IP四层模型中,网络协议栈自顶向下分为四层,分别是应用层、传输层、网络层、数据链路层。

其中应用层最常见协议的是HTTP、HTTPS和DNS,传输层最常见协议的是TCP、UDP,网络层最常见协议的是IP,数据链路层最常见协议的是MAC协议。

image-20231017151219887

而ARP、RARP协议和MAC帧协议虽然同属于数据链路层,但ARP协议和RARP协议都位于MAC帧协议的上层。

image-20231017152525759

  • 因此mac帧协议的上层协议不一定是IP协议,有可能是ARP/RARP。也就是说mac帧解包后向上交付时不只会交付给IP协议,也可能会交付给ARP、RARP协议。
  • 与之类似的还有ICMP协议/IMP协议都与IP协议同属于网络层,但ICMP协议/IMP协议位于IP协议的上层。

ARP数据报的格式

image-20231017161711713

  • 注意到mac帧首部的源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。帧类型是指除去mac帧首部后,根据帧类型将有效载荷向上交付给哪个协议。例如帧类型是0800,有效载荷就向上交付给IP协议,帧类型是0806,向上交付给ARP协议,帧类型是8035,向上交付给RARP协议。
  • 硬件类型指链路层网络类型,1为以太网。
  • 协议类型指要转换的地址类型,0x0800为IP地址。即根据该协议类型转换为mac地址。
  • 硬件地址长度对于以太网地址为6字节。
  • 协议地址长度对于IP地址为4字节。
  • op字段为1表示ARP请求,op字段为2表示ARP应答。
  • 在主机不知道目标主机的mac地址的场景下,会将目的以太网地址的字段填充为全F,表示该字段未知。

ARP协议的工作流程

这里以主机1向主机5发送数据报文为例

image-20231017162045901

  • 数据报文在主机1中,从应用层自顶向下封装交付过程中,由于不知道目标主机的mac地址,操作系统会调用相关接口,不由IP层将报文直接交给mac层,而是交给ARP层。ARP对数据报文进行封装,在OP处填充字段为1表示该ARP报文为ARP请求,由于不知道目标主机的mac地址,因此目标以太网地址填充为全F,接着将报文向下交付给mac层。mac层对数据报文进行封装后,以局域网内广播的方式发出。

image-20231017163243892

  • 由于该mac帧是在局域网中以广播的方式发出,因此局域网中的所有主机都能够收到该报文。收到报文后依次解包并向上交付,报文达到ARP层时,先查看OP,得知该报文是ARP请求,再去查看目标主机IP地址,若不是本主机IP就丢弃报文。注意该ARP请求是在ARP层丢弃的。
  • ARP请求中的目标主机IP是本主机IP,就构建ARP响应。首先对ARP报文的OP字段设置为2,表示该ARP报文类型是ARP响应。然后将本主机的MAC地址填充到源主机MAC地址字段上。依次填充字段后向下交付给MAC层,由mac帧协议封装成mac帧。然后以广播的方式在局域网中发出。

image-20231017164040042

  • 由于该mac帧是在局域网中以广播的方式发出,因此局域网中的所有主机都能够收到该报文。收到报文后依次解包并向上交付,报文达到ARP层时,先查看OP,得知该报文是ARP响应,再去查看目标主机IP地址,若不是本主机IP就丢弃报文。注意该ARP响应是在ARP层丢弃的。
  • ARP响应中的目标主机IP是本主机IP,就对该ARP响应做处理。这样主机1就拿到主机5的mac地址,主机1就能够与主机5构建网络通信了。

总结一下:

  1. 主机的ARP层能够到达的报文有两种,分别是ARP请求和ARP响应,不同类型的ARP报文所应对的处理方式不同。然后再去查看ARP报文的目的主机IP,根据该IP地址抉择是将该报文丢弃还是处理。
  2. 由于是在局域网中以广播的形式进行ARP请求和响应,每个主机都能够接收到该ARP报文,因此很容易能够在局域网中以ARP请求洪水或ARP响应洪水的方式充当ARP通信中间人,破坏局域网中的通信。因此局域网中正常的ARP请求/响应是建立在局域网中的主机都遵守规则的基础上。

ARP缓存表

实际不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a命令进行查看。

image-20231017165939471

每次发起ARP请求时,会先去缓存表中查看是否已经存在需要的IP地址和MAC地址的映射关系,若存在就在缓存表中提取即可,若不存在就构建请求以广播的方式在局域网中发出,获取目标主机的MAC地址,收到ARP响应后,再将对应的映射添加到ARP缓存表中,这种方式得到的映射表项就是动态映射

通过手动方式添加的表项就是静态映射。这种方式添加的表项比较死板,因为对应的映射关系不一定固定不变。但是,静态映射更加安全,不会被攻击者通过ARP请求响应报文添加错误的映射关系。

需要注意的是,缓存表中的表项有过期时间,这个时间一般为20分钟,如果20分钟内没有再次使用某个表项,那么该表项就会失效,下次使用时就需要重新发起ARP请求来获得目的主机的硬件地址。

MAC帧的报头当中已经涵盖了源和目的MAC地址,为什么ARP的报头当中还要有这两个字段?

  • 需要注意的是,MAC帧和ARP虽然都在数据链路层,但毕竟是上下层的关系,因此它们不会互相关心彼此报头当中的数据。
  • 如果底层网络采用的不是以太网,而是其他类型的网络,此时ARP层的MAC地址就是必要的字段。

在局域网中,ARP请求和响应是广播的方式发送,那局域网通信时,数据不也能通过广播的形式发出吗?

  • 在局域网通信时,大多数情况是只知道目标主机的IP地址,不知道目标主机的MAC地址,此时就需要构建ARP请求并以广播的形式发出,广播的形式在于让存在局域网的目标主机尽可能得收到ARP请求,而丢弃ARP请求的根据是目标主机IP地址

  • 局域网中数据通信,而在不知道目标主机IP地址情况下,以广播的形式将数据发出,数据会从数据链路层向上交付到网络层,而在网络层中判断,网络层是由操作系统管理的,这会对网络资源和操作系统资源造成一定的资源浪费。而报文丢弃应该在网络层之下丢弃,而不是向上交付到网络层后再判断。

注意: ARP属于局域网通信的协议标准,因此一台主机不能跨网络向另一台主机发起ARP请求。

RARP协议

RARP(Reverse Address Resolution Protocol,反向地址转换协议),是根据MAC地址获取IP地址的一个TCP/IP协议。

也就是说,某些情况下我们可能只知道对应主机的MAC地址,此时要得知该主机的IP地址就可以使用RARP协议。

理论上来说,RARP协议一定比ARP协议简单,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。

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

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

相关文章

手机爬虫用Scrapy详细教程:构建高效的网络爬虫

如果你正在进行手机爬虫的工作,并且希望通过一个高效而灵活的框架来进行数据抓取,那么Scrapy将会是你的理想选择。Scrapy是一个强大的Python框架,专门用于构建网络爬虫。今天,我将与大家分享一份关于使用Scrapy进行手机爬虫的详细…

2023最令人心动的短视频配音软件

配音在影视、广告和动画等领域中起着非常重要的作用,可以为作品增添情感和戏剧性。然而,许多人不知道如何制作配音,如果你也是这样,一定要花一分钟看完这篇文章。 其实现在有一些AI智能配音软件就很好用,可以帮助我们…

Windows安装SNMP服务

windows10安装SNMP服务 打开计算机的设置–应用–应用和功能–可选功能–点击加号添加功能,添加以下两个功能: windows server安装SNMP服务 搜索打开服务器管理器,点击功能–添加功能,勾选SNMP服务,点击下一步,等待安装完成 按win+R快捷键,运行service.msc,在服务中将…

电脑D盘文件凭空消失了?切记3招,轻松恢复文件!

“由于我c盘内存不够了,我就将部分重要的文件保存到了d盘,今天打开d盘后才发现我这些文件凭空消失了。这究竟是什么呀?还有机会找回这些消失的d盘文件吗?” D盘作为电脑中一个重要的磁盘,很多电脑用户也会选择将文件保…

摩尔信使MThings的协议转换(数据网关)功能

摩尔信使MThings可以作为现场总线(RS485)和以太网的数据中枢,并拥有强大的Modbus协议转换功能。 数据网关功能提供协议转换和数据汇聚功能,可实现多维度映射,包括:不同的通道(总线)类型、协议类型&#xff…

QSpace Pro 4.0.4.001(多面板文件管理器)

QSpace是一个干净高效的多面板文件管理器,也可以连接到FTP,SFTP,WebDAV,Dropbox,OneDrive,GoogleDrive,Amazon S3(和S3兼容),Aliyun OSS。它具有与Finder相同…

调优C / C ++编译器以在多核应用程序中获得最佳并行性能:第一部分

领取嵌入式物联网学习路线对于希望通过多核设计中的多线程或分区利用并行性的而言,重要的第一步是提高应用程序的标量性能。 更好,更轻松的方法之一是应用积极的编译器优化。面向您的处理器并具有高级优化功能(例如自动矢量化,过…

多维时序 | MATLAB实现SSA-CNN-BiGRU-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现SSA-CNN-BiGRU-Attention多变量时间序列预测(SE注意力机制) 目录 多维时序 | MATLAB实现SSA-CNN-BiGRU-Attention多变量时间序列预测(SE注意力机制)预测效果基本描述模型描述程序设计参考资料 预测效果 基本…

身份证二要素核验API:提高身份验证的便捷性与安全性

引言 随着数字化时代的不断发展,身份验证变得愈发重要。在互联网上,身份验证是保护用户隐私和数据安全的关键环节。为了满足这一需求,身份证二要素核验API应运而生,成为提高身份验证的便捷性与安全性的得力工具。 身份验证的重要…

成都爱尔周进院长解读不同近视手术的不同度数要求

常有人这么问:我xx度了还能做近视手术吗?我才xx度也能做近视手术吗? 度数,确实是自己掌握地最清楚“最直观”的一个数据。 要说屈光手术的指标,有角膜曲率、角膜厚度、角膜地形等非常之多。 但这些数据不做详细检查自己根本不知道&#xff…

实战讲解 SpringBoot 定时任务:@Scheduled

最近的开发中又遇到了关于定时调度的开发任务,在定时调度其实有很多的第三方平台可以接入,但是其实在SpringBoot有自带的定时任务注解Scheduled。Scheduled可以通过注解配置快速实现方法的定时调度,直接在方法加上Scheduled注解即可。 1Sche…

什么牌子的led台灯质量好?五款Led护眼台灯推荐

led台灯有环保无污染、耗能低、长寿命等优点,适合用在阅读、书写、批阅等办公或学习的场所。而挑选LED台灯时,分散光挡板做的比较好的优先选择,能分散大量蓝光,对眼睛危害较小。下面,小编为大家推荐五款质量好的led护眼…

MATLAB2018a安装出现License Manager Error-8问题

matlab2018a的path的文件夹解压后为 打开后,找到文件“netapi32.dll”,将其复制到 将其复制到软件安装目录 \MATLAB\R2018a\bin\win64目录下覆盖源文件,安装后没有R2018a文件,所以是要将这个dll文件拷贝到安装目录下的bin/win64文…

57 最长递增子序列

最长递增子序列 题解1 DP O ( n 2 ) O(n^{2}) O(n2)题解2 贪心二分搜索(ref. from Leetcode) O ( n l o g ( n ) ) O(n log(n)) O(nlog(n))鼓掌!!这个思想好棒 给你一个整数数组 nums ,找到其中 最长严格递增子序列…

程序员,今天你被“投毒”了么?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 产品统筹 / bobo 联合制作 / RTE开发者社区 录音间 / 声湃轩北京站 近日,安恒信息 CERT 监测到一起 LNMP 遭受供应链投毒攻击事件。我们发现,在 lnmp.org …

03 里氏替换原则

官方定义: 里氏替换原则(Liskov Substitution Principle,LSP)是由麻省理工学院计算机科学系教授芭芭拉利斯科夫于 1987 年在“面向对象技术的高峰会议”(OOPSLA)上发表的一篇论文《数据抽象和层次》&#…

02 开闭原则

官方定义: 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修 改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保 软件系统开发和维护过程的可靠性。 通俗解释: 对扩展开放…

什么是广告学?什么是广告理论?

想当年,我在众多的专业中选择了广告学,幻想着以后的激情岁月,拿着电脑,出入各种写字楼和同伴时不时拽两句英文。 来后,我也没发现学广告学能有什么远大的理想,满满当当的排课表上有广告学概论、市场营销学…

Go 泛型解密:从基础到实战的全方位解析

Go泛型解密 一、概述 泛型编程是计算机科学中一个相当重要的概念,广泛应用于各种编程语言和框架中。在Go语言中,泛型的讨论和实现也走了一段相对漫长的路。这一路上既有激烈的讨论,也有种种的尝试和迭代。本节将对泛型的基础概念进行深入分析…

看了我项目中购物车、订单、支付一整套设计,同事也开始悄悄模仿了...

在我的mall电商实战项目中,有着从商品加入购物车到订单支付成功的一整套功能,这套功能的设计与实现对于有购物需求的网站来说,应该是一套通用设计了。今天给大家介绍下这套功能设计,涵盖购物车、生成确认单、生成订单、取消订单以…