在NAT后面工作 - 设备通信方案

时间:2016-04-06 07:41:01

标签: android c scalability hole-punching nat-traversal

我试图提出一种解决方案,支持嵌入式设备(基于xMega128(C))和Android应用之间的数据交换。问题是数据交换必须通过互联网进行,嵌入式设备和运行应用程序的移动设备都可以在不同的NAT后面,使用不同的ISP,3G,LTE等进行连接。

我尝试过UDP打孔,但它不适用于对称NAT。具有预测的多孔冲孔也不保证100%可靠性。我也考虑过使用ICE,但ICE C库(pjnath,libnice)与所选硬件(libs require os)不兼容。现在我正在考虑实施或使用(如果存在)流量中继服务器,但这对我来说似乎是个黑客攻击。

还有其他选择我没有考虑过吗?任何帮助将不胜感激。

理想情况下,通讯方案是:

  • 100%可靠

  • 相对较低的延迟(3秒绝对最大值)

  • 可扩展(将来最多可达500k设备)

  • 可以通过应用和设备进行初始化

  • 多用户 - 一台设备将连接到许多Android应用程序

此外,如果这有帮助,设备和应用程序之间的数据交换不是很高 - 大约每小时1个会话,每个会话大约50个消息,它们之间有10-20秒,每个消息大约100个字节

2 个答案:

答案 0 :(得分:0)

只要两个端点都落后于您无法控制的不同NAT,它就无法可靠地工作。没门。你需要一个接力。

答案 1 :(得分:0)

您所描述的实际上是点对点或其子集,并使其可靠地工作是很多工作。在点对点失败的情况下,您通常会回到中继服务器。它可以完成但是工作量非常大。您的要求清单也非常陡峭......

  

100%可靠

没有可靠的连接。您需要为应用程序构建容错功能,以使其可靠。

  

相对低延迟(3秒绝对最大值)

很多时候你会被物理学限制,即光速。低延迟很难。

  

可扩展(未来最多可提供500k设备)

我不知道这意味着什么,即这是并发连接?

来自维基百科的NAT Traversal

  

存在许多技术,但没有一种方法适用于所有情况   因为NAT行为不规范。许多NAT遍历技术   需要来自可公共路由IP地址的服务器的帮助。   有些方法仅在建立连接时使用服务器,   而其他人则基于通过它传递所有数据,这增加了   带宽成本和延迟增加,对实时语音不利   和视频通信。

即它有时会起作用,即它不可靠,因此您需要使用多种方法使其可靠。