OSI七层模型详解
OSI 模型把网络通信分成七层,从物理线缆(第 1 层)到应用(第 7 层)。每一层只负责一项任务,并且只与紧邻的上一层和下一层交互。该模型是一种教学和故障排查工具;真实的互联网使用的是更简单的四层 TCP/IP 模型。
七个层次
在发送端,数据自上而下逐层传递,每一层都会添加自己的头部,这个过程称为封装。接收端则按相反的顺序去掉这些头部。每一层的数据单元称为 PDU(协议数据单元)。
| 层 | 名称 | PDU | 协议示例 | 典型设备 |
|---|---|---|---|---|
| 7 | 应用层 | 数据 | HTTP, DNS, SMTP, SSH | 代理、应用防火墙 |
| 6 | 表示层 | 数据 | TLS(部分)、字符编码、MIME | - |
| 5 | 会话层 | 数据 | RPC、NetBIOS 会话、TLS(部分) | - |
| 4 | 传输层 | 段(TCP)或数据报(UDP) | TCP, UDP | 防火墙、负载均衡器 |
| 3 | 网络层 | 包 | IP, ICMP, OSPF | 路由器、三层交换机 |
| 2 | 数据链路层 | 帧 | Ethernet, Wi-Fi (802.11), ARP | 交换机、无线接入点 |
| 1 | 物理层 | 比特 | 以太网线缆、光纤、无线电 | 线缆、集线器、中继器 |
OSI 与 TCP/IP 的比较
TCP/IP 模型有四层,更贴近协议实际的构建方式。对应关系是近似的:
| TCP/IP 层 | OSI 层 |
|---|---|
| 应用层 | 7, 6, 5 |
| 传输层 | 4 |
| 网际层 | 3 |
| 链路层(网络接入层) | 2, 1 |
有些书把 TCP/IP 画成五层,将链路层拆分为数据链路层和物理层。在日常工作中,人们仍然用 OSI 的编号来说「二层交换机」或「七层防火墙」,所以两种模型都了解会很有帮助。
打开网站时发生了什么
假设你在浏览器中输入 https://example.com。
- 第 7 层:浏览器需要一个地址,因此先发送针对 example.com 的 DNS 查询,之后再发送 HTTP 请求。
- 第 6/5 层:TLS 握手协商加密密钥并检查服务器证书。
- 第 4 层:TCP 通过三次握手(SYN、SYN-ACK、ACK)打开到 443 端口的连接,并把数据拆分成段。
- 第 3 层:IP 把源地址和目的地址放入数据包,路由器逐跳转发。
- 第 2 层:在每一段链路上,数据包被放入带有 MAC 地址的帧中。在 IPv4 网络中,ARP 负责查找下一跳的 MAC 地址。
- 第 1 层:帧被转换成电信号、光脉冲或无线电波。
在服务器端,同样的步骤按相反的顺序执行,从第 1 层一直到第 7 层。
每个工具测试的是哪一层?
每项网络检测都能证明到某一层为止的各层工作正常。下表显示了我们的工具分别对应哪一层。
| 工具 | 层 | 证明了什么 |
|---|---|---|
| Ping | 3 (ICMP) | 主机在 IP 层可达,以及一次往返所需的时间 |
| 路由追踪 | 3 | 路径上有哪些路由器,以及延迟或丢包从哪里开始 |
| 端口检测 | 4 (TCP) | 可以打开到指定端口的 TCP 连接 |
| SSL 检测 | 6/5,运行于 4 之上 | TLS 握手正常且证书有效 |
| HTTP 响应头 | 7 | Web 服务器有响应,以及它返回的状态码和响应头 |
| DNS 查询 | 7 | 名称服务器返回了预期的记录 |
有三点需要留意:
- TLS 并不对应单一的层。在 OSI 模型中它常被放在第 6 层(加密与表示),有时放在第 5 层(会话)。在 TCP/IP 模型中,它只是应用层的一部分,运行在 TCP 之上。对于故障排查,只需知道 TLS 在 TCP 之后、HTTP 之前工作即可。
- 主机正常时 ping 也可能失败。许多防火墙会丢弃 ICMP 回显请求。ping 失败并不总是意味着主机宕机,所以还要检查端口。另外,traceroute 利用 IP 数据包中的 TTL 字段和 ICMP 超时回复,有些路由器不应答,就会在输出中显示为空缺。
- DNS 运行在第 7 层,尽管它是其他一切的前提。它通常使用 UDP 53 端口,较大的应答和区域传送则使用 TCP 53 端口。
自下而上排查故障
一种可靠的方法是从第 1 层开始逐层向上。每一步都能排除一大类可能的原因。
- 第 1 层:网线接好了吗?Wi-Fi 打开了吗?链路指示灯亮了吗?
- 第 2 层:设备与交换机或无线接入点之间有链路吗?VLAN 正确吗?检查是否有重复的 MAC 地址或 Wi-Fi 密码错误。
- 第 3 层:设备有有效的 IP 地址、掩码和网关吗?能 ping 通网关吗,再 ping 外部地址(例如
192.0.2.1)呢?如果路径在中途中断,请使用路由追踪。常见的地址配置错误见 IP 地址是什么和子网划分。 - 第 4 层:端口开放且没有被防火墙阻挡吗?参见常见端口。
- 第 5-6 层:TLS 握手成功吗?检查是否有证书过期、名称错误或不支持的协议版本。
- 第 7 层:域名能解析吗?应用程序返回的响应正确吗?
实际工作中,你也可以自上而下排查,或者从中间一分为二:如果端口检测正常,说明第 1 到第 4 层没有问题,就可以集中精力排查应用程序。