【问题标题】:Can 2 nodes exchange data concurrently with only 1 tcp connection?2个节点可以只用1个tcp连接同时交换数据吗?
【发布时间】:2019-11-13 02:45:17
【问题描述】:

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

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

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

另外,A 和 B 是否可以同时发送increments 并通过同一个连接相互响应?这样如果 A 和 B 同时发送 increment 给对方,他们可以回复 1

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

【问题讨论】:

  • TCP 在两个对等点之间创建一个连接,并且任何一个都可以通过连接发送和接收数据,甚至可以同时进行,并且任何一个都可以随时终止连接。 TCP 没有服务器或客户端的概念,只有对等点。客户端/服务器概念是一个应用程序概念。你不会在 TCP RFC 中找到任何关于客户端或服务器的信息。

标签: networking tcp


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 2016-09-02
  • 2016-12-13
  • 2022-01-26
  • 2014-02-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多