页面

分层与封装:为什么要分层,数据怎么被层层打包

← 返回兔子洞总览 · networking 主题地图

TCP/IP 四层模型,每层只管自己那一级;数据发出时像套娃一样层层加头(封装),到对面再层层拆头(解封装)

我追问的链

  • 拿到 IP 之后,一个包怎么从我电脑穿越大半个地球、精确落到那台网卡上?
  • 为什么要"分层"?分层到底分了啥?
  • “IP 找机器、端口找程序”,这两个地址为什么不打架?

核心理解

寄跨国快递类比:你不会自己开车送,而是分工接力——

  • 你写的内容(信里写啥)= 应用层(HTTP、DNS)。
  • 信封上的收件人/房间号 = 传输层(TCP / UDP,端口)。
  • 快递单上的城市地址 = 网络层IP,路由)。
  • 具体用飞机还是卡车这一段段运 = 链路层(网卡、MAC、WiFi/以太网)。

每层只关心自己那层的事:快递司机不看信封里装啥,写信的你不管货走飞机还是卡车。这种"各管一段、互不干涉"就是分层——也是几十种设备、上百种软件能协同的原因。

封装(套娃):数据往下走时层层加头部——

1
2
3
4
应用层:           [ HTTP 内容 ]
传输层: [ TCP头 | HTTP 内容 ] ← TCP头写:源端口、目标端口
网络层: [ IP头 | TCP头 | HTTP 内容 ] ← IP头写:源IP、目标IP
链路层: [帧头| IP头 | TCP头 | HTTP内容 |帧尾] ← 帧头写:源MAC、目标MAC

到对面反过来层层拆:拆帧头确认是发给我的 → 拆 IP 头确认目标 IP 是我 → 拆 TCP 头读出目标端口 → 内核据此把内容交给在 listen() 的程序。

"IP 找机器、端口找程序"不打架,是因为它们在不同层:IP 在网络层、端口在传输层,各是各的地址。

逻辑闭环 / 锚点

"内核按目标端口分发给程序"这件事,精确位置就在传输层 TCP 头里的端口号——拆到那一层读出来即可。分层让每个问题都落到确定的一层。

关联


来源:与 Claude 的对话,2026-06。