千家信息网

ARP协议怎么使用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"ARP协议怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在同一个网络(无特别
千家信息网最后更新 2026年10月31日ARP协议怎么使用

本篇内容介绍了"ARP协议怎么使用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在同一个网络(无特别说明,均指以太网络)中进行通信的主机,必须要拥有目标主机的MAC地址才能够正确地将数据发送给目标主机,那么如何知道目标主机的MAC地址呢?可以通过ARP协议。ARP协议就是用来获取目标IP地址所对应的MAC地址的,也就是说,ARP协议可以动态地在三层IP地址和二层MAC地址之间建立一种映射关系。可以用如下示意图来形象表示其作用:

可以看到上面的图示是把ARP协议划分到网络层,也既是认为它是一个网络层的协议,这是出于它为网络层的IP协议提供服务而考虑的。但实际上,由于ARP协议用以解析出IP地址(逻辑地址)所对应数据链路层中的地址(物理地址/硬件地址),所以把其划分在数据链路层也是没有问题的,这并没有严格的定义。

我们下面将通过具体的实践过程来分析四种常见的ARP包:ARP请求包、ARP响应包、无偿ARP包与IP地址冲突检测,同时也会分析一下ARP代理的发生过程。

这里会使用的环境如下:

  • 网络设备模拟器:GNS3

  • 抓包软件:Wireshark


1.网络环境搭建

为了简洁起见,这里不设置一个较大的网络环境来满足前面四种情况ARP包分析的需要,而是在分析不同的ARP情况时分别搭建较小的网络环境,这样可以使我们的分析更有针对性。


2.ARP包报文格式

如下:

注意我们关注的是28字节的ARP包,只不过上面的图还包含了以太网首部字段信息(显然以太网首部的帧类型为ARP,在分析IP协议时提到过,这是一个数据分用的概念)。

因为对于ARP包的分析,其实我们更关心的应该是ARP请求包、ARP响应包、无偿ARP包或者ARP代理相关的知识,而后面的实践也主要是分类地进行讨论。所以下面先给出一个普通ARP包(请求包)的实际结构,然后再给出每一个字段的具体含义(参考了《TCP/IP详解 卷1:协议》的部分内容),先作一个基本的了解,最后再详细分析这些包产生的过程:

  • 一个普通ARP包(请求包的实际结构)

  • ARP包各字段具体含义(对比上面实际抓到的包)

字段含义
硬件类型

占16位

表示硬件地址的类型,值为1即表示以太网地址,也就是MAC地址

协议类型

点16位

表示要映射的协议地址类型,值为0x0800即表示IP地址,因为本文都是在IP协议的基础上进行分析的(即网络层逻辑地址为IP地址),所以所抓到的包的该字段类型都为0x0800

硬件地址长度

占8位

指出硬件地址的长度,单位为字节,因为本文针对的是以太网,而以太网地址为MAC地址,占48位,即6字节,所以后面抓到的包中该字段的值都为6,不再作特别说明

协议地址长度

占8位

指出三层逻辑地址的长度,单位为字节,因为本文针对的是以太网地址和IP地址的映射,而IP地址占32位,即6字节,所以后面抓到的包中该字段的值都为4,不再作特别说明

操作字段

指出操作类型,对应的值如下:

  • ARP请求:1

  • ARP响应:2

  • RARP请求:3

  • RARP响应:4

但因为RARP现在已经很少使用了,所以本文不会讨论

发送端以太网地址

占48位

准确上说是"发送端硬件地址",但因为本文只针对以太网进行讨论,所以表述为"发送端以太网地址"

发送端IP地址

占32位

准确上说是"发送端网络层逻辑地址",但因为本文只针对的是以太网地址和IP地址的映射的讨论,所以表述为"发送端IP地址"

目的以太网地址占48位
目的IP地址占32位

3.在实践中分析ARP的实现过程:ARP请求、ARP响应

(1)网络环境搭建

本节主要是抓取ARP请求包和ARP响应包来分析ARP请求与响应的一个详细过程,以及对应ARP包中相关字段的含义,这个实践的网络环境比较简单,如下:

在R1路由器上做如下配置:

R1#conf tR1(config)#int f0/0R1(config-if)#no shuR1(config-if)#ip add 192.168.1.1 255.255.255.0R1(config-if)#do wr

在R2路由器上做如下配置:

R2#conf tR2(config)#int f0/0R2(config-if)#no shuR2(config-if)#ip add 192.168.1.2 255.255.255.0R2(config-if)#do wr

然后在R1路由器上查看arp缓存表:

R1#show arpProtocol  Address          Age (min)  Hardware Addr   Type   InterfaceInternet  192.168.1.1             -   cc01.127f.0000  ARPA   FastEthernet0/0

