最近比較忙,emule的東西已經(jīng)不看了,沒有把翻譯的工作做好,真的很是遺憾。沒想到會(huì)有人來(lái)這里看這些東西,還有人為我打問,真的非常感激!
開源的東西,www.soureforge.net有很多,我想大家一定會(huì)在那里面學(xué)到很多東西。上面我說(shuō)的網(wǎng)站做得很不錯(cuò),分類做得相當(dāng)好,你可以很輕松就知道那些項(xiàng)目開發(fā)最活躍。大家共同支持開源吧!
一直在看x264的代碼,來(lái)這里的人有對(duì)這個(gè)有興趣的可以多多交流。本來(lái)想在這里寫一些我個(gè)人的學(xué)習(xí)感受,但是一直也沒有抽出時(shí)間來(lái)寫。
1 介紹
1.1 目的和范圍
eMule是一個(gè)基于eDonkey協(xié)議的流行文件共享應(yīng)用程序。這份文檔描述eMule的網(wǎng)絡(luò)行為方式,以及為了更好理解這份協(xié)議的一些基本術(shù)語(yǔ)。同時(shí),文檔也對(duì)eMule網(wǎng)絡(luò)協(xié)議做了全面的說(shuō)明,其中還包含一個(gè)詳述消息格式的附言部分。這份文檔信息基于一個(gè)開源客戶端軟件eMule【2】。接下來(lái)的一些介紹是為讀者能更好的去閱讀和理解這份文檔的一些一般性的背景知識(shí)。關(guān)于eMule的更進(jìn)一步的信息可以在【3】中找到。
1.2 概述
eMule網(wǎng)絡(luò)由幾百個(gè)eMule服務(wù)器和數(shù)百萬(wàn)個(gè)eMule客戶端組成【1】。客戶為了得到網(wǎng)絡(luò)服務(wù)需要連接一個(gè)服務(wù)器;只要客戶端在系統(tǒng)中,服務(wù)器連接就一直保持打開狀態(tài)。服務(wù)器提供中心索引服務(wù)功能(象在Napster中一樣),不和別的服務(wù)器通信。
每個(gè)eMule客戶端在本地系統(tǒng)中預(yù)先配置好一個(gè)服務(wù)器列表和一個(gè)共享文件列表。一個(gè)客戶端使用單一TCP連接連接到eMule服務(wù)器來(lái)登入eMule網(wǎng)絡(luò),去獲得文件和可連接的客戶端信息。eMule同時(shí)也使用數(shù)百個(gè)到別的客戶端的TCP連接去下載和上傳文件。每個(gè)eMule客戶端他的每個(gè)共享文件維護(hù)一個(gè)上載隊(duì)列。下載客戶加入隊(duì)列,進(jìn)入隊(duì)列底部,逐步上移直到隊(duì)列的頂部開始下載文件。一個(gè)客戶可能從幾個(gè)不同的客戶端下載同一個(gè)文件,從每一個(gè)客戶端上面得到不同的片斷(fragments)。客戶也可能上載文件數(shù)據(jù)塊(chunks),即使這個(gè)文件還沒有下載完成。最后,eMule還擴(kuò)展了eDonkey協(xié)議,允許客戶之間交換服務(wù)器、別的客戶和文件信息。這里值得注意的是,客戶跟服務(wù)器的通信是基于TCP的。
服務(wù)器啟用一個(gè)內(nèi)部數(shù)據(jù)庫(kù)來(lái)保存客戶和文件信息。eMule服務(wù)器不保存任何文件,它扮演中心索引的角色,保存文件位置信息。服務(wù)器的一個(gè)額外橋接功能,同時(shí)也引來(lái)無(wú)數(shù)抗議的一個(gè)功能就是穿越防火墻,使得躲在防火墻后不能夠接受引入連接的客戶得到解放。橋接功能極大的增加了服務(wù)器的負(fù)擔(dān)。eMule啟用UDP加強(qiáng)客戶性能來(lái)應(yīng)對(duì)服務(wù)器和別的客戶端的連接。客戶接收和發(fā)送UDP消息不是強(qiáng)制性的,如果防火墻阻止客戶發(fā)送和接收UDP消息,這不會(huì)妨礙正常運(yùn)轉(zhuǎn)。
1.2.1 客戶到服務(wù)器的連接
在啟動(dòng)的時(shí)候,客戶使用TCP連接到單個(gè)eMule服務(wù)器。服務(wù)器提供客戶一個(gè)客戶ID(1.3節(jié)),這個(gè)ID只是在客戶服務(wù)器連接生命期有效(這里有一點(diǎn)需要注意:如果客戶擁有一個(gè)High ID,那么只要他的IP地址不發(fā)生改變,客戶就會(huì)從所以的服務(wù)器上得到同一個(gè)ID)。緊接著連接的建立,客戶端會(huì)發(fā)送他的共享文件列表給服務(wù)器。服務(wù)器把這個(gè)列表信息保存他他的內(nèi)部數(shù)據(jù)庫(kù)中,通常數(shù)據(jù)庫(kù)中存有數(shù)十萬(wàn)個(gè)可獲得的文件和活動(dòng)客戶信息。同時(shí),eMule客戶端也發(fā)送他的下載列表,包含他希望去下載的文件。第2節(jié)會(huì)提供客戶和服務(wù)器TCP信息交換的詳細(xì)描述。
連接建立后,eMule服務(wù)器發(fā)送給客戶一個(gè)別的客戶的列表,列表中的客戶可以為當(dāng)前客戶提供文件下載源(這些客戶理所當(dāng)然就被稱為“sources”)。緊跟其后,客戶開始和別的客戶建立連接,1.2.2節(jié)對(duì)此有詳細(xì)描述。
值得注意的是:客戶服務(wù)器的TCP連接在整個(gè)客戶會(huì)話階段都保持開的狀態(tài)。初始握手之后,客戶服務(wù)器事件主要由用戶活動(dòng)觸發(fā):有時(shí)候,客戶發(fā)出文件查找請(qǐng)求,請(qǐng)求被查找結(jié)果作為答復(fù);文件查找之后通常緊跟著一個(gè)特定文件源的查找,這個(gè)查詢以源列表(IP和port)作為答復(fù),發(fā)出請(qǐng)求的客戶可以從源端下載特定文件。
客戶使用UDP和別的服務(wù)器(未建立TCP連接的服務(wù)器)通信。這種通信增強(qiáng)文件和源查找,保證客戶端服務(wù)器列表中所有的服務(wù)器是當(dāng)前有效的。關(guān)于客戶服務(wù)器UDP連接的細(xì)節(jié)可以在第三章中找到。
今天無(wú)意中發(fā)現(xiàn)我的電腦上還有不少好東東呢,以前從別人那弄過來(lái)放這就沒有去管了,因?yàn)槊e的事情都給忘記了。cppUnit應(yīng)該學(xué)習(xí)學(xué)習(xí)了,電腦里還有個(gè)中文的入門資料,難得!
還有一堆的空間開發(fā)集,很不錯(cuò),以后很有用!
我有了自己的博客,這讓我很興奮。我加入博客就是想找到一個(gè)地方來(lái)整理自己凌亂的思緒。
大學(xué)畢業(yè)兩年了,但是自己很多思想還是停留在大學(xué)階段,有很多的想法,但總是不知道到底自己應(yīng)該怎么樣去走下去,怎么樣去規(guī)劃我未來(lái)的路,以求實(shí)現(xiàn)自己的人生目標(biāo)。
我一直在尋找這么一個(gè)空間,可以記錄下自己的一些想法,很凌亂,但是我回過頭來(lái)我至少知道我想了些什么!直到認(rèn)識(shí)blog,才發(fā)現(xiàn)這就是我一直尋覓的對(duì)象。
攜手blog,我的人生必將更加精彩。
我的博客生涯正式開始了,心里很激動(dòng),很興奮!
我的人生也將掀開新的一頁(yè)!