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 1
se il client ha questo pezzo peculiare , 0
altrimenti.
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).