分佈式協議bt文件傳輸協議和ed2k協議的詳解

本文就BT的文件傳輸協議和eMule的ED2K協議做一個簡單的說明和分析,相信可以幫助一些需要了解和學習的朋友。下面我們就進入正題...

eDonkey / eMule 協議的簡單介紹:

分佈式協議bt文件傳輸協議和ed2k協議的詳解

電騾(eMule)的前身,是一個叫做eDonkey的軟件,它是由Jed McCaleb在2000年創立。採用“多源文件傳輸協議”(MFTP,the Multisource File Transfer Protocol)來散佈文件。eDonkey中的索引服務器並不集中在一起的,而是各人私有的,遍佈全世界,每一個人都可以運行電騾服務器(客戶端和服務器端於一身),同時共享的文件索引為被稱為“ed2k-quicklink”的連接,文件前綴“ED2K://”。每個文件都用md5-hash的超級鏈接標示,這使得該文件獨一無二,並且在整個網絡上都可以追蹤得到。EDonkey可以通過檢索分段從多個用戶那裡下載文件,最終將下載的文件片斷拼成整個文件。

2002年05月3日Merkur不滿意eDonkey 2000客戶端並且堅信自己能做出更出色的P2P軟件,於是便著手開發。凝聚一批原本在其他領域有出色發揮的程序員,eMule工程就此誕生,目標是將eDonkey的優點及精華保留下來,並加入新的功能以及使圖形界面變得更好。

emule是eDonkey的升級版,它的獨到之處在於開源。其基本原理和運作方式,也是基於eDonkey,能夠直接登錄eDonkey的各類服務器。eMule同時也提供了很多eDonkey所沒有的功能,比如可以自動搜索網絡中的服務器、保留搜索結果、與連接用戶交換服務器地址和文件、優先下載便於預覽的文件頭尾部分等等,這些都使得eMule使用起來更加便利,也讓它得到了電騾的美譽。

BT軟件和協議的簡介:

分佈式協議bt文件傳輸協議和ed2k協議的詳解

支持BT協議的P2P應用程序很多,如uTorrent、BitBuddy、FlashBT、BitComet、BitSpirit等,當然中國特色的吸血類型的訊雷、FLASHGET等也算是。

通常BT協議的文件分發,是用torrent 種子文件作基礎分享的,種子提供站點、目錄服務器和內容發佈者/下載者。torrent文件是一個文本文件,包含了tracker信息和文件信息兩部分。tracker 信息則是客戶通訊需要用到的tracker服務器的地址和針對tracker服務器的設置;

BT的主要原理是把提供下載的文件虛擬分成小相等的塊,塊小必須為2Kbyte的整數次方(由於是虛擬分塊,硬盤上並不產生各個塊文件),並把每個塊的索引信息和Hash驗證碼寫入.torrent文件中,所以.torrent文件就是被下載文件的“索引”。早期的BT協議只支持tracker服務器,這種目錄服務器是集中式目錄與分佈式查詢的混合型;在BT協議的升級版本中,增加了對DHT(分佈式Hash表)網絡的支持。

BT和eMule協議的宏觀比較和分析

emule從技術層面上說是比BT好很多的,可是由於 大家都拿但並不想給予的原因,在互聯網上的中國大陸地區emule並不是很流行,歐美國家、日本、東南亞、中東等地倒是具有相當多的用戶。

1.傳統連接方式:

BT使用統一的torrent文件先作一個原下載文件的信息記錄,然後客戶下載後通過torrent的信息與服務器連接並下載,emule僅有一個文件ID,客戶自行與服務器連接再下載;eMule的資源發佈更便捷,同時資源更豐富,BT中不同種子之間的用戶是分隔的,即使種子中包含的文件是相同的,BT用戶之間也無法互通連接。

2.底層傳輸協議比較:

BT只使用TCP協議進行下載,協議簡單有效,但是功能比較單一,有的功能不完整,emule使用TCP和UDP兩種協議進行通信,更加有效的利用了網絡資源,功能完整強,但這也同時使主機的負荷增加;

3.文件組織方式和數據驗證方式:

BT會在開始前對文件進行一次完全的HASH,就是將文件首尾相聯然後按固定塊取SHA值,這些值最終被放入torrent文件編碼中,客戶從網上一次下載完全,高效簡單,一般情況下BT軟件會在每小塊下載完成後就對其進行HASH測試,檢查其正確性。emule在鏈接字符串中只存放了整體文件的HASH值,通過將這個HASH到服務器上取出文件的相關信息,實際的操作中,會將文件分解成9.28M小的塊並進行HASH用於對塊的完整性測試。新版的emule會用一種叫AICH的技術,就是說將文件分成80K小的塊然後HASH再將HASH值進行二進迭代式(具體的看emule協議)的HASH最終組成一個HASH二叉樹。好處:可以在鏈接中只加入根結節的HASH值而不用加入葉子節點,減小了鏈接字符串小,如果在最終文件下載完畢後,測試出的根節點HASH與得到的根節點的HASH值不同,則可以通過協議與網絡上的其它主機的樹進行比較快速得出錯誤的塊。

4.流量控制方式:

BT採用針鋒相對的方式處理上傳下載平衡的控制,這種方式會記錄短期內與客戶連接的所有節點的上傳下載流量,通過在固定時間內對下載流量的比較,得出允許上傳的客戶;為防止新客戶長時間得不到其它客戶的認同,BT會在一段時間停止他的上傳作為對他的警告;對於已經下載完畢的客戶,BT會簡單的使上傳流量最多的客戶得到更多的時間完成上傳;為了防止在文件的最後階段下載速度下降,BT會在最後時向所有連接的客戶發送請求迅速完成下載;下載過程中,BT會對文件塊在整個網絡中的存在複本的多少進行跟蹤,比較少的複本總是會得到優先的下載權,以使整個網絡的文件冗餘度提高。簡單的說,BT使用的是針對文件的流量控制方式。

Emule採用的是客戶積分的方式,就是對所有用戶的上傳和下載量進行一個運算,從而得出一個客戶的積分值,那些積分比較高的用戶總是可以得到優先的下載權,甚至可以不進行排隊直接下載,結果就是:在一個比較長的時間內對一個用戶對其它用戶的整體貢獻有了一個估量。簡單的說,emule採用的是針對用戶的流量控制方式。

5.功能與性能:

emule具有查找功能,而這在BT只能通過網站來實現。

BT的方式更注重於簡單高效的快速傳輸,而emule更注重於整個網絡狀態的變化及用戶體驗。單從下載效率上說BT佔優,而從網絡狀態及完整的協議支持上說,emule則作了更多的事情。從性能上考慮,在相同網絡狀態下,***單文件的能力比較強,emule比較適合於長時間的多文件下載,對機器的使用和影響比較小,這源於兩者對網絡均衡及p2p模式的不同理解。

BT文件片斷選擇策略

1.片斷選擇

選擇一個好的順序來下載片斷,對提高性能非常重要。一個不好的片斷選擇算法可能導致所有的片斷都處於下載中,或者在某一時間段沒有上載任何片段給其它peers。

2.嚴格的優先級

片斷選擇最優先策略是:一旦用戶請求了某個片斷的子片斷,那麼將優先請求該片斷剩下的子片斷。這樣用戶可以儘可能快地獲得一個完整的片斷。

3.最少優先

對一個下載者來說,在選擇下一個下載片斷時,通常選擇的是在peers之間流傳最少的那個片斷,也就是所謂的“最少優先”。這種技術,確保了每個下載者都擁有它的peers們最希望得到的那些片斷(即最“稀有”的片段)。這也確保了那些越普通的片斷越放在最後下載,從而減少了這樣一種可能性,即某個peer當前正提供上載,而隨後卻沒有任何別人所需要的片斷了。每個peer都優先選擇整個系統中最少的那些片斷去下載,而那些在系統中相對較多的片斷,放在後面下載,這樣,整個系統就趨向於一種更優的狀態。如果不用這種算法,大家都去下載最多的那些片斷,那麼這些片斷就會在系統中分佈的越來越多,而那些在系統中相對較少的片斷仍然很少,最後,某些peer就不再擁有其它peer所需要的片斷了,那麼系統的參與者越來越少,整個系統的性能就下降。在BT系統中,充分考慮了經濟學的概念,處處從整個系統的性能出發,參與者越多,系統越優化。

4.隨機的第一個片斷