可以看到arp缓存表中并没有192.168.1.2的MAC地址,所以如果待会R1发送数据给R2,必然会有ARP请求发生,所以这里请确保R1中确实没有192.168.1.2的MAC地址,如果有的话,建议重启两个路由器。(虽然可以在路由器上执行clear arp-cache来清除arp缓存表,但是清除过后又会马上生成,所以这里建议直接重启)

(2)抓取并分析ARP请求包和ARP响应包

首先在R1和R2的链路上启动Wireshark,监测R1的接口。(这是GNS3的功能,可以直接抓取通过两个路由器之间链路的数据包)

在R1上执行如下命令:

Router#ping 192.168.1.2Type escape sequence to abort.Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:.!!!!Success rate is 80 percent (4/5), round-trip min/avg/max = 44/62/76 ms

!表示数据发送成功,可以看到第一个是".",则表示数据发送失败,这是因为,第一个包在发送时,R1中并没有192.168.1.2的MAC地址,于是就去发送ARP请求来获得其MAC地址,但是当获得MAC地址之后,第一个包已经超时了(等待MAC地址超时),并没有发送出去,可以看下面抓到的包:

可以看到已经有2个ARP包(1个请求和1回答)和8个ICMP包(4个请求和4个回答),这里我们主要分析的是ARP包。

  • ARP请求包


数据包结构如下:

字段分析如下:

a.硬件类型、协议类型、硬件地址长度、协议地址长度

这几个字段的内容跟前面讨论的一样,因为针对的是以太网和IP地址

b.操作字段Opcode

可以看到Opcode的值为request(1),所以这是一个ARP请求包。

c.发送端以太网地址

我们是从R1向R2发送数据的。

从前面的命令执行结果:

R1#show arpProtocol  Address          Age (min)  Hardware Addr   Type   InterfaceInternet  192.168.1.1             -   cc01.127f.0000  ARPA   FastEthernet0/0

这确实是R1的MAC地址(配置了192.168.1.1 IP地址的接口的MAC地址)。

d.发送端IP地址

发送端也确实是192.168.1.1,也就是R1。

e.目的以太网地址

可以看到这里为全0,在ARP请求包中,会把目的以太网地址字段的值置为全0,因为此时并不知道目的以太网地址是什么(也就是不知道192.168.1.2的MAC地址是多少)。

f.目的IP地址

数据包是从R1发送给R2的,所以目的IP地址就是192.168.1.2,R2收到这个ARP请求包之后,如果看到这个字段的内容是自己的IP地址,就会回复这个ARP包,也就是会发送一个ARP响应包。

其实字段内容并不难理解,不过这里需要注意一点是,查看这个ARP请求包的数据链路层的目的MAC地址:

会发现其是一个广播地址,这也就意味着,发送一个ARP请求包,以太网中的所有主机都能够收到该ARP请求包,但是并不是所有的主机都会回复这个ARP请求包,只有当接收者的IP地址与ARP请求包中的Target IP address中标识的目的IP地址一致时才会进行回复。

  • ARP响应包

数据包结构如下:

对比ARP请求包来分析,其实发现并没有相关多少,只是有以下几点区别:
a.ARP响应包的操作字段Opcode值为reply(2)

b.ARP响应包的二层目的MAC地址为ARP请求包发送者的MAC地址

也就是说,ARP请求包是以广播的形式发送的,但ARP则是以单播的形式发送的,那么发给谁呢?ARP请求包是谁发送的,ARP响应包就发给谁,对应的二层目的MAC地址就是ARP请求包发送者的MAC地址

c.发送端以太网地址、发送端IP地址、目的以太网地址、目的IP地址

跟ARP请求包的内容相反,只不过ARP响应包中的所有地址字段的值都是已知的,这个很容易理解,不过需要注意的是,在这个时候,ARP响应包到底要发给谁,已经很明确了,所以ARP响应包是一个单播包。

正如上面看到的,理解常规的ARP请求包和ARP响应包的过程并不复杂,只要知道了网络通信的基本原理,各个字段的值也就很容易理解了。


4.在实践中分析ARP的实现过程:无偿ARP与IP地址冲突检测

  • 有偿ARP

前面在获取某个IP地址对应的MAC地址是,都需要先发送一个ARP请求包,然后再通过接收一个ARP响应包来知道该IP地址所对应的MAC地址,因为需要发送ARP请求包,我们可以认为这是"有偿"的,即要付出一些代价。

  • 无偿ARP

