Appearance
ARP 协议
ARP(Address Resolution Protocol,地址解析协议)用于把 IP 地址解析为 MAC 地址(也就是「已知对端 IP,求对端网卡硬件地址」)。它工作在 TCP/IP 模型的网络接口层 / 链路层与网络层交界处(严格说属于链路层,但为配合 IP 通信而存在),是局域网通信不可或缺的一环。
为什么需要它?网络层用 IP 寻址(逻辑地址),但数据帧在**二层(以太网)**实际是靠 MAC 地址 投递的。发包前必须知道下一跳/目的主机的 MAC,ARP 就是做这个「翻译」。
一、ARP 的工作流程
假设主机 A(192.168.1.10)要给同网段主机 B(192.168.1.20)发包,但只知道 B 的 IP:
- 查缓存:A 先看本地 ARP 缓存表 是否已有 192.168.1.20 → MAC 的映射,有则直接用。
- ARP 请求(广播):没有缓存时,A 在局域网内广播一个 ARP Request:「谁的 IP 是 192.168.1.20?请把你的 MAC 告诉我」。
- ARP 应答(单播):只有 B 认领该 IP,向 A 单播回 ARP Reply,带上自己的 MAC。
- 写缓存:A 把
192.168.1.20 ↔ MAC写入 ARP 缓存(有老化时间,通常几分钟),之后直接通信。
A ──广播──> [ 谁有 192.168.1.20? ] ──> 全网
B ──单播──> [ 我是 192.168.1.20,MAC=xx:xx ] ──> A跨网段时:A 发现目标不在同一子网,会把包发给默认网关的 MAC(同样通过 ARP 解析网关 IP),由路由器转发——所以「跨网段通信」依然要先 ARP 到网关。
二、报文格式(以太网 ARP)
0 1 2 3
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 硬件类型(1=以太网) | 协议类型(0x0800=IPv4) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 硬件地址长度(6) | 协议地址长度(4) | 操作 Opcode |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 发送方 MAC(6 字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 发送方 IP(4 字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标 MAC(6 字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标 IP(4 字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 操作 Opcode:
1= ARP 请求(Request),2= ARP 应答(Reply)。请求时「目标 MAC」填全 0(未知)。 - 硬件类型
1表示以太网;协议类型0x0800表示要解析的是 IPv4 地址。
三、ARP 缓存与常用命令
- 缓存条目有过期时间,超时或 IP 变更后会重新解析。
- 查看/管理缓存:
- Windows / Linux:
arp -a(查看);arp -d(删除某条)。 - Linux 还可:
ip neigh(更现代的邻居表查看)。
- Windows / Linux:
四、安全:ARP 欺骗(ARP 毒化)
ARP 本身没有认证,任何主机都能声称「我是 192.168.1.1(网关)」。攻击者据此伪造 ARP 应答,把自己伪装成网关/受害者,实现:
- 中间人攻击(MITM):劫持、窃听、篡改局域网内流量。
- 断网/黑洞:伪造映射使流量发往不存在的 MAC。
防护手段:静态 ARP 绑定、交换机端口安全 / DHCP Snooping + 动态 ARP 检测(DAI)、网络分段与加密(HTTPS/VLAN)。
五、相关协议
- RARP:反向 ARP,由 MAC 求 IP(已被 BOOTP/DHCP 取代)。
- 代理 ARP:路由器代答 ARP,让不同子网主机「以为」在同一网段。
- IPv6 的 NDP:IPv6 不再使用 ARP,而是用 NDP(邻居发现协议,基于 ICMPv6) 完成地址解析、重复地址检测等。
六、与 ICMP / TCP 的层次关系
| 协议 | 层次 | 职责 |
|---|---|---|
| ARP | 链路层 / 网络层交界 | IP ↔ MAC 地址解析 |
| ICMP | 网络层(L3) | 差错与控制报文(ping/traceroute) |
| TCP / UDP | 传输层(L4) | 端到端可靠/不可靠传输 |
简单记忆:要发包先靠 ARP 找到 MAC(二层),要诊断网络靠 ICMP(三层),要传数据靠 TCP/UDP(四层)。