ARP基本原理

相关概念
  • ARP报文

    ARP报文分为ARP请求报文和ARP应答报文,报文格式如图1所示。

    图1 ARP报文格式

Ethernet Address of destination(0–31)和Ethernet Address of destination(32–47)分别表示Ethernet Address of destination字段的前32个比特和后16个比特,Ethernet Address of destination字段的总长度是48比特

ARP报文的长度是42字节。前14字节的内容表示以太网首部,后28字节的内容表示ARP请求或应答报文的内容。ARP报文中相关字段的解释如表1所示。

  • 表1 ARP报文各字段的含义

    字段

    长度

    含义

    Ethernet Address of destination

    48比特

    以太网目的MAC地址。发送ARP请求报文时,为广播的MAC地址:0xFF-FF-FF-FF-FF-FF。

    Ethernet Address of sender

    48比特

    以太网源MAC地址。

    Frame Type

    16比特

    数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。

    Hardware Type

    16比特

    硬件地址的类型。对于以太网,该类型的值为“1”。

    Protocol Type

    16比特

    发送方要映射的协议地址类型。对于IP地址,该值为0x0800。

    Hardware Length

    8比特

    硬件地址的长度。对于ARP请求或应答来说,该值为6。

    Protocol Length

    8比特

    协议地址的长度。对于ARP请求或应答来说,该值为4。

    OP

    16比特

    操作类型。OP的值与操作类型的关系如下:
    • 1表示ARP请求
    • 2表示ARP应答
    • 3表示RARP请求
    • 4表示RARP应答

    Ethernet Address of sender

    48比特

    源MAC地址。这个字段和ARP报文首部的以太网源MAC地址字段是相同的信息。

    IP Address of sender

    32比特

    源IP地址。

    Ethernet Address of destination

    48比特

    目的MAC地址。发送ARP请求报文时,该处填充值为0x00-00-00-00-00-00。

    IP Address of destination

    32比特

    目的IP地址。

  • ARP表

    如果每次主机在向外发送数据报文前都要先发送ARP请求报文,会大幅增加网络的通信量。而且网络上的所有设备都必须接收和处理该ARP请求报文,极大地影响了网络的运行效率。为了解决上述问题,每台主机上都维护着一个ARP表,这是ARP高效运行的关键。在这个ARP表中,存放着最近获得的IP地址和MAC地址之间的映射关系,这种映射关系称为ARP表项。

    根据ARP表项的生成方式不同,可以将ARP表项分为动态ARP表项和静态ARP表项。两者的区别仅在于:

    • 动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的动态ARP表项更新,也可以被静态ARP表项覆盖。
    • 静态ARP表项由网络管理员通过手工配置生成和维护,不会被老化,也不会被动态ARP表项覆盖。
    主机在每次发送数据报文前,都会先在ARP表中查找目的IP地址所对应的MAC地址。
    • ARP表中有对应的MAC地址时,主机就不会再发送ARP请求报文,而是直接将数据报文发至这个MAC地址。

    • ARP表中没有对应的MAC地址时,主机才会发送ARP请求报文,请求目的主机的MAC地址。

  • 逆地址解析协议RARP(Reverse Address Resolution Protocol)

    当一台主机只知道自己的MAC地址时,可以通过发送和接收RARP报文,找出本设备的IP地址。

    网络管理员先在网络中的网关路由设备上创建一个MAC地址和与其对应的IP地址的映射关系。当用户需要对一台新的主机进行配置时,该设备的RARP客户机程序就会向网关路由设备上的RARP服务器请求相应的IP地址。

实现过程

  1. HostA查看自己的ARP表,发现没有目的主机HostB的IP地址和MAC地址的映射关系。于是,HostA对外发送ARP请求报文,请求HostB的MAC地址。该ARP请求报文中的源IP地址和源MAC地址为HostA的IP地址和MAC地址,目的IP地址和目的MAC地址分别为HostB的IP地址和全0的MAC地址,以太网源MAC地址和目的MAC地址分别为HostA的MAC地址和广播MAC地址。

  2. CE1收到ARP请求报文后,将该报文在本网段内广播。

  3. HostB收到ARP请求报文后,更新自己的ARP表,将HostA的MAC地址添加到ARP表,同时向该ARP请求报文的发送方HostA发送ARP响应报文。该ARP响应报文中的源IP地址和源MAC地址为HostB的IP地址和MAC地址,目的IP地址和目的MAC地址为HostA的IP地址和MAC地址,以太网源MAC地址和目的MAC地址分别为HostB的MAC地址和HostA的MAC地址。

    由于ARP请求报文的目的IP地址不是设备PE的IP地址,所以PE在收到ARP请求报文后,直接将其丢弃。

  4. CE1收到该ARP响应报文后,将该报文转发给目的主机HostA。

  5. HostA收到ARP响应报文后,更新自己的ARP表,将HostB的MAC地址添加到ARP表中,同时将数据报文发送给HostB。

