【Linux】数据链路层

本文主题内容

  • 理解数据链路层的作用
  • 掌握以太网帧格式
  • 对比 MAC 地址与 IP 地址
  • 理解 MTU、IP 分片和 TCP MSS
  • 掌握 ARP 工作流程
  • 认识 ARP 报文与邻居缓存
  • 分析链路层常见问题

引言:IP 决定数据最终去哪里,但网卡发送的是数据链路层帧。每经过一段链路,主机或路由器都要确定下一跳的硬件地址,再把 IP 数据报封装到适合当前链路的帧中。

一、数据链路层

数据链路层负责同一链路上相邻节点之间的数据传输,主要解决:

  • 帧的组织与识别
  • 链路层寻址
  • 媒体访问控制
  • 差错检测
  • 向网络层交付有效载荷

网络层负责端到端路径,数据链路层负责当前一跳。数据报经过路由器时,IP 层继续转发,原链路帧则被解开并重新封装。

二、以太网

以太网既规定数据链路层帧格式,也涉及物理介质、速率和访问方式。

2.1 以太网帧格式

常见 Ethernet II 帧包含:

字段 长度 作用
目的 MAC 6 字节 当前链路目标
源 MAC 6 字节 当前链路发送方
EtherType 2 字节 上层协议类型
数据 46 到 1500 字节 有效载荷
FCS 4 字节 CRC 差错检测

常见 EtherType:

  • 0x0800:IPv4
  • 0x0806:ARP
  • 0x86DD:IPv6

帧前导码和帧间间隔属于物理传输细节,通常不计入上面讨论的以太网帧长度。

2.2 解包与分用

网卡接收帧后先检查目的 MAC 和 FCS。协议栈根据 EtherType 把有效载荷交给 IPv4、ARP 或 IPv6 等上层模块。

数据链路层通过帧边界和 EtherType 完成解包与分用,通过 MAC 地址完成当前链路交付。

三、MAC 地址

MAC 地址通常为 48 位,常用十六进制表示:

text 复制代码
08:00:27:03:fb:19

3.1 MAC 与 IP 的区别

对比 MAC 地址 IP 地址
所属层次 数据链路层 网络层
主要作用 当前链路交付 跨网络寻址和路由
是否随每跳变化 帧首部通常变化 无 NAT 时通常保持
地址范围 链路局部使用 具有网络前缀结构

MAC 地址可以由网卡固化,也可以由操作系统配置,不应简单认为任何情况下都绝对不可修改或全球唯一。

3.2 单播、广播与组播

  • 单播:发送给一个接口
  • 广播:目的 MAC 为 ff:ff:ff:ff:ff:ff
  • 组播:发送给加入某个组的接口

ARP 请求通常使用广播,因为发送方还不知道目标的单播 MAC。

四、MTU

MTU 是链路层能够承载的最大网络层数据包大小。常见以太网 MTU 为 1500 字节,但隧道、VPN、PPPoE 和巨帧环境可能不同。

4.1 MTU 对 UDP 的影响

IPv4 基本报头 20 字节,UDP 报头 8 字节。在 MTU 为 1500 的链路上:

text 复制代码
UDP数据建议上限 = 1500 - 20 - 8 = 1472字节

超过 MTU 的 IPv4 数据报可能被分片。

任意分片丢失都会导致整个 UDP 数据报重组失败,因此应用通常应避免大数据报。

4.2 MTU 对 TCP 的影响

TCP 使用 MSS 控制单个报文段携带的最大 TCP 数据长度。

text 复制代码
MSS = MTU - IP报头 - TCP报头

MTU 为 1500,IPv4 和 TCP 都使用 20 字节基本报头时,常见 MSS 为 1460。

TCP 建连时双方可以通过 MSS 选项通告接收能力。实际发送还会受到路径 MTU、选项长度和拥塞控制影响。

注意:1472 和 1460 都依赖特定报头长度与 MTU,只是常见示例,不是所有网络中的固定值。

五、ARP

ARP 用于在 IPv4 局域网内建立 IP 地址到 MAC 地址的映射。

