ARP协议详解

1、ARP协议的定义

地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说,所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议,IPv6使用邻居发现协议(NDP)替代。
ARP协议目前最广泛应用于寻找32位IPv4地址与以太网的48位MAC地址之间的映射。

掌握ARP协议前,需要理解什么是逻辑地址和物理地址。

物理地址
物理地址:物理地址对于主机就类似身份证对于人类。对于每个网络适配器,设置制造商都会给定一个永久的物理地址,将其存储在设备的永久性内存中。就像身份证一样,物理地址就是网络适配器的ID。注意,物理地址是和网络适配器绑定的,如果主机更换了网络适配器,那么它的物理地址也会相应改变。(虽然网络适配器的物理地址是固定的,但也可以通过特殊方法修改,但这种情况极少出现,不影响我们理解)

在TCP/IP分层体系结构中,数据链路层和物理层使用的地址是物理地址。而网络层、传输层和应用层使用的地址是IP地址(逻辑地址)。

逻辑地址
逻辑地址:逻辑地址就是我们常说的IP地址,因为IP地址是由软件实现的,所以把它称为逻辑地址。IP地址是不固定的,它通常从某个网络的IP地址池中获得,改变网络环境,IP地址就会改变。

为什么需要2级地址
分组进行传输必须要2级地址:逻辑地址和物理地址。
IP地址和物理地址是在不同的层次下运行的。同一个目的IP地址可能经过多段链路,每段链路都可能运行不同的链路层和物理层协议,它们的物理地址格式可能都截然不同;同理,同一段链路可能接收来自不同的网络层协议,比如IPv4或者IPX。

有人可能觉得,直接用物理地址替代IP地址不就行了么?
这是因为对IP地址不够了解。现实中,有很多链路层和物理层的协议,它们都有不同的物理地址。如果完全依赖物理地址,那么路由表就需要对每个物理地址建立一个项,那样没有一个路由器能够负担如此庞大的表项。
而IP地址提供了更高层次的抽象,将不同的物理地址抽象为统一的逻辑地址。
IP地址有良好的分层。如果分组转发到同一子网,只需要在路由表中记录统一的网络前缀。比如,一个子网有6000个IP地址,对应6000个物理地址。记录IP地址网络前缀只需要1行,记录物理地址则需要6000行。

有了IP地址,分组的路由(也就是找路)的工作仿佛在同一个网络中进行。如果传输IPv4分组,那么IPv4分组传输过程中经过的所有网络都使用IPv4协议,仿佛它们在一个逻辑上的网络中。

2、ARP工作原理

ARP协议主要依赖ARP高速缓存(ARP cache)。ARP高速缓存就是一个映射表,它记录了IP地址和物理地址的映射关系。每一台主机和路由器都设有ARP高速缓存,在实际传输中,通常已知下一跳的目的IP地址(这是通过查询路由表完成的,不是本篇的知识),通过查询ARP高速缓存即可知道对应的物理地址。
在这里插入图片描述
如何建立ARP高速缓存
高速缓存记录的映射表不是一开始就有的。假设已知下一跳的目的IP地址,如何通过ARP协议得知下一跳对应的物理地址呢?
答案是通过广播ARP请求分组。

ARP请求分组有3个重要信息:1.源IP地址。2.对应的源物理地址。3.目的IP地址。
查询的内容为:对应的目的物理地址。

以下是具体步骤:

假设 A 和 B 位于同一链路,不需要经过路由器的转换,主机 A 向主机 B 发送一个 IP 分组,主机 A 的地址是 192.168.1.2 ,主机 B 的地址是 192.168.1.3,它们都不知道对方的 MAC 地址是啥,主机 C 和 主机 D 是同一链路的其他主机。

在这里插入图片描述

