Come funziona Bittorrent?


34

Voglio saperne di più sul modo bittorrent di condivisione di file. Sono un utente tecnicamente avanzato (programmatore), quindi il materiale tecnicamente avanzato non è un problema, ma dovrebbe essere conciso e pertinente. Ho bisogno di un buon libro di risorse / web che spieghi l'architettura bittorrent complessiva.

Non mi interessano i dettagli, solo l'architettura generale e la terminologia come semi, colleghi, ecc.

Eventuali suggerimenti?

Risposte:


29

Panoramica di come funziona bittorrent:

  • Hai colleghi e un tracker . Tutti i coetanei insieme in un dato momento sono lo sciame . La solita situazione è che uno o più peer hanno il set di file completo e desiderano renderlo disponibile ad altri peer.

  • Un peer acquisisce un file .torrent, che avrà tra l'altro A) l'hash SHA-1 del set di file, B) l'URL del tracker e C) il numero di pezzi in cui è suddiviso il file, nonché un hash SHA-1 di ogni pezzo. Le dimensioni dei pezzi sono determinate dal torrent stesso.

  • Il peer si connette quindi al tracker utilizzando l'URL specificato nel torrent. Il tracker risponde con un elenco di peer. I tracker parlano HTTP sulla porta 80 o 443.

  • Il peer quindi seleziona un altro peer, usando le informazioni dal tracker, e lo contatta direttamente per impostare una sessione di scambio, tentando di ottenere un pezzo. Si noti che le sessioni di scambio vengono eseguite direttamente dai peer e il tracker NON è coinvolto nel trasferimento. Il tracker fornisce solo informazioni.

  • Una volta che il peer ha un pezzo, lo verifica rispetto all'hash SHA-1 e lo scrive nel file. Può quindi offrire quel pezzo quando si seleziona un altro peer. Le sessioni di scambio successive coinvolgono pezzi "commerciali". Credo che i colleghi generalmente ti daranno il primo pezzo solo se non ne hai altri.

  • Il peer consulta nuovamente il tracker ogni tanto per ottenere un elenco aggiornato di peer. Il peer non deve attendere il termine di uno scambio prima di avviarne un altro se ha più pezzi, quindi una volta che il peer ha un sacco di pezzi, il trasferimento può davvero accelerare. Questo è il motivo per cui i torrent iniziano lentamente ma aumentano rapidamente mentre il peer acquisisce i pezzi.

  • Quando un peer ha tutti i pezzi, l'intero file viene verificato rispetto all'hash SHA-1 del set di file. Quindi, diventa una seminatrice e ora non fa altro che aiutare il set di file a essere più altamente disponibile. I coetanei che non hanno tutti i pezzi sono sanguisughe .

  • Se un torrent non ha semi, è morto, anche se se esiste una copia completa del file tra tutti i pezzi detenuti da tutti i peer, alla fine verranno scambiati per ottenere una copia completa tra di loro.

  • L'hash SHA-1 è il modo in cui il tracker e i peer "sanno" quale file dovrebbe essere sciamato. I nomi di file nel torrent non vengono utilizzati per identificare i dati. I pezzi che non vengono verificati rispetto agli hass nel file .torrent vengono eliminati. I peer che inviano continuamente pezzi cattivi vengono snobbati da altri peer e alla fine non saranno in grado di connettersi con nessuno nello sciame.

  • Una dimensione dei pezzi più piccola significa che il torrent è più robusto poiché i peer possono scambiare pezzi più velocemente, ma significa anche che devono essere elencati più hash dei pezzi nel file .torrent e quindi il file .torrent può essere grande.

  • Se stai pubblicando qualcosa tramite BitTorrent, è meglio eseguire il seeding del file finché desideri renderlo disponibile. Altri peer ti aiuteranno, dal momento che la maggior parte dei software BitTorrent implementa algoritmi che favoriscono il tentativo di diffondere le cose tra il maggior numero possibile di peer per massimizzare le connessioni di corrente. In questo modo BitTorrent può aiutarti a pubblicare cose e risparmiare sui costi della larghezza di banda.


1
Una bellissima risposta! Una battuta: credo che i semi preferiscano seminare più raramente , non i primi pezzi per primi. Non sono sicuro che si tratti di un algoritmo, ma è quello che ho ottenuto una volta da un programma torrent mentre scherzavo con le impostazioni.
Gallifreyan,


8

C'è un bel video su YouTube che spiega questo in modo visivo con ritagli di cartone. Non è una spiegazione altamente tecnica, ma è ottima per spiegare l'idea alla base di BitTorrent alle persone in modo semplice e comprensibile.

come funziona bittorrent su youtube


3
+1 video utile. L'ho mostrato a mio padre. Non ha avuto domande dopo. Stupefacente. :)
zero2cx

2

Una panoramica sul protocollo dei messaggi peer .

Il client può utilizzare due protocolli per condividere informazioni con peer, TCP o uTP (su UDP). Questi dati seguono le specifiche del protocollo bittorrent , sezione messaggi peer .

Quindi a livello di programmazione, deve iniziare una connessione tra due client. Dopo aver impostato la connessione (tramite TCP o uTP), il client avvia una stretta di mano bittorrent che acquisisce le informazioni del peer remoto (ip e porta) dal tracker o tramite DHT . Questa stretta di mano contiene l' info_hash che identifica il torrent di cui si occuperà questa connessione.

Vediamo prima come vengono troncati i dati Torrent attraverso il protocollo. Un pezzo fa parte dei dati che stai condividendo attraverso la rete. Da non confondersi con un blocco , che è una sezione di un pezzo avvolto in un pacchetto. Il blocco è la granularità di condividere un pezzo attraverso i pacchetti e un pezzo è la granularità di condividere un Torrent attraverso i peer.

All'avvio della connessione, entrambi i client (client locale, che chiamerò LC e client remoto, RC ) sono soffocati e disinteressati . Choked significa "Non risponderò a nessuno dei tuoi messaggi, troppo occupato, ma potrei tenerne conto". Unchocked significa quindi "risponderò ai tuoi messaggi". Interessato significa ovviamente che vorrei alcuni pezzi che hai. Pertanto, lo stato di una connessione tra due peer potrebbe essere definito con quei quattro stati: LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested? Avvisare RC che sono (dis) bloccato o (non) interessato, Devo inviargli messaggi (non) interessati e (non) bloccati e reciprocamente.

Per informarsi reciprocamente su quali pezzi hanno, possono inviare un messaggio bitfield subito dopo l'handshaking. Come suggerisce il nome, è una stringa di bit in cui ogni bit è impostato 1se il client ha questo pezzo peculiare , 0altrimenti.

Quindi se LC è bloccato e interessato e RC lo ha sbloccato , allora può inviare un messaggio di richiesta per chiedere un blocco appartenente a un pezzo che conosce LC grazie al messaggio bitfield .

Quando un peer ha ricevuto l'intero pezzo , potrebbe inviare un messaggio pezzo per informare tutti i suoi peer remoti in modo che aggiornino il bitfield associato che stanno trattenendo.

Questa è una panoramica molto semplice, e ovviamente non tutti i dettagli sono forniti qui, come l' algoritmo di soffocamento ecc ... Se vuoi maggiori dettagli, controlla i due link che ho postato sopra, nella sezione commenti (come nuovo utente posso non ci sono più di due link all'interno di un post).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.