在 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 后面工作 - 一种设备通信方案的主要内容,如果未能解决你的问题,请参考以下文章