BitTorrent总览介绍
前言
由于校园网的这个限量,导致我们只能走ipv6,ipv6在国内最大的用处就是通过种子下载东西了,比如北邮人等等,就会使用uTorrent这个东西下载,就会有区块,伺服、用户、文件等等还有DHT巴拉巴拉,显得非常的神秘。再加上我本身做的项目是区块链的项目,底层技术也用到了BitTorrent的P2P网络,所以决定下定决心,研究一下BitTorrent协议。
这篇文章算是刚开始研究,说一下某些概念,如果有些比较厉害的,可以再另外单开一篇。
P2P网络
参考链接:https://www.jianshu.com/p/2f8f0d9c84a4
点对点(Peer To Peer)计算或网络是分布式应用程序体系结构,用于在对等体之间分割任务或工作负载。Peer在应用程序中享有同等特权。
在P2P网络中,客户端都提供和使用资源。这意味着,不像客户端-服务器系统,对等网络的网络服务内容的容量实际上可以增加更多的用户开始访问内容。该属性是使用P2P网络的主要优势之一,因为它使原始内容分发者的设置和运行成本非常小
非结构化网络
非结构化的对等网络不会通过设计在覆盖网络上施加特定的结构,而是由随机形成彼此连接的节点形成。非结构化网络的主要局限性也是由于缺乏结构。特别是,当对等方想要在网络中找到所需的数据段时,搜索查询必须通过网络进行泛洪以找到尽可能多的共享数据的对等点。泛滥造成网络中信令流量非常高,使用更多的CPU /内存(通过要求每个对等方处理所有搜索查询),并且不能确保搜索查询将始终得到解决。
结构化网络
在结构化的对等网络中,叠加层被组织成一个特定的拓扑结构,并且该协议可以确保任何节点都可以有效地在网络中搜索文件/资源,即使资源极其稀少。

最常见的结构化P2P网络类型实现了分布式散列表(DHT),其中使用一致散列的变体来将每个文件的所有权分配给特定对等体。这使同伴能够使用哈希表在网络上搜索资源:即(密钥,值)对存储在DHT中,并且任何参与节点可以有效地检索与给定密钥相关联的值。

然而,为了通过网络有效地路由流量,结构化覆盖中的节点必须维护满足特定标准的邻居列表[26]。这使得它们在具有高流失率(即大量节点频繁加入和离开网络)的网络中不太稳健。
BitTorrent 使用”分布式哈希表”(DHT)来为无 tracker 的种子(torrents)存储 peer 之间的联系信息。这样每个 peer 都成了 tracker。这个协议基于 Kademila 网络并且在 UDP 上实现。在使用DHT分发Peer之前,Tracker是找到Peer的唯一方法。
混合模型
混合模型是对等和客户 – 服务器模型的组合。一个普通的混合模式是有一个中央服务器,可以帮助同伴找到对方。
在结构化服务器/客户端网络提供的集中功能与纯对等非结构化网络提供的节点相等之间进行权衡。目前,混合模型比单纯的非结构化网络或纯粹的结构化网络具有更好的性能,因为某些功能(如搜索)确实需要集中功能,但受益于非结构化网络提供的节点的分散聚合。
常见 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将不考虑过去的贡献随机选择一个节点进行上传,一方面有利于发现可能存在更高下载速率的节点,另一方面可以避免新节点因从未进行过上传而无法获得有效的下载连接。
BT下载的可视化动画
BitTorrent visualization in processing.js (mg8.org)



