跳转到内容

🏷️ MAC 与 ARP:跨越物理层与网络层的桥梁

🌱 创建: 2026/04/01 ⏱️ 更新: 2026/05/22

在 OSI 七层模型中,IP 地址工作在第三层(网络层),负责全局的逻辑寻址与路由;而真正的物理数据传输,发生在第二层(数据链路层)。

当一台交换机需要将电信号或光信号精准地送达局域网内的某台设备时,它完全不关心该设备的 IP 地址是 192.168.1.10 还是 10.0.0.5。它唯一认准的,是硬编码在网卡芯片上的物理身份证——MAC 地址(Media Access Control Address)

而将高层的 IP 地址翻译为底层的 MAC 地址的“翻译官”,正是 ARP(Address Resolution Protocol,地址解析协议,RFC 826)


1. 物理身份证:深入理解 MAC 地址

Section titled “1. 物理身份证:深入理解 MAC 地址”

MAC 地址 是数据链路层的核心标识符。理论上,全球出厂的每一块网络接口卡(NIC)都拥有一个独一无二的 MAC 地址。

一个标准的 MAC 地址长度为 48 位(6 字节)。为了便于人类阅读,它通常被表示为 12 个十六进制字符,每两个字符(1 字节)之间用冒号 : 或连字符 - 隔开。

典型格式b8:27:eb:1a:2b:3cB8-27-EB-1A-2B-3C

这 48 位被严格划分为两个对等的部分(各 24 位):

  1. OUI(组织唯一标识符,Organizationally Unique Identifier):前 24 位(如 b8:27:eb)。这是由 IEEE(电气电子工程师学会)统一分配给硬件制造商的注册码。通过查询 OUI 数据库,可以直接知道这块网卡是 Intel、Apple 还是 Raspberry Pi 生产的。
  2. NIC 特定标识符(Network Interface Controller Specific):后 24 位(如 1a:2b:3c)。由硬件制造商自行分配的流水号,确保同一批次产品的 MAC 地址不重复。
  • 扁平化,无拓扑结构:与 IP 地址可以通过子网掩码(如 /24)划分出层级不同,MAC 地址是完全扁平的。你无法通过设备的 MAC 地址推断出它位于哪个城市、接入了哪个网络。
  • 二层广播 MACff:ff:ff:ff:ff:ff。当以太网数据帧的目标 MAC 被设置为这个全 f 的地址时,局域网内的交换机会将该数据帧泛洪(复制)到除了接收端口之外的所有物理端口。

2. ARP 协议:网络层与链路层的翻译官

Section titled “2. ARP 协议:网络层与链路层的翻译官”

当主机 A(192.168.10.5)想和同网段的主机 B(192.168.10.100)通信时,它在网络层构建好了一个目标 IP 为 .100 的数据包。但在将数据包塞入物理网线之前,主机 A 必须将其封装成一个二层以太网帧(Ethernet Frame)

以太网帧的头部必须填写“目的 MAC 地址”。此时,主机 A 遇到了一个致命问题:它只知道主机 B 的逻辑 IP,却不知道主机 B 的物理 MAC。

这就是 ARP(地址解析协议) 登场的时刻。

ARP 的交互非常简单直接,分为 ARP 请求(Request)ARP 应答(Reply)

admin@tech-fortress:~# tcpdump -i eth0 arp
阶段帧类型 (L2)操作对象协议交互解析
步骤 1:发出呼叫ARP Request全局广播
(目的 MAC: ff:ff:ff:ff:ff:ff)
主机 A 在局域网内大喊:“Who has 192.168.10.100? Tell 192.168.10.5”。交换机会把这个广播帧发给局域网内的所有设备。
步骤 2:静默丢弃无响应其他无关主机局域网内的其他设备(如 .20, .50)收到了这个广播,检查发现自己不是 .100,于是直接丢弃该报文,不作任何回应。
步骤 3:精准回复ARP Reply精确单播
(发往主机 A 的 MAC)
主机 B 收到广播,确认自己就是 .100。于是它把自己的 MAC 地址填入 ARP Reply 报文中,直接单播发送回主机 A:“192.168.10.100 is at b8:27:eb:11:22:33”。

