以太网与MAC地址:帧格式、ARP协议与冲突域
核心原理:以太网帧如何封装数据
以太网是TCP/IP协议栈中最常用的链路层实现。当IP层准备好一个数据报后,它并不会直接发送到物理线路上,而是先交给以太网驱动,由驱动将其封装为以太网帧(Ethernet Frame)。理解帧格式是分析网络问题的第一步,因为抓包工具(如Wireshark)中看到的每一个数据包,本质上都是这样一个帧。
经典的以太网帧(Ethernet II格式)结构如下:
| 前导码(7B) | 帧起始符(1B) | 目的MAC(6B) | 源MAC(6B) | 类型(2B) | 载荷(46~1500B) | FCS(4B) |
其中,前导码和帧起始符由物理层硬件处理,抓包时通常不显示。真正需要关注的是从目的MAC到FCS的部分。类型字段(Type)用于标识上层协议,例如0x0800表示IPv4,0x0806表示ARP,0x86DD表示IPv6。载荷区最小46字节、最大1500字节,这个1500字节就是常说的MTU(最大传输单元)。如果IP数据报超过MTU,就需要在IP层进行分片。
帧校验序列(FCS)使用CRC-32算法计算,接收方会重新计算并比对,若不一致则丢弃该帧。这一机制保证了以太网传输的可靠性基础——但请注意,它只校验帧是否在传输中损坏,并不保证数据一定送达,那是上层TCP协议的责任。
MAC地址与ARP协议:从IP到MAC的映射
MAC地址(Media Access Control Address)是网卡的物理地址,长度为48位(6字节),通常写作00:1A:2B:3C:4D:5E。前24位是OUI(组织唯一标识符),由IEEE分配给厂商;后24位由厂商自行分配。MAC地址在局域网内必须唯一,但它在全球范围内并不绝对唯一——虚拟机、手工修改网卡MAC地址等情况都会产生重复。
当主机A要向主机B发送IP数据报时,它必须知道B的MAC地址。但IP层只关心IP地址,并不知道MAC地址。这时就需要ARP(Address Resolution Protocol,地址解析协议)来完成从IP到MAC的映射。ARP的工作流程如下:
- 主机A检查自己的ARP缓存表,查找目的IP对应的MAC地址。
- 若缓存未命中,主机A在本地网络发送一个ARP请求广播帧,内容为:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
- 局域网内所有主机都会收到该广播帧,但只有IP地址匹配的主机B会响应一个ARP应答单播帧,内容为:“192.168.1.2的MAC地址是00:1A:2B:3C:4D:5E。”
- 主机A收到应答后,将IP与MAC的映射写入ARP缓存,并据此发送数据帧。
ARP缓存表有老化时间(通常为2~10分钟),超时后条目会被删除,下次通信时需重新解析。查看本机ARP缓存的命令为:
arp -a # Windows / Linux / macOS 均支持
广播与冲突域:理解局域网性能边界
在传统以太网(使用集线器Hub)中,所有设备共享同一条物理信道,任何时刻只允许一台设备发送数据。如果两台设备同时发送,就会产生冲突(Collision),双方都需要退避后重传。这种可能发生冲突的范围称为冲突域。集线器连接的所有设备都在同一个冲突域中,设备越多,冲突概率越高,网络效率越低。
交换机(Switch)的出现改变了这一局面。交换机每个端口都是一个独立的冲突域,端口之间通过MAC地址表进行帧转发,不再共享信道。因此,交换机组网的以太网中,冲突域被缩小到每个端口与所连设备之间,全双工模式下甚至完全消除了冲突。
然而,广播域的问题依然存在。广播域是指网络中所有能收到广播帧的设备集合。交换机虽然隔离了冲突域,但默认会转发广播帧到所有端口,因此交换机组网下所有设备仍处于同一个广播域。ARP请求、DHCP发现等协议都依赖广播,所以广播无法完全禁止,但过多的广播会消耗CPU资源并占用带宽。
案例:一次ARP欺骗引发的断网
某公司办公网突然出现大量用户无法上网,但网络连接显示正常。管理员在核心交换机上抓包,发现网络中充斥着大量ARP应答帧,且应答内容指向同一台主机:
帧1: 192.168.1.1 的 MAC 是 00:11:22:33:44:55 (广播)
帧2: 192.168.1.1 的 MAC 是 00:11:22:33:44:55 (广播)
帧3: 192.168.1.1 的 MAC 是 00:11:22:33:44:55 (广播)
...
正常情况下,网关192.168.1.1的MAC地址应为00:AA:BB:CC:DD:EE(核心交换机端口)。但攻击者不断发送伪造的ARP应答,宣称网关IP对应攻击者主机的MAC地址。所有主机的ARP缓存被污染后,发往网关的数据帧都被转发到攻击者主机,再由攻击者转发出去,形成中间人攻击。
排查步骤:
- 在受害主机上执行
arp -a,发现网关IP对应的MAC地址异常。 - 在核心交换机上执行
show mac address-table,查找该异常MAC地址对应的交换机端口。 - 定位到具体接入端口后,断开该端口并扫描该主机,确认其运行了ARP欺骗工具。
- 清除全网ARP缓存:
arp -d(需在每台主机执行,或等待缓存自动老化)。
防御措施包括:在交换机上配置动态ARP检测(DAI)、端口安全绑定IP-MAC、启用DHCP Snooping,以及部署终端安全软件。
对比:冲突域与广播域
| 对比项 | 冲突域 | 广播域 |
|---|---|---|
| 定义 | 可能发生帧冲突的范围 | 能收到广播帧的范围 |
| 隔离设备 | 交换机、网桥 | 路由器、三层交换机(VLAN) |
| 集线器组网 | 所有设备在同一冲突域 | 所有设备在同一广播域 |
| 交换机组网 | 每端口独立冲突域 | 默认所有端口同一广播域 |
| VLAN划分后 | 不变 | 每个VLAN独立广播域 |
| 影响 | 冲突导致重传,降低吞吐量 | 广播风暴消耗CPU与带宽 |
误区与复盘:以太网常见理解偏差
- 误区一:MAC地址全球唯一。实际上,MAC地址仅需在局域网内唯一。虚拟机、容器、手工修改都会产生重复MAC,但不同广播域中的重复MAC不会直接冲突。
- 误区二:ARP是三层协议。ARP报文没有IP头部,它直接封装在以太网帧中,因此通常被视为链路层协议或介于二三层之间的协议。Wireshark中ARP位于二层。
- 误区三:交换机不转发广播。交换机默认对未知目的MAC的帧进行泛洪(转发到所有端口),对广播帧同样泛洪。只有配置了VLAN或启用IGMP Snooping等机制后,广播范围才会被限制。
- 误区四:MTU越大越好。MTU过大会导致IP分片增多,而分片报文在丢失时会导致整个数据报重传,反而降低性能。以太网标准MTU为1500字节,这是经过长期实践验证的平衡值。