eMule協(xié)議的演進(jìn)和客戶端
其實,網(wǎng)絡(luò)的發(fā)展根源來源于資源的共享。那么作為共享,我們就需要上傳和下載資源。如何進(jìn)行下載呢?在這里我們主要講述一下eMule協(xié)議的主要原理。首先我們來了解一下這個協(xié)議的基本概念。
eMule協(xié)議規(guī)范概述
eMule網(wǎng)絡(luò)是由上百個eMule服務(wù)器和幾百萬個eMule客戶端組成??蛻舳吮仨氝B接到一個服 務(wù)器來取得網(wǎng)絡(luò)服務(wù),只要該客戶端在系統(tǒng)中,服務(wù)器連接保持打開狀態(tài)。這些服務(wù)器主要 執(zhí)行集聚索引服務(wù)(好像在Napster),相互間不聯(lián)系。
每個eMule客戶端都預(yù)配置了一個服務(wù)器列表和當(dāng)?shù)匚募到y(tǒng)的共享文件列表??蛻舳擞脝?獨的TCP連接到一個eMule服務(wù)器登錄到網(wǎng)絡(luò)中,獲得想得到的文件信息和客戶端。eMule客戶端也用幾百個TCP連接到其他客戶端進(jìn)行上傳和下載文件。
每個eMule協(xié)議客戶端對它的每 個共享文件都維護(hù)著一個上傳隊列。要下載的客戶端先加入到隊列的底部,然后逐漸前進(jìn)直 到到達(dá)隊列的頂部并開始下載它的文件。一個客戶端可以從幾個不同的eMule客戶端中下載 同一個文件的不同的文件塊。
客戶端也可以上傳它還沒有完成的文件的文件塊。***,eMule協(xié)議擴(kuò)展了eDonkey的能力,允許客戶端之間交換關(guān)于服務(wù)器、其他客戶端和文件的信息。注意 , 客戶端和服務(wù)器的交流都是基于TCP的。
服務(wù)器使用了一個內(nèi)部數(shù)據(jù)庫,用來存儲關(guān)于客戶端和文件的信息。一個eMule服務(wù)器不存 儲任何文件,它為關(guān)于文件位置的存儲信息作集聚索引。服務(wù)器的另一個功能,開始變得被 抗議,是連接由于通過防火墻連接而無法接收到連接的兩個客戶端。這個連接功能增加了服 務(wù)器的負(fù)載。
相對于服務(wù)器和其他客戶端,eMule協(xié)議使用UDP來增強(qiáng)客戶端的能力??蛻舳税l(fā) 送和接收UDP信息的能力在日常使用中不是強(qiáng)制使用的,當(dāng)有防火墻阻止它收發(fā)UDP信息時 也能無瑕疵的運行。
客戶端到服務(wù)器的連接
在開始啟動時,客戶端用TCP連接到一個eMule服務(wù)器。服務(wù)器提供一個客戶ID給客戶端, 在整個客戶端-服務(wù)器連接的生命周期里,它是有效的(注意,如果客戶端有一個高ID,它 會從所有的服務(wù)器中接收到相同的ID,直到它的IP地址改變)。在連接建立之后,客戶端發(fā) 送它的共享文件列表到服務(wù)器中。服務(wù)器把這個列表存儲到它的內(nèi)部數(shù)據(jù)庫中,這個數(shù)據(jù)庫
通常包含了成百上千有效的文件和活動的客戶端。eMule客戶端也發(fā)送它的下載列表,包含 著它想下載的文件。第二章提供了eMule客戶端和服務(wù)器TCP信息交換的詳細(xì)描述。
建立連接之后,eMule服務(wù)器給客戶端發(fā)送用有它想下載的文件的其他客戶端列表(這些客 戶端稱作“ 源” )。從這點起,eMule協(xié)議客戶端開始與其他客戶端建立連接,如 1.2.2所述。
注意,在整個客戶端會話期間,客戶/服務(wù)TCP連接一直保持連接狀態(tài)。初次握手后主要是 用 戶活動激發(fā)事務(wù):有時,客戶端發(fā)送文件搜索需求,由搜索結(jié)果回應(yīng),一個搜索事務(wù)一般在對源中指定文件查詢之后,用源(IP和端口)列表來回答這個查詢,查詢者可以從這列表中 下載文件。
客戶端和它沒有連接的服務(wù)器的交流是用UDP。UDP信息的目的是增強(qiáng)文件搜索,增強(qiáng)源搜 索,***保持連接狀態(tài)(確??蛻舳朔?wù)器列表中的eMule協(xié)議服務(wù)器有效)。