linux · 2025-07-26 0

探究 ARP 协议

一、ARP

ARP,即地址解析协议(Address Resolution Protocol),是用于在局域网(LAN)中将网络层(IP 层)的地址(如IPv4地址)转换为数据链路层(MAC层)的硬件地址(MAC地址)。简单来说,ARP的主要作用是在IP地址和物理地址之间建立映射关系。

当一台设备需要与同一网络中的另一台设备通信时,它首先知道对方的IP地址,但为了实际发送数据包,还需要知道对方的MAC地址。这时就会用到ARP协议来查询目标IP地址对应的MAC地址。

  • ARP请求:源设备广播一个ARP请求,询问谁拥有特定的IP地址。
  • ARP响应:拥有该IP地址的目标设备以单播形式回复其MAC地址给源设备。
  • ARP缓存:为了避免每次都进行ARP查询,设备会缓存最近的IP-MAC映射一段时间。

ARP 数据包长度 = 28 字节

二、抓取包

若本机 ARP 缓存表中有对应,ip 和 mac 映射关系,则进行 ping 时,则不会再发送 arp 请求,故为了效果,需要删除 arp 缓存。

查看 ARP 缓存表

arp -a

删除 ARP 缓存

arp -d 172.17.0.2 

ping ip,并发送数据 6162 (ab)

ping -c 3 -p 6162 172.17.0.2

tcpdump 在服务器上抓包

root@fdc276a87cec:~# tcpdump -n -v -X
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:48:11.656415 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.1, length 28
    0x0000:  0001 0800 0604 0001 6eaf 59d5 3b59 ac11  ........n.Y.;Y..
    0x0010:  0001 0000 0000 0000 ac11 0002            ............
11:48:11.656425 ARP, Ethernet (len 6), IPv4 (len 4), Reply 172.17.0.2 is-at d6:84:7e:c7:af:a1, length 28
    0x0000:  0001 0800 0604 0002 d684 7ec7 afa1 ac11  ..........~.....
    0x0010:  0002 6eaf 59d5 3b59 ac11 0001            ..n.Y.;Y....

三、解析包

ARP 请求解析:

字段 含义
硬件类型 htype 0001 表示以太网(Ethernet)
协议类型 ptype 0800 表示 IPv4 协议
硬件地址长度 hlen 06 MAC 地址长度为 6 字节
协议地址长度 plen 04 IPv4 地址长度为 4 字节
操作类型 opcode 0001 表示这是 ARP 请求(Request)
发送方 MAC 地址 6e:af:59:d5:3b:59 发起请求的主机 MAC
发送方 IP 地址 ac 11 00 01 172.17.0.1发起请求的主机 IP
目标 MAC 地址 00 00 00 00 00 00 未知,ARP 请求中不填
目标 IP 地址 ac 11 00 02 172.17.0.2 要查询的 IP

ARP 响应解析

字段 含义
硬件类型 htype 0001 以太网
协议类型 ptype 0800 IPv4
硬件地址长度 hlen 06 MAC 地址长度
协议地址长度 plen 04 IPv4 地址长度
操作类型 opcode 0002 表示这是 ARP 响应(Reply)
发送方 MAC 地址 d6:84:7e:c7:af:a1 响应方 MAC 地址
发送方 IP 地址 ac 11 00 02 172.17.0.2 响应方 IP 地址
目标 MAC 地址 6e:af:59:d5:3b:59 请求方 MAC
目标 IP 地址 ac 11 00 01 172.17.0.1 请求方 IP