【计算机网络】ARP最全详解

news2024/11/13 9:47:34

在网络世界中,只有两种地址,一种是之前讲解过的MAC地址,另一种是IP地址。MAC地址是烧制在NIC网卡内部的物理地址,在数据链路层中进行;IP地址则是在操作系统(OS)中设置的逻辑地址,在网络层中运行。ARP就是负责将这两个地址关联起来,起着数据链路层和网络层之间的架桥作用的协议。虽然ARP是位于数据链路层和网络层中间的协议,但也可以作为数据链路层的协议来进行讲解。

当某台终端发送数据时,需要将接收到的来自网络层的IP数据包封装成以太帧,并将其传输到缆线中。但是,如果只是接收了IP数据包,是不足以创建以太帧的,还需要其他信息。发送方MAC地址已经写入自己的NIC网卡中,因此是可知的,但是对接收方MAC地址一无所知。因此,在实际进行数据通信之前,需要使用ARP根据接收方IPv4地址计算出接收方MAC地址,这一处理被称为地址解析。

目录

ARP的数据帧格式

使用ARP进行地址解析的流程

ARP的缓存功能

使用GARP的功能

IPv4地址的重复检测


ARP的数据帧格式

接下来,对ARP数据帧格式中的每个字段进行讲解:

--硬件类型

硬件类型是一个2字节(16比特)的字段,表示使用的是第二层的协议。它对各种第二层的协议进行了定义,如果是以太网,硬件类型就是0x0001。

--协议类型

协议类型是一个2字节(16比特)的字段,表示使用的是第三层的协议。它对各种第三层的协议进行了定义,如果是IPv4,协议类型就是0x0800。

--硬件地址大小

硬件地址大小是一个以字节为单位来表示硬件地址,即MAC地址的长度为1字节(8比特)的字段。由于MAC地址为6字节(48比特),因此需要输入6。

--协议地址大小

协议地址大小是一个以字节为单位来表示网络层使用的地址,即IP地址的长度为1字节(8比特)的字段。由于IP地址(IPv4地址)的长度为4字节(32比特),因此需要输入4。

--操作码

操作码(OP Code)是一种表示ARP帧的种类的2字节(16比特)的字段。虽然定义了很多操作码,但是在实际构建系统的工作场合中经常会看到的代码时表示ARP Request的1和表示ARP Reply的2这两种。

--发送方MAC地址/发送方IPv4地址

发送方MAC地址和发送方IPv4地址是一种表示发送ARP终端的MAC地址和表示IPv4地址的长度可变的字段。它们所表示的就是字面意思,无须太过深入地考虑。

--目标MAC地址/目标IPv4地址

目标MAC地址和目标IPv4地址是一种表示需要使用ARP进行地址解析的MAC地址和表示IPv4地址的长度可变的字段。由于一开始是无法知道MAC地址的,因此会设置虚拟的MAC地址。

使用ARP进行地址解析的流程

ARP的操作非常简单,也非常容易理解。大家可以想象一下,在医院里护士会对着候诊室等待就诊的大家大声地喊:“xx先生在吗?”,于是就会有人回答:“是我!”的场景。ARP中的“xx先生在吗?”的数据包被称为ARP Request。ARP Request会以广播的形式被发送给同一网络中的所有终端。此外,“是我!”的数据包则被称为ARP Replay。ARP Replay会通过1:1的单播发送。ARP只会使用这两个数据包将MAC地址和IP地址关联起来。

ARP的缓存功能

所有的通信都需要从ARP开始。只有经过ARP 处理,知道数据包应当发送给哪一个MAC地址,才能开始进行通信。

不过,该ARP也存在致命的缺陷,即“需要以广播为前提”。由于一开始是不知道对方的MAC地址的,因此使用广播也是一种必然的做法。但是,广播是一种会向同一网络中的所有终端发送数据的低效的通信方式。例如,假设网络中有1000台终端,那么广播就会将流量传输给这1000台的终端。如果大家在每次通信时都发送ARP,那么网络就会被ARP流量淹没。

