地址解析协议 (ARP) 是通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。

ARP是通过网络地址(例:IPv4)来定位MAC地址 (也称为乙太地址)。

ARP已经在很多网路层和数据链接层之间得以实现,包括IPv4,Chaosnet, DECnet和Xerox PARC Universal Packet (PUP) 使用IEEE 802标准, 光纤分布式数据接口, X.25, 帧中继和异步传输模式 (ATM), IEEE 802.3和IEEE 802.11标准上IPv4占了多数流量。

在IPv6中邻居发现协议 (NDP)用于代替地址解析协议。

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。

另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)

在点对点链路中不使用ARP,实际上在点对点网络中也不使用MAC地址,因为在此类网络中分别已经获取了对端的IP地址。

数据包结构

地址解析协议的消息格式很简单,仅包含单一的地址解析请求或响应。ARP 消息的长度取决于上下两层地址的大小,上层地址由所使用的网络协议类型(通常是 IPv4)决定,下层地址则由上层协议所使用的硬件或虚拟链路层的类型决定。消息的报头中包含了这些类型以及对应的地址长度信息,此外还包含了表示请求(1)和应答(2)的操作码。数据包的有效负载为收发双方的硬件地址、协议地址,总计四个地址。

为了把IP地址映射到48位以太网地址用于传输,需要一个体现地址转换协议的包格式。

以太网传输层

  • 目标以太网地址:目标MAC地址。FF:FF:FF:FF:FF:FF (二进制全1)为广播地址。
  • 源以太网地址:发送方MAC地址。
  • 帧类型:以太类型,ARP为0x0806。

以太网报文数据

  • 硬件类型:如以太网(0x0001)、分组无线网。
  • 协议类型:如IP网际协议(0x0800)、IPv6(0x86DD)。
  • 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。
  • 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。
  • 操作码:1为ARP请求,2为ARP回显,3为RARP请求,4为RARP应答。
  • 源硬件地址:n个字节,n由硬件地址长度得到,一般为发送方MAC地址。
  • 源协议地址:m个字节,m由协议地址长度得到,一般为发送方IP地址。
  • 目标硬件地址:n个字节,n由硬件地址长度得到,一般为目标MAC地址。
  • 目标协议地址:m个字节,m由协议地址长度得到,一般为目标IP地址。

报文格式

长度(位) 48 48 16 16 16 8 8 16 48 32 48 32
数据类型 目标以太网地址 源以太网地址 帧类型 硬件类型 协议类型 硬件地址长度 协议地址长度 操作码 源硬件地址 源协议地址 目标硬件地址 目标协议地址
组成 14字节 以太网首部 28字节 ARP请求/应答

原理

在Windows命令行查看ARP缓存表

在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。

主机名称 IP地址 MAC地址
A 192.168.38.10 00-AA-00-62-D2-02
B 192.168.38.11 00-BB-00-62-C2-02
C 192.168.38.12 00-CC-00-62-C2-02
D 192.168.38.13 00-DD-00-62-C2-02
E 192.168.38.14 00-EE-00-62-C2-02
... ... ...

以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。

1.当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到就知道目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可。

2.如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11的MAC地址是什么?”

3.网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是00-BB-00-62-C2-02”,此回应以单播方式。这样,主机A就知道主机B的MAC地址,它就可以向主机B发送信息。同时它还更新自己的ARP高速缓存(ARP cache),下次再向主机B发送信息时,直接从ARP缓存表里查找就可。

ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

转自**百科。

