67

是否有任何已知的方法可以在不使用专用中央服务器的情况下找到对等点?

即:如果我有对等方断开并重新连接到互联网但每次都获得一个新的 IP 地址,并且我想连接到它们而不设置专用服务器进行注册。

我正在考虑使用对等点的电子邮件地址定期发送已连接对等点的清单,并带有某种时间码,从而无需专用服务器。如果在尝试所有先前已知的对等地址后没有一个对等点可以连接,这将是一个后备。但是现有的寻找同伴的模型会更可取。

4

13 回答 13

47

必须至少知道一个初始对等方才能发现更多信息,这是没有办法的。完全 P2P 协议,例如 Gnutella 或 Gnutella2,或更简单的 Overnet(因 Storm Worm 而闻名),基于每个客户端都有一个由几个对等点组成的启动列表。例如,这些可以来自基于网络的自动跟踪器。客户端将通过向其他对等方询问更多地址来发现整个网络或其中的一部分,例如在委派文件搜索时。

如果您真的无法拥有任何类型的集中式资源,那么您能做的最好的事情就是通过广播消息并最终通过 IP 地址扫描找到第一个对等方。第一种方法是善意的,但在至少 98% 的情况下不会产生任何结果。当然,后一种方法是滥用互联网,在大多数国家都是非法的。

我真的会重新考虑拥有某种中央跟踪器。它可以像 Web 服务器上的 PHP 脚本一样简单(今天的 gnutella 网络由 10-20 个这样的脚本组成,由彼此不认识的人托管)。而且这肯定比电子邮件更轻量级(至少由于垃圾邮件过滤器,它无论如何都不起作用)。

于 2008-11-22T01:16:44.707 回答
9

在 Intranet 中对等点的有限情况下,可以将广播 UDP 消息发送到已知端口,要求对等点进行报告。

于 2008-11-22T00:31:00.007 回答
8

BitcoinQT 客户端使用多种方法来查找节点,其中一些可能对您有用。

中本聪客户端节点发现

IRC 不再使用,但可能是最容易实现的:

从 0.6.x 版开始,比特币客户端默认不再使用 IRC 引导,从 0.8.2 版开始,对 IRC 引导的支持已完全删除。以下文档对于大多数早期版本都是准确的。

除了学习和共享自己的地址外,节点还通过 IRC 通道了解其他节点地址。请参阅irc.cpp

在学习到自己的地址后,节点将自己的地址编码成一个字符串,用作昵称。然后,它随机加入了一个名为#bitcoin00 和#bitcoin99 的IRC 频道。然后它发出了WHO的命令。线程读取通道中出现的行,并解码通道中其他节点的 IP 地址。它永远循环执行此操作,直到节点关闭。

当客户端从 IRC 发现一个地址时,它会将地址上的时间戳设置为当前时间,但它使用了 51 分钟的“惩罚”,这意味着它看起来实际上是在将近一个小时之前看到的。

于 2014-05-19T13:41:53.427 回答
7

利用可以发布数据的任何现有论坛。想想秘密 IRC 频道,在照片中嵌入数据并发布到照片共享网站 4chan?,任何允许您的应用程序在没有 captia 登录的情况下登录和发布数据的网站等。

http://chatzilla.hacksrus.com/faq/#password

另一种策略可能是在数字货币交易中嵌入消息。选择一个可能会到处闲逛的便宜硬币……也许是 DOGE 或 MOON 硬币。在您的应用程序中构建钱包功能。这样您就可以在您的应用控制的地址之间来回发布微交易。仍然会有矿工费,但这只是几美分。即使他们后来禁止将元数据添加到交易中,您也可以在 MOON 中进行与您的 IP 地址等效的交易,并为您的应用程序使用 MOON 币中的虚荣地址。这样当一个新节点上线时,它就知道要在区块链上搜索什么——2daMOON%bootStr@pM3。发送 - 104.003021133 MOON IP = 104.3.21.133 不是一个昂贵的提议。

