ArcLibrary

封装与解封装

数据从应用层一路往下走时,每一层都会在外面包一层信封。

封装
核心 · Key Idea

一句话:发送方从应用层往下走,每一层都在数据外面加一个本层的头部(有时还加尾部);接收方反过来一层层拆开。这个过程叫封装 / 解封装

是什么#

应用程序写出的就是一段字节,比如一个 HTTP 请求:

GET /index.html HTTP/1.1
Host: example.com

它不会"赤裸"地跑在网线上。从上往下走的过程:

HTTP 报文                                              ← 应用层
[TCP 头 | HTTP 报文]                                   ← 传输层
[IP 头 | TCP 头 | HTTP 报文]                           ← 网络层
[以太网头 | IP 头 | TCP 头 | HTTP 报文 | 以太网尾]      ← 链路层
比特流                                                 ← 物理层

每加一层头部,都是为了让下一层知道怎么处理这个包

打个比方#

打个比方 · Analogy

你写完一封信(HTTP 报文),先装进信封 1(TCP,写明发件号);再放进信封 2(IP,写明最终地址);最后给快递员打包成信封 3(以太网,写明本段从哪到哪)。每个中转站只拆最外层信封看下一段送哪,不拆里面

关键概念#

Frame
链路层的 PDU。以太网帧有源 / 目的 MAC、类型、CRC。
Packet
网络层的 PDU。IP 包有源 / 目的 IP、TTL、协议号。
Segment
TCP 的 PDU,含端口、序号、窗口。UDP 称 datagram。
MTU最大传输单元
链路层一帧能装的最大字节数(以太网默认 1500)。超过就要分片。
Payload载荷
本层头部之后真正要传输的数据。

怎么工作#

中间每个路由器到了网络层就会重写以太网头(因为下一跳变了),但不会动 IP 以上

实操要点#

  • MTU 不匹配就麻烦:IP 层会分片(fragmentation)。VPN / 隧道场景常见 MTU 偏小,TCP 性能下降。可以 ping -s 1472 -M do 测最大不分片大小。
  • 抓包就是按层看头:Wireshark 把每个包按 frame / IP / TCP / HTTP 展开,手动撕了给你看。
  • 每层有最大长度限制:以太网 1500、IP 包理论 65535、TCP segment 受 MSS 限制。
  • 加密发生在哪层很关键:HTTPS 在应用 / 传输之间加 TLS,链路层看到的还是密文 —— 但 IP 头还是明文,运营商能看到你访问哪个 IP。

易混点#

头部 (Header)
多数协议只有头部。
比如 IP、TCP。
尾部 (Trailer)
链路层(以太网)会加 4 字节 CRC 校验尾部。

延伸阅读#