ARP地址解析协议

ARP(Address Resolution Protocol)地址解析协议用于将计算机的网络 IP 地址转化为物理 MAC 地址。ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的顺利进行。在每台安装有 TCP/IP 协议的电脑里都有一个 ARP 缓存表,表里的 IP 地址与 MAC 地址是一一对应的。

  • 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
  • 每一个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表。
  • 当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如果有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。

ARP 高速缓存的作用:

  1. 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
  2. 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便。

应该注意的问题:

  1. ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
  2. 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
  3. 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
  4. 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该IP地址解析为链路层所需要的硬件地址。
  5. 默认情况下 ARP 缓存的超时时限是两分钟。

ARP 协议格式

ARP数据结构
通过 wireshark 抓包,其中一个 Broadcast 的广播 ARP 包内容如下:

Ethernet II, Src: VMware_c0:00:08 (00:50:56:c0:00:08), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
    Source: VMware_c0:00:08 (00:50:56:c0:00:08)
    Type: ARP (0x0806)
Address Resolution Protocol (request)
    Hardware type: Ethernet (1)
    Protocol type: IPv4 (0x0800)
    Hardware size: 6
    Protocol size: 4
    Opcode: request (1)
    Sender MAC address: VMware_c0:00:08 (00:50:56:c0:00:08)
    Sender IP address: 192.168.4.2
    Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
    Target IP address: 192.168.4.5

图中的前 14 个字节是以太网报头,这个是所有网络数据通用的。ARP 对应的帧类型是0x0806。可以看到发送这个数据报的 Destination 目标地址是ff:ff:ff:ff:ff:ff,也就是 Broadcast 广播地址。

ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。

其中,每个字段的含义如下:

  • 硬件类型:16bits,指明了发送方想知道的硬件接口类型,以太网的值为 1。
  • 协议类型:16bits,表示要映射的协议地址类型。它的值为 0x0800,表示 IP 地址。
  • 硬件地址长度:8bits,标识硬件地址的长度,以字节为单位。它的值为 6(48 bits)。
  • 协议长度:8bits,标识IP协议的长度,以字节为单位。它的值为 4(32 bits)。
  • 操作类型:16bits,用来表示这个报文的类型,ARP request 请求为 1,ARP reply 响应为 2,RARP request 请求为 3,RARPreply 响应为 4。
  • 发送方 MAC 地址:48bits,发送方设备的硬件地址,作为发送者的MAC值一定明确。
  • 发送方 IP 地址:32bits,发送方设备的 IP 地址。
  • 目标 MAC 地址:48bits,接收方设备的硬件地址,对于ARP请求信息来说,目标MAC值是不明确,所以用全0填充。
  • 目标 IP 地址:32bits,接收方设备的IP地址,对于ARP请求信息来说,目标IP也是一定明确。