Lo

Il protocollo BitTorrent

Felice Colucci

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

Argomenti

Un protocollo	peer-to-peer per il file sharing

È il nome del client ufficiale

Scritto da Bram Cohen

Scritto in Python

Pensato per file di grossa dimensione (ISO, dvd,...)

Che cosa è

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Tracker

Ottenere il .torrent

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Richiesta HTTP

Tracker

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Lista di peer

Tracker

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Tracker

scakeand

scakehand

shakehand

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Tracker

Invio dati

Invio dati

Invio dati

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Tracker

Invio dati

Invio dati

Invio dati

Sito web

con file

.torrent

Peer

Peer

Peer

Peer

Tracker

Invio dati

Invio dati

Richiesta HTTP

Lista di peer

Supponiamo che un file sia stato diviso in 10 blocchi cioè {1,2,3,...,10}

Supponiamo di avere tre peer

peer A possiede i blocchi 1,2,3

peer B possiede i blocchi 4,5,6

peer C possiede i blocchi 7,8,9,10

Esempio

Sito web

con file

.torrent

Peer A

{1,2,3}

Peer B

{4,5,6}

Peer C

{7,8,9,10}

Peer

Tracker

Sito web

con file

.torrent

Peer A

{1,2,3}

Peer B

{4,5,6}

Peer C

{7,8,9,10}

Peer

Tracker

Invio blocco 4

Invio blocco 1

Invio blocco 7

Sito web

con file

.torrent

Peer A

{1,2,3}

Peer B

{4,5,6}

Peer C

{7,8,9,10}

Peer {1,4,7}

Tracker

Sito web

con file

.torrent

Peer A

{1,2,3}

Peer B

{4,5,6}

Peer C

{7,8,9,10}

Peer

Tracker

Invia blocco 7

Invia blocco 1

Invio blocco 1

Peer {1,4,7}

Sito web

con file

.torrent

Peer A

{1,2,3,7}

Peer B

{1,4,5,6}

Peer C

{1,7,8,9,10}

Peer {1,4,7,...}

Tracker

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

.torrent

Un file che contiene le informazioni necessarie per scaricare la risorsa voluta

Client:

è sia colui che scarica un dato contenuto sia colui che permette di scaricarlo

Tracker

Coordina l'attività dei peer o client

Qualcuno che ci fornisce il torrent:

webserver, posta elettronica,...

Le componenti

Nome del file da scaricare

Dimensioni del file

L'hash di ciascun blocco in cui il file è stato diviso; in tale modo abbiamo la certezza di scaricare i blocchi di dati corretti

La dimensione dei blocchi

Indirizzo del tracker

.torrent

Coordina l'attività dei peer

Conosce l'indirizzo di ogni peer

Di ogni peer conosce lo stato di download

Per potere assistere meglio i peer è anche informato su quali pezzi del file siano posseduti da ciascuno

Viene interrogato periodicamente

Tracker

Esistono tre differenti tipi di client:

Seeder

Leecher

Reseeder

Client o peer

È detto seeder quel client che possiede una intera copia del file.

È necessario che almeno inizialmente ci sia almeno un seeder che possa inseminare la rete (a partire dal quale possa essere scaricato).

In determinate circostanze, ci potrebbe non essere alcun seeder ma, malgrado ciò, sia ancora possibile recuperare tutte le parti necessarie per mettere insieme l'intero file; in tale caso si parla di copia distribuita

Seeder

Un leecher è un client che non ha ancora una copia completa di un particolare file.

Quando dei nuovi client cominciano a scaricare diventano leecher finché non avranno una copia completa diventando in tal modo seeder

Normalmente è un leecher qualcuno che scarica e non fa scaricare, che prende ma non da, che, quindi, non contribuisce al buon funzionamento della rete

Leecher

In bittorrent un leecher ha un ruolo attivo, in quanto permette l’upload

È interesse del leeker garantire banda per l'upload in quanto la sua velocità di download dipende dalla sua velocità di upload: più si da più si riceve

