数据链路层核心全解:以太网、MAC 地址、MTU 与 ARP 协议深度剖析

目录

  • [1. 对比理解 "数据链路层" 和 "网络层"](#1. 对比理解 "数据链路层" 和 "网络层")
  • [2. 认识以太网](#2. 认识以太网)
    • [2.1 以太网帧格式](#2.1 以太网帧格式)
    • [2.2 认识MAC地址](#2.2 认识MAC地址)
    • [2.3 对比理解MAC地址和IP地址](#2.3 对比理解MAC地址和IP地址)
    • [2.4 认识MTU](#2.4 认识MTU)
    • [2.5 MTU对IP协议的影响](#2.5 MTU对IP协议的影响)
    • [2.6 MTU对UDP协议的影响](#2.6 MTU对UDP协议的影响)
    • [2.7 MTU对于TCP协议的影响](#2.7 MTU对于TCP协议的影响)
    • [2.8 查看硬件地址和MTU](#2.8 查看硬件地址和MTU)
  • [3. ARP协议](#3. ARP协议)
    • [3.1 ARP协议的作用](#3.1 ARP协议的作用)
    • [3.2 ARP 协议的工作流程](#3.2 ARP 协议的工作流程)
    • [3.3 ARP数据报的格式](#3.3 ARP数据报的格式)
    • [3.4 ARP请求应答举例(局域网 ARP 请求→应答完整流程)](#3.4 ARP请求应答举例(局域网 ARP 请求→应答完整流程))

1. 对比理解 "数据链路层" 和 "网络层"

数据链路层是局域网内的通信管家,工作在直连的物理链路之间,以帧为传输单位,基于MAC地址实现同一网段内设备的点对点可靠传输,受MTU最大传输单元硬性限制,只负责把数据准确送到相邻的直连设备(如同一局域网的主机、路由器),不关心跨网段的路径;

而网络层是跨网络的导航师,工作在整个互联网的逻辑层面,以IP数据报为传输单位,基于IP地址实现跨网段、跨网络的端到端数据转发,通过路由表选择下一跳路径,采用尽力而为的传输方式,虽无可靠性保证,但能突破局域网限制,让数据在异构网络中完成跨地域传递,且会针对数据链路层的MTU限制,对过大的IP数据报进行分片处理。

二者协同实现了"局域网内可靠传输"到"广域网间路径转发"的完整网络通信,数据链路层为网络层提供了本地链路的传输基础,网络层则在数据链路层的基础上,实现了跨网络的全局通信能力。

2. 认识以太网

  • "以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;

  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;

  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

2.1 以太网帧格式

以太网的帧格式如下所示:

以太网帧是数据链路层的基本传输单位,其标准格式(RFC 894)如下:

字段 长度 作用
目的地址 6 字节(48 位) 接收方网卡的MAC 地址,出厂固化,用于标识目标设备
源地址 6 字节(48 位) 发送方网卡的MAC 地址,出厂固化,用于标识源设备
类型 2 字节 标识帧内数据的上层协议类型,常见值:• 0x0800:IP 数据报• 0x0806:ARP 请求 / 应答• 0x8035:RARP 请求 / 应答
数据 46~1500 字节 承载上层协议数据(如 IP 数据报、ARP 报文等),长度不足 46 字节时需填充(PAD)
CRC 4 字节 循环冗余校验码,用于检测帧在传输过程中是否出现比特错误
  1. MAC 地址特性 :48 位(6 字节),全球唯一,由网卡厂商固化,格式为 XX:XX:XX:XX:XX:XX(十六进制),是局域网内设备的物理标识。
  2. 数据长度限制
    • 最小 46 字节:为保证以太网帧的最小长度(64 字节,6+6+2+46+4=64),避免短帧干扰网络;
    • 最大 1500 字节:对应以太网MTU(最大传输单元),超过该长度的 IP 数据报需在网络层分片。
  3. 协议类型映射
    • 0x0800:数据部分为IP 数据报,长度 46~1500 字节;
    • 0x0806:数据部分为ARP 请求 / 应答(28 字节)+ 填充(18 字节),总长度 46 字节;
    • 0x8035:数据部分为RARP 请求 / 应答(28 字节)+ 填充(18 字节),总长度 46 字节。
  4. CRC 校验:仅校验帧头(目的地址、源地址、类型)和数据部分,不校验自身,接收方通过 CRC 验证帧完整性,若校验失败则直接丢弃该帧。

2.2 认识MAC地址

  • MAC 地址 (Media Access Control Address):用于在数据链路层唯一标识网络接口(网卡),实现同一局域网内设备的寻址与通信。
  • 长度 :48 位(6 字节),通常以十六进制 表示,格式为 XX:XX:XX:XX:XX:XX(如 08:00:27:03:FB:19)。
  • 分配与唯一性
    • 前 24 位为OUI(组织唯一标识符) ,由 IEEE 分配给网卡厂商;后 24 位由厂商自行分配,理论上全球唯一
    • 物理网卡的 MAC 地址在出厂时固化(烧录在网卡 ROM 中),通常不可修改 ;但部分网卡支持MAC 地址克隆 / 修改(软件层面),虚拟机的虚拟网卡 MAC 地址为虚拟分配,可能重复。
  • 核心作用:在局域网内,设备通过 MAC 地址直接通信(如 ARP 协议解析 IP→MAC),是数据链路层帧的 "源 / 目的地址"。

2.3 对比理解MAC地址和IP地址

  • IP 地址 :描述的是端到端的逻辑地址 ,标识数据传输的起点主机终点主机,解决 "数据要从哪台主机到哪台主机" 的问题,是跨网络通信的核心标识。
  • MAC 地址 :描述的是链路层的物理地址 ,标识数据在每一段直连链路 上的起点接口终点接口,解决 "数据在当前局域网内,要从哪个网卡发到哪个网卡" 的问题,是局域网内通信的核心标识。

核心区别补充

  • 作用范围 :IP 地址作用于整个互联网 (跨网络),MAC 地址仅作用于同一局域网(直连链路)。
  • 地址性质 :IP 地址是逻辑地址 (可通过 DHCP / 手动配置修改),MAC 地址是物理地址(出厂固化,仅可软件层面修改)。
  • 通信场景:跨网络通信时,IP 地址全程不变,MAC 地址每经过一个路由器都会被替换(下一跳的 MAC 地址);同一局域网内通信,直接通过 MAC 地址寻址,无需路由器转发。

通俗类比

  • IP 地址 = 收件人地址(如 "北京市海淀区 XX 小区 1 号楼"),决定数据最终要送到哪台主机。
  • MAC 地址 = 快递员的工号(如 "快递员 A→快递员 B→快递员 C"),决定数据在每一段链路中,由哪个网卡传给下一个网卡。

2.4 认识MTU

MTU(Maximum Transmission Unit,最大传输单元)是数据链路层 对其帧中数据部分的最大长度限制,相当于发快递时对包裹尺寸的硬性规定,由不同物理链路的标准决定。

  • 以太网 MTU :以太网帧中数据部分 的最大长度为 1500 字节 (这就是以太网的 MTU),最小长度为 46 字节;若数据不足 46 字节(如 ARP 报文),需在后面填充(PAD)至 46 字节,以满足以太网帧最小长度要求。
  • 链路差异 :不同数据链路的 MTU 不同,例如:
    • 以太网:1500 字节(最常见)
    • PPP 链路:576 字节
    • 部分无线链路:1492 字节
  • 分片触发 :当数据包从高 MTU 链路(如以太网)路由到低 MTU 链路(如拨号链路)时,若数据包长度超过低 MTU 链路的限制,IP 层 会对数据包进行分片,拆分为多个小片段后传输。
  • 核心作用:MTU 是 IP 层分片的直接触发条件,决定了单帧可承载的最大数据量,是跨链路数据传输的关键限制因素。

2.5 MTU对IP协议的影响

由于数据链路层 MTU 的限制,当 IP 数据报长度超过出接口链路的 MTU 时,IP 层 会对其进行分片处理。

  • 将较大的 IP 数据报拆分为多个分片,每个分片都带有独立的 IP 首部;
  • 同一原始数据报的所有分片,其16 位标识(ID) 字段值完全相同,用于接收端识别并聚合属于同一报文的分片;
  • 每个分片 IP 首部的3 位标志字段 中:
    • 第 1 位(保留位[未用位]):标准规定该位必须固定置为0;
    • 第 2 位(DF 位)为 0 ,表示允许分片
    • 第 3 位(MF 位):1 表示 "还有后续分片",0 表示 "这是最后一个分片"(或未分片);
  • 分片到达目标主机后,由IP 层13 位片偏移字段排序,重组为完整的原始 IP 数据报,再交给上层传输层;
  • 分片传输不可靠 :任意一个分片丢失,接收端就无法完成重组,会直接丢弃所有已接收分片,且IP 层不负责重传(重传由上层协议如 TCP 处理)。

2.6 MTU对UDP协议的影响

先回顾 UDP 协议的特性:UDP 是无连接、不可靠的传输层协议,无重传、无拥塞控制机制,数据报一旦发出便无法确认是否完整送达。而 MTU 的限制会对 UDP 传输的可靠性产生显著影响,核心问题集中在 IP 分片带来的传输风险:

  • 以太网默认 MTU 为 1500 字节,当 UDP 报文封装为 IP 数据报后,总长度(IP 首部 + UDP 首部 + UDP 数据)超过 1500 字节时,IP 层会对其进行分片;其中UDP 可承载的最大无分片数据量为 1472 字节(计算:1500 - 20 字节固定 IP 首部 - 8 字节 UDP 首部),超过该值即触发分片。
  • 被分片后的 UDP 报文,会以多个独立 IP 分片的形式在网络中传输,任意一个分片丢失,目标主机 IP 层都无法完成重组,会直接丢弃所有已接收分片,最终导致整个 UDP 报文失效。
  • 由于 UDP 无重传机制,分片丢失后无法通过传输层补救,只能依赖应用层实现重传逻辑,这使得 UDP 报文被分片后,整体数据丢失的概率大幅增加,传输可靠性显著降低。

2.7 MTU对于TCP协议的影响

回顾 TCP 协议的特性:TCP 是面向连接、可靠的传输层协议,会通过自身机制主动适配 MTU 限制,从源头避免 IP 层分片,而核心适配手段就是MSS(最大分段大小,Max Segment Size),MSS 的取值由数据链路层 MTU 直接决定,二者关联紧密:

  • TCP 的单个分段长度受 MTU 硬性限制,MSS 即 TCP 单个分段可承载的最大数据部分长度,是 TCP 为适配 MTU、避免 IP 分片定义的核心参数;
  • TCP 在建立连接的三次握手阶段会完成 MSS 协商,这是 TCP 针对 MTU 的关键适配逻辑;
  • 最理想的 MSS 取值,恰好能让 TCP 分段封装成 IP 数据报后,总长度不超过 MTU,从而保证 IP 层无需分片,该取值完全由数据链路层 MTU 决定;
  • 通信双方在发送SYN 报文 时,会在 TCP 头部的变长选项中写入自身支持的 MSS 值(选项类型kind=2),告知对方自己的最大接收能力;
  • 双方获取彼此的 MSS 值后,会选择较小的那个作为本次连接的最终 MSS 值,确保双方均能正常接收;
  • MSS 选项属于 TCP 首部的40 字节变长选项 (非固定字段),标识为kind=2,其值的计算核心为:MSS = 本地链路 MTU - 20 字节固定 IP 首部 - 20 字节固定 TCP 首部(无额外选项时)。

补充核心关联公式(以太网环境)

以太网默认 MTU=1500 字节,无 IP/TCP 额外选项时,MSS=1500-20-20=1460 字节(这是最常见的 MSS 默认值),也是 TCP 无分片传输的最优值。

MSS和MTU的关系

2.8 查看硬件地址和MTU

使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;

3. ARP协议

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;

3.1 ARP协议的作用

ARP 协议(地址解析协议,Address Resolution Protocol)是数据链路层与网络层的核心适配协议,核心作用是在同一局域网内,根据目标主机的 IP 地址解析出对应的 MAC 地址,建立 IP 地址与 MAC 地址的临时映射关系,为局域网内的帧传输提供寻址依据。

  • 网络通信中,源主机的应用层仅知晓目的主机的 IP 地址和传输层端口号,无法直接获取其 MAC 地址;而数据链路层的帧传输,必须依靠 MAC 地址作为源 / 目的标识才能完成寻址。
  • 网卡在接收数据帧时,会先校验帧中的目的 MAC 地址:若与本机网卡的 MAC 地址不符,会直接丢弃该帧,不会向上层协议交付数据;仅当目的 MAC 地址匹配(或为广播地址)时,才会处理帧内的数据。
  • 因此,源主机在向同一局域网内的目的主机发送数据前,必须先通过 ARP 协议解析出目标的 MAC 地址,才能封装出合法的以太网帧,保证数据帧能被目标主机正确接收。

3.2 ARP 协议的工作流程

ARP 协议通过广播请求 + 单播应答的方式完成 IP 地址到 MAC 地址的解析,核心流程基于局域网的广播特性实现,具体如下:

  • 源主机需要与目标主机通信时,先查询本地 ARP 缓存表,若未找到目标 IP 对应的 MAC 地址,则发起ARP 请求 :构造 ARP 请求报文,询问 "IP 地址为 X.X.X.X 的主机对应的 MAC 地址是什么";将该报文封装在以太网帧中,帧的目的 MAC 地址填写为FF:FF:FF:FF:FF:FF(局域网广播地址),广播发送至本地网段所有主机。
  • 本地网段内的所有主机都会接收到该广播帧,逐一校验 ARP 请求报文中的目标 IP 地址:若与本机 IP 不符,则直接丢弃;若与本机 IP 相符 ,则目标主机构造ARP 应答 报文,将自身的 MAC 地址填写在报文中,同时更新本机 ARP 缓存表(记录源主机的 IP-MAC 映射);再将应答报文封装在以太网帧中,以单播形式发送给源主机(帧的目的 MAC 地址为源主机的 MAC 地址)。
  • 源主机接收到 ARP 应答报文后,更新本地 ARP 缓存表,将目标主机的 IP 地址与 MAC 地址的映射关系存入表中,后续与该目标主机通信时,可直接从缓存表中获取 MAC 地址,无需重复发起 ARP 请求。
  • 每台主机都维护一个 ARP 缓存表,可通过arp -a(Windows)/arp -n(Linux)命令查看表项;缓存表中的每一条映射都有过期时间(默认约 20 分钟),若该时间内未再次使用该表项,会自动失效,后续通信需重新发起 ARP 请求解析。

3.3 ARP数据报的格式

ARP 数据报为固定长度格式,适配各类链路层网络的地址解析需求,核心字段用于定义网络类型、地址长度及源 / 目的的 IP 与 MAC 映射,具体字段定义及关键说明如下:

  • 以太网帧首部和 ARP 数据报中均包含源 MAC 地址、目的 MAC 地址:在以太网链路中该设计看似冗余,但 ARP 协议并非为以太网专属设计,若链路层为其他网络类型(如令牌环网),该冗余设计可保证地址解析的通用性,是 ARP 协议跨链路层兼容的关键。
  • 硬件类型 :占 2 字节,标识链路层的网络类型,值为1时表示以太网(最常用场景)。
  • 协议类型 :占 2 字节,标识要解析的上层协议地址类型,值为0x0800时表示 IPv4 地址(ARP 协议主要用于 IPv4 地址解析)。
  • 硬件地址长度 :占 1 字节,标识链路层硬件地址的字节长度,对于以太网 MAC 地址,该值为6
  • 协议地址长度 :占 1 字节,标识上层协议地址的字节长度,对于 IPv4 地址,该值为4
  • op 操作字段 :占 2 字节,标识 ARP 报文的类型,值为1 表示 ARP 请求报文,值为2表示 ARP 应答报文。
  • 后续固定跟随源 MAC 地址(6 字节)、源 IP 地址(4 字节)、目的 MAC 地址(6 字节)、目的 IP 地址(4 字节):请求报文中目的 MAC 地址字段填充为 0,应答报文则由目标主机补全自身 MAC 地址。

补充格式特点

ARP 数据报总长度固定为 28 字节,无变长字段,封装在以太网帧中时,因以太网帧数据部分最小要求 46 字节,会自动填充 18 字节的填充位,满足链路层帧格式要求。

3.4 ARP请求应答举例(局域网 ARP 请求→应答完整流程)

基础环境

主机 IP 地址 MAC 地址 角色
A 192.168.1.10 08:00:27:03:fb:19 请求方
B 192.168.1.20 08:00:27:05💿36 应答方
网段:192.168.1.0/24,以太网环境。

步骤 1:主机 A 广播发送 ARP 请求

主机 A 查询本地 ARP 缓存,无 192.168.1.20 的 MAC 映射,构造并发送广播 ARP 请求

  1. 以太网帧首部
    • 目的 MAC:FF:FF:FF:FF:FF:FF(广播地址)
    • 源 MAC:08:00:27:03:fb:19
    • 帧类型:0x0806(标识 ARP 报文)
  2. ARP 请求报文核心字段
    • 硬件类型:1,协议类型:0x0800
    • 硬件地址长度:6,协议地址长度:4
    • OP 操作字段:1(标记为 ARP 请求)
    • 源 MAC/IP:08:00:27:03:fb:19、192.168.1.10
    • 目的 MAC:00:00:00:00:00:00(待解析)
    • 目的 IP:192.168.1.20

步骤 2:主机 B 接收并分层处理(核心:先帧校验 → 再 OP 判断 → 再目的 IP 校验)

  1. 网卡硬件层:帧头部校验(第一道关卡)

    • 校验目的 MAC 地址 :收到的是广播地址 FF:FF:FF:FF:FF:FF,网卡不丢弃,将帧上交给协议栈。
    • 校验帧类型字段 :值为0x0806,判定为 ARP 报文,交给 ARP 协议处理模块。
  2. ARP 协议模块:第一步校验 OP 字段(老师强调的核心逻辑)

    协议栈解析 ARP 报文,首先读取 OP 操作字段

    • 读取到 OP = 1,判定这是一个ARP 请求报文,进入 "ARP 请求处理分支",后续再校验目的 IP。
    • 如果 OP 是其他非法值,或 OP=2(ARP 应答),则不会进入请求处理流程,直接走对应分支或丢弃。
  3. ARP 请求分支:校验目的 IP 地址

    确认是 ARP 请求后,继续解析报文,比对ARP 报文中的目的 IP 地址和本机 IP:

    • 报文中目的 IP = 192.168.1.20,与本机 IP 一致,判定需要回复 ARP 应答。
    • 同时,主机 B 更新本地 ARP 缓存,记录主机 A 的 IP-MAC 映射:192.168.1.10 ↔ 08:00:27:03:fb:19

步骤 3:主机 B 单播回复 ARP 应答

主机 B 构造 ARP 应答报文,封装后单播发送给主机 A。

  1. 以太网帧首部
    • 目的 MAC:08:00:27:03:fb:19(主机 A 的 MAC,单播)
    • 源 MAC:08:00:27:05:cd:36
    • 帧类型:0x0806
  2. ARP 应答报文核心字段
    • 硬件类型、协议类型、地址长度均不变
    • OP 操作字段:2(标记为 ARP 应答)
    • 源 MAC/IP:08:00:27:05:cd:36、192.168.1.20
    • 目的 MAC/IP:08:00:27:03:fb:19、192.168.1.10

步骤 4:主机 A 接收应答并更新缓存

  1. 主机 A 网卡校验帧目的 MAC,匹配本机 MAC,帧类型为0x0806,上交 ARP 模块。
  2. ARP 模块先判断 OP=2,确认为 ARP 应答,进入应答处理分支。
  3. 提取报文中的源 MAC、源 IP,更新本地 ARP 缓存,后续与主机 B 通信直接使用该缓存。

关键笔记总结

  1. 硬件层面 :先校验以太网帧目的 MAC、帧类型,过滤非法帧。
  2. ARP 协议层面 :合法 ARP 报文进入协议栈后,优先检查 OP 字段,先区分是请求还是应答,再执行对应处理逻辑,这是标准的协议栈实现逻辑。
  3. 请求处理:OP=1 → 核对目的 IP → 匹配则回复应答。
  4. 应答处理:OP=2 → 直接更新本地 ARP 缓存。

问题:

为什么 主机会用 ARP 缓存表 临时保存局域网内 IP 与 MAC 的映射关系,并非永久存储?

设置超时时间,一是为了适配设备更换、IP 重新分配等网络变动 ,保证映射准确;二是控制缓存体积 ,提升查询效率;三是降低 ARP 欺骗的安全风险,让恶意缓存条目及时失效。

...过云雨-CSDN博客主页

相关推荐
程序猿编码1 小时前
深入浅出Linux内核级防火墙:IP/端口黑白名单的高性能实现
linux·c语言·c++·tcp/ip·内核
NaclarbCSDN1 小时前
OSI模型与TCP/IP模型
网络·网络协议·tcp/ip
RisunJan1 小时前
Linux命令-lnstat(显示 Linux 网络统计信息)
linux·运维·网络
一路往蓝-Anbo1 小时前
第 4 篇:策略模式 (Strategy) —— 算法的热插拔艺术
网络·驱动开发·stm32·嵌入式硬件·算法·系统架构·策略模式
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
Keepalived高可用配置指南
服务器·网络·php
2401_832298102 小时前
腾讯云第九代CVM,玄灵网卡加持重构算力新范式
网络
Cloud Traveler2 小时前
Archcraft携手cpolar打造轻量化远程开发环境
网络·云原生·eureka
七夜zippoe2 小时前
网络安全实战:从TLS/SSL到JWT与OAuth2.0的完整防御体系构建
网络·安全·web安全·ssl·tls
咚为2 小时前
Rust Cell使用与原理
开发语言·网络·rust