Google
 
Web emule-italia.it
 
 
eMule | Mods | Download
 
 » Guide
 »
FAQ
 »
Configurazioni
 » Curiosità
 »
Download
 »
Forum
 » Contatti
 
 

 

Gestione delle parti corrotte

 

eMule usa diversi sistemi per assicurare che i file sulla rete vengano condivisi e scaricati senza errori. Nel caso si verifichino degli errori (evento non totalmente eliminabile ) utilizzerà alcune funzioni avanzate per cercare di correggerlo ed allo stesso tempo scaricare nuovamente una quantità di dati minima.

File Hash e ICH - Intelligent Corruption Handling

Per ogni file condiviso in rete viene creato un valore identificativo unico usando l'algoritmo matematico di crittografia chiamato MD4. Questo valore è chiamato file hash e viene inserito in ogni collegamento eD2k ad esempio

 

ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|/

 

dove 6744FC42EDA527B27F0B2F2538728B3E è il file hash che identifica in modo univoco questo file su tutta la rete. Questo File hash è calcolato dividendo l'intero file in parti di 9.28 MB. Per ognuna di queste parti viene calcolato un altro valore di hash chiamato Part Hash sempre usando l'algoritmo MD4. Questi valori di Hash, chiamati hashset (ovvero 'insieme di hash') vengono quindi usati per calcolare il File Hash finale. Per esempio un file di 600 MB verrebbe diviso in 65 parti ognuna con il suo valore di Part hash. Questi valori poi verrebbero usati per creare il File Hash definitivo e finale associato al file di 600 MB.

Per assicurarsi che eMule riceva sempre il corretto Hashset può essere creato un link speciale che lo contenga ad esempio

 

ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|p=264E6F6 B587985D87EB0157A2A7BAF40:17B9A4D1DCE0E4C2B672DF257145E98A|/

 

dove p = valore denota l'hashset. Ogni Part hash è diviso dai due punti ':'. Questo file ha dimensione 12043984 Bytes (=11.49 MB). Verrà quindi diviso in una parte di 9.28 MB ed un altra costituita dai restanti byte. Quindi l'Hashset sarà costituito da due Part Hash ( evidenziate sopra in verde e rosso)

ICH Intelligent Corruption Handling

Ogni volta che eMule scarica una parte di file (chiamata in gergo chunk) questa verrà analizzata per verificare se i dati scaricati corrispondono al valore di Part Hash. Se la verifica ha esito positivo allora la parte è messa in condivisione sulla rete e si aiuta a diffonderla agli altri client a cui manca.

Se invece la verifica non ha esito positivo ci sia stato un errore nel trasferimento e parte dei dati sono corrotti. Quella parte deve essere nuovamente scaricata. Per evitare di scaricare nuovamente l'intera parte (9.28 MB), l'ICH ( una funzione intelligente di eMule per il recupero delle parti corrotte ) scarica solo i primi 180 KB dell'inizio di quella parte e quindi fa una nuova verifica per vedere se il Part hash ora è corretto. Se non lo è allora vengono scaricati di nuovo i successivi 180 KB quindi si ripete la verifica. Questo processo continua fino a quando non si ottiene un valore del Part hash corretto. Nella migliore delle ipotesi eMule deve riscaricare solo 180 KB se i dati corrotti si trovano all'inizio della parte. In media l'ICH salva il 50% di dati da riscaricare in caso di parti corrotte.

AICH - Advanced Intelligent Corruption Handling

L'ICH standard è molto efficace sebbene abbia le sue limitazioni poiché solo l'intera parte di 9.28 MB può essere verificata e non blocchi più piccoli. Se è corrotta più di una posizione o se client malvagi si mettono a diffondere dati corrotti in continuazione o falsificano interi Part Hash, l'ICH non è più efficiente.

E' qui che entra in gioco l'AICH che si occupa di assicurare la completa integrità dei dati con un minimo costo di ri-download o di overhead creando hash su pezzi più piccoli.

 

Root Hash, Block Hashes & AICH Hashset

Questa volta il nostro punto di partenza sono le parti di 9.28 MB in un file. Ciascuna parte è divisa in blocchi di 180 KB per un totale di 53 blocchi per parte e per ogni blocco viene calcolato un valore di hash usando l'algoritmo di hash SHA1. Questi valori sono chiamati Block Hash e formano il livello più basso di un completo AICH Hashset.

 

 

