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 高速缓存的作用:
- 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
- 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便。
应该注意的问题:
- ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该IP地址解析为链路层所需要的硬件地址。
- 默认情况下 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也是一定明确。