5.1 为什么需要 ARP

应用通常知道目标 IP 和端口,但网卡发送帧需要目的 MAC:

  • 目标在同一子网:解析目标主机 IP
  • 目标不在同一子网:解析默认网关 IP

ARP 只解决当前链路的下一跳地址,不负责跨路由器查询远端主机 MAC。

5.2 ARP 工作流程

  1. 主机查询本地邻居缓存
  2. 没有映射时广播 ARP Request
  3. 拥有目标 IP 的主机发送 ARP Reply
  4. 请求方缓存 IP 与 MAC 映射
  5. 使用得到的 MAC 封装以太网帧

例:

text 复制代码
Who has 192.168.1.20? Tell 192.168.1.10
192.168.1.20 is at 00:11:22:33:44:55

5.3 ARP 报文

重要字段包括:

  • 硬件类型
  • 协议类型
  • 硬件地址长度
  • 协议地址长度
  • 操作码
  • 发送方 MAC 和 IP
  • 目标 MAC 和 IP

ARP Request 的目标 MAC 字段通常未知,填 0;以太网帧目的 MAC 使用广播地址。

六、ARP 缓存

Linux 查看邻居表:

bash 复制代码
ip neigh

常见状态包括:

  • REACHABLE:近期确认可达
  • STALE:缓存存在但需要再次确认
  • DELAY:等待上层流量确认
  • PROBE:正在主动探测
  • FAILED:解析失败

缓存有生命周期,避免每次发送都进行广播。

七、ARP 安全

传统 ARP 没有身份认证。攻击者可以发送伪造应答,把网关 IP 映射到攻击者 MAC,造成:

  • 中间人攻击
  • 流量劫持
  • 断网
  • 会话监听

常见防护:

  • 交换机 DHCP Snooping 与 Dynamic ARP Inspection
  • 关键设备使用静态邻居项
  • 网络分区和访问控制
  • 使用 HTTPS、SSH 等端到端加密,降低链路被劫持后的影响

八、抓包时怎样观察

可以使用:

bash 复制代码
tcpdump -n -e arp
tcpdump -n -e ether host 00:11:22:33:44:55

观察跨网络通信时会发现:

  • IP 目的地址仍是远端服务器
  • 以太网目的 MAC 是本地网关
  • 路由器转发到下一链路时重新生成以太网首部

九、总结

数据链路层负责相邻节点的一跳传输。以太网帧使用源和目的 MAC 完成链路层寻址,使用 EtherType 把有效载荷交给上层协议,使用 FCS 检测传输错误。

MTU 限制单个链路帧可承载的网络层数据大小,直接影响 UDP 分片和 TCP MSS。ARP 把下一跳 IPv4 地址解析为 MAC 地址,并通过邻居缓存减少广播。

跨网络通信中,IP 地址描述最终目标,路由表选择下一跳,ARP 得到下一跳 MAC,以太网帧完成当前链路的实际发送。

相关推荐
天衍四九-1 小时前
第一章:从 LLM 到 Agent —— DeepSeek Harness 入门
网络·数据库·人工智能·python
Jae den1 小时前
网络丢包是什么?
网络
CC城子2 小时前
EtherNet/IP I/O 丢包排查(linux系统)
linux·单片机·tcp/ip·ethernetip
新时代牛马2 小时前
Linux 信号处理完整篇:从sigaction、掩码到内核发送与可重入排障
linux·运维·信号处理
lpfasd1232 小时前
Docker存储清理与防膨胀实践
运维·docker·容器
每天被AI救一次2 小时前
WorkBuddy 会议自动化实战:从腾讯会议转写到待办系统的完整链路(附全套提示词)
运维·自动化·腾讯会议
程序员梅雨2 小时前
Linux & Shell 实用干货
linux·运维·服务器·后端·面试·php
吴声子夜歌2 小时前
编写Shell脚本——自顶向下设计
linux·运维·shell
M78佐菲3 小时前
HTML学习笔记
linux·笔记·学习·tcp/ip·html