OSI 模型详解:从线缆到应用的七层结构

每当你打开网站、发送消息或观看视频,数据在抵达屏幕之前都要经过几个阶段。它从以太网线中的电信号或 Wi-Fi 的无线电波出发,一直传到你正在使用的程序。理解这一顺序,可以清楚地看到网络是如何工作的,也有助于有条理地排查互联网故障。描述这一顺序最常用的模型是 OSI 模型,它把网络通信划分为七个层次。本文将介绍该模型的来源、每一层的作用、数据如何在各层之间移动、它与 TCP/IP 的比较,以及如何用它解决实际问题。

OSI 模型是什么

OSI 是 Open Systems Interconnection(开放系统互连)的缩写,是一个参考模型,规定了计算机之间的通信应当如何划分为若干层。每一层都有自己的职责,并通过明确定义的接口与上下相邻的层通信。这样,厂商只需了解自己负责的那一层,就可以开发设备或软件,而不必了解其他层的内部细节。

需要明确的是,OSI 是一个模型,而不是互联网上直接使用的协议套件。真正支撑互联网运行的协议,如 TCP 和 IP,属于另一种模型。不过,OSI 的分层思想仍然是全球网络工程师解释和诊断问题时通用的语言。

模型的由来

1970 年代末,计算机网络还是彼此孤立的孤岛。每个厂商都使用自己的协议,IBM 的机器无法与 DEC 的机器通信,一家厂商的设备只能依赖同一厂商的产品。国际标准化组织(ISO)于 1977 年开始制定一个通用模型,使不同厂商的网络能够互相连通。

成果是 1984 年发布的标准 ISO 7498,即人们熟知的 OSI 参考模型。虽然这个模型在概念上获得了广泛认可,但为配合它而制定的协议,如用于电子邮件的 X.400 和用于目录服务的 X.500,并未获得预期的普及。由美国 DARPA 开发的 TCP/IP 率先应用于 ARPANET,之后成为互联网的基础,传播范围远远更广。

七层概览

各层从下往上编号。第 1 层最靠近物理传输介质,第 7 层最靠近用户。

1. 物理层(Physical Layer)

2. 数据链路层(Data Link Layer)

3. 网络层(Network Layer)

4. 传输层(Transport Layer)

5. 会话层(Session Layer)

6. 表示层(Presentation Layer)

7. 应用层(Application Layer)

记忆这一顺序常用的英文口诀是 “Please Do Not Throw Sausage Pizza Away”,从第 1 层读到第 7 层。记住之后,就能判断某个设备或协议属于哪一层。

第 1 层:物理层

这一层关注在物理介质上传输原始比特,例如铜线上的电压、光纤中的光信号,或 Wi-Fi 的无线电波。它规定 1 和 0 如何用电压高低、频率或光强来表示,同时规定接口形状、信号速率和电压范围。

这一层的设备包括 Cat 6 等以太网线缆、光纤线缆、转发信号的集线器(Hub)以及收发器。常见问题有线缆松动或损坏、接头质量差、线缆长度超出标准,以及电磁干扰。

第 2 层:数据链路层

数据链路层负责同一局域网内或直接相连的设备之间的传递。它把比特组织为帧(Frame),每个帧包含目的地址、源地址、数据以及 CRC 等校验值。这一层使用的地址是 MAC 地址,是厂商为网卡分配的 48 位标识符,通常用十六进制表示,例如 00-1A-2B-3C-4D-5E。

这一层还控制设备如何共享介质。以太网通过规则避免同一线缆上的同时发送,Wi-Fi 则使用 CSMA/CA 来减少空中的信号冲突。这里的主要设备是交换机,它学习每个端口连接的 MAC 地址,并只将帧转发到正确的端口。依据 802.1Q 标准的 VLAN 可以把一台交换机划分为多个虚拟网络。

第 3 层:网络层

网络层负责把数据包(Packet)跨越多个网络送达目的地。它使用 IP 地址来标识目的地。IPv4 地址为 32 位,例如 192.168.1.10;IPv6 地址为 128 位,提供大得多的地址空间。它的主要任务是路由,即为数据包选择最佳路径,路由器通过查阅路由表来完成这一工作。

这一层还包括用于传递诊断信息的 ICMP。ping 和 traceroute 命令正是利用 ICMP 来检查目标是否响应,以及路径经过多少跳。这一层的常见问题包括 IP 设置错误,例如子网掩码或默认网关不正确,以及根本不存在的路由。

第 4 层:传输层

传输层负责把数据从一台机器上的程序送到另一台机器上的程序。它使用端口号来识别服务,例如 HTTP 使用端口 80,HTTPS 使用端口 443,DNS 使用端口 53。

这一层的两个主要协议是 TCP 和 UDP。TCP 是可靠的:发送前先进行三次握手,用确认应答确认接收,重传丢失的数据,并控制流量,避免接收方不堪重负。UDP 更简单、更快,但不保证送达,因此适合实时视频、在线游戏和 DNS。这一层的数据单位,在 TCP 中称为报文段(Segment),在 UDP 中称为数据报(Datagram)。

第 5 层:会话层

会话层负责在两个程序之间建立、管理和结束会话(Session)。它的功能包括设置检查点,使传输在故障后能够从断点继续;协调双方在某个时刻由谁发言;以及在使用过程中保持连接。

现实中的例子包括允许程序调用另一台机器上函数的 NetBIOS 和 RPC。在实践中,会话功能通常内置于应用程序或函数库中,而不是作为独立的一层存在,因此这一层在考试中往往最难准确作答。

第 6 层:表示层

