TCP/IP 四层模型,每层只管自己那一级;数据发出时像套娃一样层层加头(封装),到对面再层层拆头(解封装)。
我追问的链
- 拿到 IP 之后,一个包怎么从我电脑穿越大半个地球、精确落到那台网卡上?
- 为什么要"分层"?分层到底分了啥?
- “IP 找机器、端口找程序”,这两个地址为什么不打架?
核心理解
寄跨国快递类比:你不会自己开车送,而是分工接力——
- 你写的内容(信里写啥)= 应用层(HTTP、DNS)。
- 信封上的收件人/房间号 = 传输层(TCP / UDP,端口)。
- 快递单上的城市地址 = 网络层(IP,路由)。
- 具体用飞机还是卡车这一段段运 = 链路层(网卡、MAC、WiFi/以太网)。
每层只关心自己那层的事:快递司机不看信封里装啥,写信的你不管货走飞机还是卡车。这种"各管一段、互不干涉"就是分层——也是几十种设备、上百种软件能协同的原因。
封装(套娃):数据往下走时层层加头部——
1 | 应用层: [ HTTP 内容 ] |
到对面反过来层层拆:拆帧头确认是发给我的 → 拆 IP 头确认目标 IP 是我 → 拆 TCP 头读出目标端口 → 内核据此把内容交给在 listen() 的程序。
"IP 找机器、端口找程序"不打架,是因为它们在不同层:IP 在网络层、端口在传输层,各是各的地址。
逻辑闭环 / 锚点
"内核按目标端口分发给程序"这件事,精确位置就在传输层 TCP 头里的端口号——拆到那一层读出来即可。分层让每个问题都落到确定的一层。
关联
- 链路层那个"目标 MAC 填谁"的坑,在 04-routing-bgp 里解开。
- 分层思想反复出现:socket 是接口非协议、L4/L7 负载均衡。见母题 分层 + 封装。
来源:与 Claude 的对话,2026-06。