而所谓无偿ARP,指的就是,我不需要发送一个ARP请求包,对方就会"无偿"地把一个ARP响应包发给我(其实也主是主动发送过来),以此来告诉我它的MAC地址。

(1)网络环境搭建

但是在总结什么时候对方会主动把一个ARP响应包发送过来之前,我们先实践一下,网络环境还是用上面的那个:

不过我们需要修改一下R2的IP地址,修改为192.168.1.252(在这个过程中抓包软件Wireshark要打开),如下:

R2>enR2#conf tR2(config)#int f0/0R2(config-if)#ip add 192.168.1.252 255.255.255.0

(2)抓取并分析ARP请求包和ARP响应包

这样做之后打开Wireshark软件,会发现抓到下面这样一个包:

可以看到Info一列,有个Gratutous的标识,中文意思就是"无偿,免费"的意思,我们可以查看一下数据包的结构:

通过查看操作字段Opcode的值,其实可以发现,无偿ARP其实也是一个ARP响应包(不过普通的ARP响应包是以单播的形式发送的,而无偿ARP是以广播的形式发送的),只不过这个ARP响应包比较特别,它是主动发送的,即它是gratuitous,无偿的。

另外需要注意的是,发送端IP地址和目的IP地址是一样,这正是无偿ARP有别于普通ARP响应包的地方,当这个数据包被网络中的其他主机(显然我们这里的网络环境比较简单,所以只有R1)接收到之后,它会让这些主机使用新的IP和MAC地址关系更新它们的ARP缓存表。因为这个ARP数据包是未经请求的,即导致客户端更新ARP缓存,所以会称为无偿ARP。

在分析了无偿ARP之后,给出下面的几种情况,都会有无偿ARP过程的发生:

a.更改了设备的IP地址

b.某些操作系统在启动完成之后就会发送无偿ARP(Windows和Linux都会)

(3)IP地址冲突检测

再分析一下,无偿ARP有什么好处呢?如下:

a.可以让以太网中的主机及时地更新其ARP缓存表,这样可以确保在数据发送时可以准确地封闭正确的地址信息

b.检测IP地址是否有冲突

关于这一点,可以给R2重新配置一个IP地址,并且与R1的相同:

R2>enR2#conf tR2(config)#int f0/0R2(config-if)#ip add 192.168.1.1 255.255.255.0

几乎马上就可以在R1和R2的控制台上看到错误日志的输出:

R1>*Mar  1 00:54:39.007: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000*Mar  1 00:55:09.043: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000*Mar  1 00:55:39.739: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000*Mar  1 00:56:10.011: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000*Mar  1 00:56:40.715: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000*Mar  1 00:57:10.947: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc02.1a18.0000R2(config-if)#*Mar  1 00:45:48.135: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000*Mar  1 00:46:18.623: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000*Mar  1 00:46:48.927: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000*Mar  1 00:47:19.651: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000*Mar  1 00:47:49.959: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000*Mar  1 00:48:21.623: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000*Mar  1 00:48:51.919: %IP-4-DUPADDR: Duplicate address 192.168.1.1 on FastEthernet0/0, sourced by cc01.127f.0000

这里因为在修改了R2的IP地址时,它发送了无偿ARP包,R1通过检查发现其IP地址跟自己的一样,于是就会在控制台上报错,但是R2为什么又会报错呢?因为在R1发现地址有冲突时,也发送了表示IP地址冲突的无偿ARP包,如下:

注意这是一个广播包,所以R2必然也能收到,查看它的包结构:

根据数据包的内容,R2也知道发生了IP地址冲突,所以也就会在控制台上输出错误日志了。


4.在实践中分析ARP的实现过程:ARP代理

如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答这个请求,这个过程就称为ARP代理。这是非常精简和通俗易懂的解释,我们可以通过下面的实践来进行体会。

(1)网络环境搭建

如下:

在前面的基础上,R1增加如下配置:

R1>enR1#conf tR1(config)#ip route 0.0.0.0 0.0.0.0 f0/0

R2增加如下配置:

R2>enR2#conf tR2(config)#int f1/0R2(config-if)#no shuR2(config-if)#ip add 192.168.2.2 255.255.255.0R2(config-if)#do wr

R3则配置如下:

R3>enR3#conf tR3(config)#int f0/0R3(config-if)#no shuR3(config-if)#ip add 192.168.2.3 255.255.255.0R3(config-if)#ip route 0.0.0.0 0.0.0.0 f0/0R3(config-if)#do wr

(2)抓取ARP包并分析ARP代理过程

在R1和R2的链路上启动Wireshark,然后在R1上执行如下命令:

