複製鏈接
請複製以下鏈接發送給好友

KAD

(網絡結構)

鎖定
簡介
Kademlia的簡稱,一種基於P2P理念的新型網絡拓撲結構,主要的目標是做到不需要服務器和改善可量測性。
官方網站
在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
縮    寫
KAD
基    於
P2P理念的新型網絡拓撲結構
主要目標
做到不需要服務器和改善可量測性

KAD詳細解釋

基本上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網絡都是自動配置的,所以你絲毫不用分心,那麼索性我們就打開它,何樂而不為呢?

KAD高低ID

KAD説明

可能很多朋友會關注, 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呢?

KAD計算方法

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原理

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作用原理以及算法的分析,可能好多人看了之後頭大,那麼我們普通用户到底該注意些什麼呢?

KADeMule

KAD誕生

在2002年5月13日的黎明,一個叫Merkur的人對原始的eDonkey2000客户端感到不滿,他堅信他能做的更好。然後他就那麼去做了。他在自己的周圍聚集了很多的開發人員,eMule工程也由此誕生。他們的目標是將eDonkey的精華保留下來,增加新的功能,並使圖形界面更加友好。他們無法想象此時的決定會帶來什麼樣的影響……
今天,eMule是世界上最大最可靠的點對點文件共享客户端之一。由於它奉行開發源代碼的政策,眾多的開發者得以對eMule工程有所貢獻。隨着每一個版本的發佈,eMule的開發者網絡都變得更有效率。

KAD含義

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用户聊天。