一种基于相似文件协同的BitTorrent数据分发系统及方法转让专利

申请号 : CN201611144224.5

文献号 : CN106487931B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 符永铨韦立超刘峰彭宇行李东升

申请人 : 中国人民解放军国防科学技术大学

摘要 :

本发明公开一种基于相似文件协同的BitTorrent数据分发系统,由控制节点、对等节点、种子节点构成,控制节点主动发现与对等节点待下载文件相似度最高的一组文件,并将拥有这些文件的种子节点的地址信息传输给对等节点;对等节点向这些种子节点请求下载数据块,同时从下载相同文件的其它对等节点和拥有相同文件的种子节点获取数据块。本发明还公开一种基于相似文件协同的BitTorrent数据分发方法。本发明具有以下有益效果:下载节点在继承BitTorrent传输协议的同时,实现了跨相似文件进行数据块交换的功能,下载节点同时与下载相同文件的其它节点及从拥有相似文件的种子节点交换数据,有效提高了数据分发的效率。

权利要求 :

1.一种基于相似文件协同的BitTorrent数据分发系统,其特征在于,由一个控制节点、一个或多个对等节点、一个或多个种子节点构成,每个节点都是独立运行且可相互进行网络通信的计算机;

所述控制节点负责与对等节点和种子节点交互,所述控制节点上安装有数据传输控制程序,所述数据传输控制程序用于接收每个种子节点的文件发布消息,存储各个种子文件对应的种子节点和对等节点的信息、以及所有的种子文件;所述数据传输控制程序同时还用于接收每个对等节点提交的文件下载请求消息,并根据文件下载请求消息选择并传输一组拥有相似文件的种子节点、一组正在下载相同文件的对等节点以及拥有相同文件的种子节点给发送文件下载请求消息的对等节点;

其中,每个对等节点安装有数据下载上传程序,所述对等节点的数据下载上传程序用于向控制节点发送文件下载请求消息,所述文件下载请求消息包括待下载文件的名称和种子文件信息;同时,所述数据下载上传程序还用于读取控制节点返回的种子节点、对等节点地址信息以及对应的种子文件,并将其存入邻居节点集合,然后定期从邻居节点集合请求数据块;

其中,每个所述种子节点也安装有数据下载上传程序,所述种子节点的数据下载上传程序用于向所述控制节点发送文件发布消息,所述文件发布消息包括种子节点拥有的文件的名称和种子文件;同时,所述种子节点的数据下载上传程序还用于接收所述对等节点的数据块下载请求,并根据数据块下载请求对应的数据块的编号从文件对应编号位置选择数据块,并通过网络将其传输给请求下载数据块的对等节点;

其中,所述对等节点在从下载相同文件的对等节点或拥有相同文件的种子节点下载数据块时,直接发送数据块在本地文件的编号到对方节点,对方节点根据请求数据块的编号传输对应的数据块,对等节点直接将数据块根据编号存入本地文件;而对等节点在从拥有相似文件的种子节点下载数据块时,对等节点发送请求数据块在对方节点文件的位置编号到对方节点,对方节点将对应的数据块传输给对等节点,最后对等节点根据数据块在本地文件的编号,将数据块存入对应的位置。

2.一种基于相似文件协同的BitTorrent数据分发方法,其特征在于:包括如下步骤:

步骤1,构建一个BitTorrent数据分发系统,它由一个控制节点、一个或多个对等节点、一个或多个种子节点构成,每个节点都是独立运行、可相互进行网络通信的计算机;

步骤2,控制节点执行数据传输控制程序;所述数据传输控制程序用于独立地接收每个种子节点的文件发布消息,提取所述文件发布消息包含的种子文件信息,并在内存和磁盘存储每个种子文件对应的所有种子节点地址信息;所述种子节点地址信息存储在一个字典数据结构里面,所述字典数据结构记为种子文件字典TorrentIndexTable;其次,所述数据传输控制程序还用于独立地接收每个对等节点的文件下载请求消息,提取文件下载请求消息包含的请求文件的种子文件;所述提取文件下载请求消息包含的请求文件的种子文件包括解析文件下载请求消息包含的种子文件信息并将其标记为torrent1,并从所述种子文件字典TorrentIndexTable记录的所有的种子文件中选择与对等节点请求文件的种子文件相似度最高的k个不同的种子文件,然后选择k个拥有对应完整文件的种子节点地址,同时选择k2个与发送请求的对等节点下载相同文件的对等节点和拥有相同文件的种子节点,具体利用所述k个不同的种子文件查询种子文件字典TorrentIndexTable以获取对应的种子节点;然后将这些种子文件、种子节点地址和对等节点地址通过网络传输给发送文件下载请求消息的对等节点;

步骤3,每个对等节点执行数据下载上传程序;数据下载上传程序负责向控制节点请求具有相似文件的种子节点地址、正在下载相同文件的对等节点地址和拥有相同文件的种子节点地址,并将这些节点地址存入邻居节点集合;然后,每个对等节点的数据下载上传程序向本节点对应的邻居节点请求缺失的数据块;同时,该程序接收其它对等节点的数据块下载请求,并向对应的对等节点上传已经下载的数据块;

步骤4,每个种子节点执行数据下载上传程序;数据下载上传程序向控制节点发送文件发布消息,消息包括本节点拥有的文件名称和对应的种子文件;同时,数据下载上传程序还接收系统中的对等节点的数据块下载请求,并向对等节点上传指定的数据块。

3.根据权利要求2所述的一种基于相似文件协同的BitTorrent数据分发方法,其特征在于,所述步骤1中的构建一个BitTorrent数据分发系统具体为:所述控制节点负责与对等节点和种子节点交互,所述控制节点上安装有数据传输控制程序,所述数据传输控制程序用于接收每个种子节点的文件发布消息,并存储各个种子文件对应的种子节点和对等节点的信息、以及所有的种子文件;所述数据传输控制程序同时还接收每个对等节点提交的文件下载请求消息,根据所述文件下载请求消息选择并传输一组拥有相似文件的种子节点、一组正在下载相同文件的对等节点以及拥有相同文件的种子节点给发送文件下载请求消息的对等节点;

其中,每个对等节点安装有数据下载上传程序,所述数据下载上传程序用于向控制节点发送文件下载请求消息,所述文件下载请求消息包括待下载文件的名称和种子文件信息;同时,所述数据下载上传程序还用于读取控制节点返回的种子节点与对等节点地址信息以及对应的种子文件,并存入邻居节点集合,然后定期从邻居节点集合请求数据块;

其中,每个所述种子节点也安装有数据下载上传程序,所述种子节点的数据下载上传程序用于向所述控制节点发送文件发布消息,所述文件发布消息包括种子节点拥有的文件的名称和种子文件;同时,所述种子节点的数据下载上传程序还用于接收所述对等节点的数据块下载请求,根据数据块下载请求对应的数据块的编号从文件对应编号位置选择数据块,并将其通过网络传输给发出数据块下载请求的对等节点。

4.根据权利要求2所述的一种基于相似文件协同的BitTorrent数据分发方法,其特征在于,所述步骤3中的每个对等节点执行数据下载上传程序具体包括以下步骤:步骤3.1 每个对等节点的数据下载上传程序初始化下载过程;设定LeftBlock代表未下载的数据块的数量,设定N为待下载文件的数据块总数,设置LeftBlock的初始值为N;同时,所述数据下载上传程序为邻居集合的每个邻居节点i维护一个已下载数据块数组DownloadedBlock,所述数据块数组DownloadedBlock的长度等于邻居节点i所拥有文件的数据块的数目;所述数据块数组DownloadedBlock的各项初始化为0,若邻居节点i拥有编号为j的数据块,那么设定i.DownloadedBlock(j)=1,否则,设定i.DownloadedBlock(j) =

0;

步骤3.2 每个对等节点每隔t秒请求每个邻居节点i已下载的数据块信息,更新邻居节点i的已下载数据块数组DownloadedBlock;其中,t代表两次下载数据块的等待时间,t为

0.1秒;

步骤3.3 每个对等节点的数据下载上传程序向控制节点发送文件下载请求消息,消息包括待下载文件的名称和对应的种子文件;

步骤3.4 每个对等节点的数据下载上传程序读取控制节点返回的邻居节点地址及对应的种子文件,并存入邻居节点集合;

步骤3.5 每个对等节点记为Peer0,对等节点Peer0的数据下载上传程序为拥有相似文件的每个种子节点维护一个数据块映射数组DownloadedSameBlock,记录本节点和该种子节点的相同数据块编号映射信息;

步骤3.6 每个对等节点记为Peer0,对等节点Peer0的数据下载上传程序每隔t秒从邻居节点集合下载一个数据块,参数t根据步骤3.2约定取值。

5.根据权利要求2所述的一种基于相似文件协同的BitTorrent数据分发方法,其特征在于,所述步骤4中的每个种子节点执行数据下载上传程序具体还包括以下步骤:步骤4.1 种子节点SeedNode0的数据下载上传程序选择本地磁盘的一个名称为F的文件的种子文件,向控制节点发送文件发布消息,并传输文件F对应的种子文件到控制节点;

步骤4.2 种子节点SeedNode0的数据下载上传程序持续监听对等节点的数据块请求消息,读取消息包含的数据块的编号j,从本地文件选择编号为j的数据块,并通过网络传输给对方节点。

6.根据权利要求2所述的一种基于相似文件协同的BitTorrent数据分发方法,其特征在于,所述步骤2进一步包括以下具体步骤:步骤2.1.1 控制节点的数据传输控制程序解析种子节点的文件发布消息,获得种子节点的地址SeedAddress,及torrent的名称,记为TorrentNAME;

步骤2.1.2 控制节点的数据传输控制程序更新种子文件字典TorrentIndexTable,记录当前所有的种子节点地址信息,即TorrentIndexTable[TorrentNAME]=TorrentIndexTable[TorrentNAME]∪{SeedAddress};

步骤2.2.1 控制节点的数据传输控制程序查询种子文件字典TorrentIndexTable记录的所有的种子文件,计算种子文件字典TorrentIndexTable记录的所有的种子文件与对等节点提交下载请求消息包含的种子文件的相似度;设种子文件torrent2为种子文件字典TorrentIndexTable记录的所有的种子文件中的一个,种子文件torrent1为对等节点提交请求文件下载消息包含的种子文件;

步骤2.2.2 控制节点的数据传输控制程序按照相似度的降序排列所有种子文件,然后选择相似度最大的k个种子文件;其中k代表用于相似文件下载的种子文件的数目;

步骤2.2.3 控制节点的数据传输控制程序根据步骤2.2.2选择的种子文件查询k个种子节点地址;

步骤2.2.4 控制节点的数据传输控制程序选择k2个与对等节点下载相同文件的对等节点和拥有该文件的种子节点的地址信息,记为SameFileSet;

步骤2.2.5 控制节点的数据传输控制程序将种子集合SeedNodeSet与SameFileSet包含的种子节点地址信息及对应的种子文件传输给对方对等节点。

7.根据权利要求4所述的一种基于相似文件协同的BitTorrent数据分发方法,其特征在于,所述步骤3.5进一步包括以下具体步骤:步骤3.5.1 对等节点Peer0的数据下载上传程序从本节点的邻居节点集合读取每个拥有相似文件的种子节点地址记为SeedNode2,及其对应的种子文件记为torrent2,为SeedNode2初始化一个数据块映射数组DownloadedSameBlock,其中数组DownloadedSameBlock的长度等于对等节点Peer0待下载文件的数据块的总数目,DownloadedSameBlock的各项初始化为0;

步骤3.5.2 对等节点Peer0的数据下载上传程序计算待下载文件的数据块的哈希值集合S1与步骤3.5.1选择的种子节点SeedNode2的数据块哈希值集合S2的交集SameBlocks,即SameBlocks={j|j∈S1∧j∈S2};

步骤3.5.3 对等节点Peer0的数据下载上传程序读取集合SameBlocks的每个数据块的哈希值,若该数据块在本节点的文件中的编号为j,在种子节点SeedNode2的文件的编号为j2,那么更新邻居节点SeedNode2对应的数据块映射数组DownloadedSameBlock(j)=j2。

8.根据权利要求7所述的一种基于相似文件协同的BitTorrent数据分发方法,其特征在于,所述步骤3.6进一步包括以下具体步骤:步骤3.6.1对等节点Peer0的数据下载上传程序选择邻居节点副本数目最少的数据块;

步骤3.6.2对等节点Peer0的数据下载上传程序判断:若编号为Rarestblock数据块对应的邻居节点和本节点待下载的文件相同,那么该程序向该邻居节点发送一个数据块请求消息,消息包含数据块的编号Rarestblock;

步骤3.6.3若步骤3.6.2判断不成立,即编号为Rarestblock数据块对应的邻居节点记为Z,和本节点待下载的文件不是相同文件,那么对等节点Peer0的数据下载上传程序计算该数据块在邻居节点Z的编号j2,并向邻居节点Z请求编号为j2的数据块,步骤3.6.4对等节点Peer0的数据下载上传程序设置待下载数据块数目LeftBlock=LeftBlock-1,更新本节点已下载的数据块编号数组DownloadedBlock(Rarestblock)=1;

步骤3.6.5对等节点Peer0的数据下载上传程序判断若待下载数据块数目LeftBlock=

0,说明已经下载所有的数据块,转至步骤4,继续为其它对等节点上传数据块;否则,对等节点Peer0的数据下载上传程序休眠t秒,t秒间隔结束后转步骤3.6.1,继续下载剩余的数据块,参数t取值与步骤3.2相同;

所述步骤3.6.1进一步包括以下具体步骤:

