什么是地址解析协议(ARP)?

ARP 角色
地址解析协议 (ARP) 是计算机网络中非常基础的协议。当 PC 想要通过网络发送消息时,它必须将数据封装到 OSI 模型的各个层中。在每一层,它必须在第 4 层报头中填写 TCP/UDP 端口等所有报头信息,在第 3 层报头中填写源和目标 IP 地址,在第 2 层报头中填写源和目标 MAC 地址。如果您考虑一下,除了目标 MAC 地址之外,所有这些信息都可供最终客户端使用。 已引入 地址解析协议 (ARP) ,以根据本地网络中的给定 IP 地址解析 MAC 地址。
让我们看一下图 1 所示的示例。

图 1. 什么是地址解析协议 (ARP)?
PC1 尝试 ping PC3,它在同一个局域网和同一个子网 10.1.1.0/24。当用户执行命令ping 10.1.1.3时,PC1 开始将 ICMP 请求 (ping) 封装到以太网帧中,然后通过网络发送。让我们看看PC是如何构造协议数据单元(PDU)的:
在第 4 层- PC1 通过发送 ICMP Echo Request 知道 ping 工作并等待 ICMP Echo Response。因此它将第 4 层的协议设置为 ICMP,并设置了 Echo Request 标志。 因此,这一层所需的一切都是可用的。
在第 3 层- PC1 知道目标 IP 地址,用户在 ping 10.1.1.3 命令中明确提及,因此将其放入目标 IP 字段。PC1 知道自己配置的 IP 地址 10.1.1.1 并将其放在源字段中。因此,这一层所需的一切都是可用的。
稍后 2 - PC1 知道自己配置的 MAC 地址并放入源字段。但是 PC1 无法知道 LAN 中的哪个终端客户端配置了 10.1.1.3 以及它的 MAC 地址是什么。因此目标 MAC 地址对 PC1 不可用,它必须使用ARP才能获得它。
ARP 的工作原理
ARP 使用广播通信(一对多)来询问 LAN 内的所有终端客户端,给定 IP 的物理地址是什么。
ARP 消息
ARP操作中有两种主要类型的数据包:
ARP 请求
ARP回复

图 2 显示了这两种类型的示例。可以看到ARP头中有四个字段:
源硬件地址 (MAC)
源协议地址 (IP)
目标硬件地址 (MAC)
目标协议地址 (IP)
图 2. ARP 消息
注意,在ARP 请求消息中,目的 MAC 地址是众所周知的广播地址FFFF-FFFF-FFFF。这向 LAN 中的交换机发出信号,表明这是广播通信,并且 LAN 中的所有连接设备都必须接收帧的副本。另一个需要注意的重要值是目标 MAC是0000-0000-0000。这向目标 IP 的所有者发出信号,表明发送者正在尝试解析此 IP 的物理地址。
请注意,在 ARP 回复消息中,源 MAC 地址和目标 MAC 地址都是单播的。

图 3. 使用 ARP 的典型案例
出现这种情况有四种典型情况:
1. 主机想要向同一网络中的另一台主机发送数据。例如,PC2 向 PC3 发送消息。
o PC2 发送关于 PC3 的 IP 地址 192.168.1.3 的 ARP 请求。
o LAN 上的每个人都会收到一份 ARP 帧的副本。
o PC3 回复其物理地址 BBBB-BBBB-BBBB。所有其他主机都会丢弃 ARP 请求。
2. 主机想要将数据发送到另一个网络中的另一个主机。 例如,PC2 向 google.com 发送一条消息。
o PC2 查看它的路由表。
o 查找其默认网关 192.168.1.1 的 IP 地址。
o 发送关于默认网关 IP 地址 192.168.1.1 的 ARP 请求。
o LAN 上的每个人都会收到一份 ARP 帧的副本,包括 Router1。
o Router1 回复其物理地址 DDDD-DDDD-DDDD。
3. 路由器接收发往本地连接网络中主机的数据。Router1 接收发往 PC2 的数据。
o 路由器 1 发送关于目标 IP 地址 192.168.1.2 的 ARP 请求。
o LAN 上的每个人都会收到一份 ARP 帧的副本。
o PC2 用它的物理地址回复。所有其他主机都会丢弃 ARP 请求。
4. 路由器接收发往另一个网络上的主机的数据。Router2 接收发往 PC2 的数据。
o Router2 检查其路由表。
o 发现到 PC2 的下一跳地址是 34.43.12.1。
o 发送关于下一跳 IP 地址 34.43.12.1 的 ARP 请求。
o Router1 收到 ARP 请求的副本。
o Router1 回复其物理地址 AD12-43AB-F432。
ARP 表(ARP 缓存)
当设备成功解析给定 IP 的 MAC 地址时,它将 IP 到 MAC 绑定存储在称为ARP 表的表中。后续通信使用此缓存绑定,而不是再次发送 ARP 请求。让我们看一下 Cisco 路由器的 ARP 表。

默认情况下,表中的每个条目都会保留 240 分钟(4 小时)。此值称为ARP 超时,可以为每个接口设置不同的值。您可以通过查看show interface的输出来检查它。

运行 Windows 或 Unix 的主机的 ARP Cache 可以通过在命令提示符窗口中执行arp -a来检查

概括
地址解析协议 (ARP) 是一种解析LAN 中给定逻辑地址 ( IP ) 的物理地址 ( MAC ) 的机制: IP 到 MAC 绑定。
一个ARP 请求被封装在一个广播帧中。因此,这是一对多的通信,局域网中的每个主机都会收到一份 ARP 请求的副本。只有目标 IP 的所有者才会回复。
一个ARP 应答 被封装在一个单播帧中。因此,它是 请求者和答复者之间的一对一通信。
当设备接收到 IP 的物理地址时,它会在其ARP 表(ARP 缓存)中创建一个条目。任何后续通信都使用缓存的条目。
ARP 表中的每个条目默认保留 4 小时。这称为ARP 超时。