原文参见:http://www.lotushy.com/?p=113
什么是P2P
P2P全称是Peer-to-peer。P2P计算或P2P网络是一种分布式应用架构。它将任务或负载分发给Peers。在应用中,Peers是平等的、对等的参与者。
从资源角度来讲,Peers将它们拥有的资源如cpu、存储、网络带宽等直接分享给其它参与者们。所以,Peers即是资源的提供者也是资源的消费者。而在Client-Server架构中,资源消费和资源供给是分离开的。新兴的协作式P2P系统超越了Peers在共享资源时做同类事情的时代,并且正在寻找多元化的Peers,这些Peers可以为虚拟社区带来独特的资源和能力。
发展历史
虽然P2P系统以前在许多应用领域被采用,但这个概念被文件共享系统所普及,例如音乐共享应用Napster(最初于1999年发布)。
点对点移动使得数百万互联网用户能够“直接连接”,形成团体并彼此合作进而形成用户创建的搜索引擎,虚拟超级计算机和文件系统。在早期的软件系统和网络讨论中设想了点对点计算的基本概念,回溯到Request for Comments所陈述的原因。
Tim Berners-Lee对万维网的看法与P2P网络非常接近,因为它假定网络的每个用户都是活跃的编辑和贡献者,创建和链接内容以形成相互关联的“链接”网络。早期的互联网比现在更开放,两台连接到互联网的机器可以在没有防火墙和其他安全措施的情况下将数据包发送给对方。这与多年来发展起来的网络类广播结构形成了鲜明的对比。作为互联网的先驱,ARPANET是一个成功的client-server网络,“每个参与节点都可以请求和提供内容”。 然而,ARPANET并不是自组织的,它不具备“为简单的基于地址的路由之外的上下文或基于内容的路由提供任何手段的能力”。
USENET,一种分布式的消息系统,通常被认为是早期的p2p架构,开发于1979年。基本模型是从用户或客户角度来看的client-server模型,它为新闻组服务器提供了一种自组织方法。但是,新闻服务器以对等方的身份进行通信,以便在整个网络服务器组上传播Usenet新闻报道。 同样的考虑适用于SMTP电子邮件,因为邮件传输代理的核心电子邮件中继网络具有对等角色,而电子邮件客户端与邮件代理则是严格的client-server关系。
在1999年的5月,伴随着几百万互联网用户的出现,Shawn Fanning引入音乐分享应用Napster。
Napster是P2P网络的起点,就我们目前所知,一种虚拟网络,完全独立于物理网络,而不必遵守任何行政限制。
架构体系
路由和资源发现
对等网络通常在物理网络拓扑之上实现某种形式的overlay network(虚拟层叠网络),其中覆盖层中的节点形成物理网络中节点的子集。数据仍然直接在底层TCP / IP网络上交换,但是在应用层,Peers可以通过逻辑层叠链路(每个链路对应于通过底层物理网络的路径)直接相互通信。 层叠网络用于索引和对等节点(peer)发现,并使P2P系统独立于物理网络拓扑。
根据节点在层叠网络中彼此链接的方式以及资源如何索引和定位,我们可以将P2P网络分类为非结构化或结构化或两者之间的混合(Hybrid)。
非结构化网络
非结构化网络的典型代表是Gnutella, Gossip, Kazaa。
非结构化网络没有特定的结构。节点通常是随机的连接到其他节点。
由于没有全球强加于它们的结构,非结构化网络很容易建立,并允许对层叠网络的不同区域进行局部优化。 另外,由于网络中所有对等节点(peer)的角色都是相同的,非结构化网络在面对高速率“流失”时具有高度稳健性 - 也就是说,当大量对等点频繁地加入和离开网络时,这种网络依然是健壮的。
然而,非结构化网络的主要局限性也是由于缺乏结构。 特别是,当peer想要在网络中找到所需的数据段时,搜索查询必须通过网络进行泛洪以找到尽可能多的共享数据的peer。 洪泛会导致网络中信令流量非常高,使用更多的CPU/内存(通过要求每个peer处理所有搜索查询),并且不能确保搜索查询将始终得到解决。 此外,由于peer与其管理的内容之间没有关联,所以不能保证泛洪将找到具有所需数据的peer。 受欢迎的内容可能会在多个peer中找到。 但是,如果一个peer正在寻找罕见的数据,而且只有少数其他peer共享,那么搜索很不可能成功。
结构化网络
结构化网络的典型应用有BitTorrent,Kad network,Storm botnet,YaCy,Coral Content Distribution Network。
在结构化的P2P网络中,层叠层被组织成一个特定的拓扑结构,并且该协议确保任何节点都可以有效地在网络中搜索文件/资源,即使资源极其稀少。
最常见的结构化P2P网络实现是一种分布式散列表(DHT),使用一致性散列的变体来将每个文件的所有权分配给特定的peer。这使peer能够使用散列表在网络上搜索资源:也就是说,(Key,Value)对存储在DHT中,并且任何参与节点都可以有效地检索与给定Key相关联的Value。
但是,为了有效地通过网络路由流量,结构化层叠网中的节点必须维护满足特定条件的邻居列表。 这使得它们在高流失率的网络(即大量节点频繁地加入和离开网络)中的稳健性较差。 最近对实际工作负载下的P2P资源发现解决方案的评估指出了基于DHT的解决方案中的几个问题,例如广播/发现资源的高成本以及静态和动态负载不平衡。
混合模型
混合模型是对等和客户-服务器模型的组合。一个常见的混合模式是有一个中央服务器,可以帮助同行找到对方。 Spotify是混合模式的一个例子[直到2014年]。对于中国用户而言,迅雷是个典型的混合模型。
安全和信任
从计算机安全角度来看,P2P系统构成了独特的安全挑战。
路由攻击
由于每一个节点均在流星路由中扮演一个角色,恶意用户可以发起多种形式的路由攻击或拒绝服务攻击。
常见路由攻击的例子包括“不正确的查找路由”,由此恶意节点故意不正确地转发请求或返回错误结果,恶意节点通过向相邻节点的路由表发送错误信息而导致“错误的路由更新”,以及“不正确的路由网络分区 “当新节点加入时,他们通过恶意节点进行引导,这会将新节点放入由其他恶意节点填充的网络分区中。
损坏的数据和恶意软件
恶意软件的流行程度因不同的P2P协议而异。
应用
内容分发
在P2P网络中,客户端都提供和使用资源。这意味着,与client-server系统不同,P2P网络的内容服务能力实际上可以随着更多用户开始访问内容而增加(特别是使用需要用户共享的协议(如BitTorrent)时,请参考性能测量研究)。该属性是使用P2P网络的主要优势之一,因为它使原始内容分发者的设置和运行成本非常小。
文件分享网络
众多的文件分享网络是基于P2P网络的,如Gnutella, G2, eDonkey等。
- P2P的内容投递
- P2P的内容服务,如缓存服务
- 软件发布和分发
** 侵犯版权 **
P2P网络上的数据传输是没有中心server的。开发P2P应用的公司通常深陷大量的法律诉讼,特别是在美国。
多媒体
- P2PTV和PDTP
- Spotify
- Peercasting,一种多播流媒体
- Osiris,一种允许用户创建匿名站点。这种站点发布在P2P网络。ZeroNet也是一种运行于P2P网络的Web站点。
其他的P2P应用
- Tradepal和M-commerce
- 数字加密货币应用:Bitcoin,Ether, Nxt, Peercoin等
- I2P, 一种层叠网络,主要用于匿名的浏览因特网。Google的解释是:I2P,是一项混和授权的匿名网络项目。
- Infinit是一款用c ++编写的针对数字艺术家的无限加密对等文件共享应用程序
- Netsukuku, 一种无线社区网络,独立于因特网。
- Dalesa,一种用户局域网的web缓存服务
- Open Garden
- 研究性网络,如Chord Project, PAST storage utility, P-Grid, CoopNet content distribution system
社会影响
隐私和匿名
一些P2P网络如Freenet特别强调隐私和匿名。公钥加密技术用于提供加密、数据检验、授权和认证。Onion routing和其他的mix network协议则用来提供匿名特性。
P2P协议
- Ares
- Bitcoin
- BitTorrent
- Direct Connect
- FastTrack
- eDonkey
- Gnutella
- Libp2p: IPFS, Orbit
- OpenNap
- RShare
- Xunlei (私有,仅迅雷公司使用)