想把枯燥的网络模型讲得有趣又有料?不妨试试这个生活化故事——用微信发一条“Hello”消息,全程拆解 OSI 七层模型。从指尖触碰屏幕的那一秒,到对方看到消息的那一刻,数据究竟经历了怎样的奇妙旅程?这篇博客就为你层层剥开,既看清每一层的职责,又理解它们如何默契协作。


微信发一条“Hello”,竟走完了 OSI 七层模型的完整流程

网络分层太抽象?这次我们全程跟拍一条微信消息的封装与解封之旅,从应用层直通物理层,再用反向过程看接收端如何逐层还原——读完你也能对着路由器讲段子。


你是否也曾盯着 OSI 七层模型的图示,满脑子“物理层、数据链路层、网络层”却总觉得它们离生活很远?
今天我们就用一个真实的场景把它们拉下神坛:用户 A 用手机给用户 B 发了一条微信文字“Hello”,点击发送的瞬间,数据从上到下穿越七层,抵达服务器;再从服务器反向穿越七层,最终浮现在 B 的手机屏幕上。
整个过程既有每一层的独立工作记录,又能看到它们如何像接力赛一样传递数据。坐稳,我们出发了。


1. 应用层(Application Layer)—— 微信对话框里诞生的“Hello”

这一层离你最近,是用户直接打交道的界面。

你打开微信,点进好友 B 的聊天窗口,敲下“Hello”,然后潇洒一点“发送”。
微信客户端立刻把这条文字包装成一个标准化的即时通信协议报文——可能是 JSON 格式,也可能采用 Protobuf 这种更高效的二进制协议。里面装着:

{
  "from": "wxid_A",
  "to": "wxid_B",
  "type": "text",
  "content": "Hello",
  "msgId": 123456,
  "timestamp": 1712736000
}

它包含了发件人、收件人、消息类型、内容、唯一 ID 和时间戳。这就是应用层创造出来的原始数据。随后,微信程序调用操作系统的 Socket API,准备将这份数据交给下一层。
此时数据就像一个写好了地址和内容的信封,还敞着口,等待后续的密封和投递。


2. 表示层(Presentation Layer)—— 给信封加密封条与统一字体

这一层负责“翻译”和“包装”,让对端能看懂、且只能让该看的人看懂。

微信消息绝不是明文满世界跑的。表示层会接过上一步的报文,干两件大事:

  • 加密:利用双方早已协商好的会话密钥(例如 AES 算法),把整份报文加密成一串人眼无法识别的二进制密文。这一步是端到端加密的核心——就算服务器拿到数据,也只能转发而无法偷看内容。
  • 编码统一:文字“Hello”本身是 UTF-8 编码,表示层确保字符集在收发两端一致,不会出现乱码。

经过表示层的处理,原本清晰的 JSON 结构变成了一堆看似杂乱无章的字节流。信封被上了锁,只有持有正确密钥的收信人才能打开。


3. 会话层(Session Layer)—— 维护与微信服务器的“专属热线”

这一层不关心消息内容,只负责保持通话线路畅通。

微信为了即时性,会在你的手机与腾讯服务器之间维持一条TCP 长连接(或 WebSocket 连接)。会话层的使命就是:

  • 建立这条连接(登录时即完成)
  • 定时发送心跳包维持连接不中断
  • 若网络切换或断线,自动尝试重连并恢复会话

每一条你发送的消息都会被绑定到一个特定的会话标识上,服务器借此知道这条消息来自登录用户 A 的哪个活跃会话。
会话层就像电信公司给你和服务器之间拉了一条看不见的专线,你的所有聊天数据都走这条专线传输。


4. 传输层(Transport Layer)—— 把大包裹切成小包裹,并保证一个不落

这一层正式跨入操作系统内核的职责范围,提供端到端的可靠运输。

微信长连接底层用的是 TCP 协议(目的端口通常为 443、80 或 8080)。传输层接过表示层加工好的密文数据后,发现数据块可能比较大,于是将其切分成多个适合网络传输的小块,每个小块叫做一个 TCP 报文段

每个报文段都会被贴上关键“快递单”信息:

  • 源端口:你手机的随机端口(比如 54321)
  • 目的端口:微信服务器的固定端口(比如 443)
  • 序列号(SEQ):标记小块的顺序,防止到达时错乱
  • 确认号(ACK):用于接收方确认已收到哪些数据,没收到就自动重传

这样即使某个小块在路上丢失,TCP 也会要求重发,确保最后重组时一个字节都不少
传输层就像把一本厚书拆成若干薄册子,每册编上页码,收件人收到后按页码装订复原。