Leecher

Sono quei client che malgrado abbiano completato il download continuano a condividere la risorsa

Rappresentano un importante aiuto per la comunità

Reseeder

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

Per creare un .torrent il client BitTorrent mette a disposizione bymaketorrent.py

Su Debian esiste un wrapper a tale file: btmakemetafile

btmakemetafile prende in ingresso un file e restituisce un file .torrent

btmakemetafile crea un hash per ogni blocco

Il valore hash vine utilizzato dal client per verificare l'integrità dei dati.

Come creare un .torrent

btmakemetafile nome_file tracker_announce_address [option...]

nome_file potrebbe essere 'presentazione_ld05.pdf' oppure ubuntu-5.10-install-amd64.iso

tracker_announce_address è nella forma http://xxx.xxx.xxx:6969/announce

announce è un valore hardcoded che deve essere sempre presente

La porta di default è la porta 80, ma viene raccomandato l'utilizzo della porta 6969

Come creare un .torrent

Il file .torrent generato ha nome presentazione_ld05.pdf.torrent oppure ubuntu-5.10-install-amd64.iso.torrent

La dimensione del file dipende dalle dimensioni del file d'origine

Le dimensioni del .torrent della ISO di Ubuntu sono di 25k

Le dimensioni di un file di 10MB è di circa 1K

Come creare un .torrent

Sono tre, la più interessante delle quali è piece_size_pow2 <arg>

Il file .torrent viene suddiviso in pezzi della dimensione di 2exp(<arg>)

Di default <arg> è uguale a 18, quindi il file viene suddiviso in pezzi di 256MB ciascuno

Nelle versioni precedenti di BitTorrent (sino alla 3.0.2) il valore di default era 20, quindi 1M

Come creare un .torrent

Che cosa contiene un .torrent

announce: indirizo URL del tracker codificato come

creation_date: data di creazione

comment: un commento al .torrent codificato

created by: il programma che ha generato il .torrent

info: dizionario principale che descrive il contenuto del .torrent.

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

È una tecnica utilizzata per aumentare la velocità di download

BitTorrent divide i blocchi di file in sotto-pezzi, detti chunk, della grandezza tipicamente di 16k

L'invio avviene in gruppi di chunk, solitamente in numero di 5

Lo scopo è quello di sfruttare al massimo le connessioni (la dimensione dei chunck e la grandezza dei gruppi di chunck varia di conseguenza)

Pipelining

Chi desidera scaricare un file deve innanzi tutto ottenere il file .torrent relativo

successivamente “eseguire” il .torrent (cliccando sul file si avvia il client BitTorrent)

Primo passo

Sito web

con file

.torrent

Scarica il

.torrent

Peer

Una volta che il client BitTorrent è stato avviato

Viene contattato il tracker indicato dal .torrent

Lo scambio di messaggi avviene attraverso HTTP (o HTTPS) request e response

Secondo passo

Tracker

Richiesta HTTP

Peer

Il peer comunica ad il tracker

quale file vuole scaricare

in quale porta si attende di ricevere la lista dei peer da cui scaricare

Un peer_id, che lo identifica univocamente

Secondo passo

Tracker

Richiesta HTTP

Peer

Altri parametri

Questi sono i parametri che devono essere inviati al tracker:

info_hash: viene utilizzato SHA1

port: numero di porta sulla quale il client è in ascolto. Le porte tipiche sono nel range 6881-6900

uploaded: bytes inviati agli altri client dall'inizio della sessione

downloaded: bytes scaricati dagli altri client dall'inizio della sessione

left: bytes rimanenti al completamento del file,

Se si è un seeder il valore è zero

Il tracker restituisce una lista di peer da cui è possibile scaricare

In genere il tracker invia una lista di 50 peer

Secondo passo

Tracker

Peer

Lista di peer

Bencode

I messaggi vengono scambiati attraverso codifica Bencode

