网络分层是学习计算机网络的第一张地图,没有它,HTTP、TCP、IP、MAC、DNS 这些名词只会堆成一锅粥。本文讲清 OSI 七层与 TCP/IP 四层各自的职责划分、数据封装解封装的全过程,以及”教科书讲七层、实践用四层”背后的原因。

它解决什么问题

计算机网络天然复杂:要让两台相隔千里的机器交换数据,得同时解决物理信号、相邻节点传输、跨网寻址、可靠交付、格式约定等一大堆问题。如果把它们揉进一个巨型协议,既设计不出来,也没法维护和替换。分层模型把大问题切成若干边界清晰的小问题,每层只专注一类职责,并为上层提供稳定接口。OSI 七层和 TCP/IP 四层就是两套最有代表性的切法:前者理论完备,后者是互联网的真实实现。

核心原理:两套模型各层做什么

OSI 七层模型

由国际标准化组织提出,自顶向下依次是:

  1. 应用层:为应用程序提供网络服务接口,定义信息交换的格式与规则,代表协议有 HTTP、SMTP、FTP、DNS。
  2. 表示层:处理数据格式转换、加密解密、压缩解压,让不同系统能理解彼此的数据表示。
  3. 会话层:负责建立、管理和终止会话,控制对话的同步与检查点。
  4. 传输层:为两台主机的进程之间提供端到端的数据传输服务,核心是 TCP(面向连接、可靠)与 UDP(无连接、尽力而为)。
  5. 网络层:负责跨网络的寻址与路由选择,让分组能从源主机找到目的主机,代表协议有 IP、ICMP、ARP、OSPF、BGP。
  6. 数据链路层:把网络层交下来的数据组装成帧,在相邻节点间传输,负责 MAC 寻址与差错检测,代表技术是以太网。
  7. 物理层:在传输介质上透明地搬运比特流,屏蔽电缆、光纤、无线电等物理差异。

TCP/IP 四层模型

互联网实际跑的是这套精简模型:

  1. 应用层:合并了 OSI 的应用层、表示层、会话层,直接面向应用需求,HTTP、DNS、SMTP、SSH 都在这里。
  2. 传输层:与 OSI 传输层对应,仍是 TCP 和 UDP。
  3. 网络层(网际层/IP 层):核心只有 IP 协议,外加 ICMP、ARP 与各类路由协议。
  4. 网络接口层:把 OSI 的数据链路层和物理层合在一起,处理帧的收发与比特传输。

两套模型不能精确一一对应,但粗略映射是:OSI 上三层合成 TCP/IP 应用层,中间两层基本对齐,底下两层合成网络接口层。还有些教材使用折中的五层模型(应用、传输、网络、链路、物理),讲课时更方便,本质上与四层模型描述的是同一个协议栈。

深入机制:数据封装与解封装

分层不是抽象口号,它直接体现在报文格式上。以浏览器发送 HTTP 请求为例,发送端自顶向下逐层封装:

应用层:   [HTTP 报文]                          → 报文(Message)
传输层: [TCP 头|HTTP 报文] → 报文段(Segment),加端口号、序列号
网络层: [IP 头|TCP 头|HTTP 报文] → 数据报(Packet),加源/目的 IP
链路层: [帧头|IP 头|TCP 头|HTTP 报文|帧尾] → 帧(Frame),加 MAC 地址与校验
物理层: 转成比特流送上网线/光纤

每层只添加并只关心自己的头部:TCP 头里的端口号决定数据交给对端哪个进程,IP 头里的地址决定分组跨网络往哪走,MAC 地址只负责”当前这一跳发给谁”。

传输途中,中间设备按自己的层级处理:交换机(二层)读帧头转发,路由器(三层)解到 IP 层、查路由表选下一跳,然后重新封装链路层头——每一跳的源/目的 MAC 都会被重写,而源/目的 IP 全程不变(NAT 除外)。到达接收端后反向解封装:网卡校验帧、剥掉帧头交 IP,IP 剥头交 TCP,TCP 按序列号重组字节流、剥头后按端口交给应用进程,应用拿到的就是干净的 HTTP 报文。

