tl;dr许多不同的设备可能会遇到多个 OSI 级别。无论哪个端点从第 7 层协议(如 HTTP)请求某些内容,都会在将其连接到网络之前使用所有 7 层。中间节点,如路由器和交换机可能只使用前 3 层,防火墙或 WAN 加速器会影响第 4 层,负载均衡器也可以做一些有趣的事情。
如果您对更详细的答案感兴趣,请看下面 - 我尝试(?)保持它相当简单,并使用真实世界的例子。
以供参考:
OSI 模型

来源:TCP/IP 指南
哪些层封装了数据取决于生成数据的内容。通常,解封装只会发生在与数据在网络中的当前位置相关的部分(在路由器上、在主机上等)
我的意思是,如果我是一个路由器,我不在乎这个数据包中是否有一个 HTTP 请求,如果我想要做的只是通过第 3 层路由流量 - 我只会剥离足够的标头来得到我需要的东西,做我的工作,然后继续下一个数据包。
我们每天都以某种方式使用互联网,所以考虑到 OSI 模型,这是典型的 HTTP 请求的样子。为简单起见,我们可以假设网络可用并且没有任何问题。
- 我在浏览器中输入“ http://google.com ”,然后按 Enter。
- [第 7 层]您的 PC/服务器将生成一个 HTTP GET 请求以发送到您指定的网络服务器,在这种情况下,我们谈论的是 google.com。所以如果你看上面,我们有那个 GET 请求,它被认为是“数据”。HTTP 是第 7 层协议,我们将添加该标头。因为在这一层没有其他事情可做,让我们将其传递到第 6 层。
- [第 6 层]我们可以将第 6 层视为应如何格式化数据,对于网站而言,这里实际上不会发生任何事情,但如果管理员/开发人员/工程师愿意,他们可以对此做一些事情。我们的 PC/Server 仍将在第 7 层 (HTTP) 标头之上添加标头,并将其发送到第 5 层。
- [第 5 层]此时,因为我们的 PC/服务器知道我们正在尝试联系网络服务器,所以我们需要以整个应用程序可以理解的格式发出这个请求,为此我们使用应用程序接口 (API) . 这是管理应用程序会话的内容,这样 Web 服务器就会知道数据属于哪个“流”。让我们添加第 5 层标头,并将其传递到第 4 层。
- [第 4 层]网络工程师关心所有数据,但这对我们来说开始变得非常具体。第 4 层是我们的传输层,这是我们决定数据如何到达那里的地方,而不是路径,而是如何 - 即 TCP 或 UDP。在这种情况下,我们的 PC/Server 需要与 Web 服务器建立连接。为简单起见,我将跳过一些内容,但这是典型的 TCP 3 次握手发生的地方。我们将当前拥有的内容封装在 TCP 标头中,其中包含源端口号和目标端口号、序列号和确认号以及 TCP 窗口信息等内容。
- [第 3 层]这是我们作为工程师真正关心的另一层,即网络层。这是数据包被发送到目的地的地方,我们需要 IP 地址才能到达网络上的位置。我们的 PC/Server 将添加其源 IP 地址和目标 IP 地址。数据包不仅会到达正确的目的地,而且当需要向我们发送任何类型的数据时,该端点将使用我们的源 IP 地址将其发回给我们。现在,这里需要注意的是,即使是 PC/Servers 也可以有多个接口,因此我们需要将数据发送到正确的位置。我们的 PC/服务器将像路由器一样有一个路由表,通常如果您是某种主机,您的数据包将被路由到您的默认网关,希望它知道如何将数据包发送到其目的地。让我们添加该 IP 标头并将其交给数据链路层。
- [第 2 层]我们的 PC/服务器的网络接口卡 (NIC),它自己不知道如何说出 IP,因此它使用媒体访问控制 (MAC) 地址来移动该数据。您的 PC/服务器将为它可以访问的每个 IP 提供 ARP 条目,因此在这种情况下,它将为您的默认网关提供一个条目。您的网关 IP 地址将与目标 MAC 地址相关联。因此,让我们添加目标 MAC 地址的 L2 标头,此标头还包含我们的 PC/服务器 NIC 的 MAC 地址作为源。现在我们拥有了将这些数据作为比特放到线上所需的一切。
- [第 1 层]正如您在问题中提到的,这是数据在网络上流动的地方,这是我们看到原始 1 和 0 的地方。现在没有第 1 层标头本身,如果您查看第 2 层的图表,您会看到。到目前为止,具有从 L7 到 L2 的所有标题的数据将被转换为那些 1 和 0。
- 现在我们在线路上有位,正在通往您的网关路由器的路上。到目前为止,您的 PC/服务器已经完成了封装绑定到 google.com 网络服务器的数据的 所有工作。

- [第 1 层]现在您的网关路由器接收 1 和 0。路由器上的 NIC(接口)获取该数据并基本上说“我不知道如何读取这个!” 并将其带到第 2 层,以便它可以读取数据。
- [第 2 层]网关路由器现在检查 L2 帧,它说“好吧,酷,你来自这个 MAC,整洁。我看到你的目标 MAC 设置为我的 MAC 地址,所以我可以继续工作。它会解封装 L2 标头,以便查看 IP 标头(第 3 层)。
- [第 3 层]您的网关路由器现在将查看源 IP 地址和目标 IP 地址。它说“好吧,你来自这个来源,很酷。你的目的地是这个 IP 地址。嗯,我不拥有这个 IP 地址,但我知道谁拥有。” 它将在其路由表中查找目标 IP 地址 (google.com) 的路由并使用该条目。
- 在所有这些之后,重复相同的一般过程。它将检查发送数据包所需的接口,使用该接口的 MAC 地址,将其转换为位并发送。下一个路由器将做同样的事情,依此类推。通常,这些数据包只有在到达其最终目的地时才会被剥离回第 7 层。正如我之前提到的,路由器只关心将数据包发送到目的地,所以它只关心第 3 层,所以除了它需要什么之外,它没有理由去查看其他任何东西。到那个信息。所以它会看到 L1/L2/L3 信息,但没有别的。
- 最终,数据有望到达目标 Web 服务器,此时数据的外层将一直剥离到 HTTP 标头,供 Web 服务器读取,并执行处理该请求所需的任何操作。
注意:公平地说,其他事情可能会干扰典型行为(防火墙、NAT/PAT、ACL 等)。但最好对所有封装和解封装的发生位置有一个非常扎实的了解以了解这些如何影响网络和流量。