4、以太网帧与MAC地址:帧结构、MAC地址解析、广播与单播、ARP协议基础
各位好,咱们今天聊聊网络世界里最基础、也最容易被忽略的东西——以太网帧和MAC地址。
说实话,我刚开始做运维那会儿,总觉得抓包就是看看IP、看看端口。直到有一次,一个诡异的丢包问题查了我整整两天,最后发现是MAC地址表刷错了。从那以后,我养成了一个习惯:遇到网络问题,先看二层,再看三层。你想想看,二层都走不通,三层再花哨也没用。
4.1 以太网帧长什么样?
以太网帧,说白了就是数据在网线上跑的时候穿的“衣服”。这件衣服有固定的款式,咱们来看看它的结构。
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 前导码 | 7 | 用于同步时钟,实际抓包时通常看不到 |
| 帧起始定界符 | 1 | 标志帧的开始 |
| 目的MAC地址 | 6 | 谁该收这个包 |
| 源MAC地址 | 6 | 谁发的这个包 |
| 类型/长度 | 2 | 0x0800表示IPv4,0x0806表示ARP |
| 数据载荷 | 46-1500 | 上层协议的数据,比如IP包 |
| 帧校验序列 | 4 | CRC校验,检查数据是否损坏 |
这里有个细节我提醒一下:前导码和帧起始定界符在Wireshark里是看不到的。我第一次用Wireshark抓包时,找了半天没找到这8个字节,还以为软件坏了。其实它们是物理层的东西,网卡在接收时会自动剥离掉。
核心要点:以太网帧的最小长度是64字节(从目的MAC到FCS)。如果数据不够,会填充到46字节。为什么是64?因为要确保在冲突检测机制下,发送方能在发送完之前检测到冲突。
4.2 MAC地址解析
MAC地址,就是网卡的“身份证”。它由48位二进制组成,通常写成12个十六进制数,比如 00:1A:2B:3C:4D:5E。
我个人习惯把MAC地址分成两部分来看:
- 前24位(OUI):厂商代码。比如00:1A:2B是华为的,00:0C:29是VMware的。
- 后24位:由厂商自行分配,理论上全球唯一。
这里有个坑,我曾经踩过:MAC地址是可以修改的。很多操作系统允许你手动设置MAC地址,这叫“MAC地址欺骗”。有一次客户说网络里有IP冲突,我查了半天,发现是有人故意改了MAC地址在搞破坏。所以,别太迷信MAC地址的唯一性。
小技巧:在Wireshark里,如果看到MAC地址以 01:00:5E 开头,那是组播地址。以 FF:FF:FF:FF:FF:FF 开头,那是广播地址。一眼就能认出来。
4.3 广播与单播
网络通信就两种模式:一对一和一对多。
- 单播:目的MAC地址是某个特定设备的地址。交换机看到这个帧,只会转发给对应的端口。
- 广播:目的MAC地址是
FF:FF:FF:FF:FF:FF。交换机看到这个帧,会复制一份发给所有端口(除了接收端口)。 - 组播:目的MAC地址以
01:00:5E开头。只有加入了这个组播组的设备才会接收。
你想想看,如果网络里全是广播,那会是什么场景?所有设备都得停下来处理这些广播帧,CPU占用飙升。这就是所谓的广播风暴。我在一个大型园区网里遇到过,一个环路导致广播帧无限循环,整个网络直接瘫痪。嗯,那场面,真是“一帧发,万机卡”。
避坑指南:我曾经在配置VLAN时,忘了把两个交换机的Trunk端口做修剪,结果广播帧跨VLAN传播,导致部分业务中断。记住:VLAN是广播域的边界,别让广播帧跑出它该待的地方。
4.4 ARP协议基础
ARP,全称是地址解析协议。它的作用很简单:已知IP地址,问MAC地址。
过程是这样的:
- 主机A想和主机B通信,但只知道B的IP,不知道B的MAC。
- A发送一个ARP请求广播帧,问:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
- 所有设备都收到这个广播,但只有B会回应。
- B发送一个ARP应答单播帧,说:“我是192.168.1.2,我的MAC是00:1A:2B:3C:4D:5E。”
- A收到后,把IP和MAC的对应关系缓存起来,下次直接用。
ARP请求的帧结构是这样的:
以太网帧头:
目的MAC: FF:FF:FF:FF:FF:FF (广播)
源MAC: 00:1A:2B:3C:4D:5E
类型: 0x0806 (ARP)
ARP数据:
硬件类型: 1 (以太网)
协议类型: 0x0800 (IPv4)
硬件地址长度: 6
协议地址长度: 4
操作码: 1 (请求) 或 2 (应答)
发送方MAC: 00:1A:2B:3C:4D:5E
发送方IP: 192.168.1.1
目标MAC: 00:00:00:00:00:00 (请求时为0)
目标IP: 192.168.1.2
这里有个经典问题:ARP欺骗。攻击者可以伪造ARP应答,告诉别人“192.168.1.1的MAC地址是我的”。这样一来,所有发往网关的流量都会经过攻击者的机器。我在一次渗透测试中就用过这个手法,成功截获了管理员的口令。所以,在关键网络里,建议配置静态ARP或者使用DAI(动态ARP检测)。
实战经验:ARP缓存是有时效的,默认一般是2分钟。如果网络拓扑变化频繁(比如虚拟机迁移),你会发现ARP缓存经常过期,导致通信中断。我建议在服务器上把关键IP的ARP条目设为静态,避免这种问题。
4.5 本章知识体系
下面这张图,是我自己梳理的以太网与MAC地址的核心逻辑。你看一眼,基本就能把今天的内容串起来。
这张图把今天的内容分成了三大块:帧结构是基础,MAC地址是身份标识,ARP是IP到MAC的桥梁。三者缺一不可。
好了,关于以太网帧和MAC地址,咱们就聊到这儿。记住一句话:网络问题,从二层开始查。下次你遇到网络不通,先看看MAC地址对不对,ARP缓存有没有问题,往往能省下不少时间。