什么是ED2K網絡啊?別人在我的電腦下載東西``是不是我的電腦就會卡啊?

熱心網友

通俗的講,Kad是一種無服務器網絡,將信息分散在各個結點中,而ED2K是服務器。到底什么是kad?關于kad網絡,這一個多月來我發現有好多剛剛接觸emule的朋友不太明白,總是搞不清楚這是個什么東西,雖然本區以前也曾經有人寫過一些關于kad 的文章,但是可能新來的朋友不會去翻了,那么我就結合自己對kad的一點認識,來重新談一下kad吧?其中有好多不對的地方也請諸位朋友不要笑話我,請一一指出在。小王這里多謝了!Kad是Kademlia的簡稱,eMule的官方網站在2004年2月27日正式發布的 eMule v0。42b中,Kad開始正式內嵌成為eMule的一個功能模塊,可以說從這個版本開始eMule便開始支持Kad網絡了。Kad的出現,結束了之前edonkey時代,在ed圈里只存在著ED2K一種網絡的模式,它通過新的協議開創并形成了自己的kad網絡,使之和ED2K網絡并駕齊驅,而且它還完全支持兩種網絡,可以在兩種網絡之間通用。Kad同樣也屬于開源的自由軟件。它的程序和源代碼可以在官方網站 上下載。 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網絡沒有高低id的計算原則,是否對于低id來言就暢通無阻了呢?我們大家知道在ed2k網絡里面,我們的id是通過ip進行如下的算法計算得出的設我們的IP = A。B。C。D那么我們的ID number= A + 256*B + 256*256*C + 256*256*256*Dlow 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?鵲淖柿希腹齥-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值來決定),那么任何其他用戶在下載這個文件的?r候都會告訴其他用戶,小王有這個文件,其他用戶去下載這個文件的?r候也會詢問小王,小王也會告訴他們誰正在共享這個文件,這樣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的時候打開kad,你會發現有兩個明顯的特點(1)你的下載速度會加快(2)你的下載文件的源會增加以上兩條對于lowid和經常下載源在國外的文件用戶,效果就更為突出,特別對于在ed2k網絡中只有幾個源或者沒有源的文件,在kad網絡中,一般都能找到源,所以說你使用了emule下載文件,基本上不會出現沒有源的請況,無論多長時間,差別只是源的多少個數問題,由于kad網絡都是自動配置的,所以你絲毫不用分心,那么索性我們就打開它,何樂而不為呢?另外對于我們搜索的時候,如果采用kad網絡搜索,多數情況下找到的文件源會遠遠多于ed2k的全局搜索,對于大家都是一個明智的選擇。雖然,目前kad還處在試驗階段,但是他的崛起是遲早的事情,我從kad一開始推出就一直在使用,開始的時候用的人不多,效果不明顯。但是目前來講,再我發帖前,我還做過測試現在kad的使用人數已經突飛猛進,我隨便找了一期我猜我猜我猜猜來做測試,發現kad找到源的比例已經占了總源比例的30%,甚至更多,時間越長效果越明顯。所以,在這里呼吁大家都打開kad,讓我們的速度再邁上一個臺階。早日迎接kad天下的到來!。