wireshark 抓包ARP分组

本文详细解读ARP协议的工作原理,包括广播地址的request报文用于查找未知IP的MAC,非广播请求用于更新缓存表项,reply报文的响应机制,以及免费ARP用于检测IP冲突和更新ARP表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

从下图的报文数据的结构来看,ARP协议属于是网络层协议,因为它在Ethernet II的上边一层,所以是网络层(从包封装的角度来讲,Ethernet II属于数据链路层,数据链路层的上一层就是网络层)。但从功能上来说,ARP是为了获得获取到MAC地址,所以也可以说是属于链路层协议。

目的地址是广播地址的request报文

在这里插入图片描述
Who has 192.168.0.1? Tell 192.168.0.101。翻译过来就是,谁是192.168.0.1,请告诉我192.168.0.101。

从ARP的字段上看,7e:90:3c:47:04:0a这个设备和192.168.0.101绑定在了一起,它想知道192.168.0.1的MAC地址是什么,所以Target IP address放的是192.168.0.1,但只知道IP地址,链路层可不知道该哪儿传,所以帧的字段里,Destination放的是(ff:ff:ff:ff:ff:ff),即MAC广播地址。

这是个ARP请求报文。

可以看到7e:90:3c:47:04:0a有点冗余,在ARP协议字段和帧的字段中,都出现了。

总结:当本机不知道某个ip地址的mac地址时,会使用这种ARP报文来请求。

目的地址不是广播地址的request报文

在这里插入图片描述
根据[RFC 826]的解释:

Another alternative is to have a daemon perform the timeouts. After a suitable time, the daemon considers removing an entry. It first sends (with a small number of retransmissions if needed) an address resolution packet with opcode REQUEST directly to the Ethernet address in the table. If a REPLY is not seen in a short amount of time, the entry is deleted. The request is sent directly so as not to bother every station on the Ethernet. Just forgetting entries will likely cause useful information to be forgotten, which must be regained.

当本机的ARP转发表的其中一个表项将要过期的时候,它会提前会去询问,这个表项里的mac地址,问它是否还拥有表项对应的IP地址。这样,以太网帧的目的MAC地址不需要是广播MAC地址,因为它已经知道了对方在链路层的地址是多少,直接使用表项里的MAC地址就行了。

总结:当本机的ARP转发表的某个表项要过期,提前去询问,表项里的mac地址是否 还拥有 表项里的ip地址。

reply报文

在这里插入图片描述
192.168.0.1 is at 24:69:68:82:8d:d6。翻译过来就是,192.168.0.1 分配给了 24:69:68:82:8d:d6。

这是个ARP响应报文,因为之前有 请求报文,所以响应报文不需要广播了,谁询问的,就发给谁。

总结:reply报文是针对request报文的回应。所以reply报文的字段也会根据request里的字段来填写:

  • Ethernet II的Destination字段是从,request报文的source字段来的。
  • Address Resolution Protocol的Target MAC address和Target IP address字段从,request报文的Sender MAC address和Sender IP address字段来的。

用来检测本机ip是否冲突的 request报文

在这里插入图片描述
开机时需要检测自己的ip地址在子网中是否冲突,需要发送这种报文。

此时本机想检测自己是否能够使用192.168.199.152,那么sender IP address必须设置为 全0,原因有两个:

  • 不确定自己能否使用192.168.199.152,因为不确定别人是否已经在使用了。
  • 设置为 全0,不会让其他网络设备更新其ARP转发表。这一点和免费ARP区分开来。

Target IP address设置为192.168.199.152,因为要去询问其他所有人。因为要问所有人,以太网帧的Dst为全1。

总结:冲突检测的request报文,Sender IP address字段为全0,Target IP address字段为 想要使用的那个ip地址。

在本例中,这个ip已经被别的机器使用了,所以会收到reply报文。
在这里插入图片描述
收到这个reply报文以后,本机就知道自己想使用的192.168.199.152已经被另一个机器占用了。这种问答过程可能重复几次,如果是体现在Windows操作系统的话,会弹出一个小窗口说明ip地址已冲突。

免费ARP

免费 ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP请求,即请求自己的IP地址的MAC地址。

最大的区别是:目标IP地址是自己的IP地址。即Target IP address = Sender IP address = 本机正在使用的那个ip

在这里插入图片描述
该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的IP地址和MAC地址。

  • 可用于检测IP地址冲突。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP地址的主机。
  • 可用于更新其他主机的ARP转发表。如果该主机更换了网卡,而其他主机的ARP缓存表仍然保留着原来的MAC地址。这时,可以发送免费的 ARP数据包。其他主机收到该数据包后,将更新ARP缓存表,将原来的 MAC地址替换为新的MAC地址。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值