NAT,P2P和多人游戏

时间:2009-11-21 19:19:04

标签: p2p nat

如何设计应用程序,使两个对等方可以直接相互通信(假设两者都知道彼此的IP),但没有传出连接?那就是,没有端口会被打开。 Bitorrent就是这样做的,但多人游戏(据我所知)需要端口转发。

4 个答案:

答案 0 :(得分:2)

我不确定你的意思是没有外出连接,我会像其他人一样假设没有传入连接(他们在NAT / FW /等后面)。

到目前为止提到的最常见的是UPNP,在此上下文中是一个协议,允许您作为计算机与网关对话并说我转发此端口,因为我希望外面的人是能和我说话。 UPNP也是为其他东西设计的,但这是家庭网络的常见之处(实际上它是众多定义中的一种)。

如果您不拥有网络,还有更常见且更可靠的方法。最常见的是STUN,但如果我没记错,有一些变种。基本上,您使用第三方服务器,允许传入连接尝试和协调通信通道。基本上,你所做的是发送一个UDP数据包到你的对等体,这将打开你的NAT作为响应,但是你的对等体的NAT被丢弃(因为还没有转发规则)。通过与中介的连接,然后告诉他们做同样的事情,现在打开他们的NAT,并匹配你在NAT中的现有规则。现在可以进行通信。它们是一种变体,它允许TCP / IP连接以及通过一些协调发送SYN和SYN-ACK消息。

我链接到的维基百科文章链接到这些协议的相关rfc,确切地说它们是如何工作的。基本上它归结为,没有一个简单的答案,因为这是一个非常以网络为中心的问题。

答案 1 :(得分:0)

您需要在网络中的某个“会面点”:参与者在某种“网关”处“会面”,并且所述“网关功能”负责转发。

至少这是一种做法:我不会试图评论Bittorrent的细节......我相信你可以谷歌搜索链接。

答案 2 :(得分:0)

UPNP近年来主要处理这个问题,但是打开端口的需要是因为应用程序已被编码为在特定端口上侦听响应。

1024以下的端口被称为“已注册”,因为他们已被分配了一个端口号,因为公司付了代价。这并不意味着你不能将端口53用于网络服务器或SSH,只是大多数人会在他们看到他们正在处理DNS时假设。 1024以上的端口是未注册的,因此没有关联 - 您的Web浏览器,无论是Internet Explorer / Firefox /等,都使用未注册的端口将请求发送到端口80上的StackOverflow网络服务器。您可以使用:

netstat -a

..在Windows主机上查看当前建立的网络连接,包括所涉及的端口。

答案 3 :(得分:0)

UPNP可用于与路由器协商以打开和转发端口到您的应用程序。即使是bit-torrent也需要至少有一个对等端具有一个开放端口来启用p2p连接。然而,两个对等体都不需要具有开放端口,因为它们都与相同的服务器(跟踪器)通信,这使得它们可以协商并确定谁有开放端口。

另一种选择是互联网上的某个地方的一个回声服务器/中继服务器,这两个服务器都可以信任,并且可以传输所有流量。 这个解决方案的“问题”是echo-server需要有足够的带宽来容纳所有连接的对等端,因为它会中继所有流量而不是建立p2p连接。

查看EchoWare:http://www.echogent.com/tech.htm