R1#ping 192.168.2.3Type escape sequence to abort.Sending 5, 100-byte ICMP Echos to 192.168.2.3, timeout is 2 seconds:...!!Success rate is 40 percent (2/5), round-trip min/avg/max = 36/50/64 ms

即R1给R3发送数据,我们查看抓到的包:

再分别查看详细的包结构:

  • ARP请求包

可以看到ARP请求包跟平常一样,并没有什么区别,即R1希望知道192.168.2.3的MAC地址。

  • ARP响应包

看起来普通的ARP响应包也没有什么区别,其实真的是没有什么区别,但不妨在R2上执行下面的命令,查看一下ARP缓存表:

R2#sh arpProtocol  Address          Age (min)  Hardware Addr   Type   InterfaceInternet  192.168.1.1             3   cc01.127f.0000  ARPA   FastEthernet0/0Internet  192.168.2.2             -   cc02.1a18.0010  ARPA   FastEthernet1/0Internet  192.168.2.3             3   cc03.2327.0000  ARPA   FastEthernet1/0Internet  192.168.1.2             -   cc02.1a18.0000  ARPA   FastEthernet0/0

在这个ARP缓存表中,192.168.2.3对应的MAC地址是cc03.2327.0000,并不是上面看到的数据包结构中的cc02.1a18.0000!!!cc02.1a18.0000是192.168.1.2对应的MAC地址!!!可以分析如下:

拓展1:

R1想要知道192.168.2.3的MAC地址,于是发送ARP请求包,但很显然,192.168.2.3跟192.168.1.1并不在同一个网络中;当192.168.1.2接口接收到这个ARP请求包时,R2发现虽然192.168.2.3并不是自己,但是它可以到达192.168.2.3所在的网络,即192.168.2.0/24这个网络,于是它就向R1发回了一个ARP响应包,告诉R1,192.168.2.3的MAC地址是自己(即配置了192.168.1.2的接口的MAC地址)。虽然这是一种"谎言",但由于这样做确实是可以帮R1把数据发送到R3,所以有时候我们也把ARP代理称作"善意的谎言"。

拓展2:

这也意味着,即使R1知道192.168.2.3跟自己在不同的网络,它也不会直接就说去请求网关的MAC地址(虽然最终数据肯定是先发往网关的),而是还会像平常请求同网段IP地址的MAC地址一样,去发送一个普通的ARP请求,这点尤其需要注意。

拓展3:

我们说,如果数据是发往不同的网络的,那么应该先把数据发给网关,那么上面为什么不是这样的呢?那是因为,我在配置R1的默认路由时,是以出接口的方式进行配置的,那也就意味着,并没有所谓的网关,即不知道网关是谁,既然如果,R1又怎么能够直接去请求网关的MAC地址呢?对它来说,根本就没有网关!但是又因为配置了默认路由,去往未知网络的数据都直接从1.1的接口发送出去,所以它是直接去请求目的IP地址的MAC地址,然后才有了后来的ARP代理过程的发生。当然,如果配置的是网关(在思科路由器上的配置是:ip route 0.0.0.0 0.0.0.0 下一跳即网关地址),则会按照正常的流程走,即没有代理ARP过程的发生。

这一点对于数据转发的深入理解是非常重要的,当然,如果觉得难以理解的,也不用太担心,这个需要一定时间的积累,同时自己也要注重思考,在实际的学习过程当中不能囫囵吞枣,要想有深入的理解,就必须要做深入的分析。

那么通过上面的实践过程和分析之后也就非常清楚什么是ARP代理了。即如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答这个请求,这个过程就称为ARP代理。

"ARP协议怎么使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

地址 网络 数据 以太 分析 以太网 字段 过程 目的 主机 配置 路由 环境 代理 类型 网关 路由器 这是 面的 实践 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 湖北九亚互联网络科技有限公司 南京欣网互联网络科技有限公司 科技制造互联网公司 互联网金融公司科技 互联网科技公司名称 互联网科技素材视频竖屏 甘肃拓世互联网科技有限公司 恒生科技互联网指数分析 互联网公司会议桌创意科技软装饰 茂名市互联网科技产业园 民营互联网公司国防科技 燊美集互联网科技有限公司 明优互联网科技有限公司 华中科技大学互联网的牛人 南京一网一红互联网科技有限公司 互联网时代科技型公司的机会 马化腾互联网科技教学 上海旺乐尼互联网科技有限公司 每日互联网科技新闻 深圳九邦互联网科技有限公司 掌上梦互联网科技 互联网 新科技 崇明区互联网教育科技诚信经营 移动互联网科技公司 互联网科技商业 宜昌元轩互联网科技有限公司 江苏苏星互联网科技有限公司 启辰互联网科技 昆明中奇联合互联网科技
0