1 介紹
1.1 目的和范圍
eMule是一個(gè)基于eDonkey協(xié)議的流行文件共享應(yīng)用程序。這份文檔描述eMule的網(wǎng)絡(luò)行為方式,以及為了更好理解這份協(xié)議的一些基本術(shù)語。同時(shí),文檔也對(duì)eMule網(wǎng)絡(luò)協(xié)議做了全面的說明,其中還包含一個(gè)詳述消息格式的附言部分。這份文檔信息基于一個(gè)開源客戶端軟件eMule【2】。接下來的一些介紹是為讀者能更好的去閱讀和理解這份文檔的一些一般性的背景知識(shí)。關(guān)于eMule的更進(jìn)一步的信息可以在【3】中找到。
1.2 概述
eMule網(wǎng)絡(luò)由幾百個(gè)eMule服務(wù)器和數(shù)百萬個(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ù)器來登入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ù)庫來保存客戶和文件信息。eMule服務(wù)器不保存任何文件,它扮演中心索引的角色,保存文件位置信息。服務(wù)器的一個(gè)額外橋接功能,同時(shí)也引來無數(shù)抗議的一個(gè)功能就是穿越防火墻,使得躲在防火墻后不能夠接受引入連接的客戶得到解放。橋接功能極大的增加了服務(wù)器的負(fù)擔(dān)。eMule啟用UDP加強(qiáng)客戶性能來應(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ù)庫中,通常數(shù)據(jù)庫中存有數(shù)十萬個(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é)可以在第三章中找到。