|
大家都知道,目前BT應(yīng)用的發(fā)展具有一個非常顯著的趨勢,那就是用來交換電影、游戲、ISO等大尺寸的數(shù)據(jù)文件。然而我們也能夠觀察到另一個事 實,那就是:下載文件所對應(yīng)的索引文件(.torrent)也越來越大,越來越難以下載;這是因為在索引文件中保存了被下載文件中所有數(shù)據(jù)塊的20字節(jié) SHA1校驗值,而文件越大,數(shù)據(jù)塊越多,則.torrent文件越長(塊數(shù)=文件長度/數(shù)據(jù)塊長,Bit Torrent標準協(xié)議建議塊長一般不超過512KB)。 索引文件長度的膨脹將直接加重索引服務(wù)器的下載負擔,因為所有BT用戶均必須從服務(wù)器上下載同一份.torrent文件,而這一下載行為本身是集中 式的,因而導致系統(tǒng)的擴展性受到較大限制,尤其是用于交換熱門資源時;另一方面,為避免索引文件過大,人們在發(fā)布種子、制作索引文件時不得不采用增加其基 本數(shù)據(jù)塊長度(比如2MB)的方式來減少數(shù)據(jù)塊總數(shù),這將有可能對端對端數(shù)據(jù)交換性能造成一系列負面影響:因為塊長越小,越能幫助我們及時地發(fā)現(xiàn)傳輸錯 誤,試想在2MB塊長的情況下,用戶直到下載完整個數(shù)據(jù)塊時才通過校驗發(fā)現(xiàn)傳輸有誤,然后不得不再次重傳整個2MB塊,這顯然較塊長為512KB時更加浪 費帶寬和時間。歸根到底,導致上述麻煩的根本原因在于這么一個事實:“.torrent中包含了所有數(shù)據(jù)塊的SHA1校驗信息”。 有什么辦法讓我們既能獲得較小的塊長而又能減少索引文件長度?Merkle哈希樹校驗方式為我們提供了一個很好的思路,它試圖從校驗信息獲取及實際 校驗過程兩個方面來改善上述問題。先說說什么是哈希樹,以最簡單的二叉方式為例,如下圖所示,設(shè)某文件共13個數(shù)據(jù)塊,我們可以將其padding到 16(2的整數(shù)次方)個塊(注意,padding的空白塊僅用于輔助校驗,而無需當作數(shù)據(jù)進行實際傳輸),每個塊均對應(yīng)一個SHA1校驗值,然后再對它們 進行反復的兩兩哈希,直到得出一個唯一的根哈希值為止(root hash, H0),這一計算過程便構(gòu)成了一棵二元的Merkle哈希樹,樹中最底層的葉子節(jié)點(H15~H30)對應(yīng)著數(shù)據(jù)塊的實際哈希值,而那些內(nèi)部節(jié)點 (H1~H14)我們則可以將其稱為“路徑哈希值”,它們構(gòu)成了實際塊哈希值與根哈希值H0之間的“校驗路徑”,比如,數(shù)據(jù)塊8所對應(yīng)的實際哈希值為 H23,則有:SHA1(((SHA1(SHA1(H23,H24),H12),H6),H1)應(yīng)該等于H0。當然,我們也可以進一步采用n元哈希樹來進 行上述校驗過程,其過程是類似的。 采用Merkle哈希樹校驗方式能夠極大地減小.torrent文件的尺寸,這是因為,一旦采用這種方式來校驗數(shù)據(jù)塊,那么便沒有必要 在.torrent文件中保存所有數(shù)據(jù)塊的校驗值了,其中僅需保存一個20字節(jié)的SHA1哈希值即可,即整個下載文件的根哈希值H0。想象一下一個3、 4GB的文件,其對應(yīng).torrent文件卻只有100-200字節(jié)的樣子?heh 下面,讓我們來看看其數(shù)據(jù)塊交換及校驗的詳細過程:
最后再來看看上述算法的時空效率如何。假設(shè)某文件的總塊數(shù)為M,將其padding至N個塊(N=2^p),塊長為K,不難看出:
綜上所述,通過采用哈希樹校驗方式,我們可以將諸多校驗所需哈希值的獲取工作分散在P2P數(shù)據(jù)交換時捎帶進行,而不是從.torrent文件中集中 獲取,從而有利于緩解索引服務(wù)器集中下載瓶頸,優(yōu)化Peer to Peer數(shù)據(jù)傳輸性能;在實現(xiàn)上述目的的同時,哈希樹校驗機制仍能保證以P2P方式獲取的校驗信息的可靠性,在小塊長的情況下,惡意peer幾乎無法通過 故意提供錯誤路徑哈希值的方式來實現(xiàn)有效的服務(wù)拒絕攻擊。采用這種方式,我們所需付出的額外代價主要包括幾近1倍的校驗緩存空間及其SHA1計算量的增 長,但是經(jīng)過簡要分析不難看出其實際影響不甚明顯,這對于換取較小的塊長、提高大文件P2P交換效率而言是值得的。Merkle哈希樹校驗方式與分布式哈 希表技術(shù)勢必能夠幫助BitTorrent協(xié)議進一步克服自身的非結(jié)構(gòu)化缺陷,取得更大的應(yīng)用發(fā)展。 |
|
|
來自: ShangShujie > 《資料》