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 成了事实标准。原因很现实:
- TCP/IP 先入为主:ARPANET 从 1969 年就开始用了,等 OSI 模型提出时,TCP/IP 已经在大学和研究机构中广泛部署。
- OSI 实现复杂:七层模型虽然清晰,但实现起来过于复杂,很多功能重复。
- 市场推动:美国国防部和大型企业力推 TCP/IP,形成了事实标准。
所以面试时如果问到 OSI 模型,重点回答它的分层思想和各层职责,这是理解网络的基础。
各层典型设备与协议
物理层:集线器、中继器、网线、光纤
数据链路层:交换机、网桥、网卡、ARP
网络层:路由器、三层交换机、IP、ICMP
传输层:防火墙、四层负载均衡、TCP、UDP
应用层:网关、应用服务器、HTTP、DNS、FTP面试追问方向
- OSI 模型每一层分别解决什么问题?
- 为什么说 TCP/IP 是「事实标准」而不是「法定标准」?
- 数据在网络中传输时,封装和分用的过程是怎样的?
- 「交换机」和「路由器」分别工作在哪一层?有什么区别?
