用于 Java 的 STUN、TURN、ICE 库

Posted

技术标签:

【中文标题】用于 Java 的 STUN、TURN、ICE 库【英文标题】:STUN, TURN, ICE library for Java 【发布时间】:2011-01-03 14:14:18 【问题描述】:

我需要在两个用户之间建立 P2P UDP 和 TCP 连接。它们都在 NAT 后面。

一点研究让我找到了STUN、TURN 和ICE。

除了jSTUN 之外,是否有任何 Java 解决方案(库),它似乎只适用于 UDP。 反过来,ICE 对于对称 NAT 问题要好得多。

【问题讨论】:

【参考方案1】:

不要过分吹嘘自己的号角,但我建议您尝试IcedJava。 (它是 SipTools 项目的一部分)它正在积极开发中,有一个稳定的 0.9 版本,并支持开箱即用的 RTP 流等用例。

就 TCP 支持而言,这将在以后的版本中发布,但由于三向握手被阻止,您将很难通过对称 nat 支持 TCP。甚至 ICE 规范的 TCP 扩展也指出,与 natted 对等点之间的 UDP 连接相比,TCP 连接成功的可能性要小得多。

也就是说,您可以通过在 UDP 网桥上路由 TCP 数据包来解决此问题,包括所有纠错和流量控制功能。 (我忘记了 RFC,但它是一个最终规范)不过,所有这些都是相对较新的规范,ICE-TCP 规范还不是最终的。即使在积极开发中,这些也需要时间来实施。

【讨论】:

这个项目还在维护吗?还是已经停产了? 最后一次提交是over 4 years ago 链接又失效了。 我需要真正开始并为这个项目投入一些工作。链接已修复(再次) 有文档吗?【参考方案2】:

还有ice4j,据开发者介绍:

STUN 和 TURN 以及 ICE 协议的 Java 实现。该项目是 Stun4J 计划的延续。该项目的目标是为 VoIP Java 开发人员提供一种处理 NAT 和防火墙的方法。

它是由 sipcommunicator 开发者开发的。

【讨论】:

当心 Ice4j 缺少文档 我几天来一直试图围绕 ice4j 进行研究,到目前为止我发现的最好的文档是这里的测试用例 github.com/jitsi/ice4j/blob/master/src/test/java/test/…,但我开始崩溃了,也许我给 JStun 一个机会【参考方案3】:

您可以尝试jstunt - 不再维护,但源似乎可用。 他们提供了一个带有 STUNT 库和示例 java 服务器/客户端应用程序的 jar。 根据我的阅读,它不是原生 java,所以这可能只适用于某些架构。

【讨论】:

以上是关于用于 Java 的 STUN、TURN、ICE 库的主要内容,如果未能解决你的问题,请参考以下文章

ICE vs STUN vs TURN

WebRTC:ICE、STUN 和 TURN,但我不能只使用我的 SignalR.NET 连接吗?

STUN, TURN, ICE介绍

stun/turn服务器部署

NAT穿越技术详细介绍

TURN Server Nat 遍历 ICE STUN