用户生成的数据驻留在 OSI 的哪个层?

网络工程 奥西
2021-07-31 22:07:45

我对使用哪个 OSI 层来存储用户生成的数据感到有些困惑。

据我了解封装的过程,在传递用户/程序打算发送的数据时,较高层(从第 7 层 - 应用层开始)与它们的相邻层进行交互。

那么,数据会在哪些 OSI 层稳定下来?

TCP有报头和数据结构,IP有报头和数据结构,以太网有报头和数据结构,所以我不确定IP网络上数据传输过程中用户生成的数据存储在哪个OSI层。


我问的原因之一是关于假设情况的不确定性 - 假设我们有两个主机 A 和 B(它们都在同一个 vlan 10 上)被两个 L2 交换机隔开:

A--------SW1-------SW2--------B

在此拓扑中,由于两台主机都在 VLAN 10 中,因此我们不需要 L3 设备来允许主机之间的通信。但是仅 L2 通信有任何实际用途吗?我能否将主机 A 设置为 Web 服务器,以便主机 B 可以仅使用 MAC 地址访问 Web 通信?用户数据是否会从应用层直接传递到以太网帧,绕过 TCP 和 IP 层?

谢谢

2个回答

数据不是存储在网络中,而是传输。

用户数据由应用层协议 (L7) - HTTP、FTP、SMTP 等作为有效负载传输。

例如,如果您编写一些文本并通过电子邮件发送,则可以将其封装在 RFC2822 结构 (L6) 中,通过 SMTP (L7) 传输,封装在 TCP (L4)、IPv4 (L3)、以太网帧 (L2) 中,以太网PHY(L1)。每个协议层都需要下一个协议层,没有捷径可走。

网络分层负责在同一台主机上启用通信,通过直接电缆链路、之间的交换机、单个路由器或世界各地的许多路由器进行通信。

当端节点不共享公共 L2 网络(跨交换机)时,您至少需要一个路由器。请注意,在任何情况下都在主机内使用完整堆栈。使用跨简单交换机(公共 L2 网络)的链接,中间不需要 L3 设备(路由器)。

在任何情况下,应用层协议都不会决定它直接与 L2 接口,因为它不需要任何其他东西。位于 L2 之上的应用层协议确实存在,但它们是这样设计的。

各种场景的差异在于数据实体的实际传输方式。

  • 同一主机:封装结束于 L3、L4 甚至更高。主机堆栈在应用程序之间传递应用程序层流,仅此而已。
  • 直接电缆链路:封装是L7 -> L4 -> L3 -> L2 -> L1,线路编码数据传输,目的主机反向过程L1 -> L2 -> L3 -> L4 -> L7。
  • 相同的交换机/公共 L2 网络:和以前一样,但线路编码数据被传输到 L1 被删除的交换机,从 L2 帧中提取目标 MAC,在交换机的 MAC 数据库中查找相应的端口,然后发送帧出那个端口,新的 L1 编码。En/decapsulation 是 L7 -> L4 -> L3 -> L2 -> L1(到交换机)-> L2 -> L1(到主机)-> L2 -> L3 -> L4 -> L7。
  • 中间有一个路由器,每个主机和路由器之间有一个交换机,路由器从 L3 数据包中删除 L2 帧,决定转发到哪里(基于其路由表),再次封装在 L2 帧中,依此类推。en/decapsulation 看起来像 L7 -> L4 -> L3 -> L2 -> L1(到交换机)-> L2 -> L1(到路由器)-> L2 -> L3 -> L2 -> L1(到其他交换机) ) -> L2 -> L1(到主机)-> L2 -> L3 -> L4 -> L7。

OSI 七层模型是一种抽象,其目的是澄清概念并使比较不同的网络方法更容易:例如 Internet 协议和 X.25 之间的差异。它不是用于实际实现网络的标准。

如果您正在研究互联网协议,如果您用它自己的术语来理解它,就会容易得多。

您的示例非常常见:台式计算机通常如何与打印机通信,打印机通常与其客户端计算机位于同一 LAN 中。假设有 TCP 连接,桌面会打开一个 TCP 连接,通常是到打印机上的端口 9100,然后开始发送 PostScript 或其他打印机特定的数据。其他非常常见的打印机协议使用 UDP over IP over Ethernet。到 LAN 上的 Web 服务器的 HTTP 或到本地服务器的 SSH 使用完全相同的机制。

  • TCP 连接由段组成,就像往常一样
  • 段在 IP 数据包中发送,就像往常一样
  • IP 数据包作为以太网帧发送,就像往常一样

它实际上是互联网协议的核心、绝妙的想法之一:我们将在本地以太网上使用相同的更高级别 (HTTP/IP) 协议,就像我们穿越大洋一样。以前,计算机会非常频繁地通过以太网使用基于 LAN 的协议,并使用其他基于调制解调器的协议进行长途传输。在那个时期,如果你想让你的程序与遥远的主机通信,你必须重写它。在互联网方式中,通信进程不知道也不关心另一端是否在同一台计算机、同一房间或同一星球上。

直接回答这个问题:是的,即使在本地通信时,我们也会使用所有层。(唯一的例外:如果我们在单个主机进行通信,IP 数据包将在整个操作系统中传输,而不会遇到第 2 层:包含来自发送进程的 IP 数据包的内存被映射或复制到接收进程的内存中.)

是否可以将 HTTP 直接放入以太网帧中?当然,您可以轻松编写服务器和客户端来执行此操作。但这是一个可怕的想法。它只能跨局域网工作。您必须解决以下问题:a) 如果框架损坏,您会怎么做?b) 您如何最大化带宽并使用全双工通信?c) 你如何在带有令牌环而不是以太网的新站点上使用它?d) 你如何使用它从以太网站点令牌环站点?这些问题的优秀解决方案已经可用:a) TCP ack 机制,b) TCP 滑动窗口,c) IP 打包,d) IP 转发。

(为了解释简单,我省略了非以太网情况、安全阻塞、权限、隧道和其他现实世界的复杂性。)