定位:一篇从零到攻防的 ARP 完整解析。不只是"IP 换 MAC 的协议"——把报文逐字节拆开、把解析时序画清、把代理 ARP 的正反两面说透、把内网横移的核心链路与分层防御讲全。所有字段值、定时器参数、命令均可直接对照实验。
0 · 导读:为什么 ARP 值得"全解"
ARP(Address Resolution Protocol,地址解析协议,RFC 826,1982 年 David C. Plummer)做一件事:在同一个广播域内,把已知的 IP 地址解析为 MAC 地址。它是 IPv4 over Ethernet 的粘合剂——没有它,IP 包连网卡都进不去。
但它值得单独成篇,是因为四个"之最":
| 维度 | ARP 的地位 |
|---|---|
| 最基础 | 每一次跨主机的 IPv4 通信(哪怕访问外网)都先问一次 ARP |
| 最"裸奔" | 设计于 1982 年,无认证、无加密、无状态,"我是谁"全靠报文里一张嘴 |
| 最致命 | 内网横向渗透、中间人、流量劫持的第一跳几乎都是 ARP |
| 最易误解 | 免费 ARP、代理 ARP、RARP、InARP、NDP 互相纠缠,面试重灾区 |
本篇路线图:
- 报文:28 字节逐字段 + 以太帧封装 + 完整十六进制抓包实例;
- 解析过程:查表 → 广播请求 → 单播应答 → 缓存更新的完整时序,含缓存状态机与定时器;
- 免费 ARP 与探针:被忽视的四个真实用途;
- 代理 ARP:原理、两种模式、现代替代、风险;
- 协议辨析:RARP / InARP / DHCP / IPv6 NDP;
- 攻击:欺骗 / 泛洪 / MAC 洪泛三层攻击链与 MITM 后续利用;
- 防御:从主机静态绑定到交换机 DAI 的分层矩阵,每层的成本与边界;
- 抓包实战 + 面试高频题。
1 · ARP 报文格式:28 字节的逐字段拆解
1.1 报文结构(Ethernet + IPv4 场景)
ARP 报文本体固定 28 字节,字段长度却由报文自己声明(这是为兼容非 Ethernet/非 IPv4 网络设计的,如令牌环、FDDI、IPX):
| # | 字段 | 长度 | Ethernet+IPv4 取值 | 说明 |
|---|---|---|---|---|
| 1 | Hardware Type (HTYPE) | 2 B | 0x0001 |
硬件地址类型:1 = Ethernet |
| 2 | Protocol Type (PTYPE) | 2 B | 0x0800 |
协议地址类型:与 EtherType 同编码,IPv4 = 0x0800 |
| 3 | Hardware Addr Length (HLEN) | 1 B | 0x06 |
MAC 地址长度:6 字节 |
| 4 | Protocol Addr Length (PLEN) | 1 B | 0x04 |
IP 地址长度:4 字节 |
| 5 | Operation (OPER) | 2 B | 0x0001 请求 / 0x0002 应答 |
见 1.3 操作码全表 |
| 6 | Sender HA (SHA) | HLEN = 6 B | 发送方 MAC | |
| 7 | Sender PA (SPA) | PLEN = 4 B | 发送方 IP | |
| 8 | Target HA (THA) | HLEN = 6 B | 请求时全 0,应答时填充 | 唯一由对端回填的字段 |
| 9 | Target PA (TPA) | PLEN = 4 B | 要解析的目标 IP |
合计 2+2+1+1+2+6+4+6+4 = 28 字节。
关键设计: ARP 的地址长度是"自描述"的——HLEN/PLEN 允许同一份报文格式用于 Ethernet/IPv4、Token Ring/IPv4、甚至 FR/IPX 组合。这也是 InARP(帧中继)能复用 ARP 格式的原因(见第 5 节)。
1.2 以太帧封装
┌─────────────────────────── Ethernet II 帧 ───────────────────────────┐
│ 目的 MAC (6B) 源 MAC (6B) EtherType (2B) FCS (4B) │
│ ff:ff:ff:ff:ff sender_mac 0x0806 CRC-32 │
├─────────────────────────── ARP 载荷 (28B) ───────────────────────────┤
│ HTYPE PTYPE HLEN PLEN OPER SHA SPA THA TPA │
└──────────────────────────────────────────────────────────────────────┘
三个必须记住的事实:
- EtherType = 0x0806 标识 ARP(RARP 是 0x8035,二者不同);
- 请求的目的 MAC 固定
ff:ff:ff:ff:ff:ff(广播);应答一般是单播(发回请求者),也可以是广播; - 以太网最小帧 64 字节 = 14 B 帧头 + 46 B 载荷 + 4 B FCS。ARP 只有 28 B,因此后面要补 18 B 的 0x00 padding——抓包看到的 “trailer” 或 padding 就是这个,不是报文内容。
1.3 操作码全表(面试常考"ARP 有哪些类型")
| OPER 值 | 名称 | 现状 |
|---|---|---|
| 1 | ARP Request | 在用 |
| 2 | ARP Reply | 在用 |
| 3 | RARP Request | 已淘汰(DHCP 取代) |
| 4 | RARP Reply | 已淘汰 |
| 5/6 | DRARP Request/Reply(动态 RARP) | 历史 |
| 7 | DRARP E |

本文深入剖析ARP协议核心机制,涵盖28字节报文格式(含EtherType 0x0806、操作码类型、自描述地址长度)、完整解析时序(缓存查询、广播请求、单播应答、NUD状态机)、免费ARP与代理ARP原理及风险。重点分析ARP欺骗、泛洪、MAC洪泛三类内网攻击链,并提出基于主机绑定、DHCP Snooping、DAI、Port Security和VLAN划分的分层防御矩阵。同时对比NDP在IPv6中的演进与攻防新形态。
2618

被折叠的 条评论
为什么被折叠?



