TCP孔打孔是否适用于此?

时间:2017-01-08 14:53:20

标签: rest networking tcp proxy hole-punching

这个项目有点类似于家庭自动化项目,因此请牢记家庭自动化。

  • 我有一个名为S
  • 的全球无障碍服务器
  • 有一个称为M
  • 的移动客户端
  • 有一个称为H
  • 的集线器

由于许多IP都是动态的,并且ISP要为静态IP收取额外费用,并且让客户端口转发我的应用程序的端口是不切实际的。

我听说过用于P2P的TCP Hole冲孔可能不可靠,但是使用S作为所有请求的代理似乎是不切实际的,因为S会有很大的负担。

我的目标:

M连接到H,以便他们可以互相发出RESTful HTTP请求。

我的问题

  1. 我如何管理MH无法通过TCP启动连接的情况? (使用UDP?)
  2. 如果TCP Hole打孔在这种情况下不起作用,我可以发送UDP包吗? (UDP在交付方面不可靠,因此发送多个重复数据包可以保证交付吗?)
  3. 备注

    我一般都知道打孔是如何工作的,S必须将两个客户端的端点分别给予彼此,以便他们都可以尝试启动连接。我也非常了解NAT的

    对于极少数情况下TCP Hole Punching无效,S可以作为代理

1 个答案:

答案 0 :(得分:0)

  
      
  1. 我如何管理M或H都无法启动的情况   通过TCP连接? (使用UDP?)
  2.   

是通过UDP。或者通过S使用TCP。

  
      
  1. 如果TCP Hole打孔在这种情况下不起作用,我可以发送UDP   包而不是? (UDP在交付方面不可靠,因此也是如此   发送多个重复的数据包保证交付?)
  2.   

这取决于。您必须在接收方进行检查,以确定是否收到数据包,然后向发送方发送通知。因为您可能会发送10/20相同的数据包,但仍然可能无法到达接收方。但是如果你想要可靠的数据包传输以及UDP,那么就有一个名为RUDP的协议。

请注意无论您使用的是TCP还是UDP,都无法始终成功建立P2P连接。许多时候您必须通过S建立连接或者您无法连接。该场景是,其中一个端点具有对称NAT,而其他端点具有PRC / Symmetric NAT。现在,很多基于LTE的连接使用对称NAT。

相关问题