P2P最重要的基础知识

The most important basics of P2P

本文关键字:基础知识 最重要的 P2P      更新时间:2023-10-16

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

图表如下:

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

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

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

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

(最坏的情况是对等路由器和dsl路由器之间有一个无线路由器)

有两种基本方法。新方法是使用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/

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

在另一种情况下,如果两个对等端都只为其计算机分配了一个本地地址(例如192.168.0.2),则很难通过路由器;路由器后面的客户端在很大程度上是无法从外部访问的,除非它们发起了请求。然后,这个问题的一个解决方案是端口转发。通过显式编写的规则或UPnP进行端口转发,对等计算机上的一些端口暴露在公共互联网上,就像在第一种情况下,整个计算机不是只暴露一些端口。

如果您没有这两种方法,那么就没有简单的方法可以避免通过中央服务器发送。尽管你可能会找到其他有能力为他人转学的同龄人。