步骤3.6.1.1对等节点Peer0的数据下载上传程序计算邻居节点集合已下载数据块的副本数目,每个数据块的的副本数目等于拥有该数据块的所有邻居节点的总数;设定SameSet代表正在下载相同文件的对等节点和拥有相同文件的种子节点,设定SimilarSet代表所有拥有相似文件的种子节点,则编号为j的数据块的副本总数等于在SameSet集合拥有该数据块的邻居节点的数目与在SimilarSet集合拥有该数据块的邻居节点的数目的之和,即∑i∈SameSeti.DownloadedBlock(j)+∑k∈SimilarSetk.E(j),其中∑i∈SameSeti.DownloadedBlock(j)代表在SameSet集合拥有该数据块的邻居节点的数目,∑k∈SimilarSetk.E(j)代表在SimilarSet集合拥有该数据块的邻居节点的数目,其中i.DownloadedBlock(j)=1代表节点i下载了数据块j,E(j)代表k是否拥有数据块j:若k拥有该数据块,即DownloadedSameBlock(j)≠0,那么设定k.E(j)=1;否则,若DownloadedSameBlock(j)=0,那么设定k.E(j)=0;

步骤3.6.1.2对等节点Peer0的数据下载上传程序将各个数据块的副本数目按照升序排列,然后选择排列的首元素对应的数据块作为副本数目最少的数据块,记其编号为Rarestblock;

所述步骤3.6.3进一步包括以下具体步骤:

步骤3.6.3.1对等节点Peer0的数据下载上传程序查询邻居节点Z的数据块映射数组DownloadedSameBlock,获得编号为Rarestblock的数据块在邻居节点Z的编号j2,即j2=Z.DownloadedSameBlock(Rarestblock);

步骤3.6.3.2对等节点Peer0的数据下载上传程序发送数据块请求消息至邻居节点Z,消息包含数据块的编号j2;

步骤3.6.3.3对等节点Peer0的数据下载上传程序接收到邻居节点Z发送的编号为j2的数据块后,将数据块存储到待下载文件的第Rarestblock个块。

说明书 :

一种基于相似文件协同的BitTorrent数据分发系统及方法

技术领域

[0001] 本发明涉及网络通信领域,特别涉及一种利用相似文件协同的BitTorrent数据分发系统及方法。

背景技术

[0002] 数据分发是网络通信领域的核心问题之一。提高数据分发的速度对于提高网络的效率和服务质量至关重要。目前,数据分发技术主要包括单节点下载技术和多节点协作下载技术。每个节点是拥有处理器、内存、磁盘、网卡、操作系统、TCP/IP网络协议栈的可独立运行的计算机。节点之间可通过网卡基于TCP/IP网络协议相互交换网络消息。
[0003] 单节点下载技术将一个文件从一个存储该文件的节点(称为文件存储节点)通过网络传输到一个请求文件的节点(称为文件请求节点)。如果有多个文件请求节点同时向一个文件存储节点请求文件,那么不同的文件请求节点与文件存储节点之间建立独立的网络连接并独立传输数据,而文件请求节点之间没有任何的通信。最终,每个文件请求节点获取文件的一个副本。这种方法需要消耗文件存储节点大量的网络带宽资源,容易在文件存储节点附近造成热点通信区域,产生网络拥塞。
[0004] 多节点协作下载技术将一个文件从一个或者多个文件存储节点通过网络传输到多个文件请求节点。每个文件被分为一组相同大小的数据块,而各数据块的大小由应用灵活配置。文件的第一个数据块定义为编号0,第二个数据块的编号是1,后续的数据块编号按照数据块位置递增计算。每个文件请求节点可以同时向多个文件存储节点请求不同编号的数据块;同时,如果有多个文件请求节点同时向文件存储节点获取文件数据,那么不同的文件请求节点可以相互传输对方缺失的文件数据块,从而降低了文件存储节点的网络通信压力,提高了下载速度。
[0005] 在多节点协作下载技术中,BitTorrent系统是被普遍使用的一种数据分发系统,具有简单实用,易于部署的特点。BitTorrent系统为一个文件建立一个种子文件(称为torrent)。一个torrent将文件切分为大小相同的一组数据块,每个数据块通过一个MD5哈希函数生成一个唯一的哈希值,用于索引数据块内容。
[0006] BitTorrent数据分发系统包括一个控制节点(Tracker)、一个或多个文件请求节点(称为对等节点,Peer)、一个或多个文件存储节点(称为种子节点,Seed)。
[0007] 控制节点与对等节点和种子节点交互,安装有数据传输控制程序,主要功能是收集对等节点和种子节点的地址信息与种子文件,然后存储到内存和磁盘中,并接收对等节点提交的文件下载的请求。
[0008] 每个对等节点和种子节点安装数据下载上传程序,数据下载上传程序的主要功能是从控制节点获取下载相同文件的对等节点和种子节点地址信息,并从对等节点和种子节点下载所需要的数据块;同时,为其它对等节点提供已下载的数据块。
[0009] 基于BitTorrent的数据分发基本思想是:
[0010] (1)对等节点的数据下载上传程序向控制节点发送文件请求消息;
[0011] (2)控制节点的数据传输控制程序选择一定数量与对等节点下载相同文件的对等节点和拥有该文件的种子节点的地址信息,并将这些地址信息传输给对等节点;
[0012] (3)每个对等节点(记为Peer0)的数据下载上传程序解析控制节点返回的节点地址信息,存储到邻居节点集合中,并周期性地与邻居节点联系并下载所需的数据块,直至获取到完整的文件,数据下载上传程序退出。具体步骤如下:
[0013] 3.1对等节点Peer0的数据下载上传程序初始化信息,具体包括:
[0014] 3.1.1对等节点Peer0令待下载数据块的数量记为LeftBlock。令N对应待下载文件的数据块总数。设LeftBlock=N。
[0015] 3.1.2对等节点Peer0为每个邻居i维护一个已下载数据块数组,记为DownloadedBlock。数组DownloadedBlock初始化为包含N个零元素的一维数组,。若邻居i已经下载编号为j的数据块,那么设定i.DownloadedBlock(j)=1,否则设定i.DownloadedBlock(j)=0,其中,i.代表访问邻居i的一个数据结构,这是面向对象的编程语言中常用的访问对象属性的方式,下文采取类似的表示方法。
[0016] 3.2对等节点Peer0的数据下载上传程序选择邻居节点集合S中副本数量最少的数据块,记其编号为Rarestblock。具体步骤如下:
[0017] 3.2.1计算邻居节点集合已下载数据块的副本数。一个数据块的副本数等于拥有该数据块的邻居节点的总数,对于编号为j的数据块,其副本数定义为:
[0018] ∑i∈Si.DownloadedBlock(j)
[0019] 3.2.2对等节点Peer0选择副本数最少的一个数据块,记其编号为Rarestblock。
[0020] 3.3对等节点Peer0的数据下载上传程序向拥有编号为Rarestblock的数据块一个邻居节点X发送一个下载数据块请求。
[0021] 3.4邻居节点X的数据下载上传管理程序选择请求的数据块,通过TCP/IP协议传输给对等节点Peer0。
[0022] 3.5对等节点Peer0的数据下载上传程序将获得的编号为Rarestblock的数据块存储到待下载文件的编号为Rarestblock的位置。并更新剩余的数据块数目LeftBlock=LeftBlock-1,已下载的数据块编号集合DownloadedBlock(Rarestblock)=D1。
[0023] 3.6对等节点Peer0的数据下载上传管理程序判断:若待下载数据块数目LeftBlock=0,说明对等节点已经下载所有的数据块;否则,转3.2步,对等节点继续下载剩余的数据块。
[0024] 已有的单节点下载技术和多节点协作下载技术都是针对相同的文件进行传输,没有考虑相似的文件。两个文件之间的关系根据相似程度可分为不相似、相似、相同三种。相似度定义为两个文件相同的数据块的个数除以两个文件所有数据块的总数。如果两个文件没有任何相同的数据块,那么这两个文件是不相似的;反之,如果两个文件所有的数据块都相同,那么两个文件是相同文件;相似文件指的是存在一定数量相同数据块的两个文件。因此,相同文件也可以看做是特殊的相似文件。本发明关注的相似文件指的是存在一定相同数据块和一定数量不同数据块的文件。相似文件来源较广,例如,不同版本的Linux操作系统安装文件通常包含大量相同的程序和数据,这些相同的数据块在数据分发过程是等价的。