Derivato dall'XML

Quatro tipi

Dizionario

Lista

Intero

Stringa

Terzo passo: Handshake

handshake

handshake

Viene istanziata una connessione dal peer che desidera scaricare il file con i peer presenti nella lista fornita dal tracker

I messaggi vengono scambiati attraverso TCP Socket

Fase di handshake

Ogni peer informa gli altri di quali pezzetti ha a disposizione

Viene utilizzato SAH1 per verificare l'integrità dei blocchi

Un peer annuncia il possesso di un pezzetto di file solamente dopo averne verificato l'integrità

Scambio di dati è reciproco

Scambio dati

Scambio dati

Quarto passo: Bitfield

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

Dopo che ogni peer è in possesso delle informazioni su quali pezzetti di file sono disponibili presso gli altri peer, può ora dedurre quali blocchi siano i più rari e quindi difficili da reperire e quali siano i più diffusi e quindi più facili da reperire

Il protocollo prevede che i primi blocchi ad essere scaricati siano quelli che con più difficoltà possono essere reperiti

Quale file? Rarest first

Immaginiamo che un blocco sia posseduto da un solo peer, se questo abbandona la rete allora sarà impossibile per tutti gli altri client completare il download; diffondendo i blocchi rari si evita questo problema

Questo dimostra quanto sia critica la decisione su quale algoritmo di adottare

Importanza di un buon algoritmo

È importante che un leek inizi il prima possibile a uplodare i blocchi che possiede in quanto la sua velocità di download dipende dalla sua velocià di upload

Quindi quando un client non possiede alcun blocco da distribuire è preferibile che adotti un algoritmo che gli permetta rapidamente di avere un blocco completo da uplodare

Strict priority

Random first

Due eccezioni

Viene adottato quando si è prossimi a terminare il download

Viene inviata una richiesta per i pezzi mancanti ad ogni peer

Quando un blocco arriva deve essere inviata una richiesta in cui si esprime che quel blocco non è più di nostro interesse

Endgame modo

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

Garantisce la collaborazione tra i peer eliminando il dilemma del prigioniero

Ogni peer cerca di massimizzare la propria velocità di download

I peer cercano di scaricare dal maggiore numero possibile di peer, e forniscono dati ad i peer che garantiscono una alta velocità di download, gli altri vengono scartati (choke)

choking è un rifiuto di fornire dati, ma non di riceverli

Choking

Ogni peer fornisce dati ad un certo numero di altri peer (generalmente quatro): unchocking

Quali siano i tali peer dipende dalla velocità di download

Ogni peer ogni 10 secondi verifica se continuare a fornire dati a quei 4 peer prescelti

Algoritmi di Choking

Optimistic unchoking

Un ulteriore peer rimane unchocked

Si valutano le performance, cioè si risponde alla domanda: mi convine continuare l'upload verso gli stessi peer oppure è meglio sostituirne uno con questo nuovo peer?

Ogni 30 secondi viene presa tale decisione

Introduzione

Come funziona: un breve sguardo

I componenti

Come creare un torrent

Come funziona: qualche dettaglio

Selezione dei chunck

Algoritmi di choking

Client

Conclusioni

I Client opensource

ABC

Arctic Torrent

Azureus

BitTornado

Burst

G3Torrent

Rufus

Gnome BitTorrent Downloader

È un work-in-progress mime-sink per i file di BitTorrent

NON è un front-end ma soltanto una vista di quali file .torrent si stanno eseguendo

Scritto in python da Paul Varga

Conclusioni

Ampiamente utilizzato

Il caso suprnova

In continuo progresso

Trackerless

Grazie per l'attenzione.

Insert your notes here.

Presentazione LinuxDay 2005 (GULCh)

Presentazione GULCh LinuxDay 2005 linux

Template by Nicola Asuni 2005-10-10 - Presentazioni LinuxDay - GULCh 2005-11-26

Nicola Asuni

2005-05-01T13:39:17