ARP

掌握 ARP 的概念和流程,可能在选择题中考察。

概念

ARP(Address Resolution Protocol,地址解析协议)是一种在 TCP/IP 网络中使用的协议,用于将 IP 地址转换为物理硬件地址(例如,MAC 地址)。ARP 的主要目的是确定要通过网络传输数据的目标设备的物理硬件地址,以便将数据帧正确地传送到目标设备。

10.1.1.2
10.1.1.2
Switch
Switch
10.1.1.5
10.1.1.5
10.1.1.4
10.1.1.4
10.1.1.3
10.1.1.3
Requesting the mac address
for 10.1.1.1
Requesting the mac addr...
Sending mac address
5a:71:22:65:55:31
Sending mac address...
Text is not SVG - cannot display

流程

以上图为例,主机 10.1.1.2 用 ARP 协议查找主机 10.1.1.4 的 MAC 地址,其流程如下图所示

sequenceDiagram
  participant 10.1.1.2;
  participant Switch;
  10.1.1.2 ->> Switch: 请求 IP 地址为 10.1.1.4 的设备的 MAC 地址;
  Switch ->> 10.1.1.3: 广播 ARP 请求;
  Switch ->> 10.1.1.4: 广播 ARP 请求;
  Switch ->> 10.1.1.5: 广播 ARP 请求;
  10.1.1.4 ->> Switch: 返回 ARP 响应;
  Switch ->> 10.1.1.2: 交换器转发 ARP 响应;

具体而言,一次 ARP 请求可以被拆分为如下步骤:

  1. ARP 请求

当一台设备(我们称它为主机 A)需要发送数据包到同一局域网内的另一台设备(主机 B),但它只知道目标设备的 IP 地址时,它会在本地网络上广播一个 ARP 请求。这个请求的语义大致是这样的:“我拥有 IP 地址 X.X.X.X 的设备,请告诉我你的物理 MAC 地址。”

ARP 请求的目的 MAC 地址为 ff-ff-ff-ff-ff-ff-ff-ff,源 MAC 设置为自己的 MAC 地址。

  1. 网络上的广播

ARP 请求是一个广播帧,它发送到本地网络上的所有设备。每一台设备都会收到这个请求,但只有 IP 地址匹配请求中 IP 地址的设备会回应这个请求。

  1. ARP 响应

当主机 B 收到这个 ARP 请求后,它会识别出请求中的 IP 地址与自己的 IP 地址相匹配,然后向主机 A 发送一个 ARP 响应。这个响应包含了主机 B 的 MAC 地址,并且这个响应是直接发送给主机 A 的,不是广播。

  1. 更新 ARP 缓存

主机 A 收到 ARP 响应后,它会在自己的 ARP 缓存表中更新这个信息,将主机 B 的 IP 地址与其 MAC 地址关联起来。ARP 缓存表中的这些条目通常会在一段时间后过期,所以可能需要定期更新。

  1. 数据传输

主机 A 现在知道了主机 B 的 MAC 地址,它可以构建一个以太网帧,将数据包含在其中,并使用 B 的 MAC 地址作为目的地址发送出去。

ARP 缓存

所有主机都会维护一个 ARP 缓存,该缓存存储了网络上其他设备的 IP 地址和 MAC 地址的映射。 这减少了广播 ARP 请求的需要,因为主机可以查看自己的缓存来找到之前解析过的地址。

以下是一个简化的 ARP 缓存表格示例,展示了 IP 地址与 MAC 地址的映射关系:

IP 地址MAC 地址状态接口
192.168.1.100:1A:2B:3C:4D:5E动态eth0
192.168.1.200:1A:2B:3C:4D:5F静态eth0
192.168.1.300:1A:2B:3C:4D:60动态wlan0
192.168.1.400:1A:2B:3C:4D:61动态eth0
注意

ARP 运行在哪一层

地址解析协议(ARP)实际上是一个介于数据链路层(第二层)和网络层(第三层)之间的协议。ARP 的功能是将网络层的地址(如 IPv4 地址)解析为数据链路层的地址(如以太网 MAC 地址)。虽然它处理的是网络层地址,但它运行在数据链路层,直接构建和发送数据链路层的帧。因此,它通常被认为是网络层的一个辅助协议,但技术上它操作在数据链路层。