点对点:找对象的方法

有没有已知的方法find同行而不使用专用的中央服务器?

即:如果我的同事正在断开连接并重新连接到互联网,但每次都得到一个新的IP地址,并且我想连接到他们,而无需设置专用服务器进行注册。

我正在考虑使用同行的电子邮件地址周期性地发送连接对等体的清单,以及某种时间码,否定了专用服务器的需要。 如果在尝试所有先前已知的对等地址之后,没有一个对等端可以连接,则这将是后退。 但现有的寻找同行的模式将是可取的。

没有办法知道至less有一个初步的同行发现更多。 完全的P2P协议,比如Gnutella或者Gnutella2,或者更简单的Overnet(由Storm Worm出名)都是基于每个客户端都有一些同行的启动列表。 例如,这些可以脱离基于networking的自动跟踪器。 客户端将通过向其他对等方请求更多地址来发现整个networking或其中的一部分,例如在委托文件search时。

如果你真的不能拥有任何一种集中的资源,你可以做的最好的办法就是通过广播消息find第一个对等点,并最终进行IP地址扫描。 第一种方法是善意的,但至less有98%的案例不会产生任何结果。 当然,后来的做法是滥用互联网,在大多数国家也是非法的。

我真的会重新考虑有一个中央跟踪器。 它可以像Web服务器上的PHP脚本一样简单(今天,gnutellanetworking被十个二十个这样的脚本阻塞,由甚至不知道彼此的人托pipe)。 这肯定比电子邮件更轻量级(由于垃圾邮件filter至less不会起作用)。

在Intranet内部对等体的有限情况下,可能会向已知端口发送广播UDP消息,要求对等体进行回报。

有三种方法,尽pipe你总是需要一些中央服务器来启动连接,除非你使用选项3。

  • 中央服务器,保持已知的对等列表,保持活着。
  • 一个或多个维护一些公共资源对等体的中央服务器可以用来发现另一个,但一旦连接不再需要中央服务器,只要对等体保持连接状态(比如BitTorrent)。 也可以链接对等连接。
  • 端口/ IP扫描( 强烈不build议 )。

在你的例子中,你仍然有一些中心服务器,其中的同行将被注册。 协议是唯一的区别。

利用任何现有的可以发布数据的论坛。 考虑秘密的IRC频道,将数据embedded照片并张贴到照片共享网站4chan?,任何网站,将允许您的应用程序login和张贴数据没有captialogin等。

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

另一种策略可能是将数据embedded到数字货币交易中。 select一个便宜的硬币,可能在附近… DOGE或MOON硬币也许。 在您的应用程序中构build钱包function。 这样您可以在应用程序控制的地址之间来回发送微交易。 仍然会有矿工的费用,但这只是几分之一的便士。 即使他们稍后禁止向交易添加元数据,您也可以在MOON中进行与您的IP地址相同的交易,并使用MOON硬币中的虚拟地址作为您的应用。 这样,当一个新的节点上线时,它知道要search区块链–2daMOON%bootStr @ pM3。 发送 – 104.003021133 MOON IP = 104.3.21.133不是一个昂贵的命题。

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

Satoshi客户端节点发现

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

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

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

在学习了自己的地址后,一个节点将自己的地址编码成一个string作为昵称。 然后,它随机join了一个名为#bitcoin00和#bitcoin99的IRC频道。 然后它发布了世卫组织的命令。 线程读取通道中出现的行并解码通道中其他节点的IP地址。 它在一个循环中完成,直到节点closures。

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

简而言之,如果没有中央的服务器,就没有办法做到这一点。

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

虚拟服务器的价格可能在15美元/月左右,比试图使用或滥用别人的带宽要便宜得多。


[编辑]。

简而言之,还有另一种方式,如下所示。

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

