2009年6月7日 星期日

高低id計算

來源:
http://zhidao.baidu.com/question/36379175.html#best_answer_content

推薦更強大的改進版本eMule-Xtreme 0.48a,你所說的發消息看HIGHID之類的一目瞭然,下載地址:
eMule V0.48a Xtreme 6.1 Final 多國語言版
<a href="http://18.duote.net/emule_xtreme.exe" target="_blank">http://18.duote.net/emule_xtreme.exe</a>

eD2K sever是指服務器裡有的文件,
Kad是Kademlia的簡稱,eMule的官方網站在2004年2月27日正式發佈的 eMule v0.42b中,Kad開始正式內嵌成為eMule的一個功能模塊,可以說從這個版本開始eMule便開始支持Kad網絡了。

Kad 的出現,結束了之前edonkey時代,在ed圈裡只存在著ED2K一種網絡的模式,它通過新的協議開創並形成了自己的kad網絡,使之和ED2K網絡並駕齊驅,而且它還完全支持兩種網絡,可以在兩種網絡之間通用。Kad同樣也屬於開源的自由軟件。它的程序和源代碼可以在官方網站[url]http: //<a href="http://www.emule-project.net/" target="_blank">www.emule-project.net</a>[/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網絡沒有高低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呢?
事實上它的計算方法是這樣
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


來源交換就是簡單的點對點傳輸。