📜  Linux ARP(1)

📅  最后修改于: 2023-12-03 15:17:20.190000             🧑  作者: Mango

Linux ARP

简介

ARP 是 Address Resolution Protocol(地址解析协议)的缩写。其主要作用是用来解析一个给定 IP 地址对应的 MAC 地址。

在局域网中,每个设备都会被分配一个唯一的 MAC 地址和 IP 地址。IP 地址可以改变,但是 MAC 地址是固定不变的。当一个设备需要与另一个设备通信时,它需要知道目标设备的 MAC 地址。ARP 协议就是用来解析这个 MAC 地址的。

在 Linux 系统中,内核会使用 ARP 缓存表来存储目标设备的 IP 地址和对应的 MAC 地址。当系统需要发送一个数据包到目标设备时,内核会先查询 ARP 缓存表来获取目标设备的 MAC 地址,如果没有找到,则会发送一个 ARP 请求(ARP Request)来获取目标设备的 MAC 地址。

ARP 缓存表

ARP 缓存表是内核用来存储 IP 地址和对应的 MAC 地址的一个数据结构。在 Linux 中,可以使用 arp -a 命令来查看当前系统的 ARP 缓存表。例如:

$ arp -a
linux.localdomain (192.168.0.100) at 54:67:51:23:45:67 [ether] on eth0

这里列出了当前系统中的一个 ARP 缓存条目。它包含了 192.168.0.100 这个 IP 地址对应的 54:67:51:23:45:67 这个 MAC 地址,以及它是在 eth0 这个网络接口中获取到的。

ARP 请求和应答

当系统需要发送一个数据包到一个 IP 地址时,它会先查询 ARP 缓存表来获取对应的 MAC 地址。如果找不到对应的 MAC 地址,则会发送一个 ARP 请求来获取目标设备的 MAC 地址。

ARP 请求的格式如下:

| 字段 | 长度 | 描述 | | ---- | ---- | ---- | | Hardware Type | 2 字节 | 硬件类型,例如以太网(Ethernet) | | Protocol Type | 2 字节 | 协议类型,例如 IPv4 | | Hardware Address Length | 1 字节 | 硬件地址长度,例如以太网的 MAC 地址长度为 6 字节 | | Protocol Address Length | 1 字节 | 协议地址长度,例如 IPv4 地址长度为 4 字节 | | Opcode | 2 字节 | 操作码,ARP 请求为 1,ARP 应答为 2 | | Sender Hardware Address | 6 字节 | 发送者的 MAC 地址 | | Sender Protocol Address | 4 字节 | 发送者的 IP 地址 | | Target Hardware Address | 6 字节 | 目标设备的 MAC 地址,对于 ARP 请求,该字段为 00:00:00:00:00:00 | | Target Protocol Address | 4 字节 | 目标设备的 IP 地址 |

当目标设备收到 ARP 请求后,它会发送一个 ARP 应答(ARP Reply)来告诉发送者自己的 MAC 地址。ARP 应答的格式和 ARP 请求的格式基本相同,只是其操作码为 2,Sender 和 Target 的地址互换了。

ARP 缓存和 ARP 欺骗

ARP 缓存表可以避免系统频繁发送 ARP 请求来获取目标设备的 MAC 地址,但是这也为 ARP 欺骗(ARP Spoofing)攻击提供了机会。ARP 欺骗攻击者会发送虚假的 ARP 应答来欺骗系统将攻击者的 MAC 地址认为是目标设备的 MAC 地址,从而达到窃取数据包、中断网络等目的。

为了防止 ARP 欺骗攻击,可以在网络中部署 ARP 防火墙(ARP Firewall),它会监控网络中的 ARP 数据包,并根据一些规则来过滤不合法的数据包。另外,在 Linux 系统中也提供了一些防范 ARP 欺骗的工具,例如 arptablesarpwatch