Skip to content

OSI 七层模型与 TCP/IP 四层模型

想象一下,你在北京的咖啡馆里,打开手机,给在上海的朋友发了一条微信消息。这条消息是怎么跨越 1200 公里到达对方手机的?

这不是魔法,而是一套精密的分层协议在起作用。

为什么需要分层?

在回答「为什么」之前,先想一个反例:如果所有功能都堆在一个巨大的程序里,会发生什么?

  • 每次换网卡,都要重写消息发送逻辑
  • 每次换应用(比如从 QQ 换成微信),都要重新实现网络传输
  • 出了 bug,根本不知道问题出在哪

分层解决的就是这个问题:每一层只关心自己的职责,层与层之间通过标准接口通信

就像邮政系统:你只管写信(应用层),装进信封(传输层),投进邮筒(网络层),剩下的由邮局统一处理。你不需要知道信件是坐飞机还是坐火车运到目的地的。

OSI 七层模型

OSI(Open Systems Interconnection Reference Model)是国际标准化组织在 1984 年提出的参考模型,是理解网络通信的理论框架。

┌─────────────────────────────────────────────────────────────┐
│                        应用层 (Application)                │
│  为用户提供网络服务:HTTP、FTP、SMTP、DNS                      │
├─────────────────────────────────────────────────────────────┤
│                        表示层 (Presentation)                │
│  数据格式转换:加密/解密、压缩/解压、编码/解码                   │
├─────────────────────────────────────────────────────────────┤
│                        会话层 (Session)                     │
│  管理通信会话:建立、维护、终止会话                             │
├─────────────────────────────────────────────────────────────┤
│                        传输层 (Transport)                   │
│  端到端通信:TCP、UDP、端口号、流量控制                        │
├─────────────────────────────────────────────────────────────┤
│                        网络层 (Network)                     │
│  路由与寻址:IP、路由器、三层交换机                           │
├─────────────────────────────────────────────────────────────┤
│                     数据链路层 (Data Link)                  │
│  帧的传输:MAC 地址、交换机、以太网、ARP                       │
├─────────────────────────────────────────────────────────────┤
│                        物理层 (Physical)                    │
│  比特流传输:电信号、光信号、网线、光纤、集线器                  │
└─────────────────────────────────────────────────────────────┘

各层职责详解

物理层:把比特流转换为物理信号(电/光/无线电),负责网线、光纤、网卡等硬件。

数据链路层:把比特组装成「帧」,通过 MAC 地址在局域网内寻址。典型设备是交换机。

网络层:在全局范围内进行路由选择,通过 IP 地址找到目标网络。典型设备是路由器。

传输层:建立端到端的连接,确保数据可靠传输。关心的是「这台电脑的某个程序」到「另一台电脑的某个程序」。

会话层:管理通信双方的会话状态,比如断点续传、对话控制。

表示层:处理数据的「格式」问题,比如 JPEG、ASCII、加密等。

应用层:直接面向用户,提供 HTTP、FTP、SMTP、DNS 等具体服务。

TCP/IP 四层模型

OSI 是理论模型,实际使用的是 TCP/IP 四层模型(有时也叫五层,因为有人把网络接口层拆成了两层)。

┌─────────────────────────────────────────────────────────────┐
│                        应用层                                │
│  HTTP、FTP、SMTP、DNS、Telnet、SSH                          │
├─────────────────────────────────────────────────────────────┤
│                        传输层                                │
│  TCP、UDP                                                    │
├─────────────────────────────────────────────────────────────┤
│                        网络层                                │
│  IP、ICMP、OSPF、BGP                                         │
├─────────────────────────────────────────────────────────────┤
│                     网络接口层(网络访问层)                   │
│  Ethernet、ARP、RARP、PPP                                    │
└─────────────────────────────────────────────────────────────┘

TCP/IP 四层模型和 OSI 七层模型的对应关系如下:

OSI 七层TCP/IP 四层
应用层、表示层、会话层应用层
传输层传输层
网络层网络层
数据链路层、物理层网络接口层

数据封装与分用

理解了分层,接下来看数据是怎么「穿层」的。

当你发送一个 HTTP 请求时,数据经过每一层都会「加壳」,就像俄罗斯套娃:

应用层:        [HTTP 请求头 + Body]          ← 你要发送的数据
传输层:        [TCP 头 | HTTP 请求头 + Body]   ← 加上源/目的端口
网络层:        [IP 头 | TCP 头 | HTTP 请求头 + Body]  ← 加上源/目的 IP
数据链路层:    [Ethernet 头 | IP 头 | TCP 头 | HTTP 请求头 + Body | CRC]  ← 加上 MAC 地址
物理层:        转换为 010101... 的电信号/光信号

接收端则反过来,从物理层逐层「拆壳」,这就是「分用」。

每一层只处理自己的头部,根据头部中的字段决定把数据交给上一层。这个过程是自动的,对用户透明。

为什么 OSI 模型没有流行?

OSI 模型设计得漂亮、完整,但最终是 TCP/IP 成了事实标准。原因很现实:

  1. TCP/IP 先入为主:ARPANET 从 1969 年就开始用了,等 OSI 模型提出时,TCP/IP 已经在大学和研究机构中广泛部署。
  2. OSI 实现复杂:七层模型虽然清晰,但实现起来过于复杂,很多功能重复。
  3. 市场推动:美国国防部和大型企业力推 TCP/IP,形成了事实标准。

所以面试时如果问到 OSI 模型,重点回答它的分层思想各层职责,这是理解网络的基础。

各层典型设备与协议

物理层:集线器、中继器、网线、光纤
数据链路层:交换机、网桥、网卡、ARP
网络层:路由器、三层交换机、IP、ICMP
传输层:防火墙、四层负载均衡、TCP、UDP
应用层:网关、应用服务器、HTTP、DNS、FTP

面试追问方向

  • OSI 模型每一层分别解决什么问题?
  • 为什么说 TCP/IP 是「事实标准」而不是「法定标准」?
  • 数据在网络中传输时,封装和分用的过程是怎样的?
  • 「交换机」和「路由器」分别工作在哪一层?有什么区别?

基于 VitePress 构建