前言
刚开始学计算机网络,最常见的一张图就是:
1 | 应用层 |
这张图很经典,但也很容易让人产生一个误会:好像只要背下七层名字,就算理解网络了。
其实分层模型真正想表达的不是“有几个层”,而是:
一次复杂的网络通信,可以拆成多个职责清晰、彼此协作的阶段。
只要抓住这个思路,再看 OSI 七层模型和 TCP/IP 四层模型,就不会觉得它们是两套互相打架的概念。
一张图先看懂分层
先用五层模型做主线最容易理解:应用层负责语义,传输层负责进程通信,网络层负责主机寻址和路由,数据链路层负责局域网交付,物理层负责信号传输。

发送数据时,是从上到下一层层封装;接收数据时,是从下到上一层层解封装。OSI 七层、五层模型、TCP/IP 四层模型,本质上都是对这条链路的不同拆法。
1. 为什么网络需要分层
想象浏览器访问一个页面:
1 | https://example.com/articles/1 |
这个动作背后至少包含这些问题:
- 域名
example.com对应哪台服务器? - 浏览器和服务器怎么建立连接?
- 数据传输过程中丢了怎么办?
- 请求和响应应该长什么样?
- HTTPS 如何保证内容不被中间人篡改?
- 数据最终如何从网线、Wi-Fi 或蜂窝网络里传过去?
如果所有问题都混在一个协议里解决,系统会非常难设计、难维护、难替换。
分层的价值在于:
- 每一层只关心自己的职责。
- 下层为上层提供能力,上层不需要知道下层所有细节。
- 某一层可以独立演进,而不必推翻整个网络体系。
比如 HTTP 不需要关心底层到底走网线还是 Wi-Fi;IP 不需要关心上层传的是 HTML、JSON 还是图片;TCP 也不关心业务含义,只负责可靠传输字节流。
2. OSI 七层模型是什么
OSI 是一个理论参考模型,它把网络通信拆成七层。
1 | 7. 应用层 |
可以从上往下理解:越上层越接近应用,越下层越接近硬件和传输介质。
1. 物理层
物理层负责传输最原始的比特流。
它关心的是:
- 电信号、光信号、无线电波如何表示
0和1 - 网线、光纤、无线信号等传输介质
- 接口、电压、频率、速率等硬件细节
一句话:
物理层负责把比特真正送出去。
2. 数据链路层
数据链路层负责在同一个局域网内传输数据帧。
它关心的是:
- MAC 地址
- 以太网帧
- 交换机转发
- ARP 地址解析
- 同一局域网内的相邻节点通信
比如你的电脑要把数据发给家里的路由器,首先要知道路由器在局域网里的 MAC 地址。这个过程通常会用到 ARP。
一句话:
数据链路层负责同一个局域网内,设备和设备之间怎么交付数据。
3. 网络层
网络层负责跨网络传输数据包。
它关心的是:
- IP 地址
- 路由选择
- 数据包转发
- ICMP
- 子网、网关、NAT
如果数据要从你的电脑发到另一个城市、另一个国家的服务器,靠的就是网络层的 IP 和路由体系。
一句话:
网络层负责把数据包从源主机送到目标主机。
4. 传输层
传输层负责端到端的进程通信。
它关心的是:
- 端口
- TCP
- UDP
- 连接管理
- 可靠传输
- 流量控制和拥塞控制
IP 只能帮你找到目标机器,但一台机器上可能有很多进程:Web 服务、数据库、SSH、邮件服务。传输层通过端口进一步定位到具体进程。
一句话:
传输层负责让两台主机上的具体进程完成通信。
5. 会话层
会话层负责建立、维护和管理会话。
它关心的是:
- 会话建立
- 会话保持
- 会话恢复
- 会话同步
在现代互联网协议栈里,会话层的能力经常被合并到应用层或传输层实现,所以平时很少直接感知它。
一句话:
会话层负责管理一次通信会话的生命周期。
6. 表示层
表示层负责数据格式转换和表示。
它关心的是:
- 编码和解码
- 压缩和解压缩
- 加密和解密
- 数据格式转换
例如字符编码、JSON 序列化、图片格式、TLS 加密,都可以从表示层的角度理解。
不过在真实 TCP/IP 协议栈里,表示层通常也不会作为单独一层出现,而是融入应用层。
一句话:
表示层负责让数据以双方都能理解的格式表达出来。
7. 应用层
应用层最接近用户和业务。
它关心的是:
- HTTP
- DNS
- FTP
- SMTP
- WebSocket
- 应用协议和业务语义
比如 HTTP 规定了请求方法、状态码、Header、Body,浏览器和服务器才能围绕同一套语义通信。
一句话:
应用层负责定义应用之间如何交换有业务含义的数据。
3. TCP/IP 四层模型是什么
TCP/IP 模型更接近真实互联网的实现。
它通常分为四层:
1 | 4. 应用层 |
有些资料也会把它写成五层模型,把网络接口层拆成数据链路层和物理层:
1 | 应用层 |
四层模型和五层模型本质上只是拆分粒度不同。对于前端和应用开发者来说,先掌握四层就足够建立主线。
1. 网络接口层
对应 OSI 的物理层和数据链路层。
它负责在具体网络介质上传输数据,包括以太网、Wi-Fi、MAC 地址、数据帧等。
2. 网络层
对应 OSI 的网络层。
核心协议是 IP,负责寻址和路由,让数据包可以跨网络传输。
3. 传输层
对应 OSI 的传输层。
核心协议是 TCP 和 UDP,负责端到端进程通信。
4. 应用层
对应 OSI 的应用层、表示层和会话层。
HTTP、DNS、WebSocket、SMTP 等都属于这一层。TLS 虽然常被放在应用层和传输层之间理解,但在 TCP/IP 四层模型里通常也归到应用层相关能力中。
4. OSI 七层与 TCP/IP 四层如何对应
可以用一张表记住它们的关系。
| OSI 七层模型 | TCP/IP 四层模型 | 常见协议 / 概念 |
|---|---|---|
| 应用层 | 应用层 | HTTP、DNS、WebSocket、SMTP |
| 表示层 | 应用层 | TLS、编码、压缩、序列化 |
| 会话层 | 应用层 | 会话管理、连接保持 |
| 传输层 | 传输层 | TCP、UDP、端口 |
| 网络层 | 网络层 | IP、ICMP、路由、NAT |
| 数据链路层 | 网络接口层 | MAC、ARP、以太网、交换机 |
| 物理层 | 网络接口层 | 网线、光纤、无线信号、比特流 |
更直观一点:
1 | OSI 七层模型 TCP/IP 四层模型 |
所以不要把两套模型看成互相矛盾。OSI 更适合教学和理解职责边界,TCP/IP 更接近真实互联网工程实现。
5. 一次 HTTP 请求如何穿过这些层
以浏览器访问:
1 | https://example.com |
为例,可以从应用层一路往下看。
1. 应用层:准备 HTTP 请求
浏览器先构造 HTTP 请求:
1 | GET / |
如果是 HTTPS,还会先进行 TLS 握手,建立加密通信所需的密钥和安全参数。
这一层关心的是:
- 请求方法是什么
- 请求路径是什么
- Header 带什么
- Cookie 是否携带
- 响应状态码是什么
- 内容类型是什么
2. 传输层:建立 TCP 连接
HTTP/1.1 和 HTTP/2 通常基于 TCP。
浏览器会和目标服务器的 443 端口建立 TCP 连接。
TCP 负责:
- 三次握手
- 数据分段
- 丢包重传
- 顺序保证
- 流量控制
- 拥塞控制
这一层不关心你传的是 HTML 还是 JSON,它只关心字节流能不能可靠到达。
3. 网络层:封装 IP 数据包
传输层的数据会交给网络层。
网络层会加上源 IP 和目标 IP,让数据包可以被路由器一跳一跳转发到目标网络。
这一层关心的是:
- 目标 IP 是什么
- 下一跳网关是谁
- 数据包应该走哪条路
- 是否需要经过 NAT
4. 网络接口层:在局域网内发送帧
最后,数据会被封装成数据帧,通过网卡、Wi-Fi 或其他网络介质发出去。
在局域网里,设备之间靠 MAC 地址交付数据。
如果你的电脑要把包发给路由器,需要知道路由器的 MAC 地址;如果不知道,就会通过 ARP 查询。
6. 封装与解封装
网络分层还有一个很重要的概念:封装。
发送数据时,每一层都会加上自己的头部信息:
1 | HTTP 数据 |
接收数据时,过程反过来:
1 | 以太网帧 |
这就是所谓的解封装。
可以把每一层理解成给数据套一层信封:
- 应用层信封说明业务语义。
- 传输层信封说明端口和可靠传输信息。
- 网络层信封说明源 IP 和目标 IP。
- 数据链路层信封说明局域网内的 MAC 地址。
数据到达目标后,再一层层拆开。
7. 前端为什么要理解分层
前端并不需要每天配置路由器、交换机,但理解分层能帮助你更快定位问题。
DNS 出问题
表现可能是:
- 域名无法解析
- 浏览器提示
DNS_PROBE_FINISHED_NXDOMAIN - 换 IP 可以访问,换域名不行
这通常是应用层的 DNS 解析问题。
TCP 连接出问题
表现可能是:
- 请求一直 pending
- 连接超时
- 端口不通
- 服务没监听目标端口
这通常要检查传输层和网络层。
HTTPS 出问题
表现可能是:
- 证书过期
- 证书域名不匹配
- 浏览器提示连接不安全
- mixed content 被拦截
这和 TLS、证书链、浏览器安全策略相关。
HTTP 出问题
表现可能是:
- 404
- 500
- 401
- 403
- CORS 报错
- 缓存没有按预期生效
这些更多是应用层协议和服务端处理逻辑的问题。
静态资源慢
可能涉及:
- DNS 慢
- TCP/TLS 建连慢
- TTFB 慢
- 下载慢
- CDN 未命中
- 资源过大
这时候看 Chrome DevTools Network 面板,就能把耗时拆到不同阶段。
8. 常见误区
误区一:OSI 七层是现实中严格存在的七个模块
OSI 更像理论参考模型。真实互联网主要基于 TCP/IP 协议栈,并不会严格按照七层拆成七个独立模块。
误区二:HTTP 一定只属于第七层,TLS 一定只属于第六层
分层模型是理解工具,不是法律条文。TLS 可以从表示层角度理解,也可以在 TCP/IP 模型里看成应用层相关能力。
重点不是纠结它“到底算第几层”,而是理解它解决什么问题:加密、身份认证、完整性校验。
误区三:只要会 HTTP 就不用学 TCP/IP
日常写业务时,HTTP 的确最常用。但一旦遇到超时、弱网、连接复用、HTTP/2、HTTP/3、CDN、跨地域访问等问题,不理解 TCP/IP 就很容易只看表象。
误区四:背模型比看链路重要
真正有用的是把模型放回真实链路里:
1 | URL -> DNS -> TCP -> TLS -> HTTP -> CDN / 网关 -> 服务端 -> 响应 |
只要能用模型解释这条链路,才算真的掌握。
9. 怎么记最轻松
可以先记这个版本:
1 | 应用层:定义业务语义,比如 HTTP、DNS。 |
再把 OSI 七层作为展开版:
1 | 应用层:应用协议 |
总结
OSI 七层模型和 TCP/IP 四层模型都在讲同一件事:
把复杂的网络通信拆成多个职责明确的层次。
区别在于:
- OSI 七层模型更适合理解概念边界。
- TCP/IP 四层模型更贴近真实互联网实现。
对前端来说,最重要的是建立这条主线:
1 | 应用层:HTTP / DNS / TLS |
学会这条线以后,再看 DNS、TCP、HTTPS、HTTP 缓存、跨域、CDN 和网络排查,都会更容易落到具体位置上。