主机 A 想要获取主机 B 的 MAC 地址,通过主机 A 会通过广播 的方式向以太网上的所有主机发送一个 ARP 请求包,这个 ARP 请求包中包含了主机 A 想要知道的主机 B 的 IP 地址的 MAC 地址。
在这里插入图片描述
主机 A 发送的 ARP 请求包会被同一链路上的所有主机/路由器接收并进行解析。每个主机/路由器都会检查 ARP 请求包中的信息,如果 ARP 请求包中的目标 IP 地址 和自己的相同,就会将自己主机的 MAC 地址写入响应包返回主机 A

在这里插入图片描述

由此,可以通过 ARP 从 IP 地址获取 MAC 地址,实现同一链路内的通信。

如果是不同链路怎么办呢?
这就要使用到 代理 ARP 了,通常 ARP 会被路由器隔离,但是采用代理 ARP (ARP Proxy) 的路由器可以将 ARP
请求转发给临近的网段。使多个网段中的节点像是在同一网段内通信。

3、ARP 缓存

现在你知道了发送一次 IP 分组前通过发送一次 ARP 请求就能够确定 MAC 地址。那么是不是每发送一次都得经过广播 -> 封装 ARP 响应 -> 返回给主机这一系列流程呢?

想想看,浏览器是如何做的呢?浏览器内置了缓存能够缓存你最近经常使用的地址,那么 ARP 也是一样的。ARP 高效运行的关键就是维护每个主机和路由器上的 ARP 缓存(或表)。这个缓存维护着每个 IP 到 MAC 地址的映射关系。通过把第一次 ARP 获取到的 MAC 地址作为 IP 对 MAC 的映射关系到一个 ARP 缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送 ARP 请求了,而是直接使用这个缓存表中的 MAC 地址进行数据报的发送。每发送一次 ARP 请求,缓存表中对应的映射关系都会被清除。

通过 ARP 缓存,降低了网络流量的使用,在一定程度上防止了 ARP 的大量广播。
在这里插入图片描述
一般来说,发送过一次 ARP 请求后,再次发送相同请求的几率比较大,因此使用 ARP 缓存能够减少 ARP 包的发送,除此之外,不仅仅 ARP 请求的发送方能够缓存 ARP 接收方的 MAC 地址,接收方也能够缓存 ARP 请求方的 IP 和 MAC 地址,如下所示
在这里插入图片描述
不过,MAC 地址的缓存有一定期限,一般默认是20分钟,超过这个期限后,缓存的内容会被清除。

为什么需要设置生存周期呢?
是因为物理地址和IP地址都可能改变。比如目的主机更换了网络适配器,那么目的主机的物理地址就改变了。
如果源主机通过查看ARP映射表得到了目的主机以前的物理地址,肯定是无法正常通信的。但随着该表项生存周期到时,源主机会重新广播ARP请求分组,这样就可以得到目的主机新的物理地址。从而和目的主机正常通信。

4、ARP报文格式

在这里插入图片描述
前面 14 个字节构成标准以太网的首部,前两个字段 DST 和 SRC 分别表示 以太网的目的地址以太网的源地址,以太网的目的地址如果是 ff:ff:ff:ff:ff:ff 全部为 1 表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是 ARP 请求的长度/类型,ARP 请求 和 ARP 应答这个值为 0x0806。

  • 硬件类型表示硬件地址的类型,硬件地址常见的有 MAC 物理或者以太网地址,对于以太网来说,此值为 1。
  • 协议类型 指出映射的协议地址类型,对于 IPv4 地址,这个值是 0x0800。
  • 硬件大小和 协议大小 分别指出硬件地址和协议地址的字节数。对于以太网中使用 IPv4 的 ARP 请求或应答,它们的值分别是 6 和 4。
  • Op 字段指出如果是 ARP 请求,Op = 1,ARP 应答 ,Op = 2,RARP 请求 Op = 3,RARP 应答,Op = 4。
  • 紧跟在 Op 之后的是 发送方硬件地址(MAC 地址),发送方的协议地址(IPv4 地址),目的硬件地址 和 目的协议地址。

5、RARP

与 ARP 相对的,RARP(Reverse Address Resolution Protocol) 是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议,将打印机服务器等小型嵌入式设备接入网络时会使用到。
在这里插入图片描述
平常我们设置 IP 地址一般会有两种方式,手动设置 和 DHCP 动态获取
在这里插入图片描述
但是对于嵌入式设备来说,它没有任何输入接口,也无法通过 DHCP 获取动态地址。

在这种情况下,就要使用到 RARP 了,你需要准备一个 RARP 服务器,在这个服务器上注册设备的 MAC 地址和 IP 地址,然后将设备接入网络,设备会发出一条 IP 和 MAC 地址的查询请求给服务器,服务器会告诉设备其 IP 地址和 MAC 地址。
在这里插入图片描述

6、ARP 攻击

ARP 是一种非常不安全的协议,目前已经有很多涉及 ARP 的攻击,最主要的就是使用代理 ARP 功能假扮主机,对 ARP 请求作出应答,通过伪造 ARP 数据包来窃取合法用户的通信数据,造成影响网络传输速率和盗取用户隐私信息等严重危害。

ARP 主要攻击方式分为下面这几种

  • ARP 泛洪攻击:通过向网关发送大量 ARP 报文,导致网关无法正常响应。首先发送大量的 ARP 请求报文,然后又发送大量虚假的 ARP响应报文,从而造成网关部分的 CPU 利用率上升难以响应正常服务请求,而且网关还会被错误的 ARP 缓存表充满导致无法更新维护正常 ARP缓存表,消耗网络带宽资源。
  • ARP 欺骗主机攻击:ARP 欺骗主机的攻击也是 ARP 众多攻击类型中很常见的一种。攻击者通过 ARP 欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的 ARP 使得在自己的ARP 缓存表中对应的 MAC为攻击者的 MAC,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄。
  • 欺骗网关的攻击:欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户韵数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。
  • 中间人攻击: 中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。
  • IP地址冲突攻击: 通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的 MAC 地址,然后根据物理主机的 MAC进行攻击,导致局域网内的主机产生 IP 地址冲突,影响用户的网络正常使用。

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

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

相关文章

代币中的decimal精度代表了什么

精度的意义在于允许发送小数的代币。举例,一个CAT代币合约的精度为6。那么 你拥有1个CAT就意味着合约中的balance 1 * 10^6 , 转账 0.1CAT出去的话,就需要输入 0.1*10^6 10^5。 也就时在涉及代币时,查询到的余额、转账的代币数量 都和 代币…

Sqoop入门指南:安装和配置

Sqoop是一个强大的工具,用于在Hadoop和关系型数据库之间高效传输数据。在本篇文章中,将深入探讨如何安装和配置Sqoop,以及提供详细的示例代码。 安装Java和Hadoop 在开始安装Sqoop之前,首先确保已经成功安装了Java和Hadoop。Sqo…

视频转音频小小代码

前言 特定的场景下,人的需求往往容易变得奇特,比方说,mp4的文件,有时候我只想听声音,而不需要看内容,这个时候把它转换成acc更加节省存储空间,变成了音频带上耳机听就可以了。 那么视频怎么转音…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑩

单元测试 一、任务要求 题目1:根据下列流程图编写程序实现相应处理,程序根据两个输入参数iRecordNum和IType计算x的值并返回。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足基路…

yolov8n 瑞芯微RKNN和地平线Horizon芯片仿真测试部署,部署工程难度小、模型推理速度快

特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。 模型和完整仿真测试代码,放在github上参考链接 模型和代码。 因为之前写了几篇yolov8模型部署的博文,存在两个问题&…

全网首发!Yolov8_obb旋转框检测(DOTA1.0数据集)

一、YOLOv8环境搭建 (1)Pytorch的安装 如果你的环境没有部署请参考本人文章:NLP笔记(2)——PyTorch的详细安装_安装torchnlp-CSDN博客 (2)下载最新的Yolov8-obb代码: https://git…

【修图】AI修图工具

人脸替换 免费的人脸替换工具: Face Swap: https://vmodel.ai/face-swap 支持单人换脸、多人换脸 AI消除 SnapEdit https://snapedit.app/remove-object 不付费的话只能下载清晰度较低的版本 但我试了几个在线的AI消除工具,SnapEdit算是…

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识,可看我之前这篇文章:详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中,污水处理设备是不可或缺的环节。那么,生活自来水厂的污水处理设备都有哪些呢?本文将为您详细介绍。 首先,生活自来水厂的污水处理设备主要包括预处理设备…

第11章 GUI Page489~494 步骤三十 保存画板文件

为“保存”菜单项 MenuItemFileSave挂接事件响应函数: 实际运行时,现版TrySaveFile()函数有点儿傻,点击保存菜单,还会弹出对话框,问我们“要不要保存” 修改TrySaveFile()函数 函数声明修改为: 函数实现修…

药品不良反应智能监测系统,java药品不良反应(ADR)智能监测系统源码,基于SpringBoot+Vue+MySQL技术开发

java药品不良反应智能监测系统 系统概述: 基于AI技术和深度学习模型,系统构建ADR智能识别模型,实现病程记录分析,提取病程记录实体,并完成语义关系的分类识别。一方面可以根据医务人员设置的监测任务或主题&#xff0c…

Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

在Java中使用 Open CV进行图片翻转和图片旋转 目录 在Java中使用 Open CV进行图片翻转和图片旋转前言图片翻转函数代码示例其它翻转方向垂直翻转两轴翻转 图片旋转函数代码示例 Open CV 专栏导航 前言 在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术&#xff0…

MySQL面试题 | 02.精选MySQL面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

vim基本操作命令

一、vi简介 vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序,它不象Word或WPS那样可以…

商城小程序(8.购物车页面)

目录 一、商品列表区域1、渲染购物车商品列表的标题区域2、渲染商品列表区域的基本结构3、为my-goods组件封装radio勾选状态4、为my-goods组件封装radio-change事件5、修改购物车中商品的选择状态6、为my-goods组件封装NumberBox7、为my-goods封装num-change事件8、修改购物车商…

【论文笔记】End-to-End Diffusion Latent Optimization Improves Classifier Guidance

Abstract Classifier guidance为图像生成带来了控制,但是需要训练新的噪声感知模型(noise-aware models)来获得准确的梯度,或使用最终生成的一步去噪近似,这会导致梯度错位(misaligned gradients)和次优控制(sub-optimal control)。 梯度错位…

jmeter--1.安装

目录 1. jmeter和jdk下载地址 2. jdk环境变量配置 3. Jmeter的环境变量配置 1. jmeter和jdk下载地址 链接:https://pan.baidu.com/s/1C8ItsR8ZUGJO9uyTJ-9QtQ?pwdx5m5 提取码:x5m5 2. jdk环境变量配置 2.1 我的电脑右键属性-->高级系统设置--&…

20240111在ubuntu20.04.6下解压缩RAR格式的压缩包

20240111在ubuntu20.04.6下解压缩RAR格式的压缩包 2024/1/11 18:25 百度搜搜:ubuntu rar文件怎么解压 rootrootrootroot-X99-Turbo:~/temp$ ll total 2916 drwx------ 3 rootroot rootroot 4096 1月 11 18:28 ./ drwxr-xr-x 25 rootroot rootroot 4096 1月…

详细分析Java中的分布式任务调度框架 XXL-Job

目录 前言1. 基本知识2. Demo3. 实战 前言 可视化任务调度 可视化配置 1. 基本知识 在Java中,分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台,用于实现分布式系统中的定时任务调度和分布式任务执行。 下面是关于XXL-Job的一些概念、功…

05- OpenCV:图像操作和图像混合

目录 一、图像操作 1、读写图像 2、读写像素 3、修改像素值 4、Vec3b与Vec3F 5、相关的代码演示 二、图像混合 1、理论-线性混合操作 2、相关API(addWeighted) 3、代码演示(完整的例子) 一、图像操作 1、读写图像 (1)…