ARP 协议 · 完全图解

IP 地址怎么变成 MAC 地址?广播问、单播答,以及 ARP 欺骗的原理

IP → MAC 广播请求 / 单播应答 ARP 缓存 ARP 欺骗

①ARP 解决什么问题

网络层用 IP 地址寻址,但数据链路层的网卡只认 MAC 地址。数据帧最终要靠 MAC 才能在链路上送达。ARP(Address Resolution Protocol)做的就是这件事:已知目标 IP,问出它的 MAC 地址。
层次地址作用范围
网络层(IP)IP 地址,如 192.168.1.10全局,用于跨网络路由到目标主机
数据链路层MAC 地址,如 08:00:27:ab:cd:ef仅本网段,用于把帧交给下一跳设备
一句话类比:IP 地址像“收件人姓名+城市”(全程不变),MAC 地址像“当前这一站的下一棒快递员”(每经过一跳都会换)。ARP 就是“根据收件人查下一棒是谁”。

②同网段 ARP 解析:广播问,单播答

主机 A(192.168.1.10)想给同网段的主机 B(192.168.1.20)发数据,但不知道 B 的 MAC:

同网段 ARP:一次广播提问,一次单播回答 主机 A 192.168.1.10 主机 B 192.168.1.20 主机 C 192.168.1.30 交换机 / 局域网链路 ① ARP 请求(广播):谁是 192.168.1.20?请告诉 192.168.1.10 ② ARP 应答(单播):我是,MAC = BB:BB:... 广播请求:目标 MAC = FF:FF:FF:FF:FF:FF,全网段都能收到 单播应答:只有 B 回应,直接告诉 A 自己的 MAC;C 收下后丢弃

① ARP 请求(广播)

目标 MAC 填 FF:FF:FF:FF:FF:FF(广播地址)。内容大意:“谁的 IP 是 192.168.1.20?请把你的 MAC 告诉 192.168.1.10”。

② ARP 应答(单播)

只有 IP 匹配的 B 回应,点对点告诉 A 自己的 MAC。其他主机收下请求但丢弃。

③ 缓存结果

A 把 192.168.1.20 → MAC 存入ARP 缓存表,下次直接用,不必再广播。缓存有老化时间(通常几分钟)。

③跨网段:ARP 只问“下一跳”

核心认知:如果目标 IP 不在同一网段,主机不会去 ARP 目标主机的 MAC——因为根本问不到(广播出不去本网段)。它会改为 ARP 网关(下一跳路由器)的 MAC,把帧交给网关,由网关负责往后转发。

判断流程:主机用自己的子网掩码算出目标网络号 → 与自己的网络号比较 → 相同则同网段直接 ARP 目标;不同则 ARP 网关。

跨网段:ARP 解析的是网关 MAC,帧的 MAC 每跳都换、IP 始终不变 主机 A 192.168.1.10 网关 / 路由器 192.168.1.1 路由器 下一跳 目标服务器 8.8.8.8 ARP 网关 帧:目的MAC=网关 IP 头:源 192.168.1.10 → 目的 8.8.8.8 (全程不变) MAC 头:每经过一跳就重写源 MAC 与目的 MAC
所以:整个传输过程中 IP 地址始终不变(端到端),而 MAC 地址每一跳都在变(逐段链路)。这是网络分层最经典的考点之一。

④ARP 缓存与免费 ARP

ARP 缓存表

每次都广播太低效,所以主机会缓存解析结果。可以用 arp -a(Windows/macOS)或 ip neigh(Linux)查看:

# Linux 查看 ARP / 邻居表
$ ip neigh show
192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
192.168.1.20 dev eth0 lladdr 11:22:33:44:55:66 STALE

# 状态含义
# REACHABLE 可达      STALE  陈旧(需重新验证)
# DELAY     延迟探测   PROBE  正在探测

免费 ARP(Gratuitous ARP)

是什么

主机主动发一个“问自己的 IP 对应什么 MAC”的 ARP 请求(源 IP = 目标 IP = 自己的 IP),通常没人会应答。