表示层负责把数据转换为双方都能理解的格式,涉及字符编码、压缩和加密。例如,解释 UTF-8 编码的文字,处理 JPEG、PNG 等图像格式,用 gzip 压缩文件,以及用 TLS 加密数据,使 HTTPS 网站免受窃听。

在实际中,不同教材对 TLS 的归类并不一致,有的放在会话层,有的放在表示层;在 TCP/IP 模型中,它位于 TCP 和 HTTP 之间。向他人讲解模型时,这一点值得注意。

第 7 层:应用层

应用层是用户最直接接触的一层。网页浏览器、电子邮件客户端、聊天应用等程序,都通过这一层的协议与其他机器通信。例如,网页使用 HTTP 和 HTTPS,电子邮件使用 SMTP、IMAP 和 POP3,文件传输使用 FTP,把域名转换为 IP 地址使用 DNS,自动分配 IP 地址使用 DHCP。

需要注意,应用层指的是应用程序所使用的协议,而不是应用程序本身。例如,Chrome 和 Firefox 使用的是同一种 HTTP 协议。

数据如何在各层之间移动

程序发送数据时,数据从第 7 层向下传到第 1 层。每一层都会添加自己的头部,这一过程称为封装(Encapsulation)。传输层添加端口号,网络层添加 IP 地址,数据链路层添加 MAC 地址和 CRC,最后物理层把这一切转换为电信号、光信号或无线电波。

接收方则反向进行,称为解封装(Decapsulation)。每一层读取并检查自己的头部,然后把剩余部分交给上一层。数据到达第 7 层时,目标程序就得到了原始消息。

每一层的数据单位也有不同的名称。第 1 层处理比特,第 2 层处理帧,第 3 层处理数据包,第 4 层处理报文段或数据报,第 5 至第 7 层通常统称为数据。

示例:加载一个网页

下面看看打开 example.com 的一个网页时,数据如何经过这个模型。

1. 应用层:浏览器需要页面的 HTML,因此构造 HTTP GET 请求。它首先需要 example.com 的 IP 地址,所以向 DNS 查询。

2. 表示层:如果是 HTTPS,请求在发送前用 TLS 加密。

3. 会话层:建立连接,并在交换过程中保持会话。

4. 传输层:TCP 把数据切分为报文段,加上目标端口 443,并与服务器完成握手。

5. 网络层:数据包被加上源和目的 IP 地址。家用路由器选择通往互联网的路径。

6. 数据链路层:帧被加上本地网络中下一跳设备(即路由器)的 MAC 地址。

7. 物理层:帧通过线缆或 Wi-Fi 以信号形式发送到路由器。

服务器回复时,数据沿相反方向返回,各层依次剥离自己的头部。

OSI 与 TCP/IP 的比较

TCP/IP 模型有四层,即网络接口层、互联网层、传输层和应用层。在这个模型中,网络接口层合并了 OSI 的物理层和数据链路层;互联网层对应网络层;传输层与 OSI 的传输层相对应;应用层则合并了 OSI 的会话层、表示层和应用层。

这一比较说明,两种模型以不同的详细程度描述同一件事。OSI 更加细致,适合教学和概念讲解;TCP/IP 则贴近互联网的实际运行方式。

用 OSI 解决实际问题

按层次思考,可以从下往上或从上往下逐步定位故障。常见的检查包括:

这种方法避免了盲目猜测。下层工作正常时,问题通常在上层,反之亦然。

各层的网络设备

了解设备工作在哪一层,有助于记住这个模型。

有些设备同时工作在多个层次。例如,三层交换机把交换机和路由器的功能集成在一台设备中。

OSI 在实践中的意义

尽管 OSI 本身并不是直接使用的协议,它仍有多方面的价值。它为工程师提供了共同的术语,帮助区分设备和软件的职责,支持有步骤的故障排查,并且是学习网络的基础。CompTIA Network+ 和 Cisco CCNA 等认证至今仍用七层模型来讲解概念。

各层的安全问题

OSI 模型也能帮助我们看清网络攻击可能发生在哪一层,以及该如何防御。良好的安全措施必须覆盖每一层,因为只保护某一层很可能被绕过。

核心原则是纵深防御(Defense in Depth),即叠加多层防护措施,使攻击者在接触敏感数据之前必须突破多重障碍。

用 Wireshark 观察真实数据包

观察 OSI 模型实际运行最直观的方法,是用 Wireshark 这类分析工具查看真实数据包。它会把每个数据包按层次拆开显示,从帧(第 1–2 层)、以太网 II(第 2 层)、IPv4(第 3 层),到 TCP 或 UDP(第 4 层),再到 HTTP(第 7 层)。选中某一层,对应的字节就会高亮显示。

一个简单的练习是:在自己的电脑上开始抓包,打开一个不使用 HTTPS 的 HTTP 测试网站,停止抓包后找到 HTTP GET 数据包。你会看到应用层的请求、传输层的端口号、网络层的 IP 地址,以及数据链路层的 MAC 地址,与本文的描述完全一致。亲眼看到真实数据,模型就从图表变成了具体的东西。

抓包只应在你有权使用的网络上进行,例如家庭网络或自己管理的实验环境。未经许可截取他人的通信,在大多数地方都是违法的。

从 OSI 模型中得到的启示

结语

OSI 模型不只是一张需要背诵的表格,而是一种思考网络通信的方式,从线缆上的电信号、IP 地址,到数据的可靠传递,再到用户所看到的应用程序。理解数据正经过哪一层、每一层做了什么,你就能够系统地诊断网络问题,也能更好地读懂设备文档。