TCP能否在同一个TCP连接内同时传输多个应用层报文?
Can TCP transmit multiple application layer messages concurrently withing the same TCP connection?
我正在阅读 TCP 如何将应用程序消息分解为更小的部分(TCP 段)并使用序列号和确认号进行交互的文章。文章中有一个示例如何在 one TCP 连接中传输 one 应用层消息。所以,我有一个问题。 TCP 可以使用相同 TCP 连接传输多个 应用层消息并发。
换句话说:
- 正在客户端和服务器之间创建 TCP 连接。
- 客户端将 message1 从应用层分解为 TCP 段并开始发送它们
- 客户端将 message2 从应用层分解为 TCP 段并开始发送它们
- 客户端将message3从应用层分解为TCP段并开始发送
步骤 2、3、4 将与同一个 TCP 连接并行进行。
- 服务器从 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)。
我正在阅读 TCP 如何将应用程序消息分解为更小的部分(TCP 段)并使用序列号和确认号进行交互的文章。文章中有一个示例如何在 one TCP 连接中传输 one 应用层消息。所以,我有一个问题。 TCP 可以使用相同 TCP 连接传输多个 应用层消息并发。
换句话说:
- 正在客户端和服务器之间创建 TCP 连接。
- 客户端将 message1 从应用层分解为 TCP 段并开始发送它们
- 客户端将 message2 从应用层分解为 TCP 段并开始发送它们
- 客户端将message3从应用层分解为TCP段并开始发送
步骤 2、3、4 将与同一个 TCP 连接并行进行。
- 服务器从 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)。