原本MAC地址和IPv4地址也是不会经常改变的。因此,ARP具备了对经过地址解析的内容临时进行保存的缓存功能。

经过ARP处理,知道了MAC地址之后,就可以将MAC地址作为ARP表的entry(数据)添加并保存在表中。终端在保存entry的期间不会发送ARP。然后,在经过一定时间(超时时间)后,就会删除entry,再次发送ARP Request。超时时间的长短取决于使用的设备和操作系统。例如,Windows10的超时时间是10分钟,cisco公司生产的设备的超时时间是4小时。当然,这两个时间都是可以进行更改的。

使用GARP的功能

ARP是一种支持早期阶段的TCP/IP的非常重要的协议。如果卡在ARP这里,后续的通信将无法建立。因此,除了常规的ARP之外,还存在可以高效实现地址解析的特殊的ARP,这种ARP被称为GARP(无故ARP)

GARP是一种在ARP字段的目标IPv4地址中设置了自己的IPv4地址的特殊的ARP,常用于IP地址的重复检测和相邻设备的表更新中。

IPv4地址的重复检测

大家有没有在公司或者学校的网络环境中不小心设置了与其他人相同的IP地址的经历呢?在这种情况下,如果使用的是windows操作系统,就会显示“检测到IP地址冲突”的错误信息。

当设置了IPv4地址时,操作系统就会发送一个将该IPv4地址设置为目标IPv4的GARP(ARP Request),并询问所有人“可以使用这个IPv4地址吗?”由于必须向所有人进行询问,因此需要使用广播。此外,如果存在使用该IPv4地址的终端,就会返回单播的ARP Reply。接收到ARP Reply之后,操作系统就会判断出存在具有相同IPv4地址的终端,并显示错误信息;如果没有返回ARP Reply,就会显示需要设置IPv4地址。

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

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

相关文章

启动ElasticSearch报错:ERROR: Elasticsearch exited unexpectedly, with exit code 78

我在Ubuntu下通过Docker安装ElasticSearch的时候,启动容器报错,最后一行报错内容如下: ERROR: Elasticsearch exited unexpectedly, with exit code 78上图是完整报错日志,从中我们可以看到关键错误信息,错误原因是vm…

多线程-生产者消费者模型

一、基本信息 1、场景介绍:厨师和吃货的例子,吃货吃桌子上的面条,吃完让厨师做,厨师做完面条放桌子上,让吃货吃,厨师如果发现桌子上有面条,就不做,吃货发现桌子上没有面条就不吃。 …

UE5 C++(十三)— 创建Character,添加增强输入

文章目录 创建Character第三人称模板添加增强输入引用在脚本中实现移动、旋转 创建Character第三人称模板 创建MyCharacter C类 添加增强输入引用 在DEMO.Build.cs 脚本中添加增强输入模块 有个容易出错的点,这里的设置一定要正确 然后添加引用到C头文件中 …

vim/vi 模式切换和常用快捷键

vim/vi 切换模式: vim/vi 常用快捷键: 一般模式: gg:文件开头、G:文件结尾 shift^ :光标当前行首、shift^:光标当前行尾 yy:复制、p:粘贴、dd:删除当前行、…

VScode右键没有go to definition选项

1. 背景 1.1. 项目代码在远程服务器上; 1.2. win重装系统,重新安装vscode出现问题,没重装系统之前是没问题的; 2. 问题 打开vscode,通过ssh链接远程服务器中的项目代码后,选中函数右键没有go to defini…

年底了,来看看测试大佬的年终项目总结吧!值得借鉴

测试总结,是测试负责人或测试经理的测试管理能力的体现。在项目或版本测试完成,测试报告上交后,测试的工作并不是完结了,而是另外一件大事需要做,那就是为这个项目或是版本做一次测试总结。 添加图片注释,不…

10本审稿及出版效率均较好的科普期刊参数分享!

医、药、护、技及医学工程等相关的人员,进行卫生高级职称评审时,需要在专业期刊上公开发表本专业学术论文,论文的方向、内容质量以及发表的刊物都至关重要。今天常笑医学给大家整理了10本审稿及出版效率均较好的科普期刊!参数分享…

