ARP 协议是什么?工作原理是怎样的?
简化版
ARP(地址解析协议)解决「知道 IP,怎么找到对应的 MAC 地址」的问题。同一局域网内,数据最终要靠 MAC 地址在链路层传输,但上层只知道对方的 IP。ARP 就用广播问「谁的 IP 是 x.x.x.x?告诉我你的 MAC」,目标主机单播回自己的 MAC。结果会存进 ARP 缓存,下次直接用。
详细版
为什么需要 ARP:网络层用 IP 地址寻址,但同一局域网内数据帧实际是靠数据链路层的 MAC 地址传输的。所以要把「目标 IP」翻译成「目标 MAC」,这就是 ARP 干的事。
ARP 解析过程(A 要给同网段的 B 发数据,只知道 B 的 IP):
- A 先查自己的 ARP 缓存,有 B 的 MAC 就直接用;
- 没有 → A 发一个 ARP 请求广播(目标 MAC 为
FF:FF:FF:FF:FF:FF):「谁是 IP_B?把你的 MAC 告诉我」; - 局域网内所有主机都收到,但只有 B 发现问的是自己,就单播回一个 ARP 响应:「IP_B 的 MAC 是 xx:xx」;
- A 收到后,把「IP_B → MAC_B」存进 ARP 缓存(有过期时间),然后用这个 MAC 封装数据帧发出去。
跨网段呢:如果 B 不在同一局域网,A 会把数据发给网关——此时 ARP 解析的是网关的 MAC,由网关(路由器)再往下一跳转发。
完整版教学
一、ARP 存在的根本原因:两套地址
网络通信里有两套地址并存,各管一段(详见「网络分层模型」那道题):
- IP 地址(网络层):用于跨网络的端到端寻址,逻辑地址;
- MAC 地址(数据链路层):用于同一局域网内相邻设备之间的实际传输,物理地址。
数据从 A 到 B,网络层决定「最终要到 IP_B」,但每一跳的实际投递靠 MAC。所以在把数据帧发到线路上之前,必须知道「下一跳的 MAC」。ARP 就是 IP 和 MAC 之间的翻译官——把网络层的 IP 翻译成链路层能用的 MAC。
二、广播请求 + 单播响应
ARP 的巧妙在于「一个问、全网听、只有本人答」:
- 请求用广播:因为 A 一开始不知道 B 的 MAC,没法定向发,只能广播给局域网所有设备「谁是 IP_B」;
- 响应用单播:B 知道 A 的地址(请求里带了 A 的 IP+MAC),所以直接单播回复,不用再广播。
其他主机收到广播请求,发现问的不是自己,就丢弃(但可能顺便更新一下 A 的 IP-MAC 到自己缓存)。
三、ARP 缓存:避免每次都广播
每次发数据都广播问一次太浪费。所以 A 会把解析到的「IP → MAC」存进 ARP 缓存表(arp -a 可查看),有效期内直接用,不再广播。缓存有过期时间(通常几分钟),过期后重新解析——这样既省广播,又能应对 IP-MAC 映射变化(如换了网卡)。
四、ARP 欺骗(ARP 攻击)
ARP 有个致命弱点:它不做任何身份验证——谁回复 ARP 响应就信谁。攻击者利用这点做 ARP 欺骗:
- 攻击者伪造 ARP 响应,告诉受害者「网关的 MAC 是我(攻击者)的 MAC」;
- 受害者的 ARP 缓存被污染,之后发给网关的数据全发给了攻击者;
- 攻击者再转发给真网关(中间人窃听/篡改),或直接丢弃(断网攻击)。
这是局域网内中间人攻击的常见手段。防御:静态 ARP 绑定(关键设备手动绑 IP-MAC)、交换机的 DAI(动态 ARP 检测)、ARP 防火墙。
五、常见误区
- ❌ 以为数据传输只靠 IP——同一局域网内实际靠 MAC,ARP 负责 IP→MAC 翻译。
- ❌ 以为跨网段 ARP 解析的是对方主机的 MAC——跨网段解析的是网关的 MAC,由网关转发。
- ❌ 以为 ARP 响应可信——ARP 无验证,谁回复信谁,所以有 ARP 欺骗。
- ❌ 以为每次发数据都要广播——有 ARP 缓存,命中就直接用,过期才重新解析。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 目标 | 已知同网段 IP,找到对应 MAC |
| 请求 | 广播 ARP Request |
| 响应 | 目标主机单播 ARP Reply |
Host A wants 192.168.1.20
A broadcasts: who has 192.168.1.20?
B replies: 192.168.1.20 is at bb:bb:bb:bb:bb:bb
A caches IP -> MAC
ARP 解决的是同一二层网络内“下一跳 IP 到 MAC”的问题,不负责跨网段路由。
- 误区:ARP 把域名解析成 IP。 域名到 IP 是 DNS,IP 到 MAC 才是 ARP 的职责。
- 误区:访问外网时 ARP 查询目标公网 IP 的 MAC。 跨网段时 ARP 查询默认网关的 MAC,数据帧先交给网关。
- 误区:ARP 缓存永久有效。 ARP 缓存有老化时间,网络变化后会重新学习。
- 追问:ARP 为什么容易被欺骗? ARP 缺少强认证,主机可能接受伪造的 IP-MAC 映射。
- 追问:免费 ARP 有什么用? 可用于地址冲突检测、刷新邻居缓存或主备切换时更新映射。
- 追问:IPv6 还用 ARP 吗? IPv6 使用 NDP 基于 ICMPv6 完成邻居发现,不再使用 ARP。
七、加强记忆
ARP 解决「知道 IP、求 MAC」:同一局域网数据靠 MAC 传输,ARP 用广播请求(谁是 IP_x)+ 单播响应(我的 MAC 是 xx)完成 IP→MAC 翻译,结果存进 ARP 缓存。跨网段则解析网关的 MAC。ARP 无身份验证,谁回复信谁,因此存在 ARP 欺骗(局域网中间人),靠静态绑定/DAI 防御。