select一个dynamicDNS提供商,我将其称为myc.ath.cx(我使用http://www.dyndns.com/ )。

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

当对等体启动时,它查找myc.ath.cx并尝试连接。 如果连接不能在一段时间内完成,比如说30秒,它将接pipeDNS条目的注册。

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

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

群集控制器将定期查询DNS条目 – 如果已从其IP地址更改,则知道它不再是群集控制器 – 因此它将联系当前具有DNS条目的群集控制器,并提供已知主机的列表。

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

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

假如说:

  • 代理商跟踪同行; 该地址簿的大小以及如何pipe理条目将取决于系统的性质; 例如对等体保持连接多久,如果对等体使用稳定的地址

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

  • 至less一些代理相对于频率相对较长的时间段保持可用连接到networking以更新其地址簿(或者节点具有稳定的地址)

  • 除了对等地址之外,还会跟踪可用性信息(这里的许多选项取决于您的系统,例如:对等体是否有稳定的地址,上次看到的时间,某个可用性度量,内容/服务types信息,地址是否有效直到时间if知)

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

  • 如果恶意的同伴有可能,则应该要求信任机制

当一个对等体联机时,它查询对等体表中的对等体,以发现哪些对等体处于活动状态,并可能删除过期的dynamic地址。 节点交换对等信息,并可能自己联系起来。 如果具有足够的尺寸和/或质量,该对等方发现/交换可以继续一定数量的跳跃或者通过随机漫步直到对等列表。

更多的细节:

  • 节点连接并共享与节点地址更改频率有关的频率信息,因此地址簿不会变得陈旧,节点将变为断开连接,因为它们的最后一个已知地址中没有以前的节点可用

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

  • 节点应该有select性的关于他们保持的同龄人; 即他们更可能交换数据的数据(例如基于历史的权重)

  • 根据应用,节点链路可以是不对称的或对称的

但是,您的发送电子邮件的方法确实使用专用服务器; 对方的电子邮件服务器,确切地说。

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

基本上,如果你有一组X个对等点,连接了Y个时间量,然后在Z个时间点离开这个网格点……基本上,你可以构造一个关于这个点的可能性的概率方程您上次联系的同事组仍然可用; 如果概率接近1(对于上面给定的一组X,Y和Z),则最有可能在不使用存储的情况下维持对等networking。

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

如果你想变得非常棘手,你可以开始使用基本的隐写方法来隐藏对等位置信息。 即得到一个谷歌search“等等”; find结果中列出的第一个没有保护的(没有CAPTCHA)留言板的网站; find以“Indubitably”(或其他)开头的第三个(或其他)post,在那里find第一个消息的头部,并且有对等体的IP地址。 如果这不起作用,请按照search条件列表进行下一步。

但是这是偷偷摸摸的。 🙂

您可以重新使用现有的专用服务器吗?

我特别想用一个dynamicDNS注册每个对等点,但是如果你愿意有点丑陋,共享一个已知的Hotmail帐户或Google Doc等。

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

如果页面结构是一个众所周知的模式或包含该对等的可识别的连接信息,那么在search结果中很容易区分它们。 使用这样的公共目录会让你打开networking中已经形成的被攻破的节点,但是对于没有安全机制的任何P2Pnetworking来说,情况都是如此。

通过谷歌(或其他一些search引擎)获取网站的抓取和高度排名,将会成为你的特定search术语。 我可以想到几种方法,但不是我会用的方法。 对于一个合法的服务,我宁愿花钱或找一个可以作为目录的免费网站。

那么另外一个P2P系统是专门用来跟踪其他P2P系统的在线同行呢?

然后,我们减lessfind任何新的P2P系统的同龄人的问题,简单地find“主”P2P系统的同龄人,这将给你你在使用感兴趣的系统在线同龄人的地址…

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

每个节点都有一个GUID,用于通过对等networking路由请求。

如果你喜欢已经build立的中央服务器,那么请看页面上的metaserver条目:
http://martindevans.appspot.com/
你可以在那里注册同伴,然后其他同伴可以find他们。 显然这是一个中央服务器,但它不需要维护。