首页 > 解决方案 > 2个节点可以只用1个tcp连接同时交换数据吗?

问题描述

假设有 2 个节点 - A 和 B。他们每个人都维护一个状态,这是他们记忆中的一个数字。如果 A 以某种方式向 B 发送 a increment,则 B 将返回1。A 再次发送increment,B 将返回2。等等。B 也一样。A 和 B 都可以自动更新其状态。

对于发送increment,假设 B 启动一个 TCP 服务器来接受连接,A 是与 B 建立连接的客户端。A 可以increment通过已建立的 TCP 连接向 B 发送。

现在,问题是:B 是否也可以increment通过同一个连接向 A 发送数据,而 A 是否可以通过该连接返回自己的状态?

而且,A 和 B 可以increment通过同一个连接同时发送和响应吗?因此,如果 A 和 Bincrement同时相互发送,它们可以用 回复1

如果 A 和 B 建立 2 个连接,则一个简单的问题 - A 作为客户端发送increment到 B,另一个作为服务器increment从 B 响应。由于有 2 个连接,A 和 B 可以发送“增量” ”同时。但是我想知道A和B是否可以仅通过一个TCP连接交换数据?是否有任何协议支持这一点?

标签: networkingtcp

解决方案


是的,这是可能的。A 和 B 都可以通过同一连接交换数据。但是,其中一个将充当服务器,另一个充当客户端。事实上,即使 A 试图同时连接到 B 和 B 到 A TCP 也被设计为只有一个连接。这种情况称为同时开盘。请记住,客户端服务器的经典概念本身并不存在于 TCP 规范中(它们只是对等点),尽管将执行主动打开的对等点视为客户端和执行主动打开的对等点是直观且有帮助的。作为服务器执行被动打开。

根据数据交换,两者可以increment通过同一连接相互发送消息。查看RFC 675RFC 793(TCP 参考)以获得更详细的深入信息。


推荐阅读