P2P软件最初连接到哪里?

5
在BitTorrent中,客户端连接到.torrent文件中指定的跟踪器。跟踪器是一种集中式服务器,是起点。因此,BitTorrent不是纯P2P。
如果我们想开发纯P2P系统,我们应该设计路由覆盖网络。所有节点都将拥有像路由器一样的路由表。但即使在路由覆盖网络中,每个节点最初也应该知道至少一个现有节点(GUID、IP地址)。那么我们该如何确定这一点呢?我们是否应该像固定的集中式服务器那样永远保留“一个现有节点以便最初连接”?如果是这样,我认为这不是完全去中心化的方法。

2
在网络术语中,你的问题在于节点发现的主题。 - ultrajohn
4个回答

3
你描述的解决方案(定义具有公认IP地址的中央对等方)并不是唯一的解决方案。
另一个解决方案是在公认URL上发布一个HTML页面(或JSON文件),并确保该项包含此对等方可以最初连接的更新的对等方列表。如果对等方宕机,则可以更新此列表。最终,您可以使用多个URL。
纯P2P系统是一个理论概念,在现实中无法完全实现。

1

您可以使用任播。这样,第一个其他客户端将会回答并可能发送这样的初始“客户端列表”。您的客户端可以连接到它们以获取更多列表。

经典地,我会实现一个组播到一个地址,并等待其他客户端的回答。


0
首先,真正的点对点网络并不一定是分散的。其次,分散并不一定意味着网络不使用可能本身是集中化的辅助服务。
这两个问题的主要问题在于网络解决方案的主要资源是否通过相关的对等体进行分配。
例如,点对点视频会议可能会使用中央联系人服务,但只要对等体在进入真正的点对点范围之前就解决了这些问题,它仍然是纯粹的点对点的。这也是分散的。
关键在于您通过使用点对点来解决什么问题。视频会议就是视频会议-从一台对等体上录制的视频开始,到另一台对等体上查看视频结束。只要数据的每个字节直接在对等体之间传输(即使会议中有数百个对等体,并且无论这些对等体如何找到彼此),它就是真正的点对点视频会议。
请注意,视频对等体仍将位于典型的环形结构中,联系人列表仍可能使用节点密钥作为位置信息,而不是IP。这仍将是一个网络覆盖层,因为它仍将在IP上构建,以取代对等网络的寻址方案。

实际上,一切都归结于网络连接的概念。IP只是将数据包推送到未指定的路由器,直到到达特定地址。每个端点之间的“连接”仅存在于更高级别的软件层(包括处理TCP/IP时)。连接只是软件中用于理解谁是谁以及每个点如何处理数据等内容的数据。点对点网络覆盖层有效地分配这些数据,消除了每个对等方为在广泛范围内通信而创建大量连接的需要。这并不需要去中心化(只要点对点通信不是集中化的),系统中的辅助服务不一定会限制网络的范围或者使点对点网络变得集中化。

因此,回答你的问题,最初连接的位置并不重要,只要符合点对点的定义即可,不同的点对点服务将根据其服务设计来处理这个问题。


0

好的,我正在考虑为一个AI项目编写一种点对点协议,用于多种不同的服务,并且我想来这里看看是否能够得到一些关于如何建立初始连接的想法。

我已经发现了几种建立初始连接的方法:

1)您在互联网上拥有一个静态IP地址,用于分发其他节点的信息。这不好,因为: a)它是单点故障,服务可能会离线,从而防止任何新连接创建与节点的初始连接, b)IP地址可能会更改。这可以通过使用维护指向提供有关节点数据的服务位置的当前IP地址的域名来缓解,但是理论上黑客可以通过欺骗或ARP毒化、DNS攻击等方式来破坏这一点。

2)您可以强制用户提供另一个节点的初始IP地址或主机名,由用户自行查找主机名/IP地址/端口号。这很好,但如果有人发布虚假信息或他们无法在Google或其他搜索站点上找到节点,则显然是有缺陷的。

3) 你可以让同行在一个中央位置发布他们自己的存在,例如一组IRC频道或一组网站。除非它经过一个中央受信任的域,否则很难确定对等方的真实性。

4) 你可以使用某种类似于nmap的发现算法,在子网中搜索适当的协议。这种方法的问题是速度慢,而且很可能会引起防火墙等注意。

5) 这是3)的变体,你可以允许对等方在网站上广告自己的信息,然后不必在适当的位置(特定的网站或一组网站)查找信息,可以让谷歌的搜索算法找到它,并为您进行发现,但是您可以想象这可能需要几天时间才能使谷歌缓存带有对等方信息的网站数据。同样,您需要提供某种验证广告数据真实性的方式。

6) 如果您对一种独家的点对点网络感兴趣,该网络可以锁定某些人(例如,您可能想要一个文件共享网络,而不希望执法部门能够访问它,或者MPIAA),那么您可以使用2),然后设置一个推荐系统,在这个系统中,您需要求初始连接提供推荐人的IP地址,然后服务可以连接到推荐人的IP地址,并询问推荐人是否确实推荐了被推荐人。

目前我能想到的就是这些,但如果有人想到其他方法,我会非常感兴趣。


1
在我看来,@rekire的回答是最好的。使用组播/任播来查找初始节点是点对点通信的最佳方式。然而,这需要一整个新一代的核心路由器,以基于更高层次的OSI协议栈进行路由。 - manili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接