于 2014-03-17T22:39:13.460 回答
4

三种方式,在我的脑海中,虽然你总是需要一些中央服务器来启动连接,除非你选择选项 3。

  • 维护已知对等点列表的中央服务器,具有保持活动状态。
  • 一个或多个维护一些公共资源对等点的中央服务器可以用来发现彼此,但一旦连接,只要对等点保持连接就不再需要中央服务器(类似于 BitTorrent);也可以链接对等连接。
  • 端口/IP 扫描(强烈不推荐)。

在您的示例中,您仍然有某种中央服务器来注册对等点;协议是唯一的区别。

于 2008-11-22T00:27:21.950 回答
4

老问题,但我自己一直在考虑这个问题,所以会加我的 2 美分。简而言之,如果一个节点知道至少一个有效的对等点,则不需要中央服务器。任何当前成员都必须将新节点添加到网络中(例如,受邀或节点生成另一个节点,具体取决于您的应用程序)。

假如说:

  • 代理跟踪对等点;此地址簿的大小以及如何管理条目将取决于系统的性质;例如,如果对等方使用稳定地址,对等方保持连接的时间有多长

  • 代理与其他对等点共享对等点信息

  • 相对于频率,至少一些代理在相对较长的时间内保持可用节点连接到网络以更新其地址簿(或节点具有稳定的地址)

  • 除了对等地址之外,还跟踪可用性信息(此处的许多选项取决于您的系统。示例包括:对等是否有稳定的地址,最后一次出现的时间,一些可用性指标,内容/服务类型信息,地址有效 - 直到时间如果已知)

  • 新代理至少使用一个有效对等点进行初始化(不必是中心节点,可以是任何有效节点)

  • 如果可能存在恶意对等点,则需要信任机制

当一个对等点上线时,它会查询其对等点表中的对等点,以发现哪些是活动的,并可能删除过期的动态地址。节点交换对等信息,并可能自行链接。如果具有足够的大小和/或质量,该对等点发现/交换可以继续一定数量的跳或通过随机游走直到对等点列表。

更多细节:

  • 节点以与节点地址更改频率相关的频率连接和共享对等点信息,因此地址簿不会变得陈旧,并且节点会断开连接,因为它以前的对等点在其最后一个已知地址中都不可用

  • 节点可能需要限制它们接受的对等点的数量,以避免集中在最稳定节点周围的趋势。

  • 节点应该对它们保留的对等点有选择性;即他们更有可能交换数据的那些(例如基于历史的权重)

  • 节点链接可能是不对称的或对称的,具体取决于应用程序

于 2015-09-04T19:14:04.460 回答
3

简单地说,没有,没有中央服务器就没有办法做到这一点。

如果你想这样做,你只需要一个或多个中央服务器,无论是否通过动态 dns。客户端需要一种方法来发现他们应该连接到哪里,而唯一真正明智的方法是使用您自己的服务器,在最简单的情况下,它只需要发送一个 IP 地址作为响应。

虚拟服务器的价格约为每月 15 美元,这比尝试使用或滥用他人的带宽要便宜得多。


[编辑]。

简单来说,还有另一种方式,如下。

经过反思,我认为我要做的是将一组对等点指定为集群控制器,并使用动态 DNS 服务来允许其他对等点发现集群控制器。