“最少優先”的一個例外是在下載剛開始的時候。此時,下載者沒有任何片斷可供上傳,所以,需要儘快的獲取一個完整的片斷。而最少的片斷,通常只有某一個peer擁有,所以,它可能比多個peers都擁有的那些片斷下載的要慢。因此,第一個片斷是隨機選擇的,直到第一個片斷下載完成,才切換到“最少優先”的策略。

5.最後階段模式

有時候,從一個速率很慢的peer那裡請求一個片斷。在下載的中間階段,這不是什麼問題,但是卻可能潛在的延遲下載的完成。為了防止這種情況,在最後階段,peer向它的所有的peers們都發送某片斷的子片斷的請求,一旦某些子片斷到了,那麼就會向其它peer發送cancel消息,取消對這些子片斷的請求,以避免帶寬的浪費。實際上,用這種方法並沒有浪費多少帶寬,而文件的結束部分也一直下載的非常快。

6.阻塞(choking)算法

BT並不集中分配資源。每個peer自己有責任來儘可能的提高它的下載速率。Peers從它可以連接的peers處下載文件,並根據對方提供的下載速率給予同等的上傳回報(你敬我一尺,我敬你一丈)。對於合作者,提供上傳服務,對於不合作的,就阻塞對方。所以說,阻塞是一種臨時的拒絕上傳策略,雖然上傳停止了,但是下載仍然繼續。在阻塞停止的時候,連接並不需要重新建立。阻塞算法並不屬於BT對等協議(指peers之間交互的協議)的技術部分,但是對提高性能是必要的。一個好的阻塞算法應該利用所有可用的資源,為所有下載者提供一致可靠的下載速率,並適當懲罰那些只下載而不上傳的peers。

BT帕累託有效是指任何重新改變資源配置的方式,都不可能使一部分人在沒有其他人受損的情況下受益。這一資源配置的狀態,被稱為“帕累托最優”(Pareto optimum)狀態,或稱為“帕累託有效”(Pareto efficient)。在計算機領域,尋求帕累託有效是一種本地優化算法BitTorrent的阻塞算法,用一種針鋒相對的方式來試圖達到帕累托最優。

但是算法存在以下問題:

最後一個片斷的問題被誇大,且隨機的第一個片斷問題則被低估了。BitTorrent的最少優先策略在使得一個擁有了部分文件片斷的節點快速找到缺少的片斷的效率並不好。

eMule協議和文件片段選擇及搜索算法

為了優化整個網絡的吞吐量和共享,eMule仔細挑選選擇塊的下載順序。基本的選擇策略和分片信息是這樣的:每個文件被分成9.28M的塊,每部分分成80KB的片。塊下載的順序是由發送請求文件塊消息(.4節)的下載客戶端決定。下載客戶端可以在任何給定時刻從各個源中下載一個單獨的文件塊,所有從相同源中請求的片都在同一個塊中。下面的原理(以這個順序)應用於下載塊等級:

1.(可獲得的)片的頻率,儘可能快的下載非常稀少的片來形成一個新的源。

2. 用來預覽的塊(最初+最後的片),預覽或檢查文件(比如,電影、mp3)

3. 請求狀態(過程中下載),嘗試向每個源詢問其它的片。在所有源之間擴散請求。

4. 完成(未到某種程度的完成),在開始下載另一個時應該完成獲得部分的片

頻率標準定義了三個區域:非常稀少、稀少和一般。在每個區域裡,標準有特定的權重,用來計算塊等級。較低等級的塊先下載。下面的列表根據上面的原理指定文件等級範圍:

l0-9999 - 不請求和請求非常稀少的塊

l0000-9999 - 不請求稀少和預覽塊

l20000-29999 - 不請求部分完成的一般的塊

l30000-39999 - 請求的稀少和預覽的塊

l40000-49999 - 請求的沒有完成的一般的塊

這個算法通常選擇第一個最稀少的塊。然而,部分完成的塊,接近完成的,也可能被選中。對於一般的塊,在不同的源之間擴散下載。

eMule和BT中DHT算法

DHT的全稱是Distributed Hash Table,即分佈式哈希表技術,是一種分佈式存儲方法。這種網絡不需要中心節點服務器,而是每個客戶端負責一個小範圍的路由,並負責存儲一小部分數據,從而實現整個DHT網絡的尋址和存儲。和中心節點服務器不同,DHT網絡中的各節點並不需要維護整個網絡的信息,而是隻在節點中存儲其臨近的後繼節點信息,幅減少了帶寬的佔用和資源的消耗。DHT網絡還在與關鍵字最接近的節點上覆製備份冗餘信息,避免了單一節點失效問題。我們可以把整個DHT網絡想象成一個城市,那麼每個客戶端,就好比城市裡各個角落的地圖,上面繪製了附近區域的地形情況,把這些地圖一彙總,城市的全貌就出來了。

而DHT所採用的算法中最出名的是Kademlia,eMule最早開始使用,Bitcomet、Azureus和BitTorrent只是步其後塵,同樣使用Kademlia算法的DHT。不過它們各自的實現協議不盡相同,因此不能相互兼容(BitComet與BitTorrent兼容,Azureus更像eMule,但與其它都不兼容)。

在2005年5月著名的BiTtorrent在4.0版實現基於Kademlia協議的DHT技術後,很快國內的BitComet和BitSpirit也實現了和BitTorrent兼容的DHT技術,實現trackerless下載方式。emule實現的基於Kademlia類似的技術(BT中叫DHT,emule中叫Kad),和BT軟件使用的Kd技術的區別在於key、value和node ID的計算方法不同。

對於BT協議,目前國內用戶使用最多的BT客戶端就是Bitcomet和訊雷,默認情況下,無須做任何設置這些BT軟件即可自動連接並使用DHT網絡。啟動軟件,它會使用和TCP端口號相同的UDP端口進行DHT網絡連接。任何P2P技術的改進都與版權的博奕脫不了干係,DHT網絡能夠引起如此注目亦是如此。

確實,BT採用DHT網絡後,反[Dao版]將變得更加困難。因為在此之前,用戶進行交換數據時,必需首先連接上Tracker服務器,根據所獲得的正在進行下載和上傳的用戶列表,才能夠進行正常的文件交換。這樣的話,只需封禁掉提供Tracker服務的網站,便可以截斷[Dao版]傳播的途徑。DHT網絡則不同,由於此時互聯網中任何一個運行BT客戶端的用戶都可以作為DHT網絡中的節點,因此即使封禁掉那些提供Tracker服務的網站,用戶還是能夠通過全球範圍的邏輯DHT網絡分享文件,反[Dao版]就無從談起。除非讓上的人都不上網,或宣佈使用BT軟件為重罪。但技術從來都是一把雙刃劍。在批判BT助長[Dao版]氣焰的同時,我們也應該看到,BT也正在日漸成為合法作品傳播的途徑。由於無法承受超量流量的訪問,一些免費和共享軟件(如Foobar2000等)開始採用BT方式分發型的合法軟件——Linux系統,更是將BT作為主要的分發渠道。

在eMule中也有使用,常把它叫做KAD,只不過具體實現的協議有所不同。Kad網絡的主要的目標是做到不需要服務器和改善可量測性。相對於傳統的ed2k服務器只能處理一定數量的使用者(我們在服務器列表也都看到了,每個服務器都有最多人數限制),而且如果服務器連接人數過多,還會嚴重的的拖垮網絡。傳統的ed2k網絡需要服務器支持作為中轉和存儲hash列表信息,kad可以不通過服務器同樣完成ed2k網絡的一切功能。Kad需要UDP端口的支持,之後Emule會自動按照客戶端的要求,來判斷它能否自由連線,然後同樣也會分配一個id,這個過程和ed2k的高id和低id檢查很像,不過這個id所代表的意義不同於ed2k網絡,它代表一個是否“ly”的狀態。

Kad能夠自我組織,並且自我調節最佳的使用者數量以及他們的連接效果。因此,它更能使網絡的損失達到最小。由於具備了以上所敘述的功能,Kad也被稱之為Serverless network(無服務器網絡)。雖然目前一直處於開發階段(alpha stage) 。通過進行Kad關鍵字搜尋,任何人可以在文件分享網絡中尋找資料。沒有任何中央服務器儲存文件索引,這項工作是平均由所有客戶端擔當:擁有要分享的文件的枝節點,會先處理文件的內容,並從內容計算出一組雜湊Hash值,這組值將會在分享網絡中辨識這個文件。kad網絡首先給每個客戶分配一個唯一的ID值,然後對不同的ID值進行異或來得到兩個客戶之間的“距離”,kad會維護一個桶,“距離”越近的用戶桶裡的數量會越多,kad定期對桶裡的用戶進行清理,以保持其有效性。

