4

在 BitTorrent 中,客户端连接到 .torrent 文件中指定的跟踪器。Tracker 是一种中心化的服务器,它是起点。所以 BitTorrent 不是纯粹的 p2p。

如果我们要开发纯p2p系统,我们应该设计路由覆盖网络。所有节点都会像路由器一样拥有路由表。但是即使在路由覆盖网络中,每个节点最初都应该知道至少一个现有节点(GUID,IP地址)。那么我们如何确定这一点呢?我们是否应该像固定的集中式服务器一样永远保持“一个现有的节点开始连接”?如果是这样,我认为这不是完全去中心化的方法。

4

4 回答 4

2

您描述的解决方案(定义一个具有众所周知的 IP 地址的中央对等点)并不是唯一的解决方案。

另一种解决方案是在网络上众所周知的 URL 中发布一个 html 页面(或 json 文件),并确保该项目包含该对等点可以初始连接的对等点的更新列表。如果对等点出现故障,则可以更新此列表。最终,您可以使用多个 URL。

纯粹的 P2P 系统是一个理论概念,在现实中无法完全实现。

于 2012-07-16T17:43:15.933 回答
1

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

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

于 2012-05-10T05:57:15.860 回答
0

首先,真正的点对点网络不一定是去中心化的。其次,去中心化并不一定意味着网络不使用本身可能是中心化的辅助服务。

这两个问题的主要问题是网络解决方案的主要资源是否通过相关对等点进行分配。

例如,对等视频会议可以使用中央联系人服务,但仍然是纯对等的,只要对等方在进入真正的对等范围之前解决此类问题。这也将是分散的。

它归结为您试图通过使用点对点来解决的问题。视频会议是一种视频会议 - 它以在一个对等方上录制的视频开始,并以在另一个对等方上观看的视频结束。只要此数据的每个字节都在对等点之间直接传输(即使会议中有数百个对等点,并且无论这些对等点如何找到彼此),它就是真正的点对点视频会议。

请注意,视频对等点仍将在您的典型环中,并且联系人列表可能仍使用节点密钥而不是 IP 来获取位置信息。这仍将是一个网络覆盖,因为它仍将基于 IP 构建,取代它在对等级别的寻址方案,以促进真正的对等网络。

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

因此,为了回答您的问题,它最初连接的位置并不重要,以便被视为点对点,并且不同的点对点服务将根据其服务设计来处理这个问题。

于 2013-10-20T09:28:08.583 回答
0

好的,所以我正在考虑为一个 AI 项目的许多不同服务编写一个 p2p 协议,我想我会来这里看看我是否能获得一些关于如何获得初始连接的想法。

我遇到了几种建立初始连接的方法:

1)您在互联网上有一个静态 IP 地址,可以在其他对等方上分发信息。这不好,因为:a)它是单点故障,服务可能会脱机,阻止任何新连接创建与对等方的初始连接,b)IP 地址可能会更改。这可以通过使用一个域名来缓解,该域名指向提供对等点数据的服务位置的当前 IP 地址,但是理论上这可以被黑客通过欺骗或 arp 中毒、dns 攻击等破坏。

2)您可以强制用户为另一个对等方提供初始 IP 地址或主机名,由用户自行查找主机名/IP 地址/端口号。这很好,但如果有人发布虚假信息,或者他们在谷歌或其他搜索网站上找不到同行,那么显然它是错误的。

3) 你可以把它留给对等方在一个中心位置发布他们自己的存在 - 例如一组 IRC 频道或一组网站。同样,除非它通过一个中央可信域,否则很难确定对等点的真实性。

4)您可以使用某种 nmap 风格的发现算法,通过子网搜索适当的协议。这种方法的问题是它很慢,并且可能会引起防火墙等事物的注意。

5) 这是 3) 的变体,您可以允许同行在网站上宣传自己的信息,然后不必在合适的位置(特定网站或网站组)寻找信息,您可以让google 的搜索算法会找到它,并为您进行发现,但是您可以想象,google 可能需要几天的时间来缓存网站数据以及对等点的信息。同样,您可以提供某种方法来验证广告数据的真实性。

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

这就是我目前所能想到的,但如果有人想出任何其他方法来做到这一点,我会非常感兴趣。

于 2016-10-02T15:13:33.627 回答