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

Posted

技术标签:

【中文标题】在 NAT 后面工作 - 一种设备通信方案【英文标题】:Working behind the NATs - a scheme for device communication 【发布时间】:2016-07-26 11:11:10 【问题描述】:

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

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

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

理想情况下,通信方案应该是:

100% 可靠

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

可扩展(例如未来最多 50 万台设备)

可由应用程序和设备初始化

多用户 - 一台设备可以连接多个安卓应用

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

【问题讨论】:

【参考方案1】:

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

100% 可靠

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

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

您经常会受到物理学(即光速)的限制。低延迟很难。

可扩展(例如未来最多 50 万台设备)

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

来自关于 NAT Traversal 的***

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

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

【讨论】:

一台设备最多可与 10 部智能手机通信。让我们称之为系统。这样的系统可能多达 500k,解决方案必须能够处理它。【参考方案2】:

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

【讨论】:

以上是关于在 NAT 后面工作 - 一种设备通信方案的主要内容,如果未能解决你的问题,请参考以下文章

P2P技术详解:P2P中的NAT穿越(打洞)方案详解

P2P技术详解:P2P中的NAT穿越(打洞)方案详解

P2P技术详解:P2P中的NAT穿越(打洞)方案详解

NAT 后面到 NAT 连接后面

如何在 NAT 后面的两个节点之间进行通信?

P2P中的NAT穿越(打洞)方案详解