1. 程式人生 > >BT和eMule協議的比較和分析

BT和eMule協議的比較和分析

http://blog.chinahr.com/blog/I_Shinji/post/109003
 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的最新版本是0.48a(2007年5月20號釋出)。
emule是eDonkey的升級版,它的獨到之處在於開源。其基本原理和運作方式,也是基於eDonkey,能夠直接登入eDonkey的各類伺服器。eMule同時也提供了很多eDonkey所沒有的功能,比如可以自動搜尋網路中的伺服器、保留搜尋結果、與連線使用者交換伺服器地址和檔案、優先下載便於預覽的檔案頭尾部分等等,這些都使得eMule使用起來更加便利,也讓它得到了電騾的美譽。

支援BT協議的P2P應用程式很多,如BitBuddy、FlashBT、BitComet和BitSpirit等,通常BT由如下幾部分組成:.torrent檔案、種子提供站點、目錄伺服器和內容釋出者/下載者。.torrent檔案是一個文字檔案,包含了tracker資訊和檔案資訊兩部分。tracker資訊主要是***中需要用到的tracker伺服器的地址和針對tracker伺服器的設定;檔案資訊是指將目標檔案計算處理後再根據BT協議的B編碼規則網編碼後得到的資訊。BT的主要原理是把提供下載的檔案虛擬分成小相等的塊,塊小必須為2
Kbyte的整數次方(由於是虛擬分塊,硬碟上並不產生各個塊檔案),並把每個塊的索引資訊和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,預設情況下,無須做任何設定BitComet即可自動連線並使用DHT網路。啟動軟體,它會使用和TCP埠號相同的UDP埠進行DHT網路連線。任何P2P技術的改進都與版權的博奕脫不了干係,DHT網路能夠引起如此注目亦是如此。
確實,BT採用DHT網路後,反盜版將變得更加困難。因為在此之前,使用者進行***時,必需首先連線上Tracker伺服器,根據所獲得的正在進行下載和上傳的使用者列表,才能夠進行正常的檔案交換。這樣的話,只需封禁掉提供Tracker服務的網站,便可以截斷盜版傳播的途徑。DHT網路則不同,由於此時網際網路中任何一個執行BT客戶端的使用者都可以作為DHT網路中的節點,因此即使封禁掉那些提供Tracker服務的網站,使用者還是能夠通過全球範圍的邏輯DHT網路分享檔案,反盜版就無從談起。除非讓上的人都不上網,或宣佈使用BT軟體為重罪。但技術從來都是一把雙刃劍。在批判BT助長盜版氣焰的同時,我們也應該看到,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協議),脫兔、迅雷已經做了一部分這樣的工作,但是實際效果並不好。資源下載工具的使用者並不關心資源是以什麼協議方式在網路上釋出的,使用者的期望在於擁有相應的許可權都可以下載,所有協議之間的隔閡被打通。下載工具成為向網際網路獲取資源、同時也是向網際網路提供資源的平臺。