地址解析协议(ARP)用于将IPv4地址(32位逻辑地址)解析为物理地址,应用层的网络应用程序使用IPv4地址与另一设备进行通信,但在数据链路层,寻址是Mac地址(48位物理地址)。
操作
- 源设备想要与另一台设备进行通信,原设备会检查其地址解析(ARP)缓存,以查找它是否已经具有目标设备的解析Mac地址,若果它在那里,它将使用该Mac地址进行通信。
- 本地缓存中设有ARP解析,原机器将产生一个地址解析话术消息,它将自己的数据链路层地址作为发送方硬件地址,将自己的IPv4地址填充为目标协议地址,目标硬件地址将留空,因为机器试图找到它。
- 源将ARP请求消息广播到本地网络。
- 由于是广播消息,因此LAN上的每个设备都接收到该消息,每个设备将目标协议地址(源试图与之通信的机器的IPv4地址)与自己的协议地址(IPV4地址)进行比较。那些不匹配的将丢弃数据包而不进行任何操作。
- 当目标设备检查目标协议地址时,它会找到匹配的项并生成地址解析协议(ARP)回复消息,它从ARP请求消息中获取发送者硬件地址和发送者协议地址字段,并将这些值用于回复消息的目标硬件地址和目标协议地址。
- 目标设备将更新其ARP缓存因为它需要尽快联系发送方机器。
- 目标设备发送ARP回复消息,它不会是广播而是单播,以节省网络资源。
- 源机器将处理来自目标的ARP回复,它将发送方硬件地址存储为目标的第二层地址。
- 源机器将使用从ARP回复消息中收到的发送方硬件地址和发送方协议地址更新其ARP缓存。
ARP协议的工作过程
广播发送ARP请求,单播发送ARP响应。
- 首先每个主机都会建立一个ARP列表在自己的ARP缓存区中,以表示IP地址和Mac地址之间的对应关系。
- 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的Mac地址,如果有,则直接发送数据,如果没有,就像本王短的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机Mac地址,目的主机IP地址。
- 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,首先从数据包中取出源主机的IP地址和Mac地址写入到ARP列表中,告诉源主机自己就是它想要找的Mac地址。
- 源主机收到ARP响应包后,将目的主机的IP地址和Mac地址写入ARP列表中,并利用此信息发送数据。如果源主机一直没有收到ARP响应包数据,表示ARP查询失败。
查看Linux ARP缓存老化时间
cat /proc/sys/net/ipv4/neigh/***/base_reachable_time
//同目录下还有一个文件:gc_state_time:Determines how often to check for stale neighbour entires
arp -a //查看ARP缓存状态