Kad是Kademlia的簡稱,eMule的官方網站在2004年2月27日正式發布的 eMule
v0.42b中,Kad開始正式內嵌成為eMule的一個功能模塊,可以說從這個版本開始eMule便開始支持Kad網絡了。
Kad的出現,結束了之前edonkey時代,在ed圈里只存在著ED2K一種網絡的模式,它通過新的協議開創并形成了自己的kad網絡,使之和ED2K網絡并駕齊驅,而且它還完全支持兩種網絡,可以在兩種網絡之間通用。Kad同樣也屬于開源的自由軟件。它的程序和源代碼可以在官方網站[url]
http://www.emule-project.net[/url]上下載。
Kad網絡拓撲的最大特點在于它完全不需要服務器,我們都知道傳統的ed2k網絡需要服務器支持作為中轉和存儲hash列表信息,kad可以不通過服務器同樣完成ed2k網絡的一切功能,你唯一要做的就是連線上網,然后打開kad。Kad需要UDP端口的支持,之后Emule會自動按照客戶端的要求,來判斷它能否自由連線,然后同樣也會分配給你一個id,這個過程和我們ed2k的高id和低id檢查很像,不過這個id所代表的意義不同于ed2k網絡,它代表一個是否“freely”的狀態。
Kad和ed2k網絡有著完全不同的觀念但是相同的目的: 都是搜索和尋找文件的源。
Kad網絡的主要的目標是做到不需要服務器和改善可量測性。相對于傳統的ed2k服務器只能處理一定數量的使用者(我們在服務器列表也都看到了,每個服務器都有最大人數限制),而且如果服務器比較大連接人數過多,還會嚴重的的拖垮網絡。而Kad能夠自我組織,并且自我調節最佳的使用者數量以及他們的連接效果。因此,
它更能使網絡的損失達到最小。由于具備了以上所敘述的功能,Kad也被稱之為Serverless
network(無服務器網絡)。雖然目前一直處于開發階段(alpha stage) 。但毫無疑問,它無可比擬的優勢,將會使它成為p2p的明天。
通俗的來講就是在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),然后將這些信息分散到整個網絡里。
為了找到特定的文件,搜索的要求先到達網絡上的任何一臺電腦上,然后這臺電腦就會再將它轉到另一臺有更多文件信息的電腦。第三臺電腦可能就擁有文件本身——或者也可能再繼續轉到其他有正確信息的電腦。采用這種方法,通常只需要跳轉兩到三次,便可以輕松查找到所需文件。