1.一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)系統(tǒng),其特征在于,由一個控制節(jié)點、一個或多個對等節(jié)點、一個或多個種子節(jié)點構(gòu)成,每個節(jié)點都是獨立運行、可相互進行網(wǎng)絡(luò)通信的計算機;
所述控制節(jié)點負責(zé)與對等節(jié)點和種子節(jié)點交互,所述節(jié)點上安裝有數(shù)據(jù)傳輸控制程序,所述數(shù)據(jù)傳輸控制程序接收每個種子節(jié)點的文件發(fā)布消息,存儲各個種子文件對應(yīng)的種子節(jié)點和對等節(jié)點的信息,以及所有的種子文件;所述數(shù)據(jù)傳輸控制程序同時接收每個對等節(jié)點提交的文件下載請求,選擇一組擁有相似文件的種子節(jié)點,一組正在下載相同文件的對等節(jié)點以及擁有相同文件的種子節(jié)點,并將這些節(jié)點與對應(yīng)的種子節(jié)點傳輸給發(fā)送請求消息的對等節(jié)點;
每個對等節(jié)點安裝有數(shù)據(jù)下載上傳程序,該數(shù)據(jù)下載上傳程序向控制節(jié)點發(fā)送文件請求消息,消息包括待下載文件的名稱和種子文件信息;同時,該數(shù)據(jù)下載上傳程序讀取控制節(jié)點返回的種子節(jié)點與對等節(jié)點地址信息以及對應(yīng)的種子文件,存入鄰居節(jié)點集合,然后定期從鄰居節(jié)點集合請求數(shù)據(jù)塊;
每個所述種子節(jié)點也安裝有數(shù)據(jù)下載上傳程序,該數(shù)據(jù)下載上傳程序向所述控制節(jié)點發(fā)送文件發(fā)布消息,消息包括種子節(jié)點擁有的文件的名稱和種子文件;同時,該數(shù)據(jù)下載上傳程序接收所述對等節(jié)點的數(shù)據(jù)塊下載請求,根據(jù)請求數(shù)據(jù)塊的編號,從文件對應(yīng)編號位置選擇數(shù)據(jù)塊,并通過網(wǎng)絡(luò)傳輸給請求該數(shù)據(jù)塊的對等節(jié)點。
2.根據(jù)權(quán)利要求1所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)系統(tǒng),其特征在于,所述對等節(jié)點在從下載相同文件的對等節(jié)點或擁有相同文件的種子節(jié)點下載數(shù)據(jù)塊時,直接發(fā)送數(shù)據(jù)塊在本地文件的編號到對方節(jié)點,對方節(jié)點根據(jù)請求數(shù)據(jù)塊的編號傳輸對應(yīng)的數(shù)據(jù)塊,對等節(jié)點直接將數(shù)據(jù)塊根據(jù)編號存入本地文件;而對等節(jié)點在從擁有相似文件的種子節(jié)點下載數(shù)據(jù)塊時,對等節(jié)點發(fā)送請求數(shù)據(jù)塊在對方節(jié)點文件的位置編號到對方節(jié)點,對方節(jié)點將對應(yīng)的數(shù)據(jù)塊傳輸給對等節(jié)點,最后對等節(jié)點根據(jù)數(shù)據(jù)塊在本地文件的編號,將數(shù)據(jù)塊存入對應(yīng)的位置。
3.一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于:包括如下步驟:
第一步,構(gòu)建一個BitTorrent數(shù)據(jù)分發(fā)系統(tǒng),它由一個控制節(jié)點、一個或多個對等節(jié)點、一個或多個種子節(jié)點構(gòu)成,每個節(jié)點都是獨立運行、可相互進行網(wǎng)絡(luò)通信的計算機;
第二步,控制節(jié)點執(zhí)行數(shù)據(jù)傳輸控制程序;該數(shù)據(jù)傳輸控制程序獨立地接收每個種子節(jié)點的文件發(fā)布消息,提取文件發(fā)布消息包含的種子文件信息,并在內(nèi)存和磁盤存儲每個種子文件對應(yīng)的所有種子節(jié)點地址信息;其次,該數(shù)據(jù)傳輸控制程序獨立地接收每個對等節(jié)點的文件下載請求消息,提取文件下載請求消息包含的請求文件的種子文件,選擇與對等節(jié)點請求文件的種子文件相似度最高的k個不同的種子文件,然后選擇k個擁有對應(yīng)完整文件的種子節(jié)點地址,同時選擇k2個與發(fā)送請求的對等節(jié)點下載相同文件的對等節(jié)點和擁有相同文件的種子節(jié)點,然后將這些種子文件、種子節(jié)點地址和對等節(jié)點地址通過網(wǎng)絡(luò)傳輸給發(fā)送請求消息的對等節(jié)點;
第三步,每個對等節(jié)點執(zhí)行數(shù)據(jù)下載上傳程序;數(shù)據(jù)下載上傳程序負責(zé)向控制節(jié)點請求具有相似文件的種子節(jié)點地址、正在下載相同文件的對等節(jié)點地址和擁有相同文件的種子節(jié)點地址,并將這些節(jié)點地址存入鄰居節(jié)點集合;然后,每個對等節(jié)點的數(shù)據(jù)下載上傳程序向本節(jié)點對應(yīng)的鄰居節(jié)點請求缺失的數(shù)據(jù)塊;同時,該程序接收其它對等節(jié)點的數(shù)據(jù)塊下載請求,并向?qū)?yīng)的對等節(jié)點上傳已經(jīng)下載的數(shù)據(jù)塊;
第四步,每個種子節(jié)點執(zhí)行數(shù)據(jù)下載上傳程序;數(shù)據(jù)下載上傳程序向控制節(jié)點發(fā)送文件發(fā)布消息,消息包括本節(jié)點擁有的文件名稱和對應(yīng)的種子文件;同時,數(shù)據(jù)下載上傳程序還接收系統(tǒng)中的對等節(jié)點的數(shù)據(jù)塊下載請求,并向?qū)Φ裙?jié)點上傳指定的數(shù)據(jù)塊。
4.根據(jù)權(quán)利要求3所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于,所述第一步中的構(gòu)建一個BitTorrent數(shù)據(jù)分發(fā)系統(tǒng)具體為:
所述控制節(jié)點負責(zé)與對等節(jié)點和種子節(jié)點交互,所述控制節(jié)點上安裝有數(shù)據(jù)傳輸控制程序,所述數(shù)據(jù)傳輸控制程序接收每個種子節(jié)點的文件發(fā)布消息,存儲各個種子文件對應(yīng)的種子節(jié)點和對等節(jié)點的信息,以及所有的種子文件;所述數(shù)據(jù)傳輸控制程序同時接收每個對等節(jié)點提交的文件下載請求,選擇一組擁有相似文件的種子節(jié)點,一組正在下載相同文件的對等節(jié)點以及擁有相同文件的種子節(jié)點,并將這些節(jié)點與對應(yīng)的種子節(jié)點傳輸給發(fā)送請求消息的對等節(jié)點;
每個對等節(jié)點安裝有數(shù)據(jù)下載上傳程序,該數(shù)據(jù)下載上傳程序向控制節(jié)點發(fā)送文件請求消息,消息包括待下載文件的名稱和種子文件信息;同時,該數(shù)據(jù)下載上傳程序讀取控制節(jié)點返回的種子節(jié)點與對等節(jié)點地址信息以及對應(yīng)的種子文件,存入鄰居節(jié)點集合,然后定期從鄰居節(jié)點集合請求數(shù)據(jù)塊;
每個所述種子節(jié)點也安裝有數(shù)據(jù)下載上傳程序,該數(shù)據(jù)下載上傳程序向所述控制節(jié)點發(fā)送文件發(fā)布消息,消息包括種子節(jié)點擁有的文件的名稱和種子文件;同時,該數(shù)據(jù)下載上傳程序接收所述對等節(jié)點的數(shù)據(jù)塊下載請求,根據(jù)請求數(shù)據(jù)塊的編號,從文件對應(yīng)編號位置選擇數(shù)據(jù)塊,并通過網(wǎng)絡(luò)傳輸給請求該數(shù)據(jù)塊的對等節(jié)點。
5.根據(jù)權(quán)利要求3所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于,所述第二步中的控制節(jié)點執(zhí)行數(shù)據(jù)傳輸控制程序具體還包括以下步驟:
步驟2.1控制節(jié)點的數(shù)據(jù)傳輸控制程序接收每個種子節(jié)點的文件發(fā)布消息,解析文件發(fā)布消息包含的種子文件信息,并在內(nèi)存和磁盤更新種子文件對應(yīng)的種子節(jié)點集合信息;該信息存儲在一個字典數(shù)據(jù)結(jié)構(gòu)里面,記為種子文件字典TorrentIndexTable;
步驟2.2控制節(jié)點的數(shù)據(jù)傳輸控制程序接收每個對等節(jié)點提交的文件下載請求消息,解析文件下載請求消息包含的種子文件信息,標(biāo)記為torrent1,然后從種子文件字典TorrentIndexTable記錄的所有的種子文件中,選擇與對等節(jié)點的種子文件的相似度最高的k個不同的種子文件,然后利用這些種子文件查詢種子文件字典TorrentIndexTable以獲取對應(yīng)的種子節(jié)點;最后,選擇k2個與對等節(jié)點下載相同文件的對等節(jié)點地址和種子節(jié)點地址,并將這些節(jié)點地址及對應(yīng)的種子文件傳輸給對等節(jié)點。
6.根據(jù)權(quán)利要求3所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于,所述第三步中的每個對等節(jié)點執(zhí)行數(shù)據(jù)下載上傳程序具體還包括以下步驟:
步驟3.1每個對等節(jié)點的數(shù)據(jù)下載上傳程序初始化下載過程;設(shè)定LeftBlock代表未下載的數(shù)據(jù)塊的數(shù)量,設(shè)定N為待下載文件的數(shù)據(jù)塊總數(shù),設(shè)置LeftBlock的初始值為N;同時,該程序為鄰居集合的每個鄰居節(jié)點i維護一個已下載數(shù)據(jù)塊數(shù)組DownloadedBlock,DownloadedBlock數(shù)組的長度等于鄰居節(jié)點i所擁有文件的數(shù)據(jù)塊的數(shù)目;DownloadedBlock的各項初始化為0,若節(jié)點i擁有編號為j的數(shù)據(jù)塊,那么設(shè)定i.DownloadedBlock(j)=1,否則,設(shè)定i.DownloadedBlock(j)=0;
步驟3.2每個對等節(jié)點每隔t秒請求每個鄰居節(jié)點i已下載的數(shù)據(jù)塊信息,更新鄰居i的已下載數(shù)據(jù)塊數(shù)組DownloadedBlock;其中,t代表兩次下載數(shù)據(jù)塊的等待時間,t為正整數(shù),通常設(shè)置為較小的數(shù)值,以快速下載所有的數(shù)據(jù)塊,因此,t的默認(rèn)值為0.1秒;
步驟3.3每個對等節(jié)點的數(shù)據(jù)下載上傳程序向控制節(jié)點發(fā)送文件請求消息,消息包括待下載文件的名稱和對應(yīng)的種子文件;
步驟3.4每個對等節(jié)點的數(shù)據(jù)下載上傳程序讀取控制節(jié)點返回的鄰居節(jié)點地址及對應(yīng)的種子文件,并存入鄰居節(jié)點集合;
步驟3.5每個對等節(jié)點記為Peer0,對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序為擁有相似文件的每個種子節(jié)點維護一個數(shù)據(jù)塊映射數(shù)組DownloadedSameBlock,記錄本節(jié)點和該種子節(jié)點的相同數(shù)據(jù)塊編號映射信息;
步驟3.6每個對等節(jié)點記為Peer0,對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序每隔t秒從鄰居節(jié)點集合下載一個數(shù)據(jù)塊,參數(shù)t根據(jù)步驟3.2約定取值。
7.根據(jù)權(quán)利要求3所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于,所述第四步中的每個種子節(jié)點執(zhí)行數(shù)據(jù)下載上傳程序具體還包括以下步驟:
步驟4.1種子節(jié)點SeedNode0的數(shù)據(jù)下載上傳程序選擇本地磁盤的一個名稱為F的文件的種子文件,向控制節(jié)點發(fā)送文件發(fā)布消息,并傳輸文件F對應(yīng)的種子文件到控制節(jié)點;
步驟4.2種子節(jié)點SeedNode0的數(shù)據(jù)下載上傳程序持續(xù)監(jiān)聽對等節(jié)點的數(shù)據(jù)塊請求消息,讀取消息包含的數(shù)據(jù)塊的編號j,從本地文件選擇編號為j的數(shù)據(jù)塊,并通過網(wǎng)絡(luò)傳輸給對方節(jié)點。
8.根據(jù)權(quán)利要求5所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于,所述步驟2.1進一步包括以下具體步驟:
步驟2.1.1控制節(jié)點的數(shù)據(jù)傳輸控制程序解析種子節(jié)點的文件發(fā)布消息,獲得種子節(jié)點的地址SeedAddress,及torrent的名稱,記為TorrentNAME;
步驟2.1.2控制節(jié)點的數(shù)據(jù)傳輸控制程序更新種子文件字典TorrentIndexTable,記錄當(dāng)前所有的種子節(jié)點地址信息,即
TorrentIndexTable[TorrentNAME]
=TorrentIndexTable[TorrentNAME]∪{SeedAddress};
所述步驟2.2進一步包括以下具體步驟:
步驟2.2.1控制節(jié)點的數(shù)據(jù)傳輸控制程序查詢種子文件字典TorrentIndexTable記錄的所有的種子文件,計算種子文件字典TorrentIndexTable記錄的所有的種子文件與對等節(jié)點提交下載請求消息包含的種子文件的相似度;設(shè)種子文件torrent2為種子文件字典TorrentIndexTable記錄的所有的種子文件中的一個,種子文件torrent1為對等節(jié)點提交請求文件下載消息包含的種子文件;
步驟2.2.2控制節(jié)點的數(shù)據(jù)傳輸控制程序按照相似度的降序排列所有種子文件,然后選擇相似度最大的k個種子文件;其中k代表用于相似文件下載的種子文件的數(shù)目;
步驟2.2.3控制節(jié)點的數(shù)據(jù)傳輸控制程序根據(jù)步驟2.2.2選擇的種子文件查詢k個種子節(jié)點地址;
步驟2.2.4控制節(jié)點的數(shù)據(jù)傳輸控制程序選擇k2個與對等節(jié)點下載相同文件的對等節(jié)點和擁有該文件的種子節(jié)點的地址信息,記為SameFileSet;
步驟2.2.5控制節(jié)點的數(shù)據(jù)傳輸控制程序?qū)⒎N子集合SeedNodeSet與SameFileSet包含的種子節(jié)點地址信息及對應(yīng)的種子文件傳輸給對方對等節(jié)點。
9.根據(jù)權(quán)利要求6所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于,所述步驟3.5進一步包括以下具體步驟:
步驟3.5.1對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序從本節(jié)點的鄰居節(jié)點集合讀取每個擁有相似文件的種子節(jié)點地址記為SeedNode2,及其對應(yīng)的種子文件記為torrent2,為SeedNode2初始化一個數(shù)據(jù)塊映射數(shù)組DownloadedSameBlock,其中數(shù)組DownloadedSameBlock的長度等于對等節(jié)點Peer0待下載文件的數(shù)據(jù)塊的總數(shù)目,DownloadedSameBlock的各項初始化為0;
步驟3.5.2對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序計算待下載文件的數(shù)據(jù)塊的哈希值集合S1與步驟3.5.1選擇的種子節(jié)點SeedNode2的數(shù)據(jù)塊哈希值集合S2的交集SameBlocks,即SameBlocks={j|j∈S1∧j∈S2};
步驟3.5.3對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序讀取集合SameBlocks的每個數(shù)據(jù)塊的哈希值,若該數(shù)據(jù)塊在本節(jié)點的文件中的編號為j,在種子節(jié)點SeedNode2的文件的編號為j2,那么更新鄰居SeedNode2對應(yīng)的數(shù)據(jù)塊映射數(shù)組DownloadedSameBlock(j)=j(luò)2。
10.根據(jù)權(quán)利要求9所述的一種基于相似文件協(xié)同的BitTorrent數(shù)據(jù)分發(fā)方法,其特征在于:
步驟3.6.1對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序選擇鄰居節(jié)點副本數(shù)目最少的數(shù)據(jù)塊;
步驟3.6.2對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序判斷:若編號為Rarestblock數(shù)據(jù)塊對應(yīng)的鄰居和本節(jié)點待下載的文件相同,那么該程序向該鄰居發(fā)送一個數(shù)據(jù)塊請求消息,消息包含數(shù)據(jù)塊的編號Rarestblock;
步驟3.6.3若步驟3.6.2判斷不成立,即編號為Rarestblock數(shù)據(jù)塊對應(yīng)的鄰居記為Z,和本節(jié)點待下載的文件不是相同文件,那么對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序計算該數(shù)據(jù)塊在鄰居Z的編號j2,并向鄰居Z請求編號為j2的數(shù)據(jù)塊,
步驟3.6.4對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序設(shè)置待下載數(shù)據(jù)塊數(shù)目LeftBlock=LeftBlock-1,更新本節(jié)點已下載的數(shù)據(jù)塊編號數(shù)組DownloadedBlock(Rarestblock)=1;
步驟3.6.5對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序判斷若待下載數(shù)據(jù)塊數(shù)目LeftBlock=0,說明已經(jīng)下載所有的數(shù)據(jù)塊,轉(zhuǎn)第四步,繼續(xù)為其它對等節(jié)點上傳數(shù)據(jù)塊;否則,對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序休眠t秒,t秒間隔結(jié)束后轉(zhuǎn)步驟3.6.1,繼續(xù)下載剩余的數(shù)據(jù)塊,參數(shù)t取值與步驟3.2相同;
所述步驟3.6.1進一步包括以下具體步驟:
步驟3.6.1.1對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序計算鄰居節(jié)點集合已下載數(shù)據(jù)塊的副本數(shù)目,每個數(shù)據(jù)塊的的副本數(shù)目等于擁有該數(shù)據(jù)塊的所有鄰居的總數(shù);設(shè)定SameSet代表正在下載相同文件的對等節(jié)點和擁有相同文件的種子節(jié)點,設(shè)定SimilarSet代表所有擁有相似文件的種子節(jié)點,則編號為j的數(shù)據(jù)塊的副本總數(shù)等于在SameSet集合擁有該數(shù)據(jù)塊的鄰居的數(shù)目與在SimilarSet集合擁有該數(shù)據(jù)塊的鄰居的數(shù)目的之和,即∑i∈SameSeti.DownloadedBlock(j)+∑k∈SimilarSet k.E(j),其中Σi∈SameSet i.DownloadedBlock(j)代表在SameSet集合擁有該數(shù)據(jù)塊的鄰居的數(shù)目,∑k∈SimilarSet k.E(j)代表在SimilarSet集合擁有該數(shù)據(jù)塊的鄰居的數(shù)目,其中i.DownloadedBlock(j)=1代表節(jié)點i下載了數(shù)據(jù)塊j,E(j)代表k是否擁有數(shù)據(jù)塊j:若k擁有該數(shù)據(jù)塊,即DownloadedSameBlock(j)≠0,那么設(shè)定k.E(j)=1;否則,若DownloadedSameBlock(j)=0,那么設(shè)定k.E(j)=0;
步驟3.6.1.2對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序?qū)⒏鱾€數(shù)據(jù)塊的副本數(shù)目按照升序排列,然后選擇排列的首元素對應(yīng)的數(shù)據(jù)塊作為副本數(shù)目最少的數(shù)據(jù)塊,記其編號為Rarestblock;
所述步驟3.6.3進一步包括以下具體步驟:
步驟3.6.3.1對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序查詢鄰居Z的數(shù)據(jù)塊映射數(shù)組DownloadedSameBlock,獲得編號為Rarestblock的數(shù)據(jù)塊在鄰居Z的編號j2,即j2=Z.DownloadedSameBlock(Rarestblock);
步驟3.6.3.2對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序發(fā)送數(shù)據(jù)塊請求消息至鄰居Z,消息包含數(shù)據(jù)塊的編號j2;
步驟3.6.3.3對等節(jié)點Peer0的數(shù)據(jù)下載上傳程序接收到鄰居Z發(fā)送的編號為j2的數(shù)據(jù)塊后,將數(shù)據(jù)塊存儲到待下載文件的第Rarestblock個塊。