原文地址:http://write.blog.csdn.net/postedit
一、什么是P2P
对等网络(PeertoPeer,简称P2P)也称为对等连接,是一种新的通信模式,每个参与者具有同等的能力,可以发起一个通信会话。
这个定义有点抽象,下面就来简单地解释一下。粗略地讲,应用程序可以设计成采用客户机/服务器体系结构或对等体系结构(P2P)。我们日常生活中的许多应用程序,包括web、电子邮件和DNS,都是使用客户机/服务器体系结构;而文件分发,例如大家熟悉的迅雷下载等,就是使用P2P文件分发的技术,使用的就是对待体系结构(P2P)。
对于客户机/服务器体系结构,它要求总是打开的基础设施服务器。相反,使用P2P体系结构,对总是打开的基础设施服务器有最小的(或者没有)依赖,任意间断连接的主机对都称为对等方,各个对等方直接通信。对等方并不为服务提供商所有,而是为用户控制的设备。
二、P2P文件分发
下面通过一个具体的应用来研究P2P,这个应用是从单一服务器向大量主机(对等方)分发大文件。
在客户机/服务器文件分发中,服务器必须向每个客户机发送该文件的一个拷贝,这同时给服务器造成了极大的负担,并且消耗了大量的服务器带宽。在P2P文件分发中,每个对等方(即对应客户机/服务器体系结构中的客户机)都能够重新分发其所有的该文件的任何部分,从而协助服务器进行分发。
1、客户机/服务器体系结构 VS P2P体系结构
首先我们假设文件的长度为F,服务器上传的速率为U,下载速率为D,而客户机有N台,每台的上传速率为ui(i=1、2...N),每台的下载速率为di(i=1、2...N)。
由于每一次文件的分发都涉及服务器上传文件和客户机(或对等方)下载文件。在下面的讨论中,我们假设F、U、D、ui、di均不变,而N,即对等方数量却是可变的。
首先,对于客户机/服务器体系结构,服务器上传N个文件(因为有N个客户,每个客户一个文件的副本)所需要的时间至少为NF/U。而下载速率最小(用dmin表示)的对等方不可能在F/dmin秒内获得该 文件的所有F比特,所以使用客户机/服务器体系结构分发文件所需的时间为
Dcs = max{NF/U,F/dmin}
即所需要的最小时间由下载文件最长时间和上传文件中的较大者决定,其实这也是很自然的事,因为分发时间,要不就是服务器上传这N个文件用时多,要不就是对等方下载这N个文件用时多。然而,我们可以看到NF/U会随着N的增大而线性增大,而F/dmin却是个常值。也就是说当N达到一定的程度时,它必然大于F/dmin,也就变成是Dcs的值,即Dcs = NF/U。
然后,对于P2P体系结构,其中每个对等方都能够帮助服务器来分发文件。也就是说,当一个对等方接收到文件数据时,它可以利用自己的上载能力重新将数据分发给其他对等方。
在分发的开始,只有服务器拥有文件。为了使对等方得到该文件,服务器必须经其接入链路至少发送一次该文件。因此最小分发时间至少是F/U。因为在P2P体系结构中,服务器发送一次文件就可能不用再次发送了,因为其他对等方可以从拥有该文件的对等方中获得。
与客户机/服务器体系结构相同,下载速率最小的对等方不可能在F/dmin秒之内获得文件F的所有比特。因此最小的分发时间也可能是F/dmin。
最后,系统的总上载能力等于服务器的上载速率加上每个对等方的上载速率,即Utotal=U+u1+u2...+uN。系统必须向N个对等方的都交付(上载)F比特,因此总的交付为NF比特。所以最小分发时间至少是NF/(U+u1+u2...+uN)。
综上所述,使用P2P体系结构分发文件所需要的时间为
Dp2p = max{F/U, F/dmin, NF/(U+u1+u2...+uN)}
即最小分发时间由服务器上传的时间,对等方下载的最长时间和所有对待方上传下载的时间来决定。同样,因为F/U, F/dmin都是常数,所以当N达到一定值后,NF/(U+u1+u2...+uN)就会大于前面的两者,成为分发文件所需要的时间,即Dp2p = NF/(U+u1+u2...+uN)。从表达式中,我们可以看到,当N的值增大时,由于对等方的数量也能加了,所以U+u1+u2...+uN的值也会随之增大,所以函数并不像客户机/服务器体系结构中函数那样,分发时间会线性地增加,它的曲线与对数函数(如log2N)的曲线相似。所以当N的值较大时,P2P体系结构分发文件所需要时间远比客户机/服务器体系结构的小。
2、BitTorrent——用于文件分发的流行P2P协议
前面用数学的方法说明了基于客户机/服务器体系结构和基于P2P体系结构的文件分发所需的时间的差别,下面来说一下,这个P2P文件分发是如何实现的。下面以使用BitTorrent协议为例子说明。
在BitTorrent中,把参与一个特定文件分发的所有对等方的集合称为一个洪流。在一个洪流中,对等方彼此下载等长度的文件块,块长度通常为256KB。当一个对等方开始加入一个洪流时,它没有文件块。但是随着时间的推移,它将累积到越来越多的文件块。当它下载文件块时,也为其他对等方上载多个文件块。对待方一旦获得了整个文件,它可以离开洪流,或留在洪流中,为其他对等方上载文件块。同时,任何一个对等方可以在任何时候离开洪流,以后也可以重新加入洪流。
这里有二个问题,1)我们的主机或设备加入一个洪流中时如何知道它有哪些对等方,即它如何知道它要向哪些主机请求所需要的文件。2)我们在下载文件时,如果确定我们所需要的文件块是哪一块,换句话说就是,文件有很多块组成,而我们下载时并不按文件原有的顺序下载,那么我如何确定我还需要下载哪些块来让这个文件变得完整。
首先回答第一个问题,每个洪流具有一个基础设施节点,称为追踪器。当一个对等方加入洪流时,它向追踪器注册,并周期性地通知追踪器它仍在洪流中。一个特定的洪流可能在任意时刻拥有数以百计或千计的对等方。当一个新的对等方A加入洪流时,追踪器随机地从参与对等方集合中选择一些对等方,并将这些对等方的IP地址发送给A,A持有对等方的这张列表,试图与该列表上的对等方创建并行的TCP连接,与A成功地创建TCP连接的对等方称为“邻近对等方”。随着时间的推移,其中的一些对待方可能离开,而另一些对等方可能试图与A创建TCP连接,就像A之前所做的那样。这样我们就可以知道我们要下载的文件所在洪流中有哪些的对等方。
再来回答第二个问题,在任何时刻,每个对等方都具有某文件块的子集,且不同的对等方具有不同的文件块子集。A周期性询问每个邻近对等方所具有的块列表并获得其邻居的块列表,因此A将对它当前还没有的块发出请求。同时由于在洪流中的每一个对等方既下载又上传,所以A还应决定它请求的块应该发送给它的哪些邻居。通常在请求块的过程中,使用一种叫最稀罕优先的技术,即根据A没有的块从它的邻居中确定最稀罕的块(即那些在它的邻居中拷贝数量最少的那些块),并优先请求这些最稀罕的块。这样做的目的也是很明显,就是让每个块在洪流中的拷贝数量大致相等,这样同时也能提高总的下载速率,因为下载不会卡在某个文件块的下载中。
三、P2P区域搜索信息
P2P的另一个重要应用就是信息索引,即信息到主机位置的映射。
为了说明什么是索引,举个例子说明吧,P2P文件共享系统中有一个索引,它动态地跟踪这些对等方可供共享的文件。该索引维护了一个记录,记录将有关拷贝的信息映射到具有拷贝对等方的IP地址。当一个对等方加入系统时,它通知系统它所拥有的文件索引。当一个用户希望获得一个文件时,他搜索索引以定位该文件的拷贝的位置。
注:P2P文件分发与P2P文件共享还是有一定的区别的,P2P的文件共享有可能发生在不同的时段,例如,现在收到的文件,1小时后才需上传。P2P的文件共享也有可能发生在不同的文件,例如,需要下载A文件,却为其他用户提供B文件。而P2P的文件分发更多是针对单一文件,在下载的同一时间为其他用户提供上传服务,这是一个协同处理的过程。
1、集中式索引
由一台大型服务器(或服务器场)来提供索引服务。当用户启动P2P文件共享应用程序时,该应用程序将它的IP地址以及可供共享的文件名称通知索引服务器。索引服务器收集可共享的对象,建立集中式的动态数据库(对象名称到IP地址的映射)。
它有如下的缺点:
1、单点故障
2、性能瓶颈
3、可靠性差
这种索引方式的特点是:文件传输是分散的(P2P的),但定位内容的过程是高度集中的(客户机/服务器)。
2、查询洪泛
查询洪泛采用完全分布式的方法,索引全面地分布在对等方的区域中,对等方形成了一个抽象的逻辑网络,称为覆盖网络。当A要定位索引(例如abc)时,它向它的所有邻居发送一条查询报文(包含关键字abc)。A的所有邻居向它们的所有邻居转发该报文,这些邻居又接着向它们的所有邻居转发该报文等。如果其中一个对等主与索引(abc)配置,则返回一个查询命中报文。
但是这种简单的方法却有一个致命的缺点,就是它会产生大量的流量。
一个解决办法就是采用范围受限查询洪泛。设置一个计数值,对等方向其邻居转发请求之前就将对等方的计数字段减1,当一个对等方的计数字段为0时,停止查询。
3、层次覆盖
该方法结合了集中式索引和查询洪泛的优点,与查询洪泛相似,层次覆盖设计并不使用专用的服务器来跟踪和索引文件。不同的是在层次覆盖中并非所有的对等方都是平等的。
它的示意图如下:
超级对等方(组长对等方)维护着一个索引,该索引包括了其子对等方(普通对待方)正在共享的所有文件的标识符、有关文件的元数据和保持这些文件的子对等方的IP地址。而超级对等方通常也只是一个普通的对等方。超级对等方之间相互建立TCP连接,从而形成一个覆盖网络,超级对等方可以向其相信超级对等方转发查询,但是仅在超级对等方使用范围受限查询洪泛。
当某对等方进行索引时,它向其超级对等方发送带有关键词的查询。超级对等方则用其具有相关文件的子对等方的IP地址进行响应,该超级对等方还可能向一个或多个相邻的超级对等方转发该查询。如果某相邻对等方收到了这样一个请求,它也会用具有匹配文件的子对等方的IP地址进行响应。
与受限查询洪泛设计相比,层次覆盖设计允许数量多得多的对等方检查匹配,而不会产生过量的查询流量。
通过这两种P2P常用应用的介绍,大家对P2P应该有一定的认识了吧!
注:由于IP地址的不够用,在IP的使用中有一种技术叫做NAT地址转换,从而对P2P的应用产生了一定的影响,因为使用了NAT后,对等方不能正确地获取处于同一洪流是的对等方的IP地址,从而把P2P的应用限制在一个局域网中。这在后面说IP的NAT时再作介绍。

计算机网络层之 P2P相关推荐

  1. 名词解释P2P计算机网络技术,计算机三级网络技术P2P网络知识考点

    计算机三级网络技术P2P网络知识考点 计算机等考三级网络技术P2P网络考点知识大家一定要熟悉,下面是小编为大家收集的关于计算机等考三级网络技术P2P网络考点知识,希望能够帮到大家! 1.什么是P2P网 ...

  2. 计算机三级网络是什么,计算机三级网络技术P2P网络概述

    计算机三级网络技术P2P网络概述 引导语:P2P是无中心服务器.依靠用户群(peers)交换信息的互联网体系.以下是百分网小编分享给大家的计算机三级网络技术P2P网络概述,欢迎阅读! 1.什么是P2P ...

  3. 我画了 40 张图就是为了让你搞懂计算机网络层

    我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 前面我们学习了运输层如何为客户端和服务器输送数据的, ...

  4. 计算机网络层包括哪些设备,网络层的设备有哪些

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 网络层的设备有中继器.集线器.网桥.交换机.路由器.网关 .计算机网络体系中,这几样通信设备或者说网络名词出现的频率相当的高. 计 ...

  5. 计算机网络层协议介绍icmp/arp

    目录 网络层的功能 IP数据包格式 ICMP协议介绍 ICMP协议的封装 Ping命令 ARP协议 ARP工作原理 网络层的功能 定义了基于IP协议的逻辑地址 连接不同的媒介类型 选择数据通过网络的最 ...

  6. 计算机网络层实验路由表苏州科技,苏州科技大学计算机网络实验报告课案.docx...

    苏州科技大学计算机网络实验报告课案 苏州科技学院 电子信息实验中心实验报告课 程计算机网络原理学 名徐金玮班 级计算机1312专 业计算机科学与技术指导教师陶滔学年 / 学期2015~2016学年第一 ...

  7. 计算机网络层路由器工作原理——实现直连网段的通信

    IP地址分为5类: A类(1~126)127:回环地址:主机自己 B类(128~191) C类(192~223) D类(224~239)组播 E类(240~255)科研 C类地址是我们生活中常用的地址 ...

  8. 基于TCP/UDP的P2P网络通信协议研究与实现

    此章节是理论知识,下个章节会奉献源码 摘    要 对等式网络(peer-to-peer,简称P2P),又称点对点技术,是一种实现网络中不同主机直接通信的技术.在物联网的应用中,大量的设备需要能进行点 ...

  9. 《图说区块链》读书笔记(完整版)

    书籍框架 第一章 起源 账本演变 概述区块链最直接的词汇就是分布式账本,所以有必要从记账角度探寻其诞生的意义. 书中按照时间顺序梳理了账本的历史演变过程: 旧石器时代->死记硬背和心算 有生产者 ...

最新文章

  1. 在Windows 7下安装Oracle 11g的解决方法
  2. html5行级标签,8、html5哪些标签时块级、行内、行内块?2021-01-30
  3. 超燃开学演讲:不读书不吃苦,你要青春干嘛
  4. 使用springaop技术面向切面编程
  5. 64位Outlook 无法与OC集成
  6. 监控Squid运行脚本
  7. 2020行政区划重新划分_邯郸市的20年,2000年-2020年区划对比,你觉得成绩如何?...
  8. 想做视频号,先纠正一点
  9. matlab拟合gamma分布,使用matlab拟合Gamma分布
  10. nideshop小程序商城部署
  11. retainAll用法
  12. ADF实现主副控件联动的方法
  13. 如何使用Depend工具分析DLL
  14. html5怎么把文字竖排,艺术字竖排文字怎么设置
  15. 《Qt5:Widget、Dialog和MainWindow之间的关系》
  16. HDwiki+discuz在启用https下的整合问题
  17. FPGA error:buffers of the same direction cannot be placed in series.
  18. DOSBOX运行程序
  19. 转自新浪博客的网页运作原理
  20. Java日期类 util.Date sql.Date Calendar LocalDateTime 格式化 DateFormat DateTimeFormatter

热门文章

  1. composer 升级/降级安装包
  2. 谷歌Chrome浏览器就能远程控制安卓手机,电脑远程控制手机的快捷方法get!
  3. 我想谈一谈外包,请不要“妖魔化”它。
  4. 十一、非参数检验:使用python进行卡方两样本独立性检验
  5. java中判断字符是否为英文字母、中文汉字或者数字
  6. 终有一天,你没法成为曾经梦里的那个人了。
  7. 8分频verilog线_七、八分频电路Verilog源代码
  8. 孢子社群:今日推荐人工智能微信群:粤、沪、鄂人工智能产业化集群1
  9. vue实现点击不同按钮展示不同内容
  10. PS——使用 快速选择工具、魔法棒 抠图