P2P综述
原文参见:http://www.lotushy.com/?p=113
[TOC]
什么是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 (私有,仅迅雷公司使用)
Bitcoin中的P2P协议分析
引文
P2P综述的更多相关文章
- Peer-to-Peer 综述
Peer-To-Peer 网络介绍 最近几年,Peer-to-Peer (对等计算,简称P2P) 迅速成为计算机界关注的热门话题之一,财富杂志更将P2P列为影响Internet未来的四项科技之一. “ ...
- Libjingle库 综述
国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY.AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响.而基于P2P方 ...
- 分享“12306 P2P平台”创业Idea
结合云平台抢票,社区,P2P等性质,实施供求抢票平台,能有效提高和整合抢票市场,抢票优势以杜绝黄牛,给散户提供更有利的抢票途径.本在11月计划实施,后去搞比特币,故分享摘要集思广益. 背景 ...
- Socket编程实践(3) 多连接服务器实现与简单P2P聊天程序例程
SO_REUSEADDR选项 在上一篇文章的最后我们贴出了一个简单的C/S通信的例程.在该例程序中,使用"Ctrl+c"结束通信后,服务器是无法立即重启的,如果尝试重启服务器,将被 ...
- R可视化lend_club 全球最大的P2P平台数据75W条
lend_club 全球最大的P2P平台2007~2012年贷款数据百度云下载. 此文章基于R语言做简单分析. rm(list=ls()) #清除变量 gc() #释放内存 step1 考虑到后续分析 ...
- 浅谈P2P金融
自从李总理开发互联网大会,提出“互联网+”,好像与互联网相在的所有事情都火起来了.上至80岁的老头,下至十多岁的孩童,都知道了这个词“互联网+”.虽然大家可能对”互联网+“的概念都只是一支半解,但是像 ...
- 王宝强新片P2P风波持续发酵,互金真的前途未卜?
王宝强离婚风波还未完全结束,一波未平一波又起,新片又引来话题爆点,其自导自演的电影<大闹天竺>陷P2P平台集资的新闻占据各大媒体头条. 该P2P平台为湖北武汉一家P2P互联网金融理财平台& ...
- Python爬虫入门一之综述
大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...
- p2p tcp nat 原理图+源码(原创)
现今网上p2p的 udp nat穿透 文章 多如牛毛, p2p tcp nat的文章寥寥无几 ,up主研究了几天 终于有所收获,特来向大家分享,请大家多多支持! 1.首先你要有台外网服务器 或者 电信 ...
随机推荐
- LindDotNetCore~框架介绍及特色功能(有点springboot的意思)
LindDotNetCore模块介绍 大叔博客 LindDotNetCore相关模块介绍 [x] 全局都是依赖DI [x] 消息队列 [x] NoSql [x] Caching [x] 仓储 [x] ...
- ansible常见模块
模块的使用 查看模块帮助 ansible-doc -l 查看所有模块 ansible-doc -s MODULE_NAME 查看指定模块的详细帮助 ansible命令应用基础 语法: ansible ...
- 面向对象,更适合JavaScript
面向对象程序设计是软件开发中一个很庞大很复杂的话题,它并不是仅仅学会类.继承.封装.多态这些面向对象编程语法元素就表示掌握的,这些语法元素只是实现面向对象程序的工具, 就像砖块.水泥能搭建小屋,也能造 ...
- Django用普通user对象登录的必须准备步骤
zt from http://segmentfault.com/q/1010000000343563 在stackoverflow找到了解答(http://stackoverflow.com/ques ...
- day10_cookie&session学习笔记
一.会话概述 1.什么是会话?如同打电话. 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 2.会话过程要解决的问题是什么?保持 ...
- 启动SpringBoot的可执行jar 报错:target\spring-boot-hello-1.0-SNAPSHOT.jar中没有主清单属性
打包成功,但是在执行时报错,没有主清单属性 解决: 增加红框内的依赖: <build> <plugins> <plugin> <groupId>org. ...
- TensorFlow图像处理API
TensorFlow提供了一些常用的图像处理接口,可以让我们方便的对图像数据进行操作,以下首先给出一段显示原始图片的代码,然后在此基础上,实践TensorFlow的不同API. 显示原始图片 impo ...
- CentOS的启动流程
因6和7俩个系列的启动流程有区别,所以我把他们分开来写 linux可看作是内核和根文件系统组成我们把内核单独拿出来总结一下 CentOS6系列启动流程 首先总结一下总体的流程,接下来展开来叙述:POS ...
- 1、原生javascript方法小汇
Js 对象 使用new 关键字来创建对象,举例如下, var a = new String();如构造函数无参数,则不必加括号, JS内部对象数组(Array)对象创建数组var myarray = ...
- .NET开发微信小程序(基础配置)
1.微信小程序的必备Model public class WxConfig { /// <summary> /// 小程序的appId /// 登录小程序可以直接看到 /// </s ...