图解计算机网络的七层结构
往基础再复习一层,聊聊 OSI 七层模型。从应用层到物理层,每一层管啥、为啥要分层,我用图把这摞“千层饼”摊开讲,再拿寄快递类比一下,帮你把这个背了就忘的经典模型真正记住。
最近顺着 TCP、UDP 往下聊,越聊越觉得得往更底下的地基上翻翻。那块地基,就是 OSI 七层模型。
这东西几乎是网络课的第一节,背过的人不少,但真能说清每层干啥、为啥要这么分的,不多。我自己也是背了忘、忘了背好几轮。
这篇不求你背下来,用图把它摊开,讲清楚道理,能记住就是赚到。
为什么要分层
先别急着记七层是哪七层,先想想为啥要分层。
网络通信这事儿特别复杂:数据怎么变成电信号、怎么找到对方机器、怎么保证不丢、怎么让应用看懂……一堆问题搅在一起。
要是全糊在一坨代码里,那没法维护,改一处牵一发动全身。
于是老祖宗们想了个招:分层。每一层只管自己那摊事,层与层之间约定好接口,各干各的互不干扰。
打个比方,寄快递:
- 你只管把东西装箱、写地址(你不用管卡车怎么开)
- 快递员只管取件送件(他不用管你箱子里装了啥)
- 运输队只管把车从 A 城开到 B 城(他不用管这车货是谁的)
每个环节只对接上下游,各司其职。网络分层是一个道理,这也是为啥它叫“分层设计”——软件架构里那套分层思想,根子上是相通的。
七层长什么样
话不多说,先把这摞“千层饼”摆出来。习惯从上往下看:
第7层 应用层 Application 直接跟软件打交道
第6层 表示层 Presentation 数据格式、加密、压缩
第5层 会话层 Session 建立/管理会话
--------------------------------------------
第4层 传输层 Transport TCP/UDP 在这层
第3层 网络层 Network IP 寻址、路由
第2层 数据链路层 Data Link 相邻设备间传帧
第1层 物理层 Physical 比特流、网线电信号
上面三层(应用、表示、会话)更靠近软件和用户,下面四层更靠近数据传输本身。
中间那条线是我随手划的,帮你把“偏应用”和“偏传输”大致分开,看着不那么懵。
下面从底往上,一层层过。从底下讲更顺,因为数据是从物理线路一路往上交给应用的。
底下四层管传输
物理层
最底下,最“硬”的一层。
它管的是实打实的信号:网线里的电信号、光纤里的光信号、无线电波。说白了就是把 0 和 1 变成物理世界里能传的东西。
你插网线、连 WiFi,打交道的就是这一层。它不懂数据是啥意思,只负责把比特一个个送出去。
数据链路层
往上一层,管相邻两个设备之间怎么传。
它把比特流打包成一个个“帧”,还负责在同一个局域网里,靠 MAC 地址找到隔壁那台具体的机器。
可以理解成:物理层负责“能传”,数据链路层负责“传给旁边正确的那台”。
网络层
这层管跨网络找路,主角是 IP。
数据要从你家电脑发到千里之外的服务器,中间隔着无数台路由器。网络层干的就是靠 IP 地址确定“对方在哪”,再规划出一条路把包转过去。
寄快递里,这层相当于根据收件地址决定走哪条运输线路。
传输层
这层管两个应用之间的数据怎么传,主角就是我们之前聊过的 TCP 和 UDP。
- 要可靠、按序、丢了重传 → TCP
- 要快、能忍丢包 → UDP
网络层负责把包送到对方机器,传输层负责把数据准确交给机器上具体的那个程序(靠端口号区分)。
上面三层管应用
会话层
管会话的建立和维护。
就是负责“开一个对话、保持着、聊完再关掉”这么个过程。哪个数据属于哪次对话,由它照看。
实际开发里这层存在感很低,多数时候被上面的应用层一起包办了。
表示层
管数据长啥样。
加密解密、压缩解压、编码格式转换,都是它的活儿。它保证一端发出的数据,另一端能按正确的格式解读出来,不至于变成乱码。
应用层
最顶上,离我们最近的一层,直接对接软件。
你熟悉的 HTTP、DNS、FTP 这些协议都在这层。浏览器发个网页请求、程序调个接口,用的就是应用层协议。
平时写业务代码,打交道最多的其实就是这一层。
数据是怎么穿过七层的
光记每层干啥还不够,得看看数据实际怎么走的。
发送的时候,数据从最上层往下走,每经过一层就被套一层“信封”(加上该层的头部信息):
发送方(从上往下,层层打包) 接收方(从下往上,层层拆开)
应用层 [数据] [数据] 应用层
| ^
传输层 [TCP头|数据] [TCP头|数据] 传输层
| ^
网络层 [IP头|TCP头|数据] [IP头|TCP头|数据] 网络层
| ^
链路层[帧头|IP头|TCP头|数据] [帧头|IP头|TCP头|数据]链路层
| ^
物理层 ==========> 电信号在网线里跑 ==========> 物理层
这个过程有意思:
- 发送方:数据从应用层出发,每往下一层,就被加上一个头部,像套娃一样一层层包起来,最后变成电信号发出去
- 接收方:反过来,从物理层收到信号,每往上一层就拆掉一个头部,一层层剥开,最后把最里面的原始数据交给应用
这个“打包—拆包”的过程有个专门的词,叫封装和解封装。
关键在于:每一层只关心自己那个头部。传输层不用管网络层的 IP 头是啥,网络层也不用管里面的数据是啥内容。各拆各的,互不打扰。
分层的妙处到这就全体现出来了——每层只干自己的活,拼起来就完成了一次完整的通信。
顺带提一句 TCP/IP 四层
你可能还听过“TCP/IP 四层模型”,会有点混。
简单说:OSI 七层是理论上的参考模型,分得细,用来讲原理最清楚;实际工程里跑的是 TCP/IP 模型,把七层合并简化成了四层(把应用、表示、会话揉成一个应用层)。
它俩不冲突,一个偏教学、一个偏落地。
搞懂了七层,四层自然就懂了。这里点一句,不展开了。
小结
OSI 七层这块地基,抓住两条主线就不容易忘。
- 分层是为了各管一摊:复杂问题拆开,每层只对接上下游,互不干扰
- 数据穿层靠封装:往下发层层套头部,往上收层层拆头部
七层从下往上:物理、链路、网络、传输、会话、表示、应用。底下四层管把数据传到位,上面三层管让应用用得上。
死记硬背确实容易忘,但记住“分层各司其职 + 数据套娃式封装”这两个道理,再看那张图,七层是啥、干啥,基本就串起来了。那就对着图多瞄两眼吧。