L'immagine sopra mostra come questo completo albero di hash (hash tree) sia costruito sui blocchi di un file di 4 parti. Ogni parte contiene 53 blocchi per un totale quindi di 212 Block Hash che a loro volta danno vita ad un hash tree di altri 7 livelli finché non si raggiunge il Root Hash. L'intero albero è chiamato AICH hashset.

 

I cerchietti verdi e gialli mostrano le dipendenze matematiche dal Block Hash più piccolo verso il Root Hash. Questo significa che se abbiamo un Root Hash di cuoi abbiamo verificato la correttezza resta verificato l'intero albero.

eMule può creare link che contengono il Root Hash per esempio

 

ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|h=A2NWOTYURUU3P3GCUB6KCNW3FTYYELQB|/

dove h= è il Root Hash. Per i nuovi rilasci questo valore dovrebbe essere incluso poiché migliorerebbe significativamente la resistenza alla corruzione del file fornendo un Root Hash verificato. Vedi Verificare il Root Hash

Recupero di dati corrotti

Ogni volta che eMule individua dati corrotti in una parte richiede un Pacchetto di Recupero da un client casuale con un insieme di Hash AICH completo. Questo pacchetto di recupero contiene tutti i 53 Block Hash della parte corrotta ed un certo numero di hash di verifica per l'intero albero di Hash. L'immagine sopra mostra un Pacchetto di Recupero di un file con 4 parti. Il numero di hash di verifica è determinato dal conteggio totale di parti (2^x >= 'conteggio totale parti', con x = numero degli hash di verifica).

Dopo aver ricevuto il Pacchetto di Recupero eMule analizza gli hash di verifica per il Root Hash verificato. Se c'è corrispondenza eMule analizza tutti i 53 blocchi della parte corrotta e li confronta con i Block Hash del Pacchetto di Recupero. L'AICH quindi conserva tutti i blocchi per cui c'è corrispondenza mentre scarica nuovamente quelli che sono corrotti e per cui non c'è corrispondenza.

Nel Log di eMule un recupero dati di successo farà comparire le seguenti righe:

 

09.09.2004 02:43:43: Downloaded part 6 is corrupt ([file])
09.09.2004 02:43:46: AICH successfully recovered 8.22 MB of 9.28 MB from part 6 for [file]

Verificare il Root Hash

La cosa migliore è scaricare il file da un link con il Root Hash integrato. Assumendo che la fonte di quel link sia di fiducia il Root Hash sarà verificato sin da principio e salvato sul disco per quel file.

Se non viene fornito Root Hash nel link eMule dovrà verificare l'esattezza di quello che riceve dalle fonti di quel file. Considererà valido un Root Hash solo se lo riceve identico da almeno 10 diverse fonti e se almeno il 92% di tutte le fonti concordano su quel valore. Poiché questo Root Hash non è comunque affidabile come quello che viene direttamente inserito in un link il suo valore non verrà salvato sul disco ma sarà valido solo per la durata di una sessione e non potranno essere creati link con integrato il valore di questo Root hash.

 

Una volta che eMule ha costruito il suo intero insieme AICH, cioé il file è completo, inizia a propagare il Root Hash agli altri client.

 

Note

  • I nuovi rilasci o i file molto rari non avranno un numero sufficienti di fonti per generare un Root Hash affidabile. Si raccomanda allora di rilasciare questi file con allegato il Root Hash.
  • Se non c'è un valore di Root Hash oppure se è presente uno inesatto eMule sarà ancora in grado di terminare con successo quel download e completare il trasferimento in condizioni normali. Tuttavia la caratteristica AICH non potrà essere usata in questo caso.
  • Poiché gli insieme di hash AICH possono essere molto grandi non vengono memorizzati in memoria ma nel file known2.met e vengono letti solo su richiesta.
  • L'AICH funziona solo su client eMule v.44a o superiori ma conserva una retro-compatibilità con gli altri client

Top

 
 

© 2005 - 2006
Emule-Italia, Powered by P2PForum.it

Contenuti Pubblicati con Licenza Creative Commons