Skip to content

数据的变身之旅:封装与解封装

"如果说网络是一场接力赛,那么封装就是每一棒交接时必须穿戴的装备,而解封装则是卸下装备的过程。" —— 佚名网络工程师

在前面的章节中,我们学习了 OSI 七层模型和 TCP/IP 四层模型。这些模型定义了网络通信的结构。但是,数据在实际传输过程中,是如何在这些层级之间流动的呢?这就涉及到了网络通信中最核心的概念之一:封装 (Encapsulation)解封装 (Decapsulation)

1. 什么是封装?

试想一下,你在网上买了一本书。

  1. 书 (数据) 本身。
  2. 店家把书放进纸盒 (应用层)
  3. 快递员贴上快递单 (传输层),上面写着你的电话。
  4. 快递公司把包裹装进集装箱 (网络层),贴上目的地城市的标签。
  5. 集装箱被装上货车 (数据链路层),车牌号是它的身份。

在网络世界里,封装就是数据从上层向下层流动时,每一层都给数据加上一个头部 (Header)(有时还有尾部)的过程。

1.1 为什么要封装?

每一层的头部都包含该层所需的特定控制信息:

  • 应用层:告诉接收方这是什么类型的数据(HTTP? FTP?)。
  • 传输层:标记是哪个应用程序发的(端口号),保证数据可靠性(TCP)。
  • 网络层:标记数据要去哪里(IP地址)。
  • 数据链路层:标记下一跳是谁(MAC地址)。

2. 可视化图解:封装全过程

为了让你一眼看懂,我们准备了一个可视化的“俄罗斯套娃”模型。请从内向外看,这就是数据在发送时被一层层包裹的过程。

应用层 (Data)
传输层 (Segment)
网络层 (Packet)
链路层 (Frame)
发送方:封装 (下楼梯)
数据帧 (Frame)头部包含:MAC地址 (谁发给谁)
Eth Header
数据包 (Packet)头部包含:IP地址 (从哪来去哪去)
IP Header
数据段 (Segment)头部包含:端口号 (哪个程序)
TCP Header
用户数据 (DATA)
"Hello!"
FCS

3. 详细的封装流程(发送方)

让我们以你用浏览器访问 www.example.com 发送一个 HTTP 请求为例,看看数据是如何“穿衣服”的。

第一步:应用层 (Application Layer) —— 数据诞生

  • 动作:浏览器生成 HTTP 请求报文(例如 GET /index.html)。
  • 产物数据 (Data) / PDU (Protocol Data Unit)
  • 状态:此时只是纯粹的数据内容。

第二步:传输层 (Transport Layer) —— 端口与可靠性

  • 动作:传输层(通常是 TCP 协议)收到数据后,会在前面加上 TCP 头部
  • 关键信息
    • 源端口:你电脑随机生成的端口(例如 49152)。
    • 目的端口:Web 服务器的端口(通常是 80 或 443)。
  • 产物数据段 (Segment)
  • 比喻:给信封写上收件人和寄件人的名字(应用 ID)。

第三步:网络层 (Network Layer) —— 寻址与路由

  • 动作:网络层(IP 协议)收到 TCP 数据段后,会在前面加上 IP 头部
  • 关键信息
    • 源 IP 地址:你电脑的 IP。
    • 目的 IP 地址:服务器的 IP。
  • 产物数据包 (Packet)
  • 比喻:把信封放进写有详细地址的邮包里。
  • 动作:数据链路层(以太网协议)收到 IP 数据包后,会加上 以太网头部FCS 尾部
  • 关键信息
    • 源 MAC 地址:你电脑网卡的物理地址。
    • 目的 MAC 地址:下一跳设备(通常是网关/路由器)的 MAC 地址。
    • FCS (帧校验序列):用于检查数据在传输中是否损坏。
  • 产物数据帧 (Frame)
  • 比喻:把邮包装进货车,准备发往下一个中转站。

第五步:物理层 (Physical Layer) —— 比特流

  • 动作:网卡将数据帧转换成电信号、光信号或无线电波。
  • 产物比特流 (Bits)(01010101...)。
  • 状态:此时数据真正离开了你的设备,进入了网线或空气中。

4. 详细的解封装流程(接收方)

当数据到达目的地(服务器)时,过程正好相反,就像拆快递一样,这叫解封装

接收方:解封装 (上楼梯)
1
物理层 -> 链路层:网卡收到信号,去掉头尾,取出 数据包
2
链路层 -> 网络层:检查IP,去掉IP头,取出 数据段
3
网络层 -> 传输层:检查端口,去掉TCP头,取出 用户数据
4
传输层 -> 应用层:Web服务器收到 "Hello!",开始处理。

第一步:物理层 -> 数据链路层

  • 网卡接收到电信号,还原成比特流,再组装成数据帧
  • 检查:检查 FCS,确认数据没坏;检查目的 MAC,确认是发给自己的。
  • 动作:去掉以太网头和尾,提取出数据包,交给网络层。

第二步:数据链路层 -> 网络层

  • 网络层收到数据包。
  • 检查:检查目的 IP,确认是发给自己的。
  • 动作:去掉 IP 头,提取出数据段,交给传输层。

第三步:网络层 -> 传输层

  • 传输层收到数据段。
  • 检查:根据目的端口号(例如 80),知道应该交给哪个程序(Web 服务软件,如 Apache/Nginx)。
  • 动作:去掉 TCP 头,提取出数据,交给应用层。

第四步:传输层 -> 应用层

  • Web 服务器软件收到原始的 HTTP 请求数据。
  • 处理:服务器理解了你的请求,开始准备网页内容,然后作为发送方,开始新一轮的封装过程,把网页发回给你。

5. 图解总结:数据的洋葱模型

为了方便记忆,我们可以把这个过程想象成剥洋葱或穿衣服:

层级PDU 名称封装动作 (发送)解封装动作 (接收)关键识别信息
应用层Data (数据)生成数据处理数据数据内容
传输层Segment (段)+ TCP/UDP 头- TCP/UDP 头端口号
网络层Packet (包)+ IP 头- IP 头IP 地址
数据链路层Frame (帧)+ Mac 头 + FCS- Mac 头 - FCSMAC 地址
物理层Bits (比特)转为信号转为二进制(物理介质)

思考题

如果数据在传输过程中,中间经过了一个路由器,路由器会进行解封装吗?如果会,它会解封装到哪一层?

答案:路由器是三层设备(网络层)。

  1. 它收到信号(物理层)。
  2. 解封装看到 MAC 地址(数据链路层),确认是给自己的(或者是广播)。
  3. 解封装看到 IP 地址(网络层),查看路由表决定下一跳去哪里。
  4. 注意:路由器通常不会解封装到传输层(除非有 NAT 或防火墙功能),它查完路由后,会重新进行二层封装(换上新的源/目的 MAC),然后发出去。