P2P网络
点对点(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客户端现在都具有兼容的对等交换。
混合模型
混合模型是对等和客户 - 服务器模型的组合。一个普通的混合模式是有一个中央服务器,可以帮助同伴找到对方。
在结构化服务器/客户端网络提供的集中功能与纯对等非结构化网络提供的节点相等之间进行权衡。目前,混合模型比单纯的非结构化网络或纯粹的结构化网络具有更好的性能,因为某些功能(如搜索)确实需要集中功能,但受益于非结构化网络提供的节点的分散聚合。
P2P带宽与网络
点对点应用程序是网络中立性争议的核心问题之一。已知因特网服务提供商(ISP)由于其高带宽使用而限制P2P文件共享业务量。相比于网络浏览,电子邮件或互联网,这样的数据仅在短的时间间隔和相对少量的转移的许多其他用途,P2P文件共享通常包括相对重的带宽使用的,由于持续的文件传输和群/网络协调包。2007年10月,美国最大的宽带互联网提供商之一Comcast开始阻止P2P应用,如BitTorrent。他们的理由是,P2P主要用于共享非法内容,而且他们的基础设施并非针对连续的高带宽流量而设计的。批评者指出,P2P网络具有合法的合法用途,这是大型提供商试图控制互联网上的使用和内容的另一种方式,并将人们引向基于客户机 - 服务器的应用程序架构。客户端 - 服务器模型为小型发布者和个人提供了财务障碍,并且可能不太有效地共享大型文件。作为对这种带宽限制的反应,一些P2P应用程序开始实施协议混淆,如BitTorrent协议加密。实现“协议混淆”的技术包括通过使数据看起来好像是随机的那样,去除其他容易识别的协议属性,例如确定性字节序列和数据包大小。 ISP对高带宽的解决方案是P2P缓存,其中ISP存储P2P客户端访问最多的文件,以节省对互联网的访问。
P2P流量的增加给ISPs带来了问题。网络可能会因P2P流量而饱和,从而造成其他类型互联网使用的拥挤。P2P流量的成本与互联网服务提供商从这些客户中获得的收入数量不成比例,这是因为普遍销售的带宽统一费率包。为防止P2P流量对所有用户的服务质量下降,ISP通常面临三种选择:
- 投资额外的带宽和设备。不幸的是,增加带宽往往不能解决问题,因为P2P应用固有地倾向于消耗尽可能多的带宽。
- 实施更严格的字节上限,策略或P2P流量整形,限制P2P流量的速度。困难在于P2P数据包变得越来越难以识别,特别是在引入加密(如BitTorrent协议加密)的情况下。流量整形也会产生负面的宣传和客户反应。
- 实现一种P2P缓存形式。
常见 p2p系统BitTorrent简介
BitTorrent
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将不考虑过去的贡献随机选择一个节点进行上传,一方面有利于发现可能存在更高下载速率的节点,另一方面可以避免新节点因从未进行过上传而无法获得有效的下载连接。
文件下载的可视化展示
整体动画演示分发过程:
实际客户端下载过程示例:
文件分块下载的图形展示:
一个文件被分成很多块,下载时同时进行块的下载。
节点连接和下载情况:
会从每个具有这个文件的节点处进行下载。
参考资料
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网络测量与分析 张宏莉, 叶麟, 史建焘