1037 字
5 分钟
TCP/IP 四层模型:一个数据包从网卡到应用的旅程

学网络最大的障碍是概念太多、层次不清。其实 TCP/IP 协议栈的设计初衷很朴素:把「把数据从 A 进程送到 B 进程」这件复杂的事,拆成四层,每层只解决一个问题。本文跟着一个 HTTP 请求走完全程,看每层都做了什么。

四层各管一件事#

层解决的问题关键概念常见协议
应用层数据的内容是什么请求/响应、域名HTTP、DNS、SSH
传输层交给本机哪个进程、要不要可靠端口、连接TCP、UDP
网际层送到哪台主机IP 地址、路由IP、ICMP
网络接口层怎么在物理链路上传MAC 地址、帧Ethernet、Wi-Fi

类比寄快递:你写的信是应用层内容;信封上写「某公司前台转张三」相当于传输层指定接收人(端口);收件地址的城市街道是网际层负责的跨网络寻址;而快递车在高速上一站站转运,是网络接口层的事。

一次发送的封装过程#

假设浏览器访问 http://192.168.1.20:8080/hello:

  1. 应用层生成报文:GET /hello HTTP/1.1\r\nHost: ...。
  2. 传输层在前面加上 TCP 首部:源端口 50000(系统随机分配)、目标端口 8080、序号等。这段数据叫 TCP 段(segment)。
  3. 网际层再加 IP 首部:源 IP 192.168.1.10、目标 IP 192.168.1.20。这叫 IP 数据报(packet)。
  4. 网络接口层加以太网首部和尾部:源 MAC、下一跳的 MAC。这叫帧(frame),最终变成电信号/无线电波发出去。

每层都把上一层的整体当作「数据」原样打包,自己只关心自己加的首部——这就是封装。

途中的两台设备,两种视野#

数据包从你的电脑到服务器,会经过交换机和路由器:

  • 交换机(二层)只看以太网首部的 MAC 地址,决定从哪个端口转发,不关心 IP。
  • 路由器(三层)剥掉旧的以太网首部,看 IP 首部里的目标地址,查路由表选择下一跳,再套上新的以太网首部转发。

所以 MAC 地址每过一台路由器就换一次(只负责「本段链路内的下一跳」),而 IP 地址全程不变(负责「最终目的地」)。这正回答了「有了 IP 为什么还要 MAC」:IP 是端到端的全局寻址,MAC 是逐跳的局部交付。

到达之后的解封装#

服务器网卡收到帧,逐级向上:

  1. 以太网层校验帧完整,剥掉首尾,上交给 IP 层;
  2. IP 层检查目标 IP 是自己,剥掉 IP 首部,按协议号(6=TCP)交给传输层;
  3. TCP 层按目标端口找到监听 8080 的进程,把数据放进它的接收缓冲区;
  4. 应用(比如 Nginx)读出 HTTP 报文,解析并生成响应,再沿相反方向封装回去。

发送方的「封装」和接收方的「解封装」完全对称。同层之间仿佛在直接对话——TCP 不知道自己经过了几个路由器,HTTP 也不知道下面是 TCP 还是别的什么,这正是分层带来的解耦。

三种「地址」不要再混淆#

地址长度作用范围类比
MAC48 bit同一段链路/局域网快递员手上这一站的交接对象
IP32 bit(v4)/128 bit(v6)跨网络端到端快递单上的收件地址
端口16 bit主机内部区分进程收件地址里的「转交某部门」

完整标识一条连接的是五元组:协议 + 源 IP + 源端口 + 目标 IP + 目标端口。这就是为什么同一台服务器能同时承载成千上万个 TCP 连接而不混乱。

为什么值得学分层#

分层模型不是考试知识点,而是排障的决策树:能 ping 通但打不开网页,说明三层以下通、问题在四层以上;curl 返回 403,说明 TCP 都正常,问题在应用层。后续文章讲的抓包、DNS 排查,都是把这一模型落到具体工具上。

延伸阅读#

TCP/IP 四层模型:一个数据包从网卡到应用的旅程
https://meow.us.kg/posts/tcpip-four-layer-model/
作者
もゆちゃん
发布于
2026-09-15
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取