问题标签 [nat-traversal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4566 浏览

p2p - peer2peer 如何通过路由器工作?

一台 PC 如何通过 Internet 连接到另一台 PC?

一个例子是监听 PC 1 上的连接的程序。PC 1 位于路由器 1 后面。PC 2 有一个客户端程序试图连接到 PC 1。

在这种情况下,作为听力程序使用的正确技术/技巧是什么?

0 投票
3 回答
7841 浏览

.net - UDP、NAT 和设置“连接”

我知道“连接”这个词在谈论 UDP 时并不合适,但是......

服务器(具有已知 IP 的服务器)如​​何通过 Internet 将其 UDP 数据包发送到位于 NAT 后面的客户端?

例如:假设客户端使用 TCP 上的一些消息连接并验证服务器。此时,服务器已准备好开始通过 UDP 将数据流式传输到客户端,但服务器如何知道将 UDP 数据包寻址到何处,以便它们可以通过任何 NAT 路由器到达客户端?

如果客户端通过 UDP 发送“我已准备好进行流式传输”消息,NAT 路由器是否会保持端口打开,以便服务器可以使用其 UDP 数据流进行响应?

还是我在这里偏离轨道?

0 投票
2 回答
1798 浏览

java - 如何在 C++ 对等应用程序中处理 NAT 遍历(请代码示例而不是理论)

我需要开发简单的游戏,该游戏将使用集中索引管理器服务器使用对等连接。

我知道当客户端尝试连接到路由器后面的另一个客户端时会出现问题。我正在阅读主要使用理论解释的 NAT 遍历,但我真正想看到的是 C++ 或 Java 的代码示例。

你能帮我理解通过代码进行NAT穿越的含义吗?也许某种开源简单的客户端游戏?

0 投票
1 回答
195 浏览

instant-messaging - 信使 (IM) 如何工作(收听)?

我的任务是为内部和外部员工编写一个 Messenger 程序,我确实做到了。但是,我认为通过使用客户端软件从服务器保留“检查消息”,这确实不是一个好方法。所以我想我只是在模拟IM程序。

我想让客户端应用程序成为监听服务器,并让用户 p2p 在主服务器上没有“消息中心”的情况下交谈(除非发生离线消息)。问题是当我在路由器后面时如何告诉外部用户(其他客户端应用程序)我的位置?

那些在客户端机器上运行的其他 IM 程序也作为服务器运行吗?他们如何度过难关?

提前致谢!

0 投票
1 回答
70 浏览

pipe - 是否有任何框架或库允许 deweloper 将他的管道推过 NAT 并将其作为管道接收到后端?

所以我在 1 台电脑上有一个应用程序,创建了一个管道,本地管道。我想把它当作一个流(就像它中的最后一个数据或来自它的传入数据)并通过 NAT(使用 nat 遍历)将它的数据流式传输到 NAT 下的其他电脑(所以我或他有唯一的 IP 地址但是我们使用 nat traversal server\programm 进行通信)并在那里接收该数据并在该计算机上创建一个新的本地管道以供其他程序使用。

所以我喜欢 C\C++\Java\C#,但如果有其他语言的库,我很想为那个库学习那些语言!)

是否有任何框架或库允许 deweloper 将他的管道推过 NAT 并将其作为管道接收到后端?

0 投票
1 回答
294 浏览

protocols - 路由器环回是否有像 UPnP 这样的协议?(环回 NAT)

我们可以使用 UPnP 协议来转发用户端口。所以要做简单的 NAT 遍历。但是这样操作后出现问题。

我的主要观点是-您可以转发用户端口-将其绑定到全局地址,您可以从全球互联网访问它,但不能从本地网络(通过 NAT)访问。所以我想知道是否有一些协议集允许我们发送soap请求(遵循该协议,就像我们遵循UPnP创建nat遍历库一样)以编程方式配置NAT,以便为本地网络用户提供适当的环回。

我描述了这个 - 我关于服务器故障的详细故事,因为有些人在堆栈上关闭了这个问题。那时它不是那么详细,所以我不责备他们(非常谨慎)......

0 投票
2 回答
4096 浏览

networking - 实用的 NAT 穿越,以实现可靠的网络连接

我已经看过并阅读了很多类似的问题,以及相应的维基百科文章(NAT traversalSTUNTURNTCP 打孔),但是大量的信息并没有真正帮助我解决我非常简单的问题:

我正在编写一个 P2P 应用程序,我希望我的应用程序在 NAT 后面的两个用户能够相互连接。连接必须可靠(与 TCP 的可靠性相当),所以我不能只切换到 UDP。该解决方案无需重新配置即可在当今的通用系统上运行。如果有帮助,该解决方案可能涉及可连接的第 3 方,只要它不必代理整个数据(例如,获取对等方的外部 (WAN) IP 地址)。

据我所知,我唯一的选择是使用“可靠的 UDP”库 + UDP 打孔。是否有(C/C++)库为此?我在一个相关问题中找到了enet,但它只处理解决方案的前半部分。

还要别的吗?我看过的东西:

  1. Teredo 隧道- 需要操作系统和/或用户配置的支持
  2. UPnP端口转发 - UPnP 不存在/无处不在
  3. TCP 打孔似乎是实验性的,仅在某些情况下有效
  4. SCTP的支持程度甚至低于 IPv6。UDP 上的 SCTP 只是花哨的可靠 UDP(见上文)
  5. RUDP - 几乎没有主流支持
  6. 根据我对 STUN、STUNT、TURN 和 ICE 的理解,它们都不会帮助我。
0 投票
1 回答
313 浏览

java - 有人使用 GAE 进行 Nat 遍历吗?(作为保存映射的服务器)

因此,我可以使用支持 UPNP NAT 的客户端来限制我的应用程序。我很想看到任何使用 GAE 作为服务器来保存地图的开源 Java 项目,例如 (ClientID, IP:PORT)(以客户端上的一些简单打孔器为例) 有没有这样的项目?

0 投票
1 回答
3715 浏览

java - 使用 Java 中的任何 UPnP 库进行简单端口转发的示例?

我想在我的机器上使用 UPnP 向全世界开放端口 5555。您能否为我提供任何适用的开源库的此类 Java 示例。我需要一个 CODE SAMPLE,就像我可以给你的 C# 使用这个 lib

0 投票
2 回答
7409 浏览

mobile - NAT 后面到 NAT 连接后面

我遇到了一个有趣的问题。基本上我有 2 部手机都在 NAT 之后。我想使用 UDP 在两个设备之间直接通信。

我知道如果我启动从手机到服务器的连接,那么我可以将该连接向下推送到手机(即从接收消息的同一端口将其发送回与接收消息的同一 IP 和端口) . 因此,我可以通过将两部手机连接到服务器来轻松地在两部设备之间进行通信。然后将数据发送到服务器并将其重新路由回手机。这绕过了我可能遇到的任何 NAT 穿越问题。

但是,我宁愿只使用服务器将 2 个设备相互指向,然后让它们直接通信。我该怎么做呢?是否可以不使用像 uPnP 这样的东西?

任何帮助将不胜感激!

编辑:我发现这个文件http://www.brynosaurus.com/pub/net/p2pnat/看起来发夹式翻译是我所追求的,但它看起来并没有得到广泛的支持。我想知道移动 ISP 对 UPnP 的支持有多好?