TCP能否在同一个TCP连接内同时传输多个应用层报文?

Can TCP transmit multiple application layer messages concurrently withing the same TCP connection?

我正在阅读 TCP 如何将应用程序消息分解为更小的部分(TCP 段)并使用序列号和确认号进行交互的文章。文章中有一个示例如何在 one TCP 连接中传输 one 应用层消息。所以,我有一个问题。 TCP 可以使用相同 TCP 连接传输多个 应用层消息并发

换句话说:

  1. 正在客户端和服务器之间创建 TCP 连接。
  2. 客户端将 message1 从应用层分解为 TCP 段并开始发送它们
  3. 客户端将 message2 从应用层分解为 TCP 段并开始发送它们
  4. 客户端将message3从应用层分解为TCP段并开始发送

步骤 2、3、4 将与同一个 TCP 连接并行进行。

  1. 服务器从 message1、message2、message3 接收段并并行发送响应。

这在 TCP 中有可能吗?或者我们可以在同一个 TCP 连接中仅随后 传输消息。我对TCP协议本身很感兴趣,不管应用层用什么tricks,比如多路复用。

I’m reading the article how TCP breaks application message into smaller parts

TCP 不会将应用程序消息分成更小的部分,因为在 TCP 级别没有“应用程序消息”的概念。从 TCP 的角度来看,只有一个没有内在语义的字节流。可以在字节流上进行任意拆分和合并,以实现最佳传输。重要的是字节按顺序可靠地交付给对等方,没有重复。

任何依赖 TCP 以某种方式维护消息边界的应用程序都会被破坏 - Whosebug 充满了此类示例以及由此引起的问题。

Can TCP transmit multiple application layer messages concurrently withing the same TCP connection.

实现这种行为取决于应用程序协议,而不是 TCP。例如,HTTP/1 只有一条消息接一条消息的概念——它明确了协议定义的边界,消息在字节流中开始和结束。在 HTTP/2 中,消息可以重叠,因为 HTTP/2 在应用程序协议中实现了某种多路复用。但同样 - 所有这些都是在应用层定义和实现的,而不是在传输层 (TCP)。