5. 网络层(Network Layer)—— 贴上全球可路由的 IP 地址

这一层解决了“世界这么大,怎么找到对方主机”的问题。

传输层的 TCP 段被交给网络层,网络层为它套上一个 IP 头部,里面记录着至关重要的全球定位信息:

  • 源 IP 地址:你手机被运营商分配的 IP(比如 223.104.10.2)
  • 目的 IP 地址:微信服务器的公网 IP(经过 DNS 解析 szminorshort.weixin.qq.com 获得,比如 183.60.15.100)

路由器和三层交换机就是靠目的 IP 来决定下一站往哪走的。数据离开手机后,经过家庭 Wi-Fi 路由器 → 运营商城域网 → 骨干网 → 腾讯数据中心,每一跳路由都查看 IP 头部并做出转发决策。
此时的完整数据包被称为 IP 数据报,相当于快递单上有了准确的收件人地址和寄件人地址。


6. 数据链路层(Data Link Layer)—— 搞定你家路由器这一“跳”

这一层负责相邻两个设备之间的点对点传输,并处理物理地址和错误检测。

从你手机到家里的 Wi-Fi 路由器,就是典型的一跳。网络层交下来的 IP 数据报被封装进数据链路层帧。如果你连着 Wi-Fi,帧就是 802.11 格式;如果用 4G/5G,则是 LTE 的数据链路层格式。

帧头部里有两个至关重要的 MAC 地址(物理地址):

  • 源 MAC 地址:你手机 Wi-Fi 芯片的硬件地址
  • 目的 MAC 地址:家里无线路由器 WAN 口或 LAN 口的 MAC 地址

此外,帧尾部还附带了 FCS 校验码,用来检测数据在传输过程中有没有发生比特错误。如果校验失败,链路层会直接丢弃该帧并请求重传。
这一层相当于快递小哥骑着电动车从你家小区门口把包裹送到最近的集散中心,只关心这一小段路的准确交接。


7. 物理层(Physical Layer)—— 把 0 和 1 变成光、电、电磁波

这是最底层、也是最硬核的一层,直接与物理介质打交道。

数据链路层的帧是一串 0/1 比特流,物理层的任务就是把它们转换成可以在介质中传播的信号

  • Wi-Fi 场景:手机的 Wi-Fi 天线将数字信号调制成 2.4 GHz 或 5 GHz 的电磁波,通过空气辐射到路由器天线。
  • 4G/5G 场景:基带芯片将比特流调制成特定频段的无线电波,发送到基站。
  • 光纤传输部分:路由器把电信号转成光脉冲,沿着光纤飞驰到运营商网络。

在接收端,过程完全相反:路由器或基站的光电转换器把光/电/电磁波重新变回 0/1 比特流,然后交给数据链路层。
物理层只管信号能否准确发出和接收,完全不管信号里承载的是微信消息还是短视频。


反向之旅:用户 B 收到“Hello”的解封过程

消息经过上述七层封装后抵达微信服务器,服务器会立刻查找用户 B 的在线状态,然后将数据重新向下封装(服务器侧再从应用层→物理层发出),经过互联网送至 B 的手机。

B 的手机收到信号后,就开始了一次与刚才完全对称的自下而上解封装之旅

  1. 物理层:天线接收到电磁波,解调还原成比特流。
  2. 数据链路层:校验 Wi-Fi 帧完整无误,拆除帧头和帧尾,取出 IP 数据报。
  3. 网络层:查看 IP 头部,确认目的 IP 正是自己,拆掉 IP 头,拿出 TCP 段。
  4. 传输层:根据 TCP 序列号将所有报文段按序重组,还原出完整的密文数据流。
  5. 会话层:识别出该数据属于微信的长连接会话,交给对应的应用程序。
  6. 表示层:使用事先协商的密钥对密文进行 AES 解密,得到原始的 JSON 明文。
  7. 应用层:微信 App 解析 JSON,发现是一条文字消息,内容为“Hello”,于是在聊天界面上显示出来,同时触发系统通知栏弹窗。

至此,从 A 手机应用层出发的“Hello”,完整穿越网络,最终在 B 手机应用层重新显现。


一张图看懂全程

OSI


写在最后

通过一条简简单单的微信消息,我们亲眼见证了 OSI 七层模型如何从上到下层层加头(封装),再从下到上层层去头(解封装)。每一层都在自己的职责范围内默默工作,既屏蔽了下层的复杂性,又为上层提供了可靠的服务。

下次再看到网络分层图示时,不妨回忆一下这次“Hello”的冒险旅程——你会发现,那些枯燥的术语背后,其实是一场精密而优雅的数据接力赛。


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