地址解析协议(ARP)

IP地址与MAC地址

要理解ARP协议的工作原理必须先理解IP地址MAC地址的区别,MAC地址是数据链路层和物理层使用的地址而IP地址是网络层和以上各层使用的地址是一种逻辑地址(IP地址使用软件实现的)如下图:

地址解析协议(ARP)

在发送数据时,数据从高层到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧。MAC帧在传送时使用的源地址和目的地址都是硬件地址。连接在通信链路上的设备(主机或路由器)在接收MAC帧时,根据是MAC帧首部的硬件地址。在数据链路层看不到隐藏在MAC帧中的IP地址。只有在剥去MAC帧的首部和尾部后把MAC层的数据交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。 
地址解析协议(ARP)

1.ARP地址解析协议

地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

2.基本功能

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程

3.ARP过程

假设同一局域网主机A和主机B,IP地址是192.168.1.150和192.168.0.151。下面是一个ping过程的实例,用这个实例来说明ARP协议的作用和在实际过程中的位置。其过程下图所示,会进行如下过程的步骤,步骤的编号在图中。
地址解析协议(ARP)

  • 步骤a:应用程序ping会判断发送的是主机名还是IP地址,调用函数 gethostbyname()解析主机名B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析。
  • 步骤b:ping程序向目的IP地址发送一个ICMP的ECHO包。
  • 口步骤c:由于主机A和主机B在同一个局域网内,必须把目标主机的IP地址转换为48位的硬件地址,即调用ARP协议,在局域网内发送ARP请求广播,查找主机B的硬件地址。
  • 步骤d:主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到合适的位置后,发送ARP应答到主机A。
  • 步骤e:发送ICMP数据包到主机B。
  • 步骤f:主机B接收到主机A的IMP包,发送响应包。
  • 步骤g:主机A接收到主机B的ICMP响应包。

4.ARP分组数据格式

以太网的地址解析协议ARP协议分组数据格式,如下图所示。ARP协议的实现方式是在以太网上做广播,查询目的IP地址,接收到ARP请求的主机响应请求方,,将本机=的MAC地址反馈给请求的主机。

地址解析协议(ARP)
ARP分组字段格式
  • 以太网头部部分的目的硬件地址源硬件地址,分别为以太网硬件的地址的发送方和接收方的硬件地址,例如MAC地址。当目的硬件地址为全1(即0 0xFF FF FF FF FF FF)的地址时,为广播帧,在以太网上的所有接口都要接收此帧数据。
  • 帧类型为两个字节长度,表示后面数据的类型。对于ARP请求应答,该字段为0x0806
  • 硬件类型表示硬件地址的类型,值为1表示以太网硬件地址。
  • 协议类型表示要映射的协议地址类型,值为0x0800表示询问IP地址。
  • 硬件地址长度,表示硬件地址以字节为单位的长度,对于ARP请求来说,硬件地址为以太网的MAC地址,值为6。
  • 协议地址长度,表示协议地址以字节为单位的长度,对于ARP请求来说,协议地址为IP地址,为32位,值为4。
  • 操作方式字段为本次操作的类型,可选方式如下表所示,ARP请求帧和ARP应答帧的区别,可用此字段的值不同来确定。

地址解析协议(ARP)

  • 余下的4个字段分别为发送方的硬件地址、发送方的IP地址、接收方的硬件地址、接收方的IP地址。
  • ARP请求应答的操作方式很简单,将接受到数据字段的发送方和接收方的值对调,将所有本机的硬件地址和IP地址的值填充到合适的发送方位置。
  • 在ARP操作中,有效数据的长度为28个字节,不足以太网定义的最小长度46字节长度,需要填充字节,填充字节最小长度为18个字节。