发明内容

[0025] 本发明要解决的技术问题是:针对现有的基于BitTorrent的数据分发系统无法利用相似文件实现快速数据分发的问题,提出一种相似文件协同的BitTorrent数据分发系统及方法,有效挖掘相似文件资源来加速数据分发。
[0026] 为解决上述技术问题,本发明实施例提供一种基于相似文件协同的BitTorrent数据分发系统,由一个控制节点、一个或多个对等节点、一个或多个种子节点构成,每个节点都是独立运行且可相互进行网络通信的计算机;
[0027] 所述控制节点负责与对等节点和种子节点交互,所述控制节点上安装有数据传输控制程序,所述数据传输控制程序用于接收每个种子节点的文件发布消息,存储各个种子文件对应的种子节点和对等节点的信息、以及所有的种子文件;所述数据传输控制程序同时还用于接收每个对等节点提交的文件下载请求消息,并根据文件下载请求消息选择并传输一组拥有相似文件的种子节点、一组正在下载相同文件的对等节点以及拥有相同文件的种子节点给发送文件下载请求消息的对等节点;
[0028] 其中,每个对等节点安装有数据下载上传程序,所述对等节点的数据下载上传程序用于向控制节点发送文件下载请求消息,所述文件下载请求消息包括待下载文件的名称和种子文件信息;同时,所述数据下载上传程序还用于读取控制节点返回的种子节点、对等节点地址信息以及对应的种子文件,并将其存入邻居节点集合,然后定期从邻居节点集合请求数据块;
[0029] 其中,每个所述种子节点也安装有数据下载上传程序,所述种子节点的数据下载上传程序用于向所述控制节点发送文件发布消息,所述文件发布消息包括种子节点拥有的文件的名称和种子文件;同时,所述种子节点的数据下载上传程序还用于接收所述对等节点的数据块下载请求,并根据数据块下载请求对应的数据块的编号从文件对应编号位置选择数据块,并通过网络将其传输给请求下载数据块的对等节点;
[0030] 其中,所述对等节点在从下载相同文件的对等节点或拥有相同文件的种子节点下载数据块时,直接发送数据块在本地文件的编号到对方节点,对方节点根据请求数据块的编号传输对应的数据块,对等节点直接将数据块根据编号存入本地文件;而对等节点在从拥有相似文件的种子节点下载数据块时,对等节点发送请求数据块在对方节点文件的位置编号到对方节点,对方节点将对应的数据块传输给对等节点,最后对等节点根据数据块在本地文件的编号,将数据块存入对应的位置。
[0031] 为解决上述技术问题,本发明实施例还提供一种基于相似文件协同的BitTorrent数据分发方法,包括如下步骤:
[0032] 步骤1,构建一个BitTorrent数据分发系统,它由一个控制节点、一个或多个对等节点、一个或多个种子节点构成,每个节点都是独立运行、可相互进行网络通信的计算机;
[0033] 步骤2,控制节点执行数据传输控制程序;所述数据传输控制程序用于独立地接收每个种子节点的文件发布消息,提取所述文件发布消息包含的种子文件信息,并在内存和磁盘存储每个种子文件对应的所有种子节点地址信息;所述种子节点地址信息存储在一个字典数据结构里面,所述字典数据结构记为种子文件字典TorrentIndexTable;其次,所述数据传输控制程序还用于独立地接收每个对等节点的文件下载请求消息,提取文件下载请求消息包含的请求文件的种子文件;所述提取文件下载请求消息包含的请求文件的种子文件包括解析文件下载请求消息包含的种子文件信息并将其标记为torrent1,并从所述种子文件字典TorrentIndexTable记录的所有的种子文件中选择与对等节点请求文件的种子文件相似度最高的k个不同的种子文件,然后选择k个拥有对应完整文件的种子节点地址,同时选择k2个与发送请求的对等节点下载相同文件的对等节点和拥有相同文件的种子节点,具体利用所述k个不同的种子文件查询种子文件字典TorrentIndexTable以获取对应的种子节点;然后将这些种子文件、种子节点地址和对等节点地址通过网络传输给发送文件下载请求消息的对等节点;
[0034] 步骤3,每个对等节点执行数据下载上传程序;数据下载上传程序负责向控制节点请求具有相似文件的种子节点地址、正在下载相同文件的对等节点地址和拥有相同文件的种子节点地址,并将这些节点地址存入邻居节点集合;然后,每个对等节点的数据下载上传程序向本节点对应的邻居节点请求缺失的数据块;同时,该程序接收其它对等节点的数据块下载请求,并向对应的对等节点上传已经下载的数据块;
[0035] 步骤4,每个种子节点执行数据下载上传程序;数据下载上传程序向控制节点发送文件发布消息,消息包括本节点拥有的文件名称和对应的种子文件;同时,数据下载上传程序还接收系统中的对等节点的数据块下载请求,并向对等节点上传指定的数据块。
[0036] 进一步地,所述步骤1中的构建一个BitTorrent数据分发系统具体为:
[0037] 所述控制节点负责与对等节点和种子节点交互,所述控制节点上安装有数据传输控制程序,所述数据传输控制程序用于接收每个种子节点的文件发布消息,并存储各个种子文件对应的种子节点和对等节点的信息、以及所有的种子文件;所述数据传输控制程序同时还接收每个对等节点提交的文件下载请求消息,根据所述文件下载请求消息选择并传输一组拥有相似文件的种子节点、一组正在下载相同文件的对等节点以及拥有相同文件的种子节点给发送文件下载请求消息的对等节点;
[0038] 其中,每个对等节点安装有数据下载上传程序,所述数据下载上传程序用于向控制节点发送文件下载请求消息,所述文件下载请求消息包括待下载文件的名称和种子文件信息;同时,所述数据下载上传程序还用于读取控制节点返回的种子节点与对等节点地址信息以及对应的种子文件,并存入邻居节点集合,然后定期从邻居节点集合请求数据块;
[0039] 其中,每个所述种子节点也安装有数据下载上传程序,所述种子节点的数据下载上传程序用于向所述控制节点发送文件发布消息,所述文件发布消息包括种子节点拥有的文件的名称和种子文件;同时,所述种子节点的数据下载上传程序还用于接收所述对等节点的数据块下载请求,根据数据块下载请求对应的数据块的编号从文件对应编号位置选择数据块,并将其通过网络传输给发出数据块下载请求的对等节点。
[0040] 进一步地,所述步骤3中的每个对等节点执行数据下载上传程序具体包括以下步骤:
[0041] 步骤3.1每个对等节点的数据下载上传程序初始化下载过程;设定LeftBlock代表未下载的数据块的数量,设定N为待下载文件的数据块总数,设置LeftBlock的初始值为N;同时,所述数据下载上传程序为邻居集合的每个邻居节点i维护一个已下载数据块数组DownloadedBlock,所述数据块数组DownloadedBlock的长度等于邻居节点i所拥有文件的数据块的数目;所述数据块数组DownloadedBlock的各项初始化为0,若邻居节点i拥有编号为j的数据块,那么设定i.DownloadedBlock(j)=1,否则,设定i.DownloadedBlock(j)=0;
[0042] 步骤3.2每个对等节点每隔t秒请求每个邻居节点i已下载的数据块信息,更新邻居节点i的已下载数据块数组DownloadedBlock;其中,t代表两次下载数据块的等待时间,t为0.1秒;
[0043] 步骤3.3每个对等节点的数据下载上传程序向控制节点发送文件下载请求消息,消息包括待下载文件的名称和对应的种子文件;
[0044] 步骤3.4每个对等节点的数据下载上传程序读取控制节点返回的邻居节点地址及对应的种子文件,并存入邻居节点集合;
[0045] 步骤3.5每个对等节点记为Peer0,对等节点Peer0的数据下载上传程序为拥有相似文件的每个种子节点维护一个数据块映射数组DownloadedSameBlock,记录本节点和该种子节点的相同数据块编号映射信息;
[0046] 步骤3.6每个对等节点记为Peer0,对等节点Peer0的数据下载上传程序每隔t秒从邻居节点集合下载一个数据块,参数t根据步骤3.2约定取值。
[0047] 进一步地,所述步骤4中的每个种子节点执行数据下载上传程序具体还包括以下步骤:
[0048] 步骤4.1种子节点SeedNode0的数据下载上传程序选择本地磁盘的一个名称为F的文件的种子文件,向控制节点发送文件发布消息,并传输文件F对应的种子文件到控制节点;
[0049] 步骤4.2种子节点SeedNode0的数据下载上传程序持续监听对等节点的数据块请求消息,读取消息包含的数据块的编号j,从本地文件选择编号为j的数据块,并通过网络传输给对方节点。
[0050] 进一步地,所述步骤2进一步包括以下具体步骤:
[0051] 步骤2.1.1控制节点的数据传输控制程序解析种子节点的文件发布消息,获得种子节点的地址SeedAddress,及torrent的名称,记为TorrentNAME;
[0052] 步骤2.1.2控制节点的数据传输控制程序更新种子文件字典TorrentIndexTable,记录当前所有的种子节点地址信息,即TorrentIndexTable[TorrentNAME]=TorrentIndexTable[TorrentNAME]∪{SeedAddress};
[0053] 步骤2.2.1控制节点的数据传输控制程序查询种子文件字典TorrentIndexTable记录的所有的种子文件,计算种子文件字典TorrentIndexTable记录的所有的种子文件与对等节点提交下载请求消息包含的种子文件的相似度;设种子文件torrent2为种子文件字典TorrentIndexTable记录的所有的种子文件中的一个,种子文件torrent1为对等节点提交请求文件下载消息包含的种子文件;
[0054] 步骤2.2.2控制节点的数据传输控制程序按照相似度的降序排列所有种子文件,然后选择相似度最大的k个种子文件;其中k代表用于相似文件下载的种子文件的数目;
[0055] 步骤2.2.3控制节点的数据传输控制程序根据步骤2.2.2选择的种子文件查询k个种子节点地址;
[0056] 步骤2.2.4控制节点的数据传输控制程序选择k2个与对等节点下载相同文件的对等节点和拥有该文件的种子节点的地址信息,记为SameFileSet;
[0057] 步骤2.2.5控制节点的数据传输控制程序将种子集合SeedNodeSet与SameFileSet包含的种子节点地址信息及对应的种子文件传输给对方对等节点。
[0058] 进一步地,所述步骤3.5进一步包括以下具体步骤:
[0059] 步骤3.5.1对等节点Peer0的数据下载上传程序从本节点的邻居节点集合读取每个拥有相似文件的种子节点地址记为SeedNode2,及其对应的种子文件记为torrent2,为SeedNode2初始化一个数据块映射数组DownloadedSameBlock,其中数组DownloadedSameBlock的长度等于对等节点PeerO待下载文件的数据块的总数目,DownloadedSameBlock的各项初始化为0;
[0060] 步骤3.5.2对等节点Peer0的数据下载上传程序计算待下载文件的数据块的哈希值集合S1与步骤3.5.1选择的种子节点SeedNode2的数据块哈希值集合S2的交集SameBlocks,即SameBlocks={j|j∈S1∧j∈S2};
[0061] 步骤3.5.3对等节点Peer0的数据下载上传程序读取集合SameBlocks的每个数据块的哈希值,若该数据块在本节点的文件中的编号为j,在种子节点SeedNode2的文件的编号为j2,那么更新邻居节点SeedNode2对应的数据块映射数组DownloadedSameBlock(j)=j2。
[0062] 所述步骤3.6进一步包括以下具体步骤:
[0063] 步骤3.6.1对等节点Peer0的数据下载上传程序选择邻居节点副本数目最少的数据块;
[0064] 步骤3.6.2对等节点Peer0的数据下载上传程序判断:若编号为Rarestblock数据块对应的邻居节点和本节点待下载的文件相同,那么该程序向该邻居节点发送一个数据块请求消息,消息包含数据块的编号Rarestblock;
[0065] 步骤3.6.3若步骤3.6.2判断不成立,即编号为Rarestblock数据块对应的邻居节点记为Z,和本节点待下载的文件不是相同文件,那么对等节点Peer0的数据下载上传程序计算该数据块在邻居节点Z的编号j2,并向邻居节点Z请求编号为j2的数据块,[0066] 步骤3.6.4对等节点Peer0的数据下载上传程序设置待下载数据块数目LeftBlock=LeftBlock-1,更新本节点已下载的数据块编号数组DownloadedBlock(Rarestblock)=1;
[0067] 步骤3.6.5对等节点Peer0的数据下载上传程序判断若待下载数据块数目LeftBlock=0,说明已经下载所有的数据块,转至步骤4,继续为其它对等节点上传数据块;否则,对等节点Peer0的数据下载上传程序休眠t秒,t秒间隔结束后转步骤3.6.1,继续下载剩余的数据块,参数t取值与步骤3.2相同;
[0068] 所述步骤3.6.1进一步包括以下具体步骤:
[0069] 步骤3.6.1.1对等节点Peer0的数据下载上传程序计算邻居节点集合已下载数据块的副本数目,每个数据块的的副本数目等于拥有该数据块的所有邻居节点的总数;设定SameSet代表正在下载相同文件的对等节点和拥有相同文件的种子节点,设定SimilarSet代表所有拥有相似文件的种子节点,则编号为j的数据块的副本总数等于在SameSet集合拥有该数据块的邻居节点的数目与在SimilarSet集合拥有该数据块的邻居节点的数目的之和,即∑i∈SameSeti.DownloadedBlock(j)+∑k∈SimilarSetk.E(j),其中∑i∈SameSeti.DownloadedBlock(j)代表在SameSet集合拥有该数据块的邻居节点的数目,∑k∈SimilarSetk.E(j)代表在SimilarSet集合拥有该数据块的邻居节点的数目,其中i.DownloadedBlock(j)=1代表节点i下载了数据块j,E(j)代表k是否拥有数据块j:若k拥有该数据块,即DownloadedSameBlock(j)≠0,那么设定k.E(j)=1;否则,若DownloadedSameBlock(j)=0,那么设定k.E(j)=0;
[0070] 步骤3.6.1.2对等节点Peer0的数据下载上传程序将各个数据块的副本数目按照升序排列,然后选择排列的首元素对应的数据块作为副本数目最少的数据块,记其编号为Rarestblock;
[0071] 所述步骤3.6.3进一步包括以下具体步骤:
[0072] 步骤3.6.3.1对等节点Peer0的数据下载上传程序查询邻居节点Z的数据块映射数组DownloadedSameBlock,获得编号为Rarestblock的数据块在邻居节点Z的编号j2,即j2=Z.DownloadedSameBlock(Rarestblock);
[0073] 步骤3.6.3.2对等节点Peer0的数据下载上传程序发送数据块请求消息至邻居节点Z,消息包含数据块的编号j2;
[0074] 步骤3.6.3.3对等节点Peer0的数据下载上传程序接收到邻居节点Z发送的编号为j2的数据块后,将数据块存储到待下载文件的第Rarestblock个块。
[0075] 本发明采用上述技术方案,具有以下有益效果:下载节点在继承BitTorrent传输协议的同时,实现了跨相似文件进行数据块交换的功能,下载节点不仅与下载相同文件的其它节点交换数据,还能从拥有相似文件的种子节点下载数据,有效提高了数据分发的效率。

