物理层与数据链路层:以太网帧格式、MAC地址与ARP协议

核心原理:从比特到帧的两级封装

物理层解决的是“如何在介质上传输原始比特流”的问题,它不关心比特的含义,只负责将0和1转换为电信号、光信号或无线电波,并处理接口、线缆、速率与同步等机械/电气特性。而数据链路层则建立在物理层之上,将比特流组织成有结构的帧(Frame),并添加MAC地址、类型字段和校验码,使数据能够在同一链路的相邻节点间可靠传输。

理解这两层的关键在于区分两个地址概念:MAC地址是数据链路层使用的物理地址,48位,通常写作六组十六进制数(如 3C:22:FB:44:5A:91),它固化在网络接口卡(NIC)上,用于同一局域网内的帧交付;而IP地址是网络层使用的逻辑地址,用于跨网络寻址。数据帧在每一跳的转发过程中,源/目的MAC地址会随链路变化,但源/目的IP地址在端到端传输中保持不变。

数据链路层帧封装与ARP地址解析 主机A IP: 192.168.1.10 MAC: AA:AA:AA:AA:AA:01 以太网交换机 MAC地址表 AA:AA:AA:AA:AA:01 → Port1 BB:BB:BB:BB:BB:02 → Port2 主机B IP: 192.168.1.20 MAC: BB:BB:BB:BB:BB:02 帧: 目的MAC=BB:BB:BB:BB:BB:02 根据MAC表转发 ARP请求(广播) 发送方MAC: AA:AA:AA:AA:AA:01 | 发送方IP: 192.168.1.10 目标MAC: 00:00:00:00:00:00(未知) | 目标IP: 192.168.1.20 广播地址 FF:FF:FF:FF:FF:FF → 交换机向所有端口泛洪 ARP响应(单播) 目标MAC: AA:AA:AA:AA:AA:01 我的MAC: BB:BB:BB:BB:BB:02 单播回复

以太网帧格式详解

IEEE 802.3定义的以太网帧(Ethernet II/DIX帧)是最常见的封装格式,其结构如下:

字段长度说明
前导码(Preamble)7字节用于收发时钟同步,内容为10101010…
帧起始定界符(SFD)1字节10101011,标志帧正式开始
目的MAC地址6字节接收方网卡地址,可为单播、多播或广播
源MAC地址6字节发送方网卡地址
类型/长度(Type/Len)2字节≥1536时表示上层协议类型(0x0800=IPv4,0x0806=ARP,0x86DD=IPv6);≤1500时表示负载长度
负载(Payload)46~1500字节上层数据,不足46字节需填充(Padding)
帧校验序列(FCS)4字节CRC-32校验,覆盖目的MAC到负载末尾

帧的最小长度为64字节(不含前导码),最大为1518字节。若负载不足46字节,发送方会填充到46字节,接收方根据类型字段判断填充内容并丢弃。FCS校验失败的数据帧会被直接丢弃,数据链路层不提供重传机制——这是上层协议(如TCP)的职责。

MAC地址与交换机转发机制

MAC地址由IEEE统一分配,前24位为OUI(组织唯一标识符),后24位由厂商自行分配。网卡在出厂时烧录MAC地址,但多数驱动允许软件修改。MAC地址具有全球唯一性(理论上),但仅在本地链路中有意义。

交换机通过自学习构建MAC地址表:当帧从某端口进入时,交换机记录“源MAC地址→入端口”的映射,并设置老化时间(通常300秒)。转发时查表:

  • 目的MAC在表中 → 仅从对应端口转发(单播)
  • 目的MAC不在表中 → 向除入端口外的所有端口泛洪(Flooding)
  • 目的MAC为广播地址 FF:FF:FF:FF:FF:FF → 泛洪

这种机制使得交换机比集线器(Hub)更高效,因为Hub无条件将所有帧复制到所有端口,而交换机实现了点对点转发,不同端口间的通信可以并行,互不干扰。

ARP协议工作原理与完整流程

ARP(Address Resolution Protocol)解决“已知目的IP地址,如何获取目的MAC地址”的问题。其核心是一个请求-响应模型,配合缓存机制减少广播流量。

典型流程(主机A → 主机B,同一子网)

  1. A检查本地ARP缓存,若存在B的IP→MAC映射,直接使用;否则继续。
  2. A构造ARP请求报文:发送方MAC=AA:AA:AA:AA:AA:01,发送方IP=192.168.1.10,目标MAC=00:00:00:00:00:00(未知),目标IP=192.168.1.20。
  3. A将ARP请求封装在以太网帧中,目的MAC设为广播地址 FF:FF:FF:FF:FF:FF,发送到链路上。
  4. 交换机收到广播帧,向所有端口泛洪(除入端口)。
  5. 主机B收到广播帧后,检查目标IP字段是否匹配自身IP。匹配则处理:将A的IP-MAC映射存入自己的ARP缓存,然后构造ARP响应报文,包含自己的MAC地址,目的MAC设为A的MAC地址(单播回复)。
  6. A收到ARP响应后,将B的IP-MAC映射存入缓存,随后即可正常发送数据帧。

ARP报文格式中,硬件类型=1(以太网),协议类型=0x0800(IPv4),硬件地址长度=6,协议地址长度=4,操作码(Opcode)1表示请求,2表示响应。ARP不仅用于IPv4,也支持其他协议,但TCP/IP中最常见的就是IPv4+以太网的组合。

跨网段通信与ARP代理

当主机A要访问不同子网的主机C(如192.168.2.20)时,A发现目的IP不在同一子网,于是将数据帧的目的MAC设为默认网关(路由器接口)的MAC地址,而不是C的MAC地址。路由器收到帧后,解封装并根据路由表转发到下一跳,在出接口上重新封装帧,此时源MAC变为路由器出接口的MAC,目的MAC变为C的MAC(或下一跳路由器的MAC)。

因此,ARP请求只在同一广播域内传播,不会跨路由器。路由器可以配置ARP代理(Proxy ARP),当收到目标IP不在本子网的ARP请求时,若路由器有到达该IP的路由,则用自己的MAC地址回复请求方,从而“代理”目标主机应答。这种机制在无默认网关配置的旧式网络中较为常见,但现代网络通常直接配置网关,较少依赖代理ARP。

常见误区与排障复盘

误区1:认为MAC地址是“全球唯一”且不可更改。实际上,MAC地址可通过软件修改(如Linux的ip link set eth0 address XX:XX:XX:XX:XX:XX),且虚拟机、容器会生成随机MAC。若网络中出现重复MAC,交换机的MAC表会震荡,导致帧被错误转发。

误区2:混淆ARP缓存与DNS缓存。ARP缓存存储的是IP→MAC映射,DNS缓存存储的是域名→IP映射。排查“能ping通IP但ping不通域名”时,应检查DNS;排查“同一子网内ping不通”时,应检查ARP缓存是否过期或错误。

排障案例:某主机无法访问网关(192.168.1.1),执行 arp -a 发现网关MAC地址显示为 incomplete,说明ARP请求未收到响应。进一步检查发现,该主机被配置了静态ARP条目指向错误MAC,或交换机端口开启了端口安全(Port Security)阻止了ARP广播。清除静态ARP条目(arp -d)或调整端口安全策略后恢复。

抓包验证:使用Wireshark捕获ARP流量时,可观察到请求帧的目的MAC为广播地址,响应帧的目的MAC为请求方单播地址。若网络中频繁出现大量ARP广播,可能是ARP扫描攻击或IP地址冲突,需检查是否有主机配置了相同IP。

最后需要强调的是,ARP协议没有认证机制,攻击者可通过发送伪造的ARP响应实施ARP欺骗,将流量导向恶意主机。防护手段包括配置静态ARP条目、使用DAI(Dynamic ARP Inspection)或部署802.1X认证。