熱心網(wǎng)友
通俗的講,Kad是一種無服務(wù)器網(wǎng)絡(luò),將信息分散在各個結(jié)點(diǎn)中,而ED2K是服務(wù)器。到底什么是kad?關(guān)于kad網(wǎng)絡(luò),這一個多月來我發(fā)現(xiàn)有好多剛剛接觸emule的朋友不太明白,總是搞不清楚這是個什么東西,雖然本區(qū)以前也曾經(jīng)有人寫過一些關(guān)于kad 的文章,但是可能新來的朋友不會去翻了,那么我就結(jié)合自己對kad的一點(diǎn)認(rèn)識,來重新談一下kad吧?其中有好多不對的地方也請諸位朋友不要笑話我,請一一指出在。小王這里多謝了!Kad是Kademlia的簡稱,eMule的官方網(wǎng)站在2004年2月27日正式發(fā)布的 eMule v0。42b中,Kad開始正式內(nèi)嵌成為eMule的一個功能模塊,可以說從這個版本開始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)站 上下載。 Kad網(wǎng)絡(luò)拓?fù)涞淖畲筇攸c(diǎn)在于它完全不需要服務(wù)器,我們都知道傳統(tǒng)的ed2k網(wǎng)絡(luò)需要服務(wù)器支持作為中轉(zhuǎn)和存儲hash列表信息,kad可以不通過服務(wù)器同樣完成ed2k網(wǎng)絡(luò)的一切功能,你唯一要做的就是連線上網(wǎng),然后打開kad。Kad需要UDP端口的支持,之后Emule會自動按照客戶端的要求,來判斷它能否自由連線,然后同樣也會分配給你一個id,這個過程和我們ed2k的高id和低id檢查很像,不過這個id所代表的意義不同于ed2k網(wǎng)絡(luò),它代表一個是否“freely”的狀態(tài)。Kad和ed2k網(wǎng)絡(luò)有著完全不同的觀念但是相同的目的: 都是搜索和尋找文件的源。 Kad網(wǎng)絡(luò)的主要的目標(biāo)是做到不需要服務(wù)器和改善可量測性。相對于傳統(tǒng)的ed2k服務(wù)器只能處理一定數(shù)量的使用者(我們在服務(wù)器列表也都看到了,每個服務(wù)器都有最大人數(shù)限制),而且如果服務(wù)器比較大連接人數(shù)過多,還會嚴(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)勢,將會使它成為p2p的明天。可能很多朋友會關(guān)注, kad網(wǎng)絡(luò)沒有高低id的計(jì)算原則,是否對于低id來言就暢通無阻了呢?我們大家知道在ed2k網(wǎng)絡(luò)里面,我們的id是通過ip進(jìn)行如下的算法計(jì)算得出的設(shè)我們的IP = A。B。C。D那么我們的ID number= A + 256*B + 256*256*C + 256*256*256*Dlow ID的產(chǎn)生是由于我們的ID計(jì)算結(jié)果小于16777216。即 ID number= A + 256*B + 256*256*C + 256*256*256*D < 16777216 Kad的 id計(jì)算原則并不是象上面那樣,他更關(guān)注我們是否open和freely。但是kad里面是如何計(jì)算我們的id呢?事實(shí)上它的計(jì)算方法是這樣ID number=256*256*256*A+256*256*B+256*C+D 所以kad其實(shí)也有高低id的分別。所以內(nèi)網(wǎng)用戶在使用的時(shí)候依舊無法達(dá)到內(nèi)網(wǎng)用戶完全穿透網(wǎng)絡(luò)的效果,而且目前來看,還存在著kad模塊引入,導(dǎo)致占用系統(tǒng)資源會變大以及會突然產(chǎn)生Memory Leak的問題,對于內(nèi)存的控制,目前emule做的效果還是不好。其實(shí)kad本身有一個nodes。dat文件,也叫做節(jié)點(diǎn)文件,這里面存放了我們在Kad網(wǎng)絡(luò)中的鄰居節(jié)點(diǎn),我們都是通過這些節(jié)點(diǎn)來進(jìn)入Kad網(wǎng)絡(luò)的。其實(shí)kad的網(wǎng)絡(luò)倒更像是overnet和Kazaa網(wǎng)絡(luò),有興趣的朋友大家可以對比看看。Kad網(wǎng)絡(luò)提供了幫助尋找節(jié)點(diǎn)以及記錄節(jié)點(diǎn)的機(jī)制。 下面我們來說說這個機(jī)制的原理:Kad擁有一個160bit的ID,每一個節(jié)點(diǎn)送出的訊息都必須包含此ID。每一個節(jié)點(diǎn)都必須記錄一個資料來保存已經(jīng)存在的節(jié)點(diǎn),資料的格式是 (IP address, UDP port, Node ID),節(jié)點(diǎn)所必須負(fù)責(zé)的范圍是2的i次方及2的i+1次方,i的范圍是0 < i <160,這個結(jié)構(gòu)叫做k-bucket,該結(jié)構(gòu)會形成一個tree的形狀,每一次接收到新的信息時(shí),各個節(jié)點(diǎn)都必須更新k-bucket?鵲淖柿希腹齥-bucket結(jié)構(gòu)我們可以保證所有的節(jié)點(diǎn)狀態(tài)都是新的,而且一定會知道這個節(jié)點(diǎn)在哪里。Kademlia網(wǎng)絡(luò)提供四種Potocol(RPC) (1)PING 測試是否節(jié)點(diǎn)存在(2)STORE存儲通知的資料(3)FIND_NODE 通知其他節(jié)點(diǎn)幫助尋找node(4)FIND_VALUE 通知其他節(jié)點(diǎn)幫助尋找Value而當(dāng)每一個指令被接受到后,每一個節(jié)點(diǎn)都會到k-bucket上搜尋,通過這樣的結(jié)構(gòu),kad提供一個方便快速且可以被保證在logN次數(shù)下找到所需的節(jié)點(diǎn)。通俗的來講就是在kad網(wǎng)絡(luò)中,我們每個emule用戶端只負(fù)責(zé)處理一小部分搜索和查找源的工作。分配這些工作的時(shí)候,通過我們每個用戶端的唯一的ID和搜索文件的hash值之間的匹配來決定。比如像我猜我猜我猜猜。rm這個文件由用戶小王來負(fù)責(zé)(通過該文件的hash值來決定),那么任何其他用戶在下載這個文件的?r候都會告訴其他用戶,小王有這個文件,其他用戶去下載這個文件的?r候也會詢問小王,小王也會告訴他們誰正在共享這個文件,這樣kad找源的工作就完成了。搜索時(shí)候的方法也差不多,只不過是每個人負(fù)責(zé)一個關(guān)鍵字。整個過程有點(diǎn)像在照線索循序問路而找到正確方向,而不是路上隨便到處抓人在問路。而每個地方里的網(wǎng)絡(luò)相關(guān)信息,則會隨著電腦及文件的加入而持續(xù)更新。好處在于讓你可以搜索整個網(wǎng)絡(luò),而不只是在某一地區(qū)。目前來講,這個機(jī)制和算法是絕對領(lǐng)先而且非常優(yōu)秀的。如何找到用戶小王則是通過將用戶id異或的方式,兩個id的二進(jìn)位異或值決定他們之間的邏輯距離,如1100距離1101要比距離1001近。那么當(dāng)一個用戶加入kad后,首先通過一個已知的用戶找到一批用戶的id和ip地址和端口。當(dāng)該用戶要尋找一個特定用戶A的時(shí)候,該用戶先詢問幾個已知的邏輯距離較A較近的用戶,如B用戶,C用戶,D用戶,B,C,D會告訴該用戶他們知道的更加近的用戶的id和ip地址和端口,同理類推,這個用戶最終就能找到A。所以尋找的次數(shù)會在logN數(shù)量級,這里N代表詢問的人數(shù)。其實(shí)也就是一種分散式雜湊的方法,基本上是對網(wǎng)絡(luò)上某一特定時(shí)刻的文件進(jìn)行快照(snapshot),然后將這些信息分散到整個網(wǎng)絡(luò)里。 為了找到特定的文件,搜索的要求先到達(dá)網(wǎng)絡(luò)上的任何一臺電腦上,然后這臺電腦就會再將它轉(zhuǎn)到另一臺有更多文件信息的電腦。第三臺電腦可能就擁有文件本身──或者也可能再繼續(xù)轉(zhuǎn)到其他有正確信息的電腦。采用這種方法,通常只需要跳轉(zhuǎn)兩到三次,便可以輕松查找到所需文件。以上幾個部分,便是對于kad作用原理以及算法的分析,可能好多人看了之后頭大,那么我們普通用戶到底該注意些什么呢?很簡單,你要作的就是再使用emule的時(shí)候打開kad,你會發(fā)現(xiàn)有兩個明顯的特點(diǎn)(1)你的下載速度會加快(2)你的下載文件的源會增加以上兩條對于lowid和經(jīng)常下載源在國外的文件用戶,效果就更為突出,特別對于在ed2k網(wǎng)絡(luò)中只有幾個源或者沒有源的文件,在kad網(wǎng)絡(luò)中,一般都能找到源,所以說你使用了emule下載文件,基本上不會出現(xiàn)沒有源的請況,無論多長時(shí)間,差別只是源的多少個數(shù)問題,由于kad網(wǎng)絡(luò)都是自動配置的,所以你絲毫不用分心,那么索性我們就打開它,何樂而不為呢?另外對于我們搜索的時(shí)候,如果采用kad網(wǎng)絡(luò)搜索,多數(shù)情況下找到的文件源會遠(yuǎn)遠(yuǎn)多于ed2k的全局搜索,對于大家都是一個明智的選擇。雖然,目前kad還處在試驗(yàn)階段,但是他的崛起是遲早的事情,我從kad一開始推出就一直在使用,開始的時(shí)候用的人不多,效果不明顯。但是目前來講,再我發(fā)帖前,我還做過測試現(xiàn)在kad的使用人數(shù)已經(jīng)突飛猛進(jìn),我隨便找了一期我猜我猜我猜猜來做測試,發(fā)現(xiàn)kad找到源的比例已經(jīng)占了總源比例的30%,甚至更多,時(shí)間越長效果越明顯。所以,在這里呼吁大家都打開kad,讓我們的速度再邁上一個臺階。早日迎接kad天下的到來!。