1
计算机网络技术理论与实践
1.6.1.3 5.1.3 ARP协议原理

5.1.3 ARP协议原理

ARP(Address Resolution Protocol,地址解析协议),是TCP/IP协议栈中网络层上的一个协议,用于将IP地址转化为数据链路层上的物理地址或者硬件地址。ARP协议最常应用在以太网中,下面用以太网为例来说明ARP协议的工作过程。

IP数据包常通过以太网进行传输,以太网设备并不识别32位IP地址,它们是以48位以太网物理地址作为设备标识,以太网物理地址又叫做MAC地址,用于传输以太网数据帧。在以太网中,一个主机要和另一个主机进行通信,必须要知道目标主机的MAC地址。因此,要在以太网中传输IP数据包,必须把目的IP地址转换成目的MAC地址,才能在以太网中找到目的设备。目标MAC地址是通过地址解析协议来获得的。在以太网中,ARP协议可以将网络中的IP地址解析为以太网的硬件地址,也就是MAC地址,以保证通信的顺利进行。

ARP的报头结构如图5-7所示,其中包括了如下字段。

img138

图5-7 ARP报头结构示意图

·硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为0x0001;

·协议类型字段:指明了发送方提供的高层协议类型,IP协议为0x0800;

·硬件地址长度和协议地址长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意高层协议的网络中使用;

·操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;

·源硬件地址:源主机的硬件地址,本例中为源主机的MAC地址;

·源协议地址:源主机的高层协议地址,在本例中为源主机的IP地址;

·目的硬件地址:目的主机的硬件地址,在本例中为目的主机的MAC地址;

·目的协议地址:目的主机的高层协议地址,在本例中为目的主机的IP地址。

1.ARP的工作原理

ARP的工作原理如下:

(1)首先,每台主机都会在自己的ARP缓冲区(ARP Cache)中建立一个ARP列表,其中存储着IP地址和MAC地址的对应关系。

(2)当源主机需要将一个数据包发送到目的主机时,会首先检查自己ARP列表,查看其中是否存在目的主机IP地址对应的MAC地址。如果存在,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发出一个ARP请求的广播包,以查询此目的主机IP地址所对应的MAC地址。这个ARP请求数据包中包含了源主机的IP地址、源主机的MAC地址,以及目的主机的IP地址。

(3)这个网段中的所有主机都会收到并处理这个ARP请求的广播包,每台主机都检查数据包中的目的IP地址,看是否与自己的IP地址相同。如果不相同,就忽略此数据包;如果相同,该主机首先将ARP请求数据包中的源IP地址和源MAC地址的对应关系添加到自己的ARP列表中,如果ARP表中已经存在该IP地址的表项,则将其覆盖;然后给源主机发送一个ARP响应数据包,告诉对方自己就是它要查找的目标主机,以及自己的MAC地址。

(4)源主机收到这个ARP响应数据包后,将其中的目的主机IP地址和目的主机MAC地址添加到自己的ARP列表中,并利用此信息中的目的主机的MAC地址开始数据传输。如果源主机在一定时间内没有收到ARP响应数据包,就表示ARP查询失败。

在PC上可以通过命令来控制ARP列表,如果采用的是Windows XP操作系统,可以用如下命令来操作ARP缓存列表:

·arp-a 查看所有的ARP缓存表项;

·arp-s 添加静态ARP缓存表项;

·arp-d 删除所有的ARP缓存表项。

ARP缓存列表内容如图5-8所示。

img139

图5-8 ARP缓存列表内容

ARP缓存列表中的表项分为永久性的和动态的,通过“arp-s”命令添加的表项是永久性的,在类型字段中显示为static,不会被自动清除,只能使用“arp-d”命令来删除。动态ARP缓存表项是通过ARP协议动态产生的,在类型字段中显示为dynamic,这种表项拥有有限的生存时间,在Windows XP操作系统中,动态ARP缓存表项的生命周期为2分钟,在2分钟内未使用该ARP表项的话,该表项会被自动删除,如果在2分钟内使用了该表项,该表项的生存时间会从使用之时起,再延长2分钟,直到最大生命期限10分钟为止。超过10分钟的最大期限后,ARP缓存表项将被删除。

2.重复IP地址检测

ARP协议可以用来检测重复IP地址,这是通过传送一种叫做无偿ARP(Gratuitous ARP)的ARP请求来完成。无偿ARP就是一个解析自己IP地址的ARP请求。在无偿ARP中,发送方IP地址和目的IP地址被设置成同一个IP地址,也就是本机的IP地址。

正常情况下,如果主机发送一个解析自己IP地址的ARP请求,就不应收到ARP响应帧,这样该主机就可以判断没有其他主机使用和它相同的IP地址。如果主机发送一个解析自己IP地址的ARP请求后,收到了其他主机的ARP响应,那么此主机就可以判断有另外一个主机使用了和它相同的IP地址。

通常在给一个主机新配置IP地址,或者更新IP地址时,会触发该主机发送无偿ARP过程,如果在主机发送了3个无偿ARP后,都没有收到其他主机的ARP响应,那么该主机就判定此IP地址在此网段中是唯一的,这样就可以将主机上的网络协议启动起来。如果收到了其他主机的ARP响应,该主机上的网络协议就会启动失败,并通过弹出对话框来警告网络上有相同的IP地址。