一、ARP 技术背景

1.1、网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须包含目的MAC地址。因此发送端还必须获取到目的MAC地址。通过目的IP地址而获取目的MAC地址的过程是由ARP协议来实现的。

1.2、ARP 报文格式

ARP报文分为ARP请求和ARP应答报文两种,报文长度28个字节,其中ARP报头是8个字节,包含硬件类型、协议类型、硬件地址长度、协议地址长度、操作代码5个字段。除去报头外,剩余20个字节分别表示源、目的MAC地址和IP地址。 

硬件类型

协议类型

硬件地址长度

协议地址长度

操作代码

源MAC地址

源IP地址

目的MAC地址

目的IP地址

2

2

1

1

2

6

4

6

4

值为1表示以太网地址

0x0800表示IP地址

数值为6

数值为4

1表示请求报文,2表示应答报文

如果是ARP请求报文,MAC全为0

ARP首部 8字节

ARP数据 20字节

1.3、ARP 报文的以太网封装格式

ARP是个独立的三层协议,并不需要IP协议封装,而是直接生成自己的报文,到达数据链路层后,由数据链路层协议进行封装,一般是以太网协议。封装的过程,就是在ARP报文的前面加上以太网帧头,再加上4字节的冗余校验码结尾,校验码用于检验数据传输是否出现损坏。

以太网帧头一共14个字节,包含目的MAC地址、源MAC地址、帧类型三个字段,如下所示:

以太网目的地址

以太网源地址

帧类型

硬件类型

协议类型

硬件地址长度

协议地址长度

操作代码

源MAC地址

源IP地址

目的MAC地址

目的IP地址

6

6

2

2

2

1

1

2

6

4

6

4

如果是ARP请求报文,该字段为广播MAC地址

0x0806表示是ARP协议

值为1表示以太网地址

0x0800表示IP地址

数值为6

数值为4

1表示请求报文,2表示应答报文

如果是ARP请求报文,MAC全为0

以太网首部 14字节

ARP首部 8字节

ARP数据 20字节

1.4、以太网帧最小长度是64个字节,最长1518个字节。封装后的ARP帧,实际就是一个最小以太网帧,包含14个字节的以太网帧头,28个字节的ARP报文,一共是42个字节。再加上4个字节的冗余校验码,其余18个字节用0来填充,共计64个字节。

二、ARP 原理

2.1、ARP 工作过程:主机A要发送一个数据包给主机C之前,先要获取主机C的MAC地址

ARP 协议_请求报文

2.2、ARP 请求

主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机C的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机C)会对该请求进行处理

目的IP

源IP

目的MAC

源MAC

类型

10.0.0.3

10.0.0.1

00-00-00-00-00-00

00-01-02-03-04-AA

Request

ARP 协议_请求报文_02

抓包 

ARP 协议_IP_03

 

2.3、ARP 响应

主机C比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。

目的IP

源IP

目的MAC

源MAC

类型

10.0.0.1

10.0.0.3

00-01-02-03-04-AA

00-01-02-03-04-CC

Reply

ARP 协议_网络_04

抓包 

ARP 协议_网络_05

 

2.4、ARP 缓存

为了避免重复发送ARP请求,产生大量的广播包,每台主机都有一个ARP缓存列表,当源主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。当缓存生存期结束后,才会再次发送ARP请求报文。

主机A>arp -a

Internet Address    Physical Address    Type
10.0.0.3            00-01-02-03-04-CC   dynamic


主机C>arp -a

Internet Address    Physical Address    Type
10.0.0.1            00-01-02-03-04-AA   dynamic


主机B>arp -a

Internet Address    Physical Address    Type
10.0.0.1            00-01-02-03-04-AA   dynamic