4、MAC地址与ARP协议:从帧头到欺骗防御
聊到网络协议栈,MAC地址和ARP协议就像一对老搭档。一个负责在物理链路上标识设备,另一个负责把IP地址翻译成MAC地址。说白了,没有它们,数据帧连第一跳都出不去。
我刚开始接触网络时,总觉得MAC地址是固定的、不可变的,ARP就是个简单的查询过程。后来踩过几次坑才发现——嗯,这里面的门道比想象中深得多。
4.1 MAC地址结构:OUI与NIC
MAC地址,全称Media Access Control Address,是烧录在网卡上的48位硬件地址。你打开电脑的网卡属性,看到的那个形如 00-1A-2B-3C-4D-5E 的字符串,就是它。
这48位分成两段:
| 字段 | 长度 | 说明 |
|---|---|---|
| OUI(Organizationally Unique Identifier) | 24位(前3字节) | 由IEEE分配给厂商,标识网卡制造商 |
| NIC(Network Interface Controller) | 24位(后3字节) | 由厂商自行分配,确保同一OUI下不重复 |
举个例子,MAC地址 00:1A:2B:3C:4D:5E:
- OUI =
00:1A:2B→ 查IEEE数据库,这是Cisco的某段OUI - NIC =
3C:4D:5E→ Cisco分配给这块网卡的唯一编号
oui.txt 数据库或在线工具,几秒钟就能定位设备制造商。有一次客户说网络里有个“未知设备”,我一查OUI,发现是某品牌打印机——省了一下午的抓包时间。
MAC地址还有两个特殊位需要注意:
- 第1字节的最低第0位(I/G位):0表示单播,1表示组播。比如
01:00:5E:xx:xx:xx就是IPv4组播MAC。 - 第1字节的最低第1位(G/L位):0表示全局唯一(由IEEE分配),1表示本地管理。虚拟机的MAC地址经常用本地管理地址,比如
02:xx:xx:xx:xx:xx。
4.2 ARP协议:地址解析的核心机制
ARP(Address Resolution Protocol)解决一个基本问题:我知道对方的IP,但不知道它的MAC地址,怎么把数据帧发过去?
ARP工作在数据链路层和网络层之间,协议号是 0x0806。它的核心流程就四个字:请求-响应。
4.2.1 ARP请求/响应流程
假设主机A(IP: 192.168.1.10)想给主机B(IP: 192.168.1.20)发数据,但A的ARP缓存里没有B的MAC地址。流程如下:
- A广播ARP请求:A在局域网内发送一个广播帧,目标MAC为
FF:FF:FF:FF:FF:FF,内容大致是:“谁的IP是192.168.1.20?请告诉你的MAC地址。” - B单播ARP响应:B收到请求后,发现问的是自己,就回复一个单播帧给A:“我就是192.168.1.20,我的MAC是
00:1A:2B:3C:4D:5E。” - A更新ARP缓存:A收到响应后,把IP和MAC的映射关系写入ARP缓存表,然后开始正常通信。
整个过程非常快,通常只需要几毫秒。但这里有个细节——ARP请求是广播,ARP响应是单播。为什么?因为A不知道B的MAC,只能用广播“喊”所有人;而B知道A的MAC(从请求帧的源MAC字段里读到的),所以可以直接单播回复。
4.2.2 ARP缓存表
ARP缓存表是每个主机维护的一张IP-MAC映射表。它的存在是为了避免每次通信都发广播,减少网络开销。
我随便抓一台Windows机器的ARP表,大概长这样:
C:\> arp -a
接口: 192.168.1.10 --- 0x5
Internet 地址 物理地址 类型
192.168.1.1 00-1A-2B-00-00-01 动态
192.168.1.20 00-1A-2B-3C-4D-5E 动态
192.168.1.100 02-00-4C-4F-4F-50 静态
表里的条目分两种:
| 类型 | 说明 | 生命周期 |
|---|---|---|
| 动态 | 通过ARP协议自动学习到的条目 | 通常2-10分钟(不同OS不同) |
| 静态 | 管理员手动添加的条目 | 永久有效,直到手动删除 |
4.3 免费ARP(Gratuitous ARP)
免费ARP,也叫无故ARP。它不是为了查询别人,而是设备主动广播自己的IP-MAC映射。典型场景:
- IP地址冲突检测:设备上线时发一个免费ARP,如果收到响应,说明IP已被占用。
- MAC地址变更通知:比如网卡更换、虚拟机迁移后,发免费ARP让全网更新缓存。
- 高可用场景:VRRP/HSRP切换时,备用路由器发免费ARP,告诉所有主机“网关的MAC变了”。
免费ARP的报文格式和普通ARP请求一样,但目标IP字段填的是自己的IP。说白了,就是自己问自己:“我的IP是谁的?”——有点自问自答的意思。
4.4 ARP欺骗攻击与防御
ARP欺骗的原理很简单:攻击者发送伪造的ARP报文,篡改目标主机的ARP缓存表。
举个例子,攻击者C想拦截A和网关G之间的流量:
- C发送伪造ARP响应给A,说“网关192.168.1.1的MAC是CC:CC:CC:CC:CC:CC”(实际上是C的MAC)。
- C发送伪造ARP响应给G,说“主机192.168.1.10的MAC是CC:CC:CC:CC:CC:CC”。
- A和G都把流量发给C,C转发数据的同时可以窃听或篡改。
防御手段主要有以下几种:
| 防御方法 | 原理 | 优缺点 |
|---|---|---|
| 静态ARP | 手动绑定关键设备的IP-MAC | 安全但维护量大,不适合大规模网络 |
| DAI(Dynamic ARP Inspection) | 交换机检查ARP报文的合法性,只允许通过DHCP Snooping绑定的合法ARP | 效果好,但需要交换机支持 |
| ARP防火墙 | 终端软件监控ARP表变化,发现异常时告警或拦截 | 适合终端防护,但依赖软件安装 |
| 端口安全 | 交换机限制每个端口允许的MAC地址数量 | 简单有效,但无法防御跨端口欺骗 |
4.5 本章知识体系图
下面这张图梳理了MAC地址、ARP协议、免费ARP和ARP欺骗防御之间的逻辑关系:
这张图从MAC地址结构出发,引出ARP协议的核心流程和缓存表,再延伸到免费ARP的双重作用,最后落到ARP欺骗攻击和防御体系。你看,整个知识链条是环环相扣的——任何一个环节出问题,网络都可能“断片”。