以HostA向HostC发送数据报文为例,结合图3和图4详细介绍不同网段间ARP是如何实现的。

图3描述了同网段的HostA和PE之间ARP的实现过程。通过这个网段内ARP的实现,HostA可以将数据报文发送到PE。

图3 同网段内HostA和PE之间地址解析的实现过程

  1. HostA查看自己的ARP表,发现没有到达目的主机HostC的默认网关PE的接口Interface1的IP地址和MAC地址的映射关系。于是,HostA对外发送ARP请求报文,请求PE的接口Interface1的MAC地址。该ARP请求报文中的源IP地址和源MAC地址为HostA的IP地址和MAC地址,目的IP地址和目的MAC地址分别为PE的接口Interface1的IP地址和全0的MAC地址,以太网源MAC地址和目的MAC地址分别为HostA的MAC地址和广播MAC地址。

  2. CE1收到ARP请求报文后,将该报文在本网段内广播。

  3. 网关PE收到ARP请求报文后,更新自己的ARP表,将HostA的MAC地址添加到ARP表,同时向该ARP请求报文的发送方HostA发送ARP响应报文。该ARP响应报文中的源IP地址和源MAC地址为PE的接口Interface1的IP地址和MAC地址,目的IP地址和目的MAC地址为HostA的IP地址和MAC地址,以太网源MAC地址和目的MAC地址分别为PE的接口Interface1的MAC地址和HostA的MAC地址。

    由于ARP请求报文的目的IP地址不是HostB的IP地址,所以HostB在收到ARP请求报文后,直接将其丢弃。

  4. CE1收到该ARP响应报文后,将该报文转发给目的主机HostA。

  5. HostA收到ARP响应报文后,更新自己的ARP表,将PE的接口Interface1的MAC地址添加到ARP表中,同时将数据报文发送给PE。

图4描述了同网段的PE和HostC之间ARP的实现过程。通过这个网段内ARP的实现,PE可以将数据报文发送给HostC。

图4 同网段内PE和HostC之间地址解析的实现过程

首先,PE通过查询路由表,将数据报文从Interface1发送到Interface2。

  1. PE查看自己的ARP表,发现没有目的主机HostC的IP地址和MAC地址的映射关系。于是,PE发送ARP请求报文,请求HostC的MAC地址。该ARP请求报文中的源IP地址和源MAC地址为PE的接口Interface2的IP地址和MAC地址,目的IP地址和MAC地址分别为HostC的IP地址和全0的MAC地址,以太网源MAC地址和目的MAC地址分别为PE的接口Interface2的MAC地址和广播MAC地址。

  2. CE2收到ARP请求报文后,将该报文在本网段内广播。

  3. HostC收到ARP请求报文后,更新自己的ARP表,将PE的接口Interface2的MAC地址添加到ARP表,同时向该ARP请求报文的发送方PE发送ARP响应报文。该ARP响应报文中的源IP地址和源MAC地址为HostC的IP地址和MAC地址,目的IP地址和目的MAC地址为PE的接口Interface2的IP地址和MAC地址,以太网源MAC地址和目的MAC地址分别为HostC的MAC地址和PE的接口Interface2的MAC地址。

    由于ARP请求报文的目的IP地址不是HostD的IP地址,所以HostD在收到ARP请求报文后,直接将其丢弃。

  4. CE2收到该ARP响应报文后,将该报文发送给目的设备PE。

  5. PE收到ARP响应报文后,更新自己的ARP表,将HostC的MAC地址添加到ARP表中,同时将数据报文发送给HostC。

通过以上两个同网段内ARP的实现,不同网段间的主机HostA和HostC可以进行数据报文的传送。

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

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

相关文章

【算法】前缀和——除自身以外数组的乘积

本节博客是用前缀和算法求解“除自身以外数组的乘积”,有需要借鉴即可。 目录 1.题目2.前缀和算法3.变量求解4.总结 1.题目 题目链接:LINK 2.前缀和算法 1.创建两个数组 第一个数组第i位置表示原数组[0,i-1]之积第二个数组第i位置表示原数组[i1,n-1]…

laravel8 JWT配置

一、安装JWT composer require tymon/jwt-auth二、config/app.php 注册服务提供者 providers > [Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ]aliases > [JWTAuth > Tymon\JWTAuth\Facades\JWTAuth::class,JWTFactory > Tymon\JWTAuth\Facades\JWT…

Hadoop 客户端 FileSystem加载过程

如何使用hadoop客户端 public class testCreate {public static void main(String[] args) throws IOException {System.setProperty("HADOOP_USER_NAME", "hdfs");String pathStr "/home/hdp/shanshajia";Path path new Path(pathStr);Confi…

AWS安全性身份和合规性之Amazon Detective

分析和直观呈现安全数据,以调查潜在的安全问题。 Amazon Detective使您可以更轻松地分析、调查和快速确定潜在安全问题或可疑活动的根本原因。Amazon Detective会自动从您地AWS资源中收集日志数据并使用机器学习、统计分析和图论来构建一组关联的数据,使…

在DAYU200上实现OpenHarmony跳转拨号界面

一、简介 日常生活中,打电话是最常见的交流方式之一,那么如何在OpenAtom OpenHarmony(简称“OpenHarmony”)中进行电话服务相关的开发呢?今天我们可以一起来了解一下如何通过电话服务系统支持的API实现拨打电话的功能…

ECMAScript 详解

ECMAScript 是一种脚本语言规范,由欧洲计算机制造商协会(ECMA)通过 ECMA-262 标准化,广泛用于客户端脚本编程。它最著名的实现是 JavaScript,主要用于 Web 开发。以下是 ECMAScript 的详细解析: ### 1. 历…

C#中System.Threading.Timer的使用

文章速览 概述创建计时器对象循环执行的方法停止计时器参考文章 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 概述 本文着重于System.Threading.Timer的简单使用方法。 由于在实际开发过程中&…

LabVIEW机械臂自动化在精密制造中的应用

精密制造是现代工业中的关键环节,要求高精度、高效率以及一致性。机械臂自动化技术结合LabVIEW软件,提供了强大的控制、数据处理和用户界面设计能力,使其在精密制造中得到了广泛应用。以下是几个具体的应用实例: 1. 电路板焊接 …

C#-根据日志等级进行日志的过滤输出

文章速览 概要具体实施创建Log系统动态修改日志等级 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 概要 方便后期对软件进行维护,需要在一些关键处添加log日志输出,但时间长…

【408精华知识】指令周期的数据流

文章目录 一、取指周期二、间址周期三、执行周期(一)数据传送类指令(mov/load/store)(二)运算类指令(加/减/乘/除/移位/与/或)(三)转移类指令(jmp/jxxx) 四、中断周期 CPU每取出并且执行一条指令所需要的全…

二叉数之插入操作

首先是题目 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,可能存在多种有效…

AcWing 217:绿豆蛙的归宿 ← 搜索算法

【题目来源】https://www.acwing.com/problem/content/219/【题目描述】 给出一个有向无环的连通图,起点为 1,终点为 N,每条边都有一个长度。 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点。 绿豆蛙从起…

thinkphp 使用模型实现多表连接查询

解决问题,多张表的查询连接问题,3张表及以上 爷爷表 有字段id 爸爸表 有字段id,grandfather_id 儿子表 id,parent_id 控制器中编写 public function getdata(){ $data model(爷爷表)->with([father.son])->select(); var_dump($data…

Kreon: An Efficient Memory-Mapped Key-Value Store for Flash Storage——论文泛读

TOS 2021 Paper 论文阅读笔记整理 问题 持久的键值存储已经成为现代数据处理系统的数据访问路径中的一个主要组件。然而,它们表现出较高的CPU和I/O开销。 基于LSM Tree的键值存储中两个重要的CPU和I/O开销来源是: 在LSM Tree中使用压缩,不…

若依解决使用https上传文件返回http路径问题

若依通过HTTPS请求进行文件上传时却返回HTTP的文件链接地址,主要原因是使用了 request.getRequestURL 获取链接地址。 解决办法: 在nginx配置文件location处加上:proxy_set_header X-Forwarded-Scheme $scheme; 然后代码通过request.getHea…

MobaXterm下载虚拟机SSH链接超时解决(保姆级踩坑)

文章目录 为啥要用MobaXtermMobaXterm下载打开虚拟机ssh链接ssh连接失败排查linux配置windows配置 到这了,什么都干了,怎么还不成功? 更多相关内容可查看 在一个阳光明媚的下午,开启了无限踩坑的旅程 为啥要用MobaXterm 作为小编…

DockerNetwork

Docker Network Docker Network 是 Docker 引擎提供的一种功能,用于管理 Docker 容器之间以及容器与外部网络之间的网络通信。它允许用户定义和配置容器的网络环境,以便容器之间可以相互通信,并与外部网络进行连接。 Docker Network 提供了以…

【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解

和平面识别框架一样 1为XR Origin添加AR Point Cloud Manager组件 然后你的ar应用就具备了点云识别功能,就这么简单 2.可视化这些云点 创建一个美术效果的预制体,人家提供了预设模板 然后拖到仓库(ASSETS)创建预制体&#xff…

Java设计模式-中介者模式(20)

中介者模式(Mediator Pattern)是行为设计模式之一,它旨在通过定义一个中介对象来封装多个对象之间的交互关系,从而使这些对象不必相互引用,从而降低系统的耦合度并提高可维护性。在Java中实现中介者模式时,主要遵循以下步骤和组件: 核心概念 中介者(Mediator):定义一…

满足a==1a==2

网上看到的一道JS面试题,觉得很有意思 觉得很有意思的原因是,这个式子乍看之下是有些反常识的。“a1&&a2”,它的意思似乎是“a在等于1的同时又等于2”,这时我们的第一反应可能就是不成立,一个变量怎么可能同时…