这里能看出分层的一个关键特征:对任何一层来说,它都觉得自己在和对端同一层直接对话——TCP 不知道也不关心底下的包走了哪条路由,IP 也不关心承载它的是以太网还是 Wi-Fi。

工程实践

  • 按层排查故障:网络问题定位时沿模型自底向上逐层验证——链路通不通(网线/Wi-Fi、交换机)→ IP 可达吗(ping、路由表)→ 端口通吗(telnet/nc)→ TLS 握手成功吗(openssl s_client)→ 应用返回正常吗(状态码、日志)。每一层工具只能证明它观察到的那一层,端口可达不代表应用健康。
  • 理解设备边界:路由器、防火墙、四层/七层负载均衡器的差异,本质就是它们分别工作在哪一层、能看懂哪层的头部。七层代理能按 URL 路由,四层代理只能按 IP+端口转发。
  • 协议选型按层归属:学任何一个协议先问它在哪一层,就知道它依赖谁、被谁依赖。比如 QUIC 在 UDP 之上实现了可靠传输,等于把原本属于 TCP 的职责搬进了应用层,这正是”层与层可以各自演进”的鲜活例子。

对比与权衡

维度 OSI 七层模型 TCP/IP 四层模型
出身 先定标准、后做实现,由标准化组织设计 先有实现、后总结模型,随互联网实战演化
层次划分 七层,表示层/会话层独立存在 四层,上三层合并为应用层
理论完备性 概念清晰,适合建立分析框架 较粗糙,但贴合真实协议栈
实际落地 几乎没有完整实现 互联网的事实标准
典型用途 教学、故障分析、概念沟通 工程实现、协议开发

为什么教科书讲七层、实践用四层? OSI 的失败不是技术理念错了,而是输在现实:标准制定周期过长,等全套规范落地时 TCP/IP 早已大规模部署;其实现复杂、运行效率低;层次划分也不尽合理,表示层和会话层的功能在实践中大多直接由应用自己处理。但七层模型提供了精确的词汇表——说”这是二层问题”所有人都懂——所以教学与分析依然用它,写代码、配网络则用四层。

分层思想真正的工程价值在三点:解耦,每层只依赖下层接口,不关心实现细节,换一块网卡不需要改 HTTP;标准化,接口固定后,不同厂商的设备与实现可以互通;各自演进,TCP 可以升级拥塞算法,IP 可以从 v4 过渡到 v6,HTTP 可以从 1.1 演进到 3,彼此互不阻塞。这和软件架构里”高内聚、低耦合”是同一条原则。

面试视角

OSI 七层分别是什么,各举一个协议?

应用层(HTTP)、表示层(TLS 的加密格式化可归于此)、会话层、传输层(TCP/UDP)、网络层(IP/ICMP)、数据链路层(以太网/ARP 常被归入此处)、物理层。记住”链路网、传、会表应”的自底向上顺序即可。

为什么不直接用一层搞定,非要分层?

一层意味着所有问题耦合在一个巨型协议里,无法独立设计、实现和替换。分层后每层职责单一、接口稳定,各层可以独立演进和排错,复杂度被分解到可管理的边界内。

发送一个 HTTP 请求,数据封装经过哪些变化?

HTTP 报文先被 TCP 加头变成报文段(端口、序列号),再被 IP 加头变成数据报(源/目的 IP),再被链路层加帧头帧尾(MAC、校验),最后物理层转比特流发出;接收端反向逐层剥头。

路由器和交换机分别工作在哪一层?

交换机工作在数据链路层(二层),按 MAC 地址表转发帧;路由器工作在网络层(三层),解到 IP 层查路由表选下一跳,并重写链路层头继续转发。

小结

  • OSI 七层理论完备,TCP/IP 四层是互联网实现;两者粗略映射为上三层合并、中间对齐、下两层合并。
  • 封装的本质是每层各加一个头:报文 → 报文段 → 数据报 → 帧 → 比特流;路由器逐跳重写链路层头,IP 地址全程不变。
  • 教科书讲七层因为它词汇精确、便于分析;实践用四层因为 TCP/IP 先发落地、OSI 标准冗长且层次设计不合理。
  • 分层的工程价值是解耦、标准化与各层独立演进;按层排查故障是最实用的落地方式。