Capitolo 3 Percorso di download: download parallelo, ripresa e riassemblaggio (punto chiave)

Per i destinatari, «più veloce» significa soprattutto due cose: scaricare più blocchi in parallelo per aumentare la velocità effettiva e poter riprendere dopo un problema, con reti deboli o cambi di rete, senza ricominciare da capo. Dal punto di vista ingegneristico, il percorso di download è simmetrico a quello di caricamento.

3.1 Oggetti di download e manifest

  • Prima di scaricare, il client DOVREBBE recuperare il manifest per conoscere il numero totale di blocchi, il loro ordine e come individuare ogni oggetto.
  • Il manifest DEVE individuare in modo univoco ogni blocco (tramite regole sulle chiavi degli oggetti o un indice equivalente).

3.2 Download parallelo

  • Il client DOVREBBE scaricare più blocchi in contemporanea per avvicinarsi al limite di banda.
  • Il client DOVREBBE usare una concorrenza limitata e ridurla quando i tassi di errore aumentano.
  • Il vantaggio della concorrenza è spesso maggiore con un RTT elevato tra regioni diverse, perché una singola connessione viene limitata più facilmente da RTT e jitter.

3.3 Ripresa del download

  • Il client DEVE essere in grado di registrare l'insieme dei blocchi completati (per esempio una bitmap o un insieme di indici).
  • Dopo un'interruzione, il client DOVREBBE recuperare solo i blocchi mancanti, senza riscaricare l'intero file.
  • Se il server impone limiti al numero di download, il client DOVREBBE ridurre al minimo i download ridondanti durante la ripresa, per non sprecare il conteggio.

3.4 Riassemblaggio

  • Il client DEVE riassemblare il file di output in ordine di chunkIndex.
  • Il client DOVREBBE usare scritture in streaming / riassemblaggio progressivo per ridurre i picchi di memoria (soprattutto per file molto grandi).
  • Se più file vengono impacchettati, il client PUÒ produrre un output per file oppure usare un formato contenitore (a seconda della progettazione del prodotto).

3.5 Controlli di integrità (in breve)

  • Dopo il download, il client DOVREBBE verificare i blocchi (per esempio la coerenza di hash e lunghezza).
  • Se la verifica fallisce, DEVE fallire in modalità chiusa (fail closed) e riprovare il blocco corrispondente.
  • Per i confini relativi agli errori di cifratura e autenticazione, consulta le sezioni pertinenti del Whitepaper su sicurezza e privacy.