跨网段的重要边界:ARP 请求是二层广播,绝对无法跨越路由器(网关)。如果主机 A 想访问外网的 8.8.8.8,它不会在局域网里发广播问“谁是 8.8.8.8”。它会直接通过 ARP 获取默认网关的 MAC 地址,把数据帧的二层目的地写成网关的 MAC,让网关代为转发。


3. ARP 缓存表:效率与安全的双刃剑

Section titled “3. ARP 缓存表:效率与安全的双刃剑”

如果每次发数据包都要先吼一嗓子发个广播,局域网早就被 ARP 请求瘫痪了。为了提高效率,所有的操作系统和三层设备都在内存中维护了一张 ARP 缓存表(ARP Cache Table)

一旦主机 A 获取了主机 B 的 MAC 地址,它就会将这对映射关系 [IP <-> MAC] 记录在缓存表中。下次再通信时,直接查表即可。

我们可以通过系统终端查看当前主机的邻居缓存:

admin@tech-fortress:~# arp -a
逻辑 IP 地址 (Address)物理 MAC 地址 (HWtype/HWaddress)接口 (Iface)类型 (Flags/Type)
192.168.10.1 (网关)a4:2b:8c:11:00:22eth0动态 (Dynamic) - 通过 ARP 请求学来,经过一定时间(老化时间)不通信会被自动删除。
192.168.10.5000:15:5d:22:33:44eth0动态 (Dynamic) - 同局域网内的其他服务器。
192.168.10.25400:00:00:00:00:00eth0不完整 (Incomplete) - 发出了 ARP Request,但目标主机未响应(可能关机或不存在)。
192.168.10.200aa:bb:cc:dd:ee:ffeth0静态 (Static / PERM) - 管理员手动绑定的硬编码条目,永不老化,免疫常见的 ARP 欺骗。


有时设备会在没有收到任何请求的情况下,主动向网络中发送广播,宣告自己的 IP 和 MAC。这种机制被称为“免费 ARP”。 主要用途

  1. IP 冲突检测:新设备获取 IP 后,发一个查询自己 IP 的 ARP。如果有人回复了,说明该 IP 已经被局域网内的其他设备占用。
  2. 高可用切换 (HA):当主路由器宕机,备用路由器接管虚拟 IP 时,它会立刻发送免费 ARP,强制更新局域网内所有交换机和主机的 ARP 缓存表,让流量瞬间切换到新网卡上。

ARP 协议在设计之初没有任何身份验证机制。主机 A 收到一个 ARP Reply 时,会毫无防备地直接覆盖自己缓存表里的记录。

攻击原理:恶意节点不断向局域网广播虚假的 ARP Reply(例如:“我是网关 192.168.10.1,我的 MAC 是 [黑客的MAC]”)。 局域网内的所有设备都会被欺骗,将发往网关的数据全都错误地投递给黑客的电脑。黑客借此可以轻易实现中间人攻击(MITM),拦截、嗅探甚至篡改网络流量。 (防御手段:在核心交换机上配置动态 ARP 检测(DAI)或 DHCP 侦听(Snooping))


在前面提到的 IPv6 架构中,ARP 协议已被彻底废弃。 IPv6 引入了基于 ICMPv6 的 NDP(邻居发现协议,Neighbor Discovery Protocol, RFC 4861)。NDP 使用更加精准高效的 多播(Multicast) 取代了 ARP 粗暴的全局广播,大幅降低了底层链路的泛洪开销,并原生集成了 IPSec 安全机制,从根本上封堵了传统的 ARP 欺骗漏洞。

  • RFC 826: An Ethernet Address Resolution Protocol (ARP 的核心标准规范)
  • RFC 5227: IPv4 Address Conflict Detection (利用 ARP 进行 IP 冲突检测)

最近更新: