簡介
eMule的官方網站在2004年2月27日正式發布的 eMule v0.42b中,Kad開始正式內嵌成為eMule的一個功能模組,這個版本的主要新增功能就是支持Kademlia network(簡稱Kad)。
eMule以前版本連線的是傳統 eD2k network,該網路的特點是用戶運行eMule時,首先連結到一個伺服器,通過該伺服器用戶連結到其它Clients進行下載。
對於Kad,用戶不需要連結伺服器,而是直接連結到Clients。因此,Kad也被稱之為Serverless network(無伺服器網路)。Kad具有傳統eD2k所不具備的優勢,雖然還處於開發階段,但從長遠角度看,Kad將更具發展潛力。
eMule v0.42b版本同時支持傳統eD2k以及Kad。安裝後用戶可以從連結選項 中自行選擇使用或不使用Kad,也可以兩者同時使用。現有ED連結對兩種network完全通用。進行檔案搜尋時,需要選擇 kad (對應Kademlia) 或 server (對應eD2k)。這一版本目前還存在一定的問題,主要是系統資源占用量較老版本有所加大,另外存在一定程度的Memory Leak(記憶體泄漏)。
詳細解釋
基本上Kademlia不是一個網路
是一個很熱門的技術,通稱為DHT (Distributed Hash Table 分散式雜湊表)。Kademlia雖說不是DHT中最好的,但是已經相當不錯,而且很新。DHT有很多套用,但是P2P可能是其中最重要的。因為它可以讓 P2P網路,完全不必使用伺服器。我所知道的網路,大概只有Freenet和早期的Gnutella沒有類似伺服器的東西。其他的網路,舉凡 Fasttrack,eDonkey,OpenNap,WinMX等等,都有類似伺服器的東西。但是前兩者的著名問題是效率不彰,因此DHT就可以幫助解決這個問題。另外沒有伺服器的好處,一是不怕伺服器被有關單位查禁,二是可以讓更多人連上P2P網路。像Overnet就是使用Kademlia技術的純 P2P網路,但是eMule Kademlia並沒有和Overnet相容,聽說是eMule的設計師認為Overnet不夠好,所以把Overnet不好的地方修改了。總之,Overnet/eMule Kademlia都是基於Kademlia的網路,只是eMule並沒有發明另一個新名稱罷了。至於哪個會成功,我個人看好eMule,因為 eDonkey網路上超過7成以上使用eMule。Overnet雖然問世超過1年,但是使用人數始終無法占上百萬。如果eMule Kademlia能把使用者帶進來,我想基於純P2P的好處,eMule Kademlia網路可能超過5百萬,超過Fasttrack的極盛時期。
Kad網路是一種根本不需要伺服器的架構
每個eMule客戶端負責處理一小部分search和source finding的工作。分配工作的原理是基於客戶端的唯一ID和search或者source的hash之間的匹配來決定。比如說LordOfRing1.avi這個檔案由用戶abc來負責(通過檔案的Hash決定),則任何用戶共享這個檔案的時候都會告訴用戶abc我有這個檔案,其他用戶去下載這個檔案的時候也會詢問abc,abc告訴他們誰有這個檔案,source finding就完成了。search的方法也差不多,每個人負責一個keyword。
如何找到用戶abc
則是通過一種將用戶id異或的方式,兩個id的二進制異或值決定他們之間的邏輯距離,比如1100距離1101要比距離1001近。當一個用戶加入Kad後,首先通過一個已知的用戶找到一批用戶的ID和IP連線埠。當此用戶A要尋找某特定用戶x時,A先詢問幾個已知的邏輯距離X較近的用戶,如x1,x2,x3,x1,x2,x3會告訴A他們知道的更加近的用戶的ID,IP和連線埠,依此類推,A最終就能找到X。尋找的次數應該在logN數量級,N是總人數
Kad 的出現 結束了之前eDonkey時代
在eD圈裡只存在著eD2K一種網路的模式,它通過新的協定開創並形成了自己的Kad網路,使之和eD2k網路並駕齊驅,而且它還完全支持兩種網路,可以在兩種網路之間通用。Kad同樣也屬於開源的自由軟體。
Kademlia 兩個明顯的特點
你要做的就是在使用eMule的時候打開Kad,你會發現有兩個明顯的特點
(1)你的下載速度會加快
(2)你的下載檔案的源會增加
以上兩條對於LowID和經常下載源在國外的檔案用戶,效果就更為突出,特別對於在eD2K網路中只有幾個源或者沒有源的檔案,在Kad網路中,一般都能找到源,所以說你使用了eMule下載檔案,基本上不會出現沒有源的請況,無論多長時間,差別只是源的多少個數問題,由於Kad網路都是自動配置的,所以你絲毫不用分心,那么索性我們就打開它,何樂而不為呢?
高低ID
說明
可能很多朋友會關注, kad網路沒有高低id的計算原則,是否對於低id來言就暢通無阻了呢?
我們大家知道在ed2k網路裡面,我們的id是通過ip進行如下的算法計算得出的
設我們的IP = A.B.C.D
那么我們的ID number= A + 256*B + 256*256*C + 256*256*256*D
low ID的產生是由於我們的ID計算結果小於16777216.
即 ID number= A + 256*B + 256*256*C + 256*256*256*D < 16777216
Kad的 id計算原則並不是象上面那樣,他更關注我們是否open和freely。
但是kad裡面是如何計算我們的id呢?
計算方法
ID number=256*256*256*A+256*256*B+256*C+D
所以kad其實也有高低id的分別。所以區域網路用戶在使用的時候依舊無法達到區域網路用戶完全穿透網路的效果,而且目前來看,還存在著kad模組引入,導致占用系統資源會變大以及會突然產生Memory Leak的問題,對於記憶體的控制,emule做的效果還是不好。
其實kad本身有一個nodes.dat檔案,也叫做節點檔案,這裡面存放了我們在Kad網路中的鄰居節點,我們都是通過這些節點來進入Kad網路的。其實kad的網路倒更像是overnet和Kazaa網路,有興趣的朋友大家可以對比看看。Kad網路提供了幫助尋找節點以及記錄節點的機制。
原理
Kad擁有一個160bit的ID,每一個節點送出的訊息都必須包含此ID。每一個節點都必須記錄一個資料來保存已經存在的節點,資料的格式是 (IP address, UDP port, Node ID),節點所必須負責的範圍是2的i次方及2的i+1次方,i的範圍是0 < i <160,這個結構叫做k-bucket,該結構會形成一個tree的形狀,每一次接收到新的信息時,各個節點都必須更新k-bucket內的資料,透過k-bucket結構我們可以保證所有的節點狀態都是新的,而且一定會知道這個節點在哪裡。
Kademlia網路提供四種Potocol
(RPC)
(1)PING 測試是否節點存在
(2)STORE存儲通知的資料
(3)FIND_NODE 通知其他節點幫助尋找node
(4)FIND_VALUE 通知其他節點幫助尋找Value
而當每一個指令被接受到後,每一個節點都會到k-bucket上搜尋,通過這樣的結構,kad提供一個方便快速且可以被保證在logN次數下找到所需的節點。
通俗的來講就是在kad網路中
我們每個emule用戶端只負責處理一小部分搜尋和查找源的工作。分配這些工作的時候,通過我們每個用戶端的唯一的ID和搜尋檔案的hash值之間的匹配來決定。比如像我猜我猜我猜猜.rm這個檔案由用戶小王來負責(通過該檔案的hash值來決定),那么任何其他用戶在下載這個檔案的時候都會告訴其他用戶,小王有這個檔案,其他用戶去下載這個檔案的時候也會詢問小王,小王也會告訴他們誰正在共享這個檔案,這樣kad找源的工作就完成了。搜尋時候的方法也差不多,只不過是每個人負責一個關鍵字。
整個過程有點像在照線索循序問路而找到正確方向,而不是路上隨便到處抓人在問路。而每個地方里的網路相關信息,則會隨著電腦及檔案的加入而持續更新。好處在於讓你可以搜尋整個網路,而不只是在某一地區。來講,這個機制和算法是絕對領先而且非常優秀的。
相關方法
如何找到用戶小王則是通過將用戶id異或的方式,兩個id的二進位異或值決定他們之間的邏輯距離,如1100距離1101要比距離1001近。那么當一個用戶加入kad後,首先通過一個已知的用戶找到一批用戶的id和ip地址和連線埠。當該用戶要尋找一個特定用戶A的時候,該用戶先詢問幾個已知的邏輯距離較A較近的用戶,如B用戶,C用戶,D用戶,B,C,D會告訴該用戶他們知道的更加近的用戶的id和ip地址和連線埠,同理類推,這個用戶最終就能找到A。所以尋找的次數會在logN數量級,這裡N代表詢問的人數。
其實也就是一種分散式雜湊的方法,基本上是對網路上某一特定時刻的檔案進行快照(snapshot),然後將這些信息分散到整個網路里。 為了找到特定的檔案,搜尋的要求先到達網路上的任何一台電腦上,然後這台電腦就會再將它轉到另一台有更多檔案信息的電腦。第三台電腦可能就擁有檔案本身——或者也可能再繼續轉到其他有正確信息的電腦。採用這種方法,通常只需要跳轉兩到三次,便可以輕鬆查找到所需檔案。
以上幾個部分,便是對於kad作用原理以及算法的分析,可能好多人看了之後頭大,那么我們普通用戶到底該注意些什麼呢?
eMule
誕生
在2002年5月13日的黎明,一個叫Merkur的人對原始的eDonkey2000客戶端感到不滿,他堅信他能做的更好。然後他就那么去做了。他在自己的周圍聚集了很多的開發人員,eMule工程也由此誕生。他們的目標是將eDonkey的精華保留下來,增加新的功能,並使圖形界面更加友好。他們無法想像此時的決定會帶來什麼樣的影響……
今天,eMule是世界上最大最可靠的點對點檔案共享客戶端之一。由於它奉行開發原始碼的政策,眾多的開發者得以對eMule工程有所貢獻。隨著每一個版本的發布,eMule的開發者網路都變得更有效率。
含義
eMule(電騾)來自一種叫做“騾子”的動物,提醒你一下,就是那種有點像驢的傢伙。
eMule多長時間更新一次?
eMule並不是有規律的更新和升級的,一般是一周到三周一次,但是不總是這樣。
一些eMule具有的功能:
客戶端使用若干種網路來建立一個可靠的傳輸網路(eD2k,來源交換和Kad)
Kad正處於開放測試階段,eMule 0.42以後的版本中都包含了Kad功能。
eMule的佇列和信用系統確保每個人通過上傳檔案、回饋給整個網路的方式來獲得自己想要的檔案。
eMule是完全免費的,它也決不包含廣告軟體、間諜和流氓軟體。我們之所以創造eMule是為了快樂和知識,而不是為了金錢。
每個下載的檔案都會自動檢查是否損壞,以確保檔案的正確性。
eMule的智慧型損壞控制系統有助於快速糾正在傳輸中損壞的部分。
自動優先權和來源管理系統使你可以一次下載許多檔案而不必一直監視它們。
預覽功能允許你在下載完成之前查看視頻或者壓縮檔案的內容。在預覽視頻時,我們建議您使用Video Lan Client。
eMule的Web服務功能和Web伺服器可以使您快速的訪問網際網路。
你可以為你下載的檔案創建目錄,並且對它們進行組織和管理。
要想找到你所需要的檔案,eMule提供了許多搜尋的方式,包括:伺服器搜尋(本地搜尋和全局搜尋),基於Web的搜尋(Jigle和FileDonkey)以及KAD(測試中)。
eMule允許你使用非常複雜的布爾操作符來進行查詢,使你更加靈活的搜尋檔案。
通過信息與好友系統,你可以向其它用戶傳送信息,然後把他們加為好友。在你的好友列表中,你可以查看一個好友是否線上。
通過內置的IRC客戶端,你可以一邊下載,一邊和全世界的eMule用戶聊天。