@zhongdao
2020-08-23T18:38:33.000000Z
字数 7563
阅读 3012
未分类
点对点(P2P)计算或网络是分布式应用程序体系结构,用于在对等体之间分割任务或工作负载。
其中互联节点(“对等”)彼此共享资源而不使用集中式管理系统.
P2P网络的分散性提高了鲁棒性,因为它消除了基于客户端 - 服务器系统固有的单点故障。[36]作为节点到达和对系统的需求的增加,系统的总容量也增加,发生故障的可能性减小。如果网络上的一个对等设备无法正常工作,则整个网络不会受到影响或损坏。相比之下,在典型的客户端 - 服务器体系结构中,客户端只与系统共享需求,而不是他们的资源。在这种情况下,随着更多客户端加入系统,为每个客户端服务的资源越来越少,并且如果中央服务器发生故障,整个网络就会被关闭。
在P2P网络中,客户端都提供和使用资源。这意味着,不像客户端-服务器系统,对等网络的网络服务内容的容量实际上可以增加更多的用户开始访问内容。该属性是使用P2P网络的主要优势之一,因为它使原始内容分发者的设置和运行成本非常小
覆盖非结构化P2P网络的网络图,说明节点之间连接的临时特性
非结构化的对等网络不会通过设计在覆盖网络上施加特定的结构,而是由随机形成彼此连接的节点形成。
非结构化网络的主要局限性也是由于缺乏结构。特别是,当对等方想要在网络中找到所需的数据段时,搜索查询必须通过网络进行泛洪以找到尽可能多的共享数据的对等点。泛滥造成网络中信令流量非常高,使用更多的CPU /内存(通过要求每个对等方处理所有搜索查询),并且不能确保搜索查询将始终得到解决。
在结构化的对等网络中,叠加层被组织成一个特定的拓扑结构,并且该协议可以确保任何节点都可以有效地在网络中搜索文件/资源,即使资源极其稀少。
最常见的结构化P2P网络类型实现了分布式散列表(DHT),其中使用一致散列的变体来将每个文件的所有权分配给特定对等体。这使同伴能够使用哈希表在网络上搜索资源:即(密钥,值)对存储在DHT中,并且任何参与节点可以有效地检索与给定密钥相关联的值。
为了有效地通过网络路由流量,结构化覆盖图中的节点必须维护满足特定条件的邻居列表。这使得它们在高流失率的网络(即大量节点频繁地加入和离开网络)中不够健壮。
BitTorrent 使用"分布式哈希表"(DHT)来为无 tracker 的种子(torrents)存储 peer 之间的联系信息。这样每个 peer 都成了 tracker。这个协议基于 Kademila 网络并且在 UDP 上实现。
在使用DHT分发Peer之前,Tracker是找到Peer的唯一方法。
2005年5月2日,Azureus 2.3.0.0(现在称为Vuze)发布,通过称为“分布式数据库”的系统引入了对“无tracker”种子的支持。该系统是一个分布式散列表DHT实现,它允许客户端使用没有BitTorrent tracker的种子。接下来的一个月,BitTorrent公司发布了Mainline BitTorrent客户端的4.2.0版本,该客户端支持与Azureus不兼容的另一种DHT实现(俗称“ Mainline DHT ”,在其网站上的草稿中概述)。最近的测量显示,Mainline DHT的用户从1000万到2500万,每日活跃至少1000万。 主线DHT可以说是世界上最大的DHT。
官方BitTorrent客户端的当前版本,μTorrent,BitComet,Transmission和BitSpirit都与Mainline DHT共享兼容性。这两个DHT实现都基于Kademlia。作为3.0.5.0版本,Azureus的也支持干线DHT除了其自己的分布式数据库通过使用一种可选的应用插件。这可能让Azureus / Vuze客户端达到更大的群体。
在Vuze中出现的另一个想法就是虚拟种子。这个想法是基于分布式跟踪器的方法,并用于描述一些网络资源。目前,它用于即时消息。它使用特殊的消息协议实现,并需要一个适当的插件。Anatomic P2P是另一种方法,它使用分散的节点网络将流量路由到动态tracker。除了tracker和DHT之外,大多数BitTorrent客户端还使用对等交换(PEX)来收集对等点peer。Peer交换检查与已知的peers,看看他们是否知道任何其他peers。在Vuze的3.0.5.0版本中,所有主要的BitTorrent客户端现在都具有兼容的对等交换。
混合模型是对等和客户 - 服务器模型的组合。一个普通的混合模式是有一个中央服务器,可以帮助同伴找到对方。
在结构化服务器/客户端网络提供的集中功能与纯对等非结构化网络提供的节点相等之间进行权衡。目前,混合模型比单纯的非结构化网络或纯粹的结构化网络具有更好的性能,因为某些功能(如搜索)确实需要集中功能,但受益于非结构化网络提供的节点的分散聚合。
点对点应用程序是网络中立性争议的核心问题之一。已知因特网服务提供商(ISP)由于其高带宽使用而限制P2P文件共享业务量。相比于网络浏览,电子邮件或互联网,这样的数据仅在短的时间间隔和相对少量的转移的许多其他用途,P2P文件共享通常包括相对重的带宽使用的,由于持续的文件传输和群/网络协调包。2007年10月,美国最大的宽带互联网提供商之一Comcast开始阻止P2P应用,如BitTorrent。他们的理由是,P2P主要用于共享非法内容,而且他们的基础设施并非针对连续的高带宽流量而设计的。批评者指出,P2P网络具有合法的合法用途,这是大型提供商试图控制互联网上的使用和内容的另一种方式,并将人们引向基于客户机 - 服务器的应用程序架构。客户端 - 服务器模型为小型发布者和个人提供了财务障碍,并且可能不太有效地共享大型文件。作为对这种带宽限制的反应,一些P2P应用程序开始实施协议混淆,如BitTorrent协议加密。实现“协议混淆”的技术包括通过使数据看起来好像是随机的那样,去除其他容易识别的协议属性,例如确定性字节序列和数据包大小。 ISP对高带宽的解决方案是P2P缓存,其中ISP存储P2P客户端访问最多的文件,以节省对互联网的访问。
P2P流量的增加给ISPs带来了问题。网络可能会因P2P流量而饱和,从而造成其他类型互联网使用的拥挤。P2P流量的成本与互联网服务提供商从这些客户中获得的收入数量不成比例,这是因为普遍销售的带宽统一费率包。为防止P2P流量对所有用户的服务质量下降,ISP通常面临三种选择:
作者:软知否
链接:https://www.zhihu.com/question/46958042/answer/729587211
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
与传统客户端/服务器网络通信模式不同,对等方到对等方(P2P)通信模式在近年来越来越流行起来。
在 P2P 模式中,服务和资源分布化,资源不集中存储在某些设备上,而是分散存储在运行 P2P 程序的设备上,
每一个对等方都可以为其他对等方提供服务。
BitTorrent(中文全称比特流,简称 BT)是一个网络文件传输协议,是能够实现点对点文件分享的技术。
在大多数人感觉中与 P2P 成了对等的一组概念,而它也将 P2P 技术发展到了近乎完美的地步。
研究 BitTorrent 协议对我们深入把握 P2P 技术,了解 Interent 网络发展的未来走向有很大的意义。
BitTorrent 协议是架构于 TCP/IP 协议之上的一个 P2P 文件传输协议,处于 TCP/IP 结构的应用层。
BitTorrent 协议本身也包含了很多具体的内容协议和扩展协议,并在不断扩充中。
如果有多个下载者并发的下载同一个文件,则每个下载者也同时为其它下载者上传文件,
这样,文件源可以支持大量的用户进行下载,而只带来适当的负载的增长。
BitTorrent 协议把提供下载的文件虚拟分成大小相等的块,块大小必须为 2k 的整数次方
(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和 Hash 验证码
写入 .torrent 文件(即种子文件,也简称为“种子”)中,作为被下载文件的“索引”。
下载者要下载文件内容,需要先得到相应的 .torrent 文件,然后使用 BT 客户端软件进行下载。
下载时,BT 客户端首先解析 .torrent 文件得到 Tracker 地址,然后连接 Tracker 服务器。
Tracker 服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的 IP。
或者,BT客户端也可解析 .torrent 文件得到 nodes 路由表,然后连接路由表中的有效节点,
由网络节点提供下载者其他下载者的 IP。
下载者再连接其他下载者,根据 .torrent 文件,两者分别对方告知自己已经有的块,
然后交换对方没有的数据。此时不需要其他服务器参或者其他网络节点的参与,
分散了单个线路上的数据流量,因此减轻了服务器负担。
下载者每得到一个块,需要算出下载块的 Hash 验证码与 .torrent 文件中的对比,
如果一样则说明块正确,不一样则需要重新下载这个块。
因此,下载的人越多,提供的带宽也越多,种子也会越来越多,下载速度就越快。
从 BT 客户端角度考虑,下载原理分为以下几步:
一.根据 BitTorrent 协议,文件发布者会根据要发布的文件生成提供一个 .torrent 文件。
客户端可从 Web 服务器上下载种子文件,并从中得到 Tracker 服务器 URL 和 DHT 网络 nodes 等信息。
二.根据 Tracker URL 与 Tracker 服务器建立连接,并从服务器上得到 Peers 信息。
或者根据 nodes 与 DHT 网络中节点通信,并从节点上得到 Peers 信息。
三.根据 Peers 信息与一个 Peer 建立连接,依据 Peer wire 协议完成握手,
并从 Peer 端下载数据文件。同时监听 Peer 的连接,并给 Peer 上传数据文件。
依据得到 Peers 信息的途径的不同,可分为使用 Tracker 服务器和使用 Trackerless DHT 网络两种方式。
基于 HTTP 的 Tracker 协议,
基于 UDP 的 Trackerless 协议,
基于 TCP 的 Peer wire 协议。
BEP9 Extension for Peers to Send Metadata Files
http://bittorrent.org/beps/bep_0009.html
https://baike.baidu.com/item/%E7%A3%81%E5%8A%9B%E9%93%BE%E6%8E%A5
什么是磁力链接(Magnet )?
磁力链接,简单的说:类似下面这样以“magnet:?”开头的字符串,就是一条“磁力链接;确切的说:“磁力链接”的主要作用是识别【能够通过“点对点技术(即:P2P)”下载的文件】。这种链接是通过不同文件内容的Hash结果生成一个纯文本的“数字指纹”,来识别文件的。而不是基于文件的位置或者名称。
不同的是这个“数字指纹”可以被任何人从任何文件上生成,这也就注定了“磁力链接”不需要任何“中心机构”的支持(例如:BT Tracker服务器),且识别准确度极高。因此任何人都可以生成一个Magnet链接并确保通过该链接下载的文件准确无误。
BitTorrent是传输大文件的最常用协议之一,例如包含电视节目或视频剪辑的数字视频文件或包含歌曲的数字音频文件。据估计,截至2009年2月,对等网络占所有互联网流量的大约43%至70%(取决于位置)。 2004年11月,BitTorrent负责所有互联网流量的25%。截至2013年2月,BitTorrent占全球全部带宽的 3.35%,超过专用于文件共享的总带宽的6%中的一半以上。
要发送或接收文件,某人在其连接到互联网的计算机上使用BitTorrent客户端。BitTorrent客户端是实现BitTorrent协议的计算机程序。受欢迎的客户包括μTorrent,Xunlei,Transmission,qBittorrent,Vuze,Deluge,BitComet和Tixati。BitTorrent追踪器提供可用于传输的文件列表,并允许客户端找到可以传输文件的被称为种子的对等用户
一般的下载服务器为每一个发出下载请求的用户提供下载服务,而BitTorrent的工作方式与之不同。分配器或文件的持有者将文件发送给其中一名用户,再由这名用户转发给其他用户,用户之间相互转发自己所拥有的文件部分,直到每个用户的下载都全部完成。这种方法可以使下载服务器同时处理多个大体积文件的下载请求,
以下是BitTorrent协议中重要的名词定义和算法介绍。
种子文件(Torrent文件) 。
BitTorrent是通过一个扩展名为.torrent的种子文件进行下载部署的,它由文件最初发布者创建,发布到互联网上,供感兴趣的用户下载。种子文件记录了负责管理该文件所在分发网络的Tracker服务器的地址、文件名、文件长度以及每个文件分块的SHA-1校验值。
种子节点(Seed节点) 。
Seed节点是指在一个P2P共享下载网络中,拥有完整文件拷贝的节点。这类节点只提供上传服务,而没有下载请求。
下载节点(Leecher节点)。
共享网络中相对于Seed节点的是Leecher节点,它只拥有部分的文件拷贝,在提供这部分拷贝的同时,还会向其他节点请求自己缺少的那部分文件。
跟踪服务器(Tracker服务器) 。
Tracker是一个中心服务器,负责跟踪系统中所有的参与节点,收集和统计节点状态,帮助参与节点互相发现,维护共享网络中文件的下载。一个Tracker服务器可以同时维护和管理多个文件共享网络。
共享网络(Swarm网络)。
一个Swarm共享网络是拥有和传输同一个文件资源的所有节点所构成的一个覆盖网络,包括共享该文件的Seed节点、Leecher节点和Tracker服务器。
分片机制。
BitTorrent像其他文件共享软件一样对文件进行了分片(Piece),Piece是最小的文件共享单位,每个Leecher在下载完一个完整的分片后才会进行完整性校验, 完整性校验成功后通知其他节点自己拥有这部分数据。为了加快文件传输的并行性,每个分片还会分成更小的分块(Block), Block是最小的文件传输单位,数据请求者每次向数据提供者请求一个Block的数据。
片选择机制。
为了保证共享网络的健壮性,延长一个共享网络的生命周期, BitTorrent通过局部最少块优先(Rarest-First)策略在节点间交换数据。下载节点根据自己周围的邻居节点拥有的数据块信息,选择拥有节点最少的分块优先下载,从而维护局部的数据块相对平衡。
节点选择机制。
BT系统采用了基于"Tit-for-Tat"的激励机制来抵御“Free-riding”行为,其中Choking/Unchoking算法最为关键。每个BT节点通过Internet/Uninterest消息来维护与多个节点的并发连接,但是只能为少数节点提供上传。服务提供节点在收到上传请求后会通过Choking/Unchoking机制决定是否对文件请求节点提供上传服务,可以拒绝服务(Choking)或者允许服务(Unchoking),该机制决定了两个相连的节点是否共享彼此的资源。为了防止部分节点只下载不上传的自私行为,Choking/Unchoking算法优先选择曾经为自己提供过上传数据并拥有高下载速率的节点,前者可以鼓励节点上传以获取下载,后者有助于最大化系统资源利用率。此外, Choking/Unchoking算法每隔30s将不考虑过去的贡献随机选择一个节点进行上传,一方面有利于发现可能存在更高下载速率的节点,另一方面可以避免新节点因从未进行过上传而无法获得有效的下载连接。
用于管理参与到Torrent的用户(即peers)。
它存储关于torrent的统计信息,但它的主要作用是允许peers'找到各自'并开始通信,即找到拥有着他们需要下载的数据的peer.
Peers不会了解其他peers直到它收到tracker的回应。无论peer何时去查询tracker, 它都会报告它拥有这哪些文件片段。
这样,当另一个peer查询tracker时,tracker可以随机提供一个参与该torrent的符合要求的peer列表。
Tracker是一个HTTP / HTTPS服务,通常在端口6969上运行。
管理torrent的tracker的url地址在MetaInfo文件中指定,单个tracker可以管理多个torrent。
也可以指定多个tracker作为备份,由用户计算机上运行的BitTorrent客户端处理。
整体动画演示分发过程:
实际客户端下载过程示例:
文件分块下载的图形展示:
一个文件被分成很多块,下载时同时进行块的下载。
节点连接和下载情况:
会从每个具有这个文件的节点处进行下载。
https://en.wikipedia.org/wiki/Peer-to-peer
https://en.wikipedia.org/wiki/P2P_caching
https://en.wikipedia.org/wiki/BitTorrent
https://en.wikipedia.org/wiki/Comparison_of_file-sharing_applications
https://en.wikipedia.org/wiki/Comparison_of_BitTorrent_clients
BitTorrent DHT 协议中文翻译
https://segmentfault.com/a/1190000002528378
P2P网络测量与分析 张宏莉, 叶麟, 史建焘