p>eMule usa diversi metodi per esser sicuro del fatto che i files siano diffusi e trasferiti nel network senza errori. Se si manifesta un errore, detto corruzione, eMule dispone di funzioni avanzate per correggere questa corruzione con un minimo di dati supplementari da trasferire nuovamente.
Hash del File e ICH - Intelligent Corruption Handling (Gestione Intelligente della Corruzione)
Hash del File, Hashes del Part & Hashset
Per ogni file diffuso nel network viene generato un unico valore identificativo usando l'algoritmo matematico criptato MD4. Questo valore è detto hash del file
ed è contenuto in ogni eD2k link standard, come ad esempio
ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|/
dove 6744FC42EDA527B27F0B2F2538728B3E è l'hash del file rendendo lo stesso unicamente identificato in tutto il network.
Questo Hash del File veine calcolato dividendo l'intero file in parti
di 9.28 MB. Per ognuna di queste parti viene calcolato un Hash del Part usando lo stesso algoritmo MD4. Questi Hash dei Parts, detti Hashset, vengono dopo usati per calcolare l'Hash del File finale.
Per esempio un file di 600 MB file verrebbe diviso in 65 parti ognuna col il suo proprio Part Hash che sono poi usati per creare il FileHash finale.
Per esser certi del fatto che eMule riceva sempre il corretto Hashset può essere creato un link speciale contenente questo, per esempio
ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|p=264E6F6B587985D87EB0157A2A7BAF40:17B9A4D1DCE0E4C2B672DF257145E98A|/
dove la p= valore che denota l' Hashset. Ogni Part Hash è diviso da un ":". Questo file ha una dimensione di 12043984 Bytes (=11.49 MB)
che significa che ha un intero part da 9.28 e il restante fino ad arrivare a 11.49 MB col risultato di due Part Hashes.
ICH Intelligent Corruption Handling (Gestione Intelligente della Corruzione)
Ogni volta che eMule completa con un part sarà controllato se i dati trasferiti corrispondano al valore del Part Hash per questa parte completata. Se sì, questa parte è disponibile affinchè l' upload contribuisca a diffonderla.
Se no, si è manifestata una corruzione e la parte deve essere trasferita nuovamente. Per evitare di trasferire i 9.28 MB in pieno, ICH trasferisce nuovamente 180 Kb dall'inizio del part ed poi controlla ancora la parte intera per vedere se il Part Hash è ora corretto. Se no, i 180 Kb seguenti sono trasferiti ancora, controllati di nuovo, ecc. fino a che il Part Hash sia di nuovo corretto. Nel caso migliore eMule deve trasferire ancora soltanto 180 Kb se la corruzione è giusto all'inizio della parte. Nel caso peggiore l'intera parte deve essere trasferita ancora se la corruzione è in qualche modo vicino alla fine della parte. In media ICH salva il 50% di trasferimenti ripetuti nel caso di corruzioni del part.
AICH - Advanced Intelligent Corruption Handling (Gestione Avanzata Intelligente della Corruzione)
ICH standard è abbastanza efficace sebbene abbia le sue limitazioni visto che può essere verificato soltanto l'intero 9.28 MB e non blocchi più piccoli. Se più di una posizione è corrotta o se clients malevoli diffondono ripetutamente dati corrotti o persino simulino un intero Part Hash, ICH non è poi cosi' efficace.
A questo punto AICH si curerà della totale integrità dei dati con un minimo costo di nuovi trasferimenti o overhead a causa della generazione di hashes molto piccoli.
Root Hash, Block Hashes & AICH Hashset
Questa volta il nostro punto di partenza sono le parti da 9.28 MB in un file. Ogni parte è divisa in blocchi da 180 KB, con il risultato di 53 blocchi per parte e per ogni blocco un valore di hash che è calcolato usando l'algoritmo hash SHA1. Questi valori sono detti Block
Hashes e formano il livello più basso di un AICH Hashset completo.
L'immagine sopra mostra come lo sviluppo di un albero-hash completo è costruito sui blocchi di un file completo di 4 parti. Ogni parte contiene 53 blocchi col risultato di di 212 Block
Hashes che sviluppano un albero-hash di ulteriori 7 livelli fino a che viene raggiunto il Root
Hash. L'intero albero è detto AICH Hashset.
Il puntino verde e quello giallo mostrano le dipendenze matematiche dei più piccoli Block Hash ai Root Hash. Ciò significa che se noi abbiamo un Root Hash sicuro l'intero albero può essere verificato in opposizione ad esso.
eMule può creare links contenenti il Root Hash, ad esempio
ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|h=A2NWOTYURUU3P3GCUB6KCNW3FTYYELQB|/
dove h= è il Root Hash. Questo valore dovrebbe essere incluso nei rilasci visto che ha significativamente migliorato la resistenza alla corruzione del file fornendo un Root Hash sicuro. Leggi Trusting the Root Hash
Recupero da una corruzione
Ogni volta che eMule rileva una corruzione in una parte chiede un pacchetto di recupero da un client casuale con un AICH Hash completo. Questo pacchetto di recupero contiene tutti e 53 i
Block Hashes della parte corrotta e un numero di Verifying
Hashes (Hashes di Verifica) dell'intero albero hash. L'immagine sopra mostra un Recovery Packet (Pacchetto di Recupero) per un file di 4 parti. Il numero di Verifying Hashes è determinato dal conteggio delle parti del file (2^x >= 'conteggio parti', con x = Numero di Verifying
Hashes).
Dopo la ricezione del Recovery Packet eMule controlla il Verifying Hashes in contrapposizione al suo Root Hash sicuro. Se corrispondono, eMule controlla tutti i 53 blocchi della parte corrotta in contrapposizione ai Block Hashes dal Recovery Packet.
AICH dopo conserva tutti i blocchi che combaciano in contrapposizione al loro Block Hash per lasciare solo il/i blocco/chi corrotto/i da trsferire nuovamente.
Nel Log un recupero riuscito si vedrà come:
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]
Trusting the Root Hash (Affidabilità del Root Hash)
La cosa migliore è trasferire da un link con un Root Hash. Supposto che la fonte di questo link sia affidabile il Root Hash è attendibile allo stesso tempo e salvato per questo file nell'unità disco.
Se nessun Root Hash è fornito nel link eMule provvede a dar fiducia al Root Hash, come le fonti per il file lo trasmettono. Si fida soltanto di una Root Hash se almeno 10 fonti differenti trasmettono lo stesso valore e se almeno il 92% di tutte le fonti acconsentono a questo valore. Poichè questa Root Hash non è così affidabile essa è valida solo per la sessione corrente e non viene salvata ne possono essere creati links con Root Hash.
Una volta che eMule ha costruito un intero AICH Hashset, ad esempio quando il file è completato,
comincia a propagare le Root Hash agli altri clients.
Note: |
• |
I nuovi rilasci di file rari probabilmente non avranno abbastanza piene fonti per generare un Root Hash sicuro. E' raccomandato di rilasciare file con hash allegato. |
• |
Se non c'è Root Hash o anche uno simulato eMule potrà trasferire e completare con successo il file nei modi usuali. La funzione AICH in questo caso non può essere usata. |
• |
Siccome gli AICH Hashsets possono essere molto grandi essi non vengono conservati nella memoria ma nel known2.met and sono letti soltanto su richiesta. |
• |
AICH sarà efficace soltanto per i clients eMule v.44a e superiori ma mantiene la compatibilità con i clients più anziani. |
Si applica a: v.44a+
Update on: 2004-09-11 by Monk |