ARP — 地址解析协议

把 IPv4 地址解析为 MAC 地址 / 数据链路层 / 无端口(EtherType 0x0806)/ RFC 826

1. 协议定位

项目信息
所属层数据链路层(链路层与网络层之间的"胶水协议")
英文全称Address Resolution Protocol
主要 RFCRFC 826(1982,STD 37);相关:RFC 5227(IPv4 地址冲突检测 ACD)、RFC 1027(代理 ARP)、RFC 903(RARP,已废弃)
端口。ARP 不经过 IP 层与传输层,直接由以太网帧承载
封装于以太网帧,EtherType = 0x0806(对比 IPv4 = 0x0800,IPv6 = 0x86DD)
典型应用同一广播域内主机/网关通信前的 MAC 寻址、IP 冲突检测、VRRP/keepalived 主备切换通告、负载均衡 VIP 漂移

2. 一句话理解

ARP 是"局域网里的电话簿查询":你知道对方的 IP(名字),但以太网只认 MAC(电话号码),ARP 就是在广播域里喊一嗓子"谁是 192.168.1.1?请把你的 MAC 告诉我",然后把答案缓存起来。

生活化类比

想象你在一间大办公室里要把文件交给"张三"。你只知道他的名字,但送文件必须知道具体工位号。于是你站起来朝整个办公室喊一句:“张三在哪个工位?"——只有张三会举手回答"我在 12 号工位”,其他人听见了但不理你。

拿到答案后,你会把"张三 = 12 号工位"记在便利贴上,下次直接送过去,不用再喊。这张便利贴就是 ARP 缓存,喊话就是 ARP 请求(广播),张三单独回你就是 ARP 应答(单播)。麻烦的是:这间办公室没人查证件,任何人都可以冒充张三举手——这就是 ARP 欺骗的由来。

3. 它解决什么问题

为什么没有它,网络就"缺了一块":

IP 协议用 IP 地址(逻辑地址) 标识主机,而以太网真正投递帧时只看 MAC 地址(物理地址)。二者之间存在断层:

  1. 地址空间不匹配:IPv4 地址 32 位、可动态分配、与拓扑相关;MAC 地址 48 位、烧录在网卡上、与拓扑无关。
  2. 无法静态映射:主机 IP 可能通过 DHCP 变化、网卡可能更换,不可能预先在每台机器上配好全网映射表。
  3. 发送前必须知道目的 MAC:网络层交给链路层的数据必须封装成完整的以太网帧,目的 MAC 字段不能留空。

ARP 通过广播询问 + 单播应答 + 本地缓存这一极简机制填平了这个断层。

关键前提:ARP 只在同一广播域(同一二层网络 / 同一 VLAN)内工作。跨网段通信时,主机 ARP 请求的不是目的主机的 MAC,而是默认网关的 MAC——这是初学者最常见的误解。

4. 核心特征

  • 【即问即答】无连接、无状态、无确认:请求发出后不重传语义,靠上层超时驱动;应答无需再确认。
  • 【广播问·单播答】请求广播、应答单播:请求目的 MAC 为 FF:FF:FF:FF:FF:FF,应答直接单播回请求者(RFC 826 允许,实践中普遍如此)。
  • 【记账省事】缓存驱动:解析结果存入 ARP 缓存表(ARP Cache / 邻居表),有老化时间(Linux 默认可达状态 30 秒、陈旧回收约 60 秒起,Windows 约 15–45 秒随机),避免每包都广播。
  • 【顺风耳】被动学习:主机收到任意 ARP 报文时,可从 发送方 IP + 发送方 MAC 中学习映射(这正是 ARP 欺骗的攻击面)。
  • 【零安全】零安全机制:报文不带任何认证、签名或序列号,任何主机都能伪造应答。
  • 【已被继任】IPv6 中被取代:IPv6 不使用 ARP,改用 NDP(邻居发现协议) 的 ICMPv6 NS/NA 报文(RFC 4861)。

5. 与其他协议的关系

相关协议关系说明
IP(RFC 791)ARP 为 IP 服务:IP 决定"下一跳是谁",ARP 负责"下一跳的 MAC 是多少"
以太网 / 802.3ARP 报文直接封装在以太网帧中,不经过 IP 头
NDP / ICMPv6(RFC 4861)IPv6 的对等替代品,用 NS(邻居请求)/ NA(邻居通告)+ DAD 完成同样职责,且可用 SEND 做安全加固
DHCP(RFC 2131)DHCP 客户端拿到地址后通常发 ARP Probe 检测冲突;DHCP 服务器分配前也可能 ping/ARP 探测
VRRP / keepalived主备切换时用免费 ARP 通告"虚拟 IP 现在挂在我的 MAC 上",刷新交换机与主机缓存
DHCP Snooping + DAI交换机侧的 ARP 防护组合:靠 DHCP Snooping 绑定表校验 ARP 报文合法性
RARP(RFC 903)ARP 的反向操作(MAC → IP),已被 BOOTP/DHCP 完全取代

6. 本目录学习路线

  1. 01-原理与报文 — 掌握 ARP 报文 28 字节各字段含义、请求/应答完整交互时序、缓存状态机、免费 ARP / ARP Probe / 代理 ARP 三大变体机制。
  2. 02-实战与排错 — 用 Wireshark 与 tcpdump 抓 ARP 包,用 ip neigh / arping / arp 命令实操,排查"IP 冲突"“ping 不通网关"“ARP 欺骗断网"等典型故障。

学习建议:ARP 是整个协议栈自底向上的第一站,内容不多但极其高频。务必亲手在两台同网段机器上抓一次 arp 包,看清"广播问、单播答"这四个报文,之后学 IP 路由时才不会把"目的 MAC"和"目的 IP"搞混。

初学者最常踩的坑:以为"ping 谁就 ARP 问谁”。实际上 ARP 只在同一广播域内工作——跨网段通信时,主机 ARP 请求的是默认网关的 MAC,而不是目的主机的 MAC。所以在 ARP 表里找不到远端主机是完全正常的,不是故障。