简介

在 TCP/IP 中:
传输层:关注目标主机的 IP 地址+端口地址;
网络层:关注目标机器的 IP 地址,并根据这个 IP 地址寻址到网络上的目的机器;
但是在在以太网中,ip 数据包封装在以太网帧中,通过物理层(网卡)发送到了网络上。以太网帧根据 MAC 地址寻址到目的机器的网卡。所以局域网中的一台主机要和其他的主机或者交换机、路由器进行网络通信时,必须知道对方网卡的 MAC 地址。

ARP 协议就是实现了由 IP 地址得到对应的 MAC 地址。

ARP:Address Resolution Protocol,地址解析协议。ARP 是一个通过解析网络层地址(IP)来找寻数据链路层地址(MAC)的网络传输协议,
ARP 协议在TCP/IP模型中属于IP层(网络层),在 OSI 模型中属于网络层。

原理

ARP 缓存表

在每台安装 TCP/IP 协议的主机或者路由器中都有一个 ARP 高速缓存,缓存中存放了一个 ARP 缓存表。ARP 缓存表中主机或路由器的 IP 地址和其 MAC 地址是一一对应的。
ARP 缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可减少缓存表的长度,加快查询速度。

image.png

过程

主机发送请求的过程中,如果 ARP 表中查询不到 IP 所对应的 MAC 地址,就需要使用 ARP 协议:
主机会暂存 ip 数据包,然后广播 ARP 请求数据包到局域网中,当某个机器的 IP 地址和 ARP 请求中的 IP 地址相同时,该机器会返回一个包含该机器 IP 地址和 MAC 地址的 ARP 响应数据包。接收到 ARP 响应数据包后,主机会记录 IP 地址和 MAC 地址到 ARP 表中。暂存的 IP 数据包被封装成以太网帧发送到局域网中(帧头部中的 MAC 地址域即为记录的 MAC 地址)。
目标机器网卡接收到这个帧之后,检测到头部的 MAC 地址和自己的 MAC 地址相同,就会向上层协议栈递交这个帧中的数据包,而其他机器检测到 MAC 地址与本机不同,就会把这个帧丢弃。

以主机 A(192.168.38.10)向主机 B(192.168.38.11)发送数据为例:

  • 当发送数据时,主机 A 会在自己的 ARP 缓存表中寻找是否有目标 IP 地址。如果找到就知道目标 MAC 地址为(00-BB-00-62-C2-02),直接把目标 MAC 地址写入帧里面发送就可。
  • 如果在 ARP 缓存表中没有找到相对应的 IP 地址,主机 A 就会在网络上发送一个广播(ARP request),目标 MAC 地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.38.11 的 MAC 地址是什么?”
  • 网络上其他主机并不响应 ARP 询问,只有主机 B 接收到这个帧时,才向主机 A 做出回应(ARP response):“192.168.38.11 的 MAC 地址是 00-BB-00-62-C2-02”,此回应以单播方式。这样,主机 A 就知道主机 B 的 MAC 地址,它就可以向主机 B 发送信息。同时它还更新自己的 ARP 高速缓存(ARP cache),下次再向主机 B 发送信息时,直接从 ARP 缓存表里查找就可。

无回报 ARP

无回报 ARP 是当 ARP 功能被开启或者是端口初始配置完成后,主机向局域网广播无回报的 ARP 来查询自己的 IP 地址是否唯一可用。主要作用为:

  • 确定网络中是否有其他主机使用了IP地址,如果有应答则产生错误消息。
  • 可以更新 ARP 缓存。网络中的其他主机收到该广播则在缓存中更新条目,收到该广播的主机无论是否存在与IP地址相关的条目都会强制更新,如果存在旧条目则会将 MAC 更新为广播包中的 MAC。

参考

  1. 地址解析协议 ARP–CS Note
  2. ARP–wikipedia