1. 概述

网络让信息传输和共享变得更加便捷。无论是局域网内的通信还是全球互联网,数据在网络中传输时都以字节为基本单位。然而,在不同网络协议和 OSI 模型的不同层级中,这些字节被封装成不同的单位。

本文将详细介绍网络中最常见的几种数据单位:包(Packet)分片(Fragment)帧(Frame)数据报(Datagram)段(Segment)。我们将逐一解释它们的定义、作用及示例,帮助你更清晰地理解网络数据的封装与传输机制。


2. 包(Packet)

在 OSI 模型中,包是网络层(Network Layer)的数据单位。它是网络通信中最基本的传输单元,通常由源主机发送,经过路由选择后到达目标主机。

当数据需要在网络上传输时,它会被拆分成多个包。每个包都包含以下内容:

  • 头部(Header):包括源 IP、目标 IP、协议类型、协议版本、校验信息等
  • 数据(Payload):实际传输的数据内容
  • 尾部(Trailer):用于错误校验等信息

使用包进行传输的好处是:

✅ 支持多路径路由
✅ 支持丢包重传
✅ 提高网络带宽利用率

示例:发送电子邮件

当你发送一封邮件时,邮件内容会被封装成包,经过多个网络层处理后发送出去。一个典型的包结构如下图所示:

packet


3. 分片(Fragment)

每个网络都有一个最大传输单元(MTU,Maximum Transmission Unit),如果一个包的大小超过了 MTU,就需要被拆分成更小的单位,这些单位被称为分片

分片是网络层的责任,接收方收到所有分片后会进行重组,再将完整包传递给上层协议。

分片流程

  1. 网络层检查包大小是否超过 MTU
  2. 如果设置了 DF(Don’t Fragment)标志,则丢弃该包
  3. 否则,将包分割成多个分片,每个分片都带有头部信息
  4. 分片发送到下一层

示例:邮件包分片

假设邮件包大小为 1000 字节,而 MTU 为 300 字节,则会被拆分为如下结构:

fragment

⚠️ 注意:频繁分片会增加接收端的处理负担,建议合理控制包大小,避免分片。


4. 帧(Frame)

帧是数据链路层(Data Link Layer)的数据单位。它与包非常相似,但帧包含了更多与物理传输相关的信息,例如:

  • 源 MAC 地址
  • 目标 MAC 地址
  • 帧类型
  • 校验码(FCS)

帧的结构通常是在包的基础上加上数据链路层的头部和尾部,形成最终的传输单元。

帧的类型

  • 定长帧(Fixed-Length Frame):帧大小固定,无需边界标识
  • 变长帧(Variable-Length Frame):需明确标识帧的起始和结束位置

示例:帧结构

frame 1

✅ 帧确保数据可以在局域网内正确传输,是链路层实现可靠通信的基础。


5. 数据报(Datagram)

数据报是传输层(Transport Layer)中的数据单位,通常用于 UDP 协议。与 TCP 不同,UDP 是无连接的,因此数据报中不包含连接状态信息。

数据报的结构包括:

  • 头部:包含端口号、数据长度、校验和等
  • 数据负载

数据报特点

✅ 传输速度快,开销小
❌ 不保证顺序和可靠性
❌ 最大数据长度为 65535 字节

示例:UDP 邮件传输

如果使用 UDP 协议发送邮件,整个数据将以数据报形式传输,结构如下:

datagram

⚠️ 注意:由于 UDP 不可靠,数据报适用于对实时性要求高、但容忍少量丢包的场景,如音视频传输。


6. 段(Segment)

段是 TCP 协议在传输层使用的数据单位。每个段都包含一个 TCP 头部,用于确保数据在网络中的正确传输。

段的结构包括:

  • TCP 头部:包含源端口、目标端口、序列号、确认号、窗口大小、校验和等
  • 数据负载

段的作用

✅ 支持流量控制
✅ 支持拥塞控制
✅ 支持可靠传输
✅ 支持数据完整性校验

示例:TCP 邮件传输

当你通过 TCP 发送邮件时,邮件内容会被封装为多个段,每个段都包含 TCP 头部,结构如下:

segment


7. 总结

数据单位 所属 OSI 层 说明
包(Packet) 网络层 包含 IP 地址,用于路由
分片(Fragment) 网络层 包过大时的拆分结果
帧(Frame) 数据链路层 包含 MAC 地址,用于局域网传输
数据报(Datagram) 传输层(UDP) 无连接,传输速度快
段(Segment) 传输层(TCP) 有连接,支持可靠传输

不同数据单位对应 OSI 模型的不同层级,它们各自承担着不同的职责,共同协作完成网络通信任务。

理解这些数据单位的含义和使用场景,有助于你在网络编程、调试和性能优化中做出更专业的判断。在实际开发中,比如使用 Netty、Spring Boot Web、或者 TCP/UDP 原生编程时,都会频繁接触到这些概念。掌握它们,是构建高效、稳定网络应用的基础。


原始标题:Definition of Network Units: Packet, Fragment, Frame, Datagram, and Segment