Kad是Kademlia的簡(jiǎn)稱,eMule的官方網(wǎng)站在2004年2月27日正式發(fā)布的 eMule
v0.42b中,Kad開始正式內(nèi)嵌成為eMule的一個(gè)功能模塊,可以說從這個(gè)版本開始eMule便開始支持Kad網(wǎng)絡(luò)了。
Kad的出現(xiàn),結(jié)束了之前edonkey時(shí)代,在ed圈里只存在著ED2K一種網(wǎng)絡(luò)的模式,它通過新的協(xié)議開創(chuàng)并形成了自己的kad網(wǎng)絡(luò),使之和ED2K網(wǎng)絡(luò)并駕齊驅(qū),而且它還完全支持兩種網(wǎng)絡(luò),可以在兩種網(wǎng)絡(luò)之間通用。Kad同樣也屬于開源的自由軟件。它的程序和源代碼可以在官方網(wǎng)站[url]
http://www.emule-project.net[/url]上下載。
Kad網(wǎng)絡(luò)拓?fù)涞淖畲筇攸c(diǎn)在于它完全不需要服務(wù)器,我們都知道傳統(tǒng)的ed2k網(wǎng)絡(luò)需要服務(wù)器支持作為中轉(zhuǎn)和存儲(chǔ)hash列表信息,kad可以不通過服務(wù)器同樣完成ed2k網(wǎng)絡(luò)的一切功能,你唯一要做的就是連線上網(wǎng),然后打開kad。Kad需要UDP端口的支持,之后Emule會(huì)自動(dòng)按照客戶端的要求,來判斷它能否自由連線,然后同樣也會(huì)分配給你一個(gè)id,這個(gè)過程和我們ed2k的高id和低id檢查很像,不過這個(gè)id所代表的意義不同于ed2k網(wǎng)絡(luò),它代表一個(gè)是否“freely”的狀態(tài)。
Kad和ed2k網(wǎng)絡(luò)有著完全不同的觀念但是相同的目的: 都是搜索和尋找文件的源。
Kad網(wǎng)絡(luò)的主要的目標(biāo)是做到不需要服務(wù)器和改善可量測(cè)性。相對(duì)于傳統(tǒng)的ed2k服務(wù)器只能處理一定數(shù)量的使用者(我們?cè)诜?wù)器列表也都看到了,每個(gè)服務(wù)器都有最大人數(shù)限制),而且如果服務(wù)器比較大連接人數(shù)過多,還會(huì)嚴(yán)重的的拖垮網(wǎng)絡(luò)。而Kad能夠自我組織,并且自我調(diào)節(jié)最佳的使用者數(shù)量以及他們的連接效果。因此,
它更能使網(wǎng)絡(luò)的損失達(dá)到最小。由于具備了以上所敘述的功能,Kad也被稱之為Serverless
network(無服務(wù)器網(wǎng)絡(luò))。雖然目前一直處于開發(fā)階段(alpha stage) 。但毫無疑問,它無可比擬的優(yōu)勢(shì),將會(huì)使它成為p2p的明天。
通俗的來講就是在kad網(wǎng)絡(luò)中,我們每個(gè)emule用戶端只負(fù)責(zé)處理一小部分搜索和查找源的工作。分配這些工作的時(shí)候,通過我們每個(gè)用戶端的唯一的ID和搜索文件的hash值之間的匹配來決定。比如像我猜我猜我猜猜.rm這個(gè)文件由用戶小王來負(fù)責(zé)(通過該文件的hash值來決定),那么任何其他用戶在下載這個(gè)文件的時(shí)候都會(huì)告訴其他用戶,小王有這個(gè)文件,其他用戶去下載這個(gè)文件的時(shí)候也會(huì)詢問小王,小王也會(huì)告訴他們誰正在共享這個(gè)文件,這樣kad找源的工作就完成了。搜索時(shí)候的方法也差不多,只不過是每個(gè)人負(fù)責(zé)一個(gè)關(guān)鍵字。
整個(gè)過程有點(diǎn)像在照線索循序問路而找到正確方向,而不是路上隨便到處抓人在問路。而每個(gè)地方里的網(wǎng)絡(luò)相關(guān)信息,則會(huì)隨著電腦及文件的加入而持續(xù)更新。好處在于讓你可以搜索整個(gè)網(wǎng)絡(luò),而不只是在某一地區(qū)。目前來講,這個(gè)機(jī)制和算法是絕對(duì)領(lǐng)先而且非常優(yōu)秀的。
如何找到用戶小王則是通過將用戶id異或的方式,兩個(gè)id的二進(jìn)位異或值決定他們之間的邏輯距離,如1100距離1101要比距離1001近。那么當(dāng)一個(gè)用戶加入kad后,首先通過一個(gè)已知的用戶找到一批用戶的id和ip地址和端口。當(dāng)該用戶要尋找一個(gè)特定用戶A的時(shí)候,該用戶先詢問幾個(gè)已知的邏輯距離較A較近的用戶,如B用戶,C用戶,D用戶,B,C,D會(huì)告訴該用戶他們知道的更加近的用戶的id和ip地址和端口,同理類推,這個(gè)用戶最終就能找到A。所以尋找的次數(shù)會(huì)在logN數(shù)量級(jí),這里N代表詢問的人數(shù)。
其實(shí)也就是一種分散式雜湊的方法,基本上是對(duì)網(wǎng)絡(luò)上某一特定時(shí)刻的文件進(jìn)行快照(snapshot),然后將這些信息分散到整個(gè)網(wǎng)絡(luò)里。
為了找到特定的文件,搜索的要求先到達(dá)網(wǎng)絡(luò)上的任何一臺(tái)電腦上,然后這臺(tái)電腦就會(huì)再將它轉(zhuǎn)到另一臺(tái)有更多文件信息的電腦。第三臺(tái)電腦可能就擁有文件本身——或者也可能再繼續(xù)轉(zhuǎn)到其他有正確信息的電腦。采用這種方法,通常只需要跳轉(zhuǎn)兩到三次,便可以輕松查找到所需文件。