以太网与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协议的责任。

抓包小技巧:在Wireshark中,以太网帧头部的“Type”字段显示为“Type: IPv4 (0x0800)”。如果你看到大量“Type: ARP (0x0806)”的帧,说明网络中正在频繁进行地址解析,这可能是扫描行为或IP地址冲突的前兆。

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的工作流程如下:

  1. 主机A检查自己的ARP缓存表,查找目的IP对应的MAC地址。
  2. 若缓存未命中,主机A在本地网络发送一个ARP请求广播帧,内容为:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
  3. 局域网内所有主机都会收到该广播帧,但只有IP地址匹配的主机B会响应一个ARP应答单播帧,内容为:“192.168.1.2的MAC地址是00:1A:2B:3C:4D:5E。”
  4. 主机A收到应答后,将IP与MAC的映射写入ARP缓存,并据此发送数据帧。

ARP缓存表有老化时间(通常为2~10分钟),超时后条目会被删除,下次通信时需重新解析。查看本机ARP缓存的命令为:

arp -a   # Windows / Linux / macOS 均支持
为什么需要ARP?因为IP地址是逻辑地址,用于跨网络路由;而MAC地址是物理地址,用于同一链路内的帧交付。两者缺一不可,ARP就是连接逻辑寻址与物理寻址的桥梁。

广播与冲突域:理解局域网性能边界

在传统以太网(使用集线器Hub)中,所有设备共享同一条物理信道,任何时刻只允许一台设备发送数据。如果两台设备同时发送,就会产生冲突(Collision),双方都需要退避后重传。这种可能发生冲突的范围称为冲突域。集线器连接的所有设备都在同一个冲突域中,设备越多,冲突概率越高,网络效率越低。

交换机(Switch)的出现改变了这一局面。交换机每个端口都是一个独立的冲突域,端口之间通过MAC地址表进行帧转发,不再共享信道。因此,交换机组网的以太网中,冲突域被缩小到每个端口与所连设备之间,全双工模式下甚至完全消除了冲突。

然而,广播域的问题依然存在。广播域是指网络中所有能收到广播帧的设备集合。交换机虽然隔离了冲突域,但默认会转发广播帧到所有端口,因此交换机组网下所有设备仍处于同一个广播域。ARP请求、DHCP发现等协议都依赖广播,所以广播无法完全禁止,但过多的广播会消耗CPU资源并占用带宽。

常见误区:很多人认为“交换机隔离广播”,这是错误的。交换机隔离的是冲突域,不是广播域。只有路由器(或三层交换机配置VLAN接口)才能隔离广播域。VLAN技术正是通过在交换机上划分逻辑子网,将一个大广播域拆分为多个小广播域。

案例:一次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字节,这是经过长期实践验证的平衡值。
复盘要点:排查网络问题时,先判断问题发生在冲突域层面还是广播域层面。如果单点通信正常但全网变慢,优先怀疑广播风暴;如果两台设备间歇性通信失败,检查是否存在MAC地址冲突或ARP缓存污染。抓包时,先看二层帧头(MAC、Type),再看三层IP头,最后看四层端口,逐层定位。
以太网帧封装与ARP解析流程 以太网帧结构 (Ethernet II) 目的MAC 6B 源MAC 6B 类型 2B 载荷 (IP数据报) 46~1500B FCS 4B 0x0800 → IPv4 0x0806 → ARP 0x86DD → IPv6 ARP地址解析流程 主机A IP: 192.168.1.1 MAC: AA:AA:AA:AA:AA:AA 主机B IP: 192.168.1.2 MAC: BB:BB:BB:BB:BB:BB ① ARP请求 (广播) "谁是192.168.1.2?" ② ARP应答 (单播) "192.168.1.2 的 MAC 是 BB:BB:BB:BB:BB:BB" 冲突域 vs 广播域 集线器 (Hub) 组网 集线器 PC1 PC2 PC3 1个冲突域 + 1个广播域 交换机 (Switch) 组网 交换机 PC1 PC2 PC3 3个冲突域 + 1个广播域 路由器/VLAN可隔离广播域 | 交换机每个端口隔离冲突域