附图说明

[0076] 图1是本发明BitTorrent系统的体系结构图
[0077] 图2是本发明总体流程图

具体实施方式

[0078] 为使本发明的目的、技术方案和优点更加清楚,下面结合图示对本发明实施方式作进一步地详细描述。
[0079] 图1是本发明构建的BitTorrent数据分发系统的体系结构图,它由一个控制节点、一个或多个对等节点、一个或多个种子节点构成。每个节点都是独立运行、可相互进行网络通信的计算机。该系统的工作原理:控制节点主动发现与对等节点待下载文件相似度最高的一组文件,并将拥有这些文件的种子节点的地址信息传输给对等节点;对等节点向这些种子节点请求下载数据块,同时从下载相同文件的其它对等节点和拥有相同文件的种子节点获取数据块,从而显著提升对等节点的下载速度。下面分别介绍每个部分。
[0080] 控制节点负责与对等节点和种子节点交互,控制节点上安装有数据传输控制程序。数据传输控制程序接收每个种子节点的文件发布消息,存储各个种子文件对应的种子节点和对等节点的信息,以及所有的种子文件。数据传输控制程序接收每个对等节点提交的文件下载请求,选择一组拥有相似文件的种子节点,一组正在下载相同文件的对等节点以及拥有相同文件的种子节点,并将这些节点与对应的种子节点传输给发送请求消息的对等节点。
[0081] 每个对等节点安装有数据下载上传程序。该数据下载上传程序向控制节点发送文件请求消息,消息包括待下载文件的名称和种子文件信息。同时,该数据下载上传程序读取控制节点返回的种子节点与对等节点地址信息以及对应的种子文件,存入邻居节点集合,然后定期从邻居节点集合请求数据块。为了避免因为邻居节点离线导致无法下载所有的数据块,对等节点每次向邻居请求的数据块都是邻居节点集合中副本数量最少的数据块。
[0082] 对等节点在从下载相同文件的对等节点或拥有相同文件的种子节点下载数据块时,直接发送数据块在本地文件的编号到对方节点,对方节点根据请求数据块的编号传输对应的数据块,对等节点直接将数据块根据编号存入本地文件;而对等节点在从拥有相似文件的种子节点下载数据块时,对等节点发送请求数据块在对方节点文件的位置编号到对方节点,对方节点将对应的数据块传输给对等节点,最后对等节点根据数据块在本地文件的编号,将数据块存入对应的位置。
[0083] 每个种子节点也安装有数据下载上传程序。该数据下载上传程序向控制节点发送文件发布消息,消息包括种子节点拥有的文件的名称和种子文件。同时,该数据下载上传程序接收对等节点的数据块下载请求,根据请求数据块的编号,从文件对应编号位置选择数据块,并通过网络传输给请求该数据块的对等节点。
[0084] 图2是本发明总体流程图。具体流程如下:
[0085] 第一步,构建一个BitTorrent数据分发系统,它由控制节点、对等节点、种子节点构成,每个节点都是独立运行、可相互进行网络通信的计算机。
[0086] 控制节点负责与对等节点和种子节点交互,控制节点上安装有数据传输控制程序。数据传输控制程序接收每个种子节点的文件发布消息,存储各个种子文件对应的种子节点和对等节点的信息,以及所有的种子文件。数据传输控制程序接收每个对等节点提交的文件下载请求,选择一组拥有相似文件的种子节点,一组正在下载相同文件的对等节点以及拥有相同文件的种子节点,并将这些节点与对应的种子节点传输给发送请求消息的对等节点。
[0087] 每个对等节点安装有数据下载上传程序。该数据下载上传程序向控制节点发送文件请求消息,消息包括待下载文件的名称和种子文件信息。同时,该数据下载上传程序读取控制节点返回的种子节点与对等节点地址信息以及对应的种子文件,存入邻居节点集合,然后定期从邻居节点集合请求数据块。为了避免因为邻居节点离线导致无法下载所有的数据块,对等节点每次向邻居请求的数据块都是邻居节点集合中副本数量最少的数据块。
[0088] 对等节点在从下载相同文件的对等节点或拥有相同文件的种子节点下载数据块时,直接发送数据块在本地文件的编号到对方节点,对方节点根据请求数据块的编号传输对应的数据块,对等节点直接将数据块根据编号存入本地文件;而对等节点在从拥有相似文件的种子节点下载数据块时,对等节点发送请求数据块在对方节点文件的位置编号到对方节点,对方节点将对应的数据块传输给对等节点,最后对等节点根据数据块在本地文件的编号,将数据块存入对应的位置。
[0089] 每个种子节点也安装有数据下载上传程序。该数据下载上传程序向控制节点发送文件发布消息,消息包括种子节点拥有的文件的名称和种子文件。同时,该数据下载上传程序接收对等节点的数据块下载请求,根据请求数据块的编号,从文件对应编号位置选择数据块,并通过网络传输给请求该数据块的对等节点。
[0090] 第二步,控制节点执行数据传输控制程序。该数据传输控制程序独立地接收每个种子节点的文件发布消息,并在内存和磁盘存储每个种子文件对应的所有种子节点地址信息。该数据传输控制程序独立地接收每个对等节点的文件下载请求消息,选择k个拥有最相似文件的种子节点地址,和k2个与对等节点下载相同文件的其它对等节点和拥有相同文件的种子节点,以及对应的种子文件,通过网络传输给对等节点。
[0091] 其次,该数据传输控制程序独立地接收每个对等节点的文件下载请求消息,提取文件下载请求消息包含的请求文件的种子文件,选择与对等节点请求文件的种子文件相似度最高的k(k为正整数,代表相似数据分发选择的种子节点数量,k越大,种子节点越多,提供的数据下载资源越多,因而对等节点的下载速度越快,默认情况下,k设定为5)个不同的种子文件,然后选择k个拥有对应完整文件的种子节点地址,同时选择k2个(k2为正整数,代表BitTorrent原系统选择的邻居数目,默认情况下,k2设定为10)与发送请求的对等节点下载相同文件的对等节点和拥有相同文件的种子节点,然后将这些种子文件、种子节点地址和对等节点地址通过网络传输给发送请求消息的对等节点。
[0092] 具体步骤如下:
[0093] 2.1控制节点的数据传输控制程序接收每个种子节点的文件发布消息,解析文件发布消息包含的种子文件信息,并在内存和磁盘更新种子文件对应的种子节点集合信息。该信息存储在一个字典数据结构里面,记为种子文件字典TorrentIndexTable。例如,假设某种子文件torrent1的种子节点有两个,地址分别为Seed1和Seed2,那么设定TorrentIndexTable[torrent1]={Seed1,Seed2},反之,如果种子文件字典TorrentIndexTable没有记录种子文件torrent1的任何种子节点信息,那么就设定TorrentIndexTable[torrent1]={}。具体步骤如下:
[0094] 2.1.1控制节点的数据传输控制程序解析种子节点的文件发布消息,获得种子节点的地址SeedAddress,及torrent的名称,记为TorrentNAME。
[0095] 2.1.2控制节点的数据传输控制程序更新种子文件字典TorrentIndexTable,记录当前所有的种子节点地址信息。即TorrentIndexTable[TorrentNAME]=TorrentIndexTable[TorrentNAME]∪{SeedAddress}
[0096] 2.2控制节点的数据传输控制程序接收每个对等节点提交的文件下载请求消息,解析文件下载请求消息包含的种子文件(标记为torrent1)信息,然后从种子文件字典TorrentIndexTable记录的所有的种子文件中,选择与对等节点的种子文件的相似度最高的k个不同的种子文件,然后利用这些种子文件查询种子文件字典TorrentIndexTable以获取对应的种子节点。最后,选择k2个与对等节点下载相同文件的对等节点地址和种子节点地址,并将这些节点地址及对应的种子文件传输给对等节点。具体步骤如下:
[0097] 2.2.1控制节点的数据传输控制程序查询种子文件字典TorrentIndexTable记录的所有的种子文件,计算种子文件字典TorrentIndexTable记录的所有的种子文件与对等节点提交下载请求消息包含的种子文件的相似度。设种子文件torrent2为种子文件字典TorrentlndexTable记录的所有的种子文件中的一个,种子文件torrent1为对等节点提交请求文件下载消息包含的种子文件,具体步骤如下:
[0098] 2.2.1.1控制节点的数据传输控制程序读取种子文件torrent1与torrent2的所有数据块的哈希值,并将哈希值分别存入两个集合S1与S2内;
[0099] 2.2.1.2控制节点的数据传输控制程序计算集合S1与S2的交集S1∩S2,及集合的并集S1∪S2:S1∩S2={j|j∈S1∧j∈S2},S1∪S2={j|j∈S1∨j∈S2};
[0100] 2.2.1.3控制节点的数据传输控制程序计算种子文件torrent1与torrent2的相似度为交集包含的数据块的数目|S1∩S2|与并集包含的数据块|S1∪S2|的数目的比值,即[0101] 2.2.2控制节点的数据传输控制程序按照相似度的降序排列所有种子文件,然后选择相似度最大的k个种子文件。其中k代表用于相似文件下载的种子文件的数目。默认值为5。如果系统中的相似文件比较多,k可以设置为较大的数目,以提升对等节点的下载速度。
[0102] 2.2.3控制节点的数据传输控制程序根据2.2.2节选择的种子文件查询k个种子节点地址,具体步骤如下:
[0103] 2.2.3.1控制节点的数据传输控制程序设定种子节点集合SeedSet为空;
[0104] 2.2.3.2控制节点的数据传输控制程序按照相似度由大到小的顺序遍历2.2.2步骤选择的k个种子文件,利用每个种子文件查询种子文件字典TorrentIndexTable,获得k个种子节点。具体步骤如下:
[0105] 2.2.3.2.1控制节点的数据传输控制程序初始化索引idx为1。初始化种子节点地址集合SeedNodeSet为空。
[0106] 2.2.3.2.2控制节点的数据传输控制程序从种子文件字典TorrentIndexTable读取第idx个种子文件,标记为torrent-idx。
[0107] 2.2.3.2.3控制节点的数据传输控制程序利用torrent-idx查询种子文件字典TorrentIndexTable,获得对应的种子节点地址集合,记为SeedSet1=TorrentIndexTable[torrent-i]。
[0108] 2.2.3.2.3若集合SeedSet1非空,那么控制节点的数据传输控制程序从集合SeedSet1随机选择一个种子节点的地址,记为SeedAddress1,并存入集合SeedNodeSet,即SeedNodeSet=SeedNodeSet∪{SeedAddress1}。
[0109] 2.2.3.2.4若种子集合SeedNodeSet的种子节点数目等于k,转2.2.4步骤,否则,设定idx=idx+1,然后转2.2.3.2.1步骤。
[0110] 2.2.4控制节点的数据传输控制程序选择k2个与对等节点下载相同文件的对等节点和拥有该文件的种子节点的地址信息,记为SameFileSet。
[0111] 2.2.5控制节点的数据传输控制程序将种子集合SeedNodeSet与SameFileSet包含的种子节点地址信息及对应的种子文件传输给对方对等节点。
[0112] 第三步,每个对等节点执行数据下载上传程序。数据下载上传程序负责向控制节点请求具有相似文件的种子节点地址、正在下载相同文件的对等节点地址和拥有相同文件的种子节点地址,并将这些节点地址存入邻居节点集合。然后,每个对等节点的数据下载上传程序向本节点对应的邻居节点请求缺失的数据块;同时,该程序接收其它对等节点的数据块下载请求,并向对应的对等节点上传已经下载的数据块。
[0113] 具体步骤如下:
[0114] 3.1每个对等节点的数据下载上传程序初始化下载过程。设定LeftBlock代表未下载的数据块的数量,设定N为待下载文件的数据块总数。设置LeftBlock的初始值为N。同时,该程序为邻居集合的每个邻居节点i维护一个已下载数据块数组DownloadedBlock。DownloadedBlock数组的长度等于邻居节点i所拥有文件的数据块的数目。
DownloadedBlock的各项初始化为0。若节点i拥有编号为j的数据块,那么设定i.DownloadedBlock(j)=1,否则,设定i.DownloadedBlock(j)=0。
[0115] 3.2每个对等节点每隔t秒请求每个邻居节点i已下载的数据块信息,更新邻居i的已下载数据块数组DownloadedBlock,其中,t代表两次下载数据块的等待时间,t为正整数,通常设置为较小的数值,以快速下载所有的数据块,因此,t的默认值为0.1秒。
[0116] 3.3每个对等节点的数据下载上传程序向控制节点发送文件请求消息,消息包括待下载文件的名称和对应的种子文件;
[0117] 3.4每个对等节点的数据下载上传程序读取控制节点返回的邻居节点地址及对应的种子文件,并存入邻居节点集合。
[0118] 3.5每个对等节点(记为Peer0)的数据下载上传程序为拥有相似文件的每个种子节点维护一个数据块映射数组DownloadedSameBlock,记录本节点和该种子节点的相同数据块编号映射信息。具体步骤如下:
[0119] 3.5.1对等节点Peer0的数据下载上传程序从本节点的邻居节点集合读取每个拥有相似文件的种子节点地址(记为SeedNode2)与对应的种子文件(记为torrent2),为SeedNode2初始化一个数据块映射数组DownloadedSameBlock。数组DownloadedSameBlock的长度等于对等节点Peer0待下载文件的数据块的总数目。DownloadedSameBlock的各项初始化为0。
[0120] 3.5.2对等节点Peer0的数据下载上传程序计算待下载文件的数据块的哈希值集合S1与3.5.1步骤选择的种子节点SeedNode2的数据块哈希值集合S2的交集SameBlocks,即SameBlocks={j|j∈S1∧j∈S2}。
[0121] 3.5.3对等节点Peer0的数据下载上传程序读取集合SameBlocks的每个数据块的哈希值,若该数据块在本节点的文件中的编号为j,在种子节点SeedNode2的文件的编号为j2,那么更新邻居SeedNode2对应的数据块映射数组DownloadedSameBlock(j)=j2。
[0122] 3.6每个对等节点(记为Peer0)的数据下载上传程序每隔t秒从邻居节点集合下载一个数据块,参数t根据步骤3.2约定取值。具体步骤如下:
[0123] 3.6.1对等节点Peer0的数据下载上传程序选择邻居节点副本数目最少的数据块。具体步骤如下:
[0124] 3.6.1.1对等节点Peer0的数据下载上传程序计算邻居节点集合已下载数据块的副本数目。每个数据块的的副本数目等于拥有该数据块的所有邻居的总数。设定SameSet代表正在下载相同文件的对等节点和拥有相同文件的种子节点,i.DownloadedBlock(j)=1代表节点i下载了数据块j,那么SameSet集合共拥有数据块j的副本数目可表示为所有拥有数据块j的节点的总数,即∑i∈SameSeti.DownloadedBlock(j),其中∑代表累加运算符号。设定SimilarSet代表所有拥有相似文件的种子节点。设k.E(j)代表节点k是否拥有数据块j,若k拥有该数据块,设定k.E(j)=1;否则,设定k.E(j)=0。那么SimilarSet集合共拥有数据块j的副本数目可表示为∑k∈SimilarSetk.E(j),。因此,编号为j的数据块的副本总数等于[0125] ∑i∈SameSeti.DownloadedBlock(j)+∑k∈SimilarSetk.E(j)。
[0126] 3.6.1.2对等节点Peer0的数据下载上传程序将各个数据块的副本数目按照升序排列,然后选择排列的首元素对应的数据块作为副本数目最少的数据块,记其编号为Rarestblock。
[0127] 3.6.2对等节点Peer0的数据下载上传程序判断:若编号为Rarestblock对应的邻居和本节点待下载的文件相同,那么该程序向该邻居发送一个数据块请求消息,消息包含数据块的编号Rarestblock。
[0128] 3.6.3若3.6.2判断不成立,即编号为Rarestblock对应的邻居(记为Z)和本节点待下载的文件不是相同文件,那么对等节点Peer0的数据下载上传程序计算该数据块在邻居Z的编号j2,并向邻居Z请求编号为j2的数据块,具体步骤如下:
[0129] 3.6.3.1对等节点Peer0的数据下载上传程序查询邻居Z的数据块映射数组DownloadedSameBlock,获得编号为Rarestblock的数据块在邻居Z的编号j2,即j2=Z.DownloadedSameBlock(Rarestblock)。
[0130] 3.6.3.2对等节点Peer0的数据下载上传程序发送数据块请求消息至邻居Z,消息包含数据块的编号j2;
[0131] 3.6.3.3对等节点Peer0的数据下载上传程序接收到邻居Z发送的编号为j2的数据块后,将数据块存储到待下载文件的第Rarestblock个块。
[0132] 3.6.4对等节点Peer0的数据下载上传程序设置待下载数据块数目LeftBlock=LeftBlock-1。更新本节点已下载的数据块编号数组DownloadedBlock(Rarestblock)=1。
[0133] 3.6.5对等节点Peer0的数据下载上传程序判断若待下载数据块数目LeftBlock=0,说明已经下载所有的数据块,转第四步,继续为其它对等节点上传数据块;否则,对等节点Peer0的数据下载上传程序休眠t秒,t秒间隔结束后转3.6.1,继续下载剩余的数据块,参数t根据步骤3.2约定取值。
[0134] 第四步,每个种子节点执行数据下载上传程序。数据下载上传程序向控制节点发送文件发布消息。同时,数据下载上传程序接收系统中的对等节点的数据块下载请求,并向对等节点上传指定的数据块。
[0135] 具体步骤如下:
[0136] 4.1种子节点SeedNode0的数据下载上传程序选择本地磁盘的一个名称为F的文件的种子文件,向控制节点发送文件发布消息,并传输文件F对应的种子文件到控制节点;
[0137] 4.2种子节点SeedNode0的数据下载上传程序持续监听对等节点的数据块请求消息,读取消息包含的数据块的编号j,从本地文件选择编号为j的数据块,并通过网络传输给对方节点。
[0138] 以上对本发明所提供的基于相似文件协同的BitTorrent数据分发系统及方法进行了详细介绍,本具体实施方式中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。