ARP地址解析协议:为IP地址到对应的硬件地址之间提供动态映射。

客户端通过FTP协议连接服务器时,首先解析器会把主机名转换为IP地址。这个过程既可以使用DNS服务,又可以使用本机上的hosts文件进行转换,hosts文件通常用于补充或取代网络中DNS的功能。
根据目的IP请求建立TCP连接。
TCP连接建立后,发送端向接收端发送一个IP数据报。
数据报交由ARP模块进行地址转换,ARP模块把32位IP地址转换为48位以太网地址。



以下图为例说明地址解析协议的具体工作流程。
结合图中的序号进行说明。
客户端通过FTP协议连接服务器时,首先解析器会把主机名转换为IP地址。这个过程既可以使用DNS服务,又可以使用本机上的hosts文件进行转换,hosts文件通常用于补充或取代网络中DNS的功能。
根据目的IP请求建立TCP连接。
TCP连接建立后,发送端向接收端发送一个IP数据报。
数据报交由ARP模块进行地址转换,ARP模块把32位IP地址转换为48位以太网地址。
ARP模块以广播的方式发送一个ARP请求到本网络的所有主机上。ARP请求中包含目的主机的IP地址,表示“如果你是这个IP地址的拥有着,请回答你的硬件地址”。
目的主机的ARP模块收到这个请求后,返回一个ARP应答告诉对方自己的硬件地址。
发送端收到接收端的硬件地址后,就能够通过以太网驱动程序发送数据了。
这里有两点需要注意:
- 以太网驱动程序要发送数据,并需要知道目的端的硬件地址(一般是以太网地址),IP地址对它来说是无法识别的。也就是说,链路层间通信使用硬件地址,而链路层之上的通信则采用IP地址。
- 上述过程是目的主机在同一个网络中。如果目的主机不在本网络中,那么就需要通过IP路由选择把数据发到外网了。这时,ARP解析到的硬件地址就会是下一跳路由器的硬件地址。
下面来看看ARP的分组格式:
以下是用Wireshark抓取的数据,以太网首部如下:
目的地址全为1表示发送的是广播,同一以太网上的所有接口都能够接收到此广播数据帧。类型字段0x0806表示ARP请求或ARP应答,到底是请求还是应答,要根据ARP包内的某个标识区分。
ARP请求包如下:
下面逐一分析每个字段。
2字节硬件地址表示硬件地址类型,如以太网、令牌环网等。这里的值为1,表示硬件地址为以太网地址。
2字节协议类型表示要映射的协议地址类型。这里的值为0x0800,表示IP地址。
1字节硬件地址长度,单位为字节。这里的值为6,表示48位以太网地址。
1字节协议地址长度,单位为字节。这里的值为4,表示32位IP地址。
2字节op字段指出四种操作类型:
- 1表示ARP请求
- 2表示ARP应答
- 3表示RARP请求
- 4表示RARP应答
到底是请求还是应答就是通过这个字段来区分的。
6字节发送端以太网地址。
4字节发送端IP地址。
6字节目的端以太网地址。注意,ARP的目的就是获得对方的硬件地址,发送端在发送ARP请求时显然还不知道目的端的硬件地址为多少,所以这个字段全部填充0.
4字节目的端IP地址。
当目的端收到发给自己的ARP请求后,它会做如下工作:
- 将上述目的端以太网地址用自己的硬件地址填充
- 交换发送和接受的方向
- op字段改为2,表示ARP应答
- 发送
参考:
《TCP/IP详解》 P38-P41.