對於文件和用戶emule會有兩個這樣的結構,可以通過kad來查找文件和文件相關的用戶信息;同樣為了考慮冗餘的問題,kad會將其自身的信息複製一份給“距離”它最近的一定數量的用戶,這樣就算在它下線後,這些信息也不會丟失。Kad本身有一個nodes.dat文件,也叫做節點文件,這裡面存放了我們在Kad網絡中的鄰居節點,我們都是通過這些節點來進入Kad網絡的,相當於客戶通訊中通過router來加入DHT網絡。

注:在eMule具體的實現過程中,採用的ID是28bit。例如:找到用戶小則是通過將用戶id異或的方式,兩個id的二進位異或值決定他們之間的邏輯距離,如00距離0要比距離00近。那麼當一個用戶加入kad後,首先通過一個已知的用戶找到一批用戶的id和ip地址和端口。當該用戶要尋找一個特定用戶A的時候,該用戶先詢問幾個已知的邏輯距離較A較近的用戶,如B用戶,C用戶,D用戶,B,C,D會告訴該用戶他們知道的更加近的用戶的id和ip地址和端口,同理類推,這個用戶最終就能找到A。所以尋找的次數會在logN數量級,這裡N代表詢問的人數。

最令人遺憾的是BT和eMule中的DHT算法無法互通和兼容!

注:在Kad網絡中,系統存儲的數據以對形式存放。在BT的DHT實現中,其key值為torrent文件的info_hash串,其value值則和torrent文件有密切關係。

DHT技術的缺點和發展存在的問題

1.節點頻繁加入和離開引起網絡波動

網絡波動的程度嚴重影響發現算法的效率。網絡波動(Churn、fluctuation of network)包括結點的加入、退出、失敗、遷移、併發加入過程、網絡分割等。DHT的發現算法如Chord、CAN、Koorde等都是考慮網絡波動的最差情況下的設計與實現。由於每個結點的度數儘量保持最小,這樣需要響應的成員關係變化的維護可以比較小,從而可以快速恢復網絡波動造成的影響。但是每個結點僅有少量路由狀態的代價是發現算法的高延時,因為每一次查找需要聯繫多個結點。

2.DHT算法由於採用分佈式散列函數,只適合於準確的查找,如要支持目前Web搜索引擎具有的多關鍵字查找功能,還需引入新的方法

原因在於DHT工作方式,基於DHT的P2P系統採用相容散列函數根據精確關鍵詞進行對象的定位與發現。散列函數總是試圖保證生成的散列值均勻隨機分佈,結果兩個內容相似度很高但不完全相同的對象被生成了完全不同的散列值,存放到了完全隨機的兩個節點上。因此,DHT可以提供精確匹配查詢,但是支持語義是非常困難的。目前在DHT基礎上開展帶有語義的資源管理技術的研究還非常少。由於DHT的精確關鍵詞映射的特性決定了無法和信息檢索等領域的研究成果,阻礙了基於DHT的P2P系統的規模應用。作為一種資源組織與發現技術必然要支持複雜的查詢,如關鍵詞、內容查詢等。儘管信息檢索和數據挖掘領域提供了量成熟的語義查詢技術,由於DHT精確關鍵詞映射的特性阻礙了DHT在複雜查詢方面的應用。

3.DHT的安全性:比如節點之間通迅和查找分工沒有適當安全認證機制,存在很多安全隱患

當前下載軟件的發展趨勢就是集成各種協議,打通各種協議的下載(BT、ED2K(eMule)、HTTP、FTP、MMS、RTSP協議),脫兔、迅雷已經做了一部分這樣的工作,但是實際效果並不好。資源下載工具的用戶並不關心資源是以什麼協議方式在網絡上發佈的,用戶的期望在於擁有相應的權限都可以下載,所有協議之間的隔閡被打通。下載工具成為向互聯網獲取資源、同時也是向互聯網提供資源的平臺。


分享到:


相關文章: