La rete eD2k
|
eMule, edonkey e molti altri client sfruttano la rete edonkey2000
(in breve 'rete eD2k') per connettere i vari client e consentire agli
utenti di connettersi uno all'altro
e di vivere una fantastica esperienza di file sharing.
La rete
edonkey2000 ( in breve ed2k ) si basa fondamentalmente sul protocollo
Multisource File Transfer Protocol (MFTP).
Ci sono due applicazioni che lavorando insieme dando vita alla rete ed2k: il
server ed il client. Un server è quello al quale i client si connettono per
cercare e trovare altri utenti dai quali scaricare files. Il server è come un
elenco telefonico. I Cliens 'guardano' in esso per trovare altri clients con i
files che vogliono. Nessun files passa attraverso il server.
Ricerca: Ogni client della rete eDonkey 2000 è
connesso ad un server. Invia a questo server
un elenco dei files che sta in quel momento
condividendo. Quindi ogni server conserva un elenco di
tutti i files condivisi dai clients connessi ad esso.
Quando un client compie una ricerca invia la richiesta di ricerca al suo
server principale. A questo punto il server esegue la ricerca
nell'elenco dei files che conosce e restituisce i risultati al client. |
Quando dalla pagina di ricerca di eMule si imposta una
ricerca globale questa viene inviata a tutti i
server sull'elenco server. Queste richieste ed i
risultati vengono spediti via UDP per limitare la banda e l'overhead di
connessione per i servers.
Download: Quando un client sceglie di scaricare un file selezionandolo
dai risultati di ricerca, da una collezione oppure guardando la lista dei
files condivisi di un amico cerca di raccogliere un elenco di tutti i clients
che possiedono il file (le fonti). Per prima cosa
chiede al suo server principale l'elenco di tutti i clients che hanno il file
desiderato. Quindi interrogherà tutti gli altri server che conosce al fine di
reperire gli indirizzi IP dei clients che hanno quel file. Dopo aver trovato
tutti client con quel file andrà a richiederne
ad ognuno un pezzettino diverso. Continuerà
a fare questo finché non avrà scaricato tutti i pezzettini (chunks) nel quale
avrà decomposto il file originario.
Il diagramma sopra mostra cosa
viene trasferito nelle varie connessioni della rete ed2k.
Il diagramma sopra invece mostra alcune delle
caratteristiche avanzate del meccanismo di download della rete ed2k.
Il Client Z ha tutte le parti del File 1 ( le lettere in minuscolo
rappresentano parti del file). I Client W,X e Y vogliono tutti scaricare il File 1. Poiché i Client X e Y
hanno parti diverse del File 1 possono non solo ottenere il file da Z, ma
anche cominciare ad inviarsi parti di files tra di loro. Questo consente al
file di diffondersi in modo molto più veloce senza usare solo la banda del
Client Z. Il Client W può cominciare a scaricare il file anche se la fonte del
file ( Client Z ) non ha più banda sufficiente per inviare il file.
Connessioni tra i server. I servers comunicano poco tra di loro. Si connettono
solo periodicamente l'uno all'altro per dire 'hey sono qui!'.
I server ai quali notificano la loro presenza inviano una lista di
tutti gli altri server che conoscono. In questo modo ogni server conserva una
lista di tutti gli altri server in quel
momento operativi ed online. Quando i clients si connettono ad un
server ricevono un elenco aggiornato di server operativi. Ed ecco come i
clients vengono a conoscenza di nuovi server.
Cos'è il MFTP (multiple file transmission protocol)?
MFTP è basato sul familiare protocollo FTP per il trasferimento dei files. Il
vantaggio principale dell'MFTP è che permette di scaricare lo stesso file da
diverse fonti contemporaneamente consentendo quindi di raggiungere alte
velocità di trasferimento. In questo modo gli utenti che uplodano lentamente (
diciamo a 4 KB/s ) possono essere raggruppati insieme fino a fornire velocità
di download accettabili ( diciamo 30KB/s).
Cos'è un 'chunk'? I Chunks sono porzioni di files grandi 9500KB ( per files più piccoli di
questa dimensione, oppure per l'ultimo chunk di un file, sono usati chunk più
piccoli). Ad ogni chunk viene assegnato un codice identificativo sulla rete (
Hash) calcolando tale codice con un algoritmo ( MD4 ) che si assicura che il
chunk non sia corrotto.