搭建React开发环境-webpack实现

周末在家学会React前端知识,记录下来,方便备查。 webpack版本:webpack5 编译器:vscode 第一步、新建项目及初始化 1)新建项目文件夹 可命名为 my_webpack 2)初始化项目 使用命令 npm init -y,…

[SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类

最近在项目中遇到两种情况,准备写个博客记录一下。 情况说明:Service层一个接口是否可以存在多个具体实现,此时应该如何调用Service(的具体实现)? 其实之前的项目中也遇到过这种情况,只不过我采…

CTF之逆向入门

逆向工程(Reverse Engineering),又称反向工程,是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的…

微信私密朋友圈被吐槽有BUG

日前,大量网友在各社交媒体上讨论微信私密朋友圈出现 Bug 的话题,起因是跨年期间一个网友发布了一条”私密朋友圈,但不一会就收到朋友发来的信息,”又偷偷发朋友圈了?“,估计此时网友可能已经”寒毛四起、汗…

物理机搭建hive

一、修改Hadoop配置 修改core-site.xml 配置yarn-site.xml 分发文件,然后重启集群 二、 Hive解压安装 上传文件 添加hive环境便量,source生效 启动高可用集群,启动hive 三、配置mysql元数据库 检查当前系统是否安装过Mysql&#xf…

基于MATLAB车牌识别系统设计

基于MATLAB车牌识别系统设计 一、设计方案 智能交通系统已成为现代社会道路交通发展趋势。在智能交通系统中,车牌自动识别系统是一个非常重要的发展方向。对于车牌识别系统的要满足当车辆通过摄像头采集车辆图片,将其图片进行图像预处理、车牌定位、字符…

关于FPGA仿真复位信号和实际板子复位信号的吐血大坑

最近在研究mipi dphy IP下载到板子上进行验证的初步流程问题 IP的example案例里面,系统复位全是高电平复位,低电平工作 想当然的打通IP流程,写工程的时候也使用了高电平复位,低电平复位 结果调试了N轮,init_done信号一…

通用web自动扩缩容_智能运维引擎CudgX

一、概述 CudgX是星汉未来自主研发的面向云原生时代的智能运维引擎,支持根据 MetricQPS 分段耗时指标进行自动扩缩容。 通过各类服务的多维度、大规模的日志数据采集以及机器学习训练分析,对服务进行数字化、指标化度量,并基于部署的…

基础算法【解题思路】:单链表的倒数第k个节点

定义指针p1,让p1走k步: 定义指针p2,在p1走了k步的时候,p2也跟着走。 p1走到最后的时候走了n-k步,停留在最后的null结点。 P2从头结点开始,也跟着走到了n-k步,而n-k恰好是倒数第k个节点。 例…

TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

css - 渐变样式实现(渐变边框 + 渐变背景)

.select {border-bottom: 2px solid; /* 下边框 */border-image: linear-gradient(90deg,rgba(250, 173, 20, 0) 0%,rgba(250, 173, 20, 1) 51.46%,rgba(125, 87, 10, 0) 100%)1; /* 边框渐变 */background-image: radial-gradient(circle at 49% 238%, #faad14, transparent 7…

2023APMCM亚太数学建模C题 - 中国新能源汽车的发展趋势(2)

五.问题二模型建立和求解 5.1 问题二模型建立和求解 针对题目二,题目要求收集中国新能源电动汽车行业发展数据,建立数学模型描述,并预测未来十年的发展。由于在第一文中,我们已经收集了一定的新能源行业发展数据&…

马尔可夫算法及其实例(预测类模型)

马尔科夫预测模型是一种基于马尔科夫过程的预测方法。马尔科夫过程是一类具有马尔科夫性质的随机过程,即未来的状态只依赖于当前状态,而与过去状态无关。这种过程通常用状态空间和状态转移概率矩阵来描述。 在马尔科夫预测模型中,系统被建模为…