ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议. ARP的基本功能就是负责将一个已知的IP地址解析成MAC地址,以便主机间能正常进行通信。 ARP工作过程分为两个阶段,一个是ARP请求过程,一个是ARP响应过程.
1.PC1 和 PC2 的详细通信过程如下所示
(1)当主机 PC1 想发送数据给主机 PC2 时,首先在自己的本地 ARP 缓存表中检查主机 PC2 匹配的 MAC 地址。
(2)如果主机 PC1 在缓存中没有找到相应的条目,它将询问主机 PC2 的 MAC 地址,从而将 ARP 请求帧广播到本地网络上的所有主机。该帧中包括源主机 PC1 的 IP地址和 MAC地址。本地网络上的每台主机都接收到 ARP 请求并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将会丢弃 ARP 请求。
(3)主机 PC2 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 PC1 的地址和 MAC 地址添加到本地缓存表。
(4)主机 PC2 将包含其 MAC 地址的 ARP 回复消息直接发送回主机 PC1(这个数据帧是单播)。
(5)当主机 PC1 收到从主机 PC2 发来的 ARP 回复消息时,会将主机 PC2 的 IP 和 MAC地址添加的自己的 ARP 缓存表。本机缓存是有生存期的,默认 ARP 缓存表的有效期是 120s。当超过该有效期后,将再次重复上面的过程。主机 PC2 的 MAC 地址一旦确定,主机 PC1将能向主机 PC2 发送 IP 通信了。
2.ARP缓存表维护工具——arp命令。该命令用于查询本机ARP缓存中的IP地址和MAC地址的对应关系、添加或删除静态对应关系等。用户也可以通过使用arp命令验证ARP缓存条目的生命周期。ARP命令的语法格式 arp –v。
3. 缓存表中保存中多个ARP条目。每个ARP条目都是由一个IP地址和一个对应的MAC地址组成。
4. 使用arp -a查看绑定的ARP条目.
5.清空所有的ARP条目 arp –d。
注意:使用arp命令在Windows和Linux下删除ARP缓存条目的方法有点区别。在Linux下,删除ARP条目时,必须指定接口地址。在Windows下,可以直接执行arp -d命令删除。在Linux下,如果不指定接口时,将会提示“arp: need host name”信息.
ARP应答协议报文格式
广播类型的MAC地址:0XFF-FF-FF-FF-FF-FF
硬件类型:表明ARP协议实现在哪种类型的网络上。
协议类型:表示解析协议(上层协议)。这里一般是0800,即IP。
硬件地址长度:MAC地址长度,此处为6个字节。
协议地址长度:IP地址长度,此处为4个字节。
操作类型:表示ARP协议数据包类型。1表示ARP协议请求数据包,2表示ARP协议应答数据包。
ARP协议应答协议报文和ARP协议请求协议报文类似。不同的是,此时以太网帧头部的目标MAC地址为发送ARP协议地址解析请求的MAC地址,而源MAC地址为被解析的主机的MAC地址。同时,操作类型字段为2,表示ARP协议应答数据包,目标MAC地址字段被填充为目标MAC地址。
下面拿某一个包举个例子:
Frame 33: 42 bytes on wire (336 bits), 42 bytes captured (336 bits) on interface 0
以上内容表示这是第33帧数据包的详细信息。其中,该包的大小为42个字节。
Ethernet II, Src: 02:00:04:78:01:7b (02:00:04:78:01:7b), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
以上内容表示以太网帧头部信息。其中源MAC地址为02:00:04:78:01:7b,目标MAC地址为ff:ff:ff:ff:ff:ff(广播地址)。这里的目标地址为广播地址,是因为主机PC2不知道PC1主机的MAC地址。这样,局域网中所以设备都会收到该数据包。
Address Resolution Protocol (request)
以上内容表示地址解析协议内容,request表示该包是一个请求包。在该包中包括有ARP更详细的字段信息,如下所示:
Address Resolution Protocol (request) #ARP请求包
Hardware type: Ethernet (1) #硬件类型
Protocol type: IP (0x0800)#协议类型
Hardware size: 6 #硬件地址
Protocol size: 4#协议长度
Opcode: request (1)#操作码。该值为1表示是个ARP请求包
Sender MAC address: 02:00:04:78:01:7b (02:00:04:78:01:7b) #发送端MAC地址
Sender IP address: 10.1.1.142 (10.1.1.142) #发送端IP地址
Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00) #目标MAC地址
Target IP address: 10.1.1.166(10.1.1.166) #目标IP地址
通过以上内容的介绍,可以确定这是一个在以太网上使用IP的ARP请求。从该内容中,可以看到发送方的IP(10.1.1.142)和MAC地址(02:00:04:78:01:7b),以及接收方的IP地址(10.1.1.166)。由于目前还不知道目标主机的MAC地址,所以这里的目的MAC地址为00:00:00:00:00:00。
关于以上ARP头部的内容和前面介绍的ARP请求报文格式是相对应的,如下
应答不同的是:
1. Opcode: reply (2) #操作码为2表示该包是ARP响应包 。
2.从该行信息中,可以知道PC2获取到了PC1主机的MAC地址。这样就完成通信了。