选择一个动态 DNS 提供商,我将其命名为 myc.ath.cx(我使用http://www.dyndns.com/)。

每个对等点都必须能够成为集群控制器。集群控制器将包含所有其他连接的对等点的列表。

当一个对等点启动时,它会查找 myc.ath.cx 并尝试连接。如果在一段时间内无法建立连接,比如 30 秒,它将接管 DNS 条目的注册。

任何希望发现其他对等点的对等点都可以简单地查询 myc.ath.cx 并提供一个列表

所有对等点负责定期下载对等点列表,以防它们需要集群控制器。

集群控制器将定期查询 DNS 条目——如果它的 IP 地址发生了变化,那么它知道它不再是集群控制器——因此它将联系当前具有 DNS 条目的集群控制器并提供它的已知主机列表。

集群控制器会定期联系列表中的主机以确保它们仍然有效。

于 2008-11-22T01:04:49.550 回答
1

不过,您发送电子邮件的方法确实使用了专用服务器;准确地说,是对等方的电子邮件服务器。

粗略地说,我认为不使用某种专用存储或服务器是不可能的(电子邮件方法确实如此,尽管是间接的),除非您能够描述您的同行正在使用的互联网连接。

基本上,如果您有一组 X 数量的对等点,它们连接了 Y 时间,然后它们离开网格 Z 时间......基本上,您可以构建一个概率方程,关于它的可能性有多大您上次联系的对等点集仍然可用;如果概率接近 1(对于上面给定的一组 X、Y 和 Z),您很可能无需使用存储即可维持对等网络。

可能更多的是精神上的;与其拥有“专用中央服务器”,不如使用简单的在线免费服务来指定对等列表。建立一个雅虎群,或类似的东西;客户端可以自动查找并获取一个对等地址,从中查询一组对等点;客户端可以使用身份验证进行编码以发布到组,并且可以定期发布其 IP 地址,以便其他人可以请求一组已知的活动对等点。

如果你想变得非常棘手,你可以开始使用基本的隐写方法来隐藏对等位置信息。即在谷歌上搜索“blah”;找到结果中列出的第一个具有未受保护(无验证码)留言板的站点;找到以“Indubitably”(或其他)开头的第三个(或其他)帖子,并在那里找到第一条消息的标头,以及对等方的 IP 地址。如果这不起作用,请从搜索词列表中转到下一个。

但这是偷偷摸摸的。:-)

于 2008-11-22T00:31:20.943 回答
1

您能否为此目的重新使用现有的专用服务器?

我特别考虑使用动态 DNS 注册每个对等点,但如果您愿意变得更丑陋,可以共享对已知 Hotmail 帐户或 Google Doc 等的访问权限。

于 2008-11-22T00:38:59.010 回答
1

您可以使用中央目录或某种广播协议进行服务发现。假设你可以让它们被谷歌索引,你可以设想一个系统,每个对等点运行一个网站,在特定页面上包含一些独特的、罕见的词。然后,您可以使用基于这些词的 Google 搜索结果来识别潜在的同行。这本质上是一个(嘈杂而缓慢的)互联网广播。

如果页面结构是众所周知的模式或包含该对等方的可识别连接信息,则很容易在搜索结果中区分它们。使用这样的公共目录会使您对所形成的网络中的受感染节点敞开大门,但这对于任何缺少某些安全机制的 P2P 网络来说都是如此。

让谷歌(或其他搜索引擎)为您的特定神秘搜索词组抓取网站并对其进行高度排名将是诀窍。我可以想到几种方法,但它们不是我会使用的方法。对于合法的服务,我宁愿花钱或找一个可以充当目录的免费网站。

于 2008-11-22T01:29:55.910 回答
1

另一个专门为跟踪其他 P2P 系统的在线对等点而构建的 P2P 系统呢?

然后,我们将寻找任何新 P2P 系统的对等点的问题简化为简单地为“主要”P2P 系统寻找对等点,这将为您提供您有兴趣使用的系统的在线对等点的地址......

于 2014-02-19T18:10:23.323 回答
0

这是分布式哈希表算法的典型使用。我建议看看糕点之类的东西。它在其他层之上使用覆盖网络(应用层网络)。

每个节点都有一个 GUID,用于跨对等网络路由请求。

于 2009-03-29T17:50:01.673 回答
0

如果您正在寻找已经建立的中央服务器,请在此处查看页面上的元服务器条目:
http
://martindevans.appspot.com/ 您可以在那里注册对等点,然后其他对等点可以找到它们。显然这是一个中央服务器,但它不需要您进行维护。

于 2009-05-16T23:22:02.320 回答