打孔是否需要一个UDP集合服务器或者它可以是一个TCP?

我试图让我的头绕着这个问题…

我想连接两个用户…

这些用户已经连接到一个TCP服务器,它知道公共IP和连接TCP端口。 我希望使用现有的连接到服务器,以便在我的用户之间创build一个p2p连接,因为要求他们连接到另一个UDP服务器以便知道他们连接的公共端口是多余的。

完全可以解决这个问题而不创build另一个服务器(这次是UDP)?

我知道这个问题差不多已经两岁了,但是没有答案,所以我想我会用一种方法来处理这个问题。

这实际上是与UDP协同工作的,因为它是无状态的,不能和TCP协同工作。 您所描述的TCP连接到第三个“控制”服务器的设置实际上是完美的设置。 我们将在这里叫“用户A”,“用户B”和“控制”。 这是如何工作的:

  • 用户A和用户Bbuild立到控制的TCP连接。 一旦build立,两个用户发送到控制他们可以联系的端口。 我们将调用用户A的“端口X”和用户B的“端口Y”。
  • 控制权与用户B共享用户A的端口信息,反之亦然。
  • 用户A从端口X发送UDP数据包到端口Y的用户B.用户B的防火墙当然会拒绝这个数据包。
  • 用户B从端口Y发送一个UDP数据包到端口X的用户A.用户A的防火墙将这个端口在内部转发给用户A,因为用户A的防火墙只是看到一个数据包从用户A通过端口X离开,而用户B在端口Y(因为它是UDP,所以它不知道它被拒绝了),所以它假定从端口Y上的用户B到端口X上的用户A的数据包是一个响应数据包,因此它可以通过它。
  • 用户A从端口X发送另一个UDP数据包到端口Y的用户B,同样的原因也允许用户B的防火墙。
  • 用户A和B现在可以来回发送UDP数据包,并且控制的参与不再需要。