作用一:IP 冲突检测

如果收到应答,说明网内已有别人用了这个 IP,即 IP 地址冲突。

作用二:刷新他人缓存

主机更换网卡或做高可用切换(如 VIP 漂移)时,用免费 ARP 通知全网更新 MAC 映射。

⑤ARP 欺骗:局域网里的“中间人”

前提缺陷:ARP 协议没有任何身份验证——它默认“谁回答就是谁”,而且主机会无条件相信收到的 ARP 应答(即使自己根本没问过)。这就给了攻击者可乘之机。

攻击原理:攻击者持续向受害者发送伪造的 ARP 应答,声称“网关的 IP 对应的是我的 MAC”。受害者的 ARP 缓存被污染,本该发给网关的流量就全发到了攻击者机器上——形成中间人攻击,可窃听、篡改流量(尤其在 HTTP 明文场景下)。

ARP 欺骗:伪造应答污染缓存,把流量引到自己身上 受害者 192.168.1.10 攻击者 伪装成网关 真网关 192.168.1.1 伪造应答:网关的 MAC 是我 实际路径:受害者 → 攻击者(窃听/篡改)→ 真网关

防御手段

手段说明
静态 ARP 绑定在主机上手动绑定网关 IP↔MAC,不接受动态应答。简单有效但维护成本高。
交换机端口安全 / DAI交换机开启 Dynamic ARP Inspection,校验 ARP 报文合法性。
网络分段 VLAN缩小广播域,限制攻击影响范围。
上层加密用 HTTPS / SSH 等加密传输——即便被中间人,也拿不到明文。这是最根本的兜底。

⑥面试高频追问

Q1:ARP 的作用是什么?工作在第几层?
把 IP 地址解析为 MAC 地址。它工作在网络层与数据链路层之间(通常归为网络层协议,因为它为 IP 提供服务),ARP 报文直接封装在以太网帧中,不经过 IP。
Q2:ARP 请求是广播还是单播?应答呢?
请求是广播(目的 MAC = FF:FF:FF:FF:FF:FF),因为不知道目标是谁;应答是单播,因为此时已经知道提问者的 MAC。
Q3:跨网段通信时,ARP 解析的是谁的 MAC?
解析网关(下一跳路由器)的 MAC,不是目标主机的 MAC。目标 IP 与本机构成同网段判断后才直接解析目标 MAC。
Q4:跨网段传输时,IP 和 MAC 谁变谁不变?
IP 地址全程不变(源 IP 和目的 IP 端到端保持);MAC 地址每一跳都会重写(源 MAC 和目的 MAC 只在当前链路有效)。(NAT 场景除外,NAT 会改 IP。)
Q5:什么是免费 ARP?有什么用?
主机主动发“查询自己 IP 对应 MAC”的 ARP 请求。用途:① 检测 IP 地址冲突(有人应答就说明冲突);② 网卡更换或 VIP 漂移时主动刷新他人的 ARP 缓存。
Q6:ARP 欺骗的原理和防御?
原理:ARP 无身份验证,主机无条件相信收到的应答;攻击者伪造应答把网关 IP 映射到自己的 MAC,成为中间人。防御:静态 ARP 绑定、交换机 DAI、VLAN 隔离,以及用 HTTPS 等加密传输做兜底。
Q7:ARP 和 DNS 有什么区别?
都是“名字→地址”的解析,但层级不同:DNS 把域名解析为 IP 地址(应用层,全球分布式);ARP 把 IP 解析为 MAC 地址(局域网内,链路层相关)。
Q8:RARP 是什么?
反向 ARP:已知自己的 MAC,请求分配 IP 地址。早期用于无盘工作站。现在已被功能更强的 DHCP 取代。

✓一句话速记

ARP = 已知 IP 问 MAC:广播请求、单播应答、结果进缓存;跨网段只问网关的 MAC,所以 IP 端到端不变、MAC 每跳都换;协议无验证 → 存在 ARP 欺骗,靠静态绑定/DAI/HTTPS 防御。