3

我一直在 www 上阅读,但无法获得 P2P 最重要的基础知识。

图是这样的:

[peer1]<-->[dsl-router1]<-->[central server]<-->[dsl-router2]<-->[peer2]

我正在中央服务器上开发一个聊天软件。聊天消息现在通过中央服务器传输得很好,但是,我需要制作 p2p 文件共享功能,因为服务器的带宽(电缆带宽,而不是传输限制)应该只用于传输聊天消息。

问题是,我在中央服务器上的软件知道 router1 和 router2 的 IP 和端口,但不知道 peer1 和 peer2,因为这些对等点位于路由器后面并且没有 IP 地址。

如何在不让这些数据通过中央服务器的情况下实际将一些数据从 peer1 传输到 peer2,反之亦然?

(最坏的情况是peer和dsl-router之间有无线路由器)

4

2 回答 2

2

有两种基本方法可以做到这一点。新方法是使用 IGDP(通过 uPnP 打开端口)。这在这里描述得很好:

http://www.codeproject.com/Articles/13285/Using-UPnP-for-Programmatic-Port-Forwardings-and-N

如果两个节点都没有支持 uPnP 的路由器,那么另一种选择是 TCP 打孔,它并不完美,但在实践中运行良好。此处对此进行了描述:

http://www.brynosaurus.com/pub/net/p2pnat/

于 2012-08-30T11:19:46.177 回答
1

在某些情况下,ISP 提供的“路由器”可能会以桥接模式运行,这会将对等计算机直接暴露在 Internet 上(计算机获得公共 Internet 地址)。如果至少一方有这种配置(或者在对等客户端不在另一台设备后面的类似情况下),那么事情应该相当简单:只需将中央服务器的工作分配给拥有此权限的任何人。

在另一种情况下,两个对等点都只有一个本地地址(例如 192.168.0.2)分配给他们的计算机,那么通过路由器将相当困难。路由器后面的客户端大部分情况下都无法从外部访问,除非它们发起了请求。然后,该问题的一种解决方案是端口转发。通过明确编写的规则或 UPnP 进行端口转发,对等计算机上的某些端口会暴露在公共互联网上,就像在第一种情况下,整个计算机都暴露在外,而不是仅暴露一些端口。

如果您没有其中任何一个,那么没有简单的方法可以避免通过中央服务器发送。尽管您可能会找到其他有能力为他人转移的同行。

于 2012-08-30T11:18:34.027 回答