地址解析协议 (ARP) 是什么相关推荐

  1. TCP/IP具体解释学习笔记——地址解析协议ARP

    一 概述 我们知道,IP协议是用来在不同的物理网络之间数据传输的.要在不同的网络之间数据传输,至少须要将IP协议所用的地址转换成特定网络所使用的物理地址. 一般来说.就是将IPv4地址转换为mac地址 ...

  2. 计算机网络地址解析协议实验,计算机网络地址解析协议(ARP)实验报告.doc

    计算机网络地址解析协议(ARP)实验报告 实验目的: 1. 掌握ARP协议的报文格式 2. 掌握ARP协议的工作原理 3. 理解ARP高速缓存的作用 4. 掌握ARP请求和应答的实现方法 5. 掌握A ...

  3. 网络层地址解析协议ARP

    想了解地址解析协议ARP,首先要知道网络层IP地址和链路层MAC地址的区别. IP地址的特点是:IP地址往往固定在某一个区域(和路由器相关),且IP地址具有层次特点,取决于节点所连的那个子网:但是MA ...

  4. 图解地址解析协议ARP

    我们知道,网络层使用的是 IP 地址,而在实际网络的链路上传送数据帧时,最终还是必须使用链路层的 MAC 地址.所以,在链路上传送数据帧时只知道 IP 地址是不够的,我们还需要知道主机在网络中的有效 ...

  5. 地址解析协议ARP(计算机网络)

    目录 一.IP地址与物理地址 二.ARP 与 RARP 三.ARP表 四.ARP 的工作过程 五.ARP 高速缓存的作用 六.地址映射项目的生存时间 七.ARP 的作用范围 八.为什么不直接使用物理地 ...

  6. 地址解析协议ARP工作过程

    ARP工作过程 这是完整的以太网数据帧 .原始数据PDU协议数据单元(应用层)打上传输层头部之后叫数据段,再打上网络层头部后叫数据包,最后打上数据链路层头部和尾部就是数据帧. 在通信过程中,有必备四个 ...

  7. 地址解析协议 ARP

    一. ARP 简介 ARP 协议 英文名叫作:"Address Resolution Protocol"--地址解析协议.所谓"地址解析"就是主机在发送帧前将目 ...

  8. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  9. 【ARP地址解析协议(完整解析过程、ARP欺骗、免费ARP、ARP代理)】-20211125【下】

    目录 一.ARP地址解析协议 ARP地址解析协议:将IP地址解析为Mac地址 ARP地址解析过程 1)pc1首先会查询自身的ARP缓存表,是否存在目标ARP缓存条目. ARP请求报文(原理) 2)由于 ...

最新文章

  1. python安装依赖失败_python - pip安装jq依赖关系失败 - SO中文参考 - www.soinside.com
  2. Python 生成MYSQL inser语句
  3. C#中动态加载和卸载DLL
  4. 图解用工具对BHO做初步研究
  5. WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)
  6. [蓝桥杯][2013年第四届真题]买不到的数目-模拟,数论
  7. 火狐浏览器中打开java_将Firefox浏览器嵌入Java Swing中
  8. 一天能学会的计算机技术
  9. 使用左 右 全 内连接及使用where条件语句的区别
  10. 4KB/2MB/1GB 4级/5级分页模式下的线性地址翻译以及CR3
  11. 【leetcode-字符串】:重复的子字符串(是否由它的一个子串重复多次构成)
  12. Carson带你学Android:手把手带你深入分析事件分发机制!
  13. 如何让女朋友说Yes I Do,数据分析助力客户管理秘籍
  14. 我想起个公司名字,招投标行业的,快速搜索标讯的,科技公司,蓝色logo的
  15. 教你去掉 U盘写保护
  16. u-boot 详细介绍
  17. mysql增加数据 条件,mysql根据条件决定是否插入数据
  18. 【原创】flutter之发布插件包到pub.dev离线在线两套大法
  19. 团体程序设计天梯赛-练习集 (L2-001 - L2-020)
  20. Universal Serial Bus (USB)

热门文章

  1. java中随机数彩票练习_基于javascript实现彩票随机数生成(简单版)
  2. mysql 第二大的数据_MYSQL – 从大表中的第二行中选择数据
  3. python做excel表格代码_python操作excel表格
  4. stl源码剖析_STL源码剖析 阅读笔记(二)allocator
  5. 【Python CheckiO 题解】Flatten a List
  6. 计算机论文答辩注意哪些问题,计算机专业论文答辩(准备和注意事项)
  7. 类似ajax封装函数,JS 封装一个async式的AJAX函数
  8. 【CodeForces - 1131F 】Asya And Kittens(并查集,思维)
  9. 【CodeChef - CLIQUED 】Bear and Clique Distances(建图,缩点技巧,思维)
  10. 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )