OSI 七层模型:每一层到底在解决什么问题

OSI 七层模型是计算机网络课的第一道坎。教材上一句话带过:「国际标准化组织提出的网络体系结构参考模型」。然后就让你背七层的名字和顺序。

但背下来不等于理解。真正的问题是:这七层各自解决什么问题,为什么非得分成七层?这篇就按”每一层在解决什么麻烦”来讲,而不是按列表背。

先看全貌

层 名字 一句话职责 典型协议
7 应用层 直接给用户程序用的接口 HTTP、FTP、DNS、SMTP
6 表示层 数据的编码、压缩、加密 TLS/SSL、JPEG、UTF-8
5 会话层 建立、维持、终止会话 RPC、NetBIOS
4 传输层 端到端的可靠或高效传输 TCP、UDP
3 网络层 跨网络的寻址和路由 IP、ICMP、OSPF
2 数据链路层 同一链路上的成帧与差错检测 以太网、PPP、VLAN
1 物理层 把比特变成电信号发出去 RJ45、光纤、802.11 物理部分

记住一个直觉:越往下越靠近硬件,越往上越靠近人。第 1 层关心电压和针脚,第 7 层关心你点了哪个按钮。

第 1 层:物理层

这一层只干一件事:把 0 和 1 变成能在介质上传输的信号。

它不管信号的含义,只关心形状——电压高低、光的明暗、无线电的频率。网线为什么是双绞的?为了抵消干扰。网线为什么最多传 100 米?因为再远信号衰减得认不出来了。这些问题都在第 1 层。

很多人觉得物理层没什么可学的,但它决定了整条链路的上限。你的宽带是 1000M,但网线是超五类老化线,实际只能跑 100M——这就是物理层的限制,上层再怎么优化也没用。

第 2 层:数据链路层

物理层把比特送出去了,但接收方怎么知道一串比特从哪里开始、到哪里结束?怎么知道传错了没有?

数据链路层的答案是成帧:在数据前后加上首部和尾部,划出边界。帧里带两个关键地址——源 MAC 和目的 MAC。

MAC 地址是网卡出厂时烧死的 48 位地址,理论上全球唯一。它只在本链路内有效——一旦跨路由器,MAC 地址就换了,因为路由器会剥掉旧帧头、重新封装新帧头。

这一层还有差错检测。以太网帧尾有个 FCS 字段(CRC 校验),收到后算一遍,对不上就丢掉。注意是”丢掉”而不是”重传”——重传是第 4 层 TCP 的事。

交换机是这一层的设备,它靠 MAC 地址表转发帧,不看 IP。

第 3 层:网络层

链路层只能在同一个链路内通信。可你要访问的服务器在千里之外,中间隔着十几个路由器,MAC 地址根本指不过去。

网络层引入了 IP 地址和路由。IP 地址是逻辑地址,可以跨越网络;路由器根据路由表决定下一跳往哪走。每一跳都重新封装链路层帧,但IP 头从头到尾不变。

这一层是”尽力而为”的——它不保证送达,不保证顺序,也不保证不重复。丢了包它只会发一个 ICMP 告诉你”目标不可达”之类。可靠性被推给了第 4 层。

这也是为什么 IP 头里有个 TTL(生存时间):每过一个路由器减 1,减到 0 就丢弃并回 ICMP。防的是路由表配错导致的无限循环。

路由器是这一层的设备。它是”分界线”——跨路由器时,MAC 变,IP 不变。

第 4 层:传输层

网络层只负责把包送到主机,但一台主机上跑着几十个程序,包该交给哪个?

传输层用端口号解决这个问题。IP 定位到机器,端口定位到程序。这也是为什么你会看到 192.168.1.10:52341 → 8.146.230.105:443 这样的四元组。

这一层还有个更根本的分岔:要不要为可靠性付出代价。

TCP 选择了可靠。三次握手建连接,每个包都要确认,丢了重传,还要排序、去重、流量控制、拥塞控制。代价是慢、开销大。UDP 选择了快。发出去就不管了,不建连接、不确认、不重传。代价是可能丢、可能乱序。

选哪个取决于场景:

场景 选谁 为什么
网页、文件下载 TCP 少一个字节都是错的,不能丢
视频会议、游戏 UDP 迟到的包没意义,宁可丢也不要卡
DNS 查询 UDP 一问一答,重发一次比建连接便宜
直播推流 UDP 实时性优先

这里有个容易被忽略的点:TCP 的”可靠”是端到端的,它不知道中间任何一跳发生了什么。路由器丢包还是链路错误,对 TCP 来说都一样——重传。所以排查网络问题时,看 TCP 重传率往往看不出根因。

第 5 层:会话层

这一层最虚,实际也很少单独实现。它管的是会话的建立、维持和终止——什么时候开始通话、断了怎么恢复、结束了怎么礼貌收场。

HTTP/1.1 的 keep-alive、数据库连接池、RPC 的长连接,本质上都在解决会话层的问题,只是这些能力被塞进了第 4 层和第 7 层的实现里。这也是 OSI 被批评”理想化”的第一个地方:它把一个跟传输层高度耦合的功能拆了出来,现实里没人这么拆。

第 6 层:表示层

这一层让不同系统之间”说同一种话”——编码(UTF-8、GBK)、压缩(gzip、br)、加密(TLS)。

经典的表示层问题是中文乱码:服务器用 GBK 发,浏览器按 UTF-8 解,结果就是一堆问号。这不是传输错了,是表示层没对齐。

现在的实践里,TLS 是单独的一层(介于传输层和应用层之间),压缩由 HTTP 头的 Content-Encoding 协商,编码在 HTML 头的 charset 里声明。又一处 OSI 分了层但现实没照做的地方。

第 7 层:应用层

离用户最近的一层,也是唯一你写代码时真的会碰的一层。

HTTP、DNS、SMTP、FTP、SSH 都在这层。它们各自定义自己的报文格式和交互流程。注意:应用层不是”应用程序”——浏览器本身不是应用层,浏览器发出的 HTTP 请求才是。

很多人把”应用层”理解成”写业务代码”,其实业务代码在网络模型里根本没有位置,它只是应用层协议的使用者。

封装与解封装

这七层不是七个并列的盒子,而是一个套娃。

发送时,数据从第 7 层往下走,每经过一层就加一个头部——应用层数据加上 TCP 头变成段,加上 IP 头变成包,加上以太网头变成帧,最后变成物理层的比特流。

应用层数据
  ↓ 加 TCP 头
[TCP头][数据]
  ↓ 加 IP 头
[IP头][TCP头][数据]
  ↓ 加以太网头
[以太网头][IP头][TCP头][数据][FCS]
  ↓
010101011000...

接收方反过来,一层层剥掉头部,哪层的头由哪层处理。这个机制的意义在于解耦:换网卡不用改 HTTP 代码,换 HTTP 版本不用换路由器。

一个具体的好处:TCP 头里不关心你传的是网页还是文件,它只认字节流。所以同一个 TCP 实现能同时服务 HTTP、SSH、MySQL。这就是分层的价值。

打开一个网页,七层各做了什么

你在浏览器输入 mcstudio.top,按回车。按层次往下走一遍:

层 发生了什么
应用层 浏览器构造 HTTP 请求:GET / HTTP/1.1,带 Host、User-Agent 等头
表示层 协商 TLS:版本、加密套件;决定用 gzip 还是 br 压缩
会话层 TLS 握手建立安全会话,协商出会话密钥
传输层 三次握手建 TCP 连接,分配源端口(比如 52341),目标端口 443
网络层 域名先经 DNS 解析成 IP,然后按路由表决定下一跳,TTL 设为 64
链路层 查 ARP 拿到网关的 MAC,封装成以太网帧
物理层 网卡把帧变成电信号/光信号发出去

往回走的时候顺序完全相反,每一层剥掉自己的头部,把剩下的交给上一层。这就是为什么抓包时你看到的每一层都能单独分析。

为什么现实里用 TCP/IP 四层

OSI 是”应该怎么做”的参考模型,TCP/IP 是”实际怎么跑”的实现模型。四层划分是:

TCP/IP 四层 对应 OSI
应用层 应用层 + 表示层 + 会话层(三层合一)
传输层 传输层
网络层 网络层
网络接口层 数据链路层 + 物理层(两层合一)

为什么合并?因为会话层和表示层几乎没有独立实现,而链路层和物理层在网卡驱动里本来就不分家。OSI 的分法在理论上清晰,工程上却多了两刀不落地的切口。

但 OSI 仍然值得学,原因有两个:一是它是最好的”问题分层”教学,帮你建立”每一层在解决什么”的直觉;二是排障时按层定位极其有效——先看物理层通不通(能不能 ping 网关),再看网络层(能不能 ping 外网),再看传输层(端口通不通),最后才是应用层(HTTP 返回什么)。

记忆口诀

从下往上:物数网传会表应(一二三四五六七)。

英文:Please Do Not Throw Sausage Pizza Away(Physical、Data Link、Network、Transport、Session、Presentation、Application)。

口诀只是帮你应付考试。真正要记住的是每层”在解决什么问题”——这个记牢了,名字自然会想起来。

三个常见误解

误解一:七层是真的七个独立模块。实际上很多层被合并实现,比如 TLS 横跨会话层和表示层,HTTP/2 甚至做了多路复用(会话层的事)。

误解二:数据一定从第 7 层走到第 1 层。交换机和路由器只处理到第 2、3 层,根本不知道上面是什么协议。所以”分层”是抽象的,不是每次都要全走一遍。

误解三:分层是为了分类。分层的本质是隔离变化——换网卡不影响 HTTP,换 HTTP 版本不影响路由器。这是软件工程里最基本的解耦思想,网络只是它的一个应用场景。

小结

OSI 七层的价值不在背,在于给你一个定位问题的坐标系。网络出问题时,人最容易犯的错是跳到应用层瞎猜——”是不是代码写错了”。按层往下查,往往五分钟就找到根因。

如果你在学这门课,可以拿本站的 子网计算器 和 端口速查表 配合着用,把第 3 层和第 4 层的抽象概念变成能算、能查的具体数字。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容