In termini semplici, come fa un client BitTorrent a scoprire inizialmente i peer usando DHT?


45

Ho già letto questa risposta di SuperUser e questo articolo di Wikipedia, ma entrambi sono troppo tecnici per farmi davvero girare la testa.

Comprendo l'idea di un tracker: i client si connettono a un server centrale che mantiene un elenco di peer in uno sciame.

Comprendo anche l'idea dello scambio tra pari: i clienti già in uno sciame inviano l'un l'altro l'elenco completo dei loro colleghi. Se vengono scoperti nuovi peer, questi vengono aggiunti all'elenco.

La mia domanda è: come funziona DHT? Cioè, come può un nuovo cliente unirsi a uno sciame senza un tracker o la conoscenza di almeno un membro dello sciame con cui scambiare colleghi?

(Nota: le spiegazioni semplici sono le migliori.)

Risposte:


48

Sommario

Come può un nuovo cliente unirsi a uno sciame senza un tracker o la conoscenza di almeno un membro dello sciame con cui scambiare colleghi?

Non puoi. È impossibile.*

* (A meno che un nodo sulla propria rete locale non sia già un nodo nel DHT. In questo caso, è possibile utilizzare un meccanismo di trasmissione, come Avahi, per "scoprire" questo peer e avviare da esso. Ma come ha fatto si avviano da soli? Alla fine, ti imbatterai in una situazione in cui devi connetterti a Internet pubblico. E Internet pubblico è solo unicast, non multicast, quindi sei bloccato con l'utilizzo di elenchi predeterminati di peer.)


Riferimenti

Bittorrent DHT è implementato tramite un protocollo noto come Kademlia , che è un caso speciale del concetto teorico di una tabella hash distribuita .


Esposizione

Con il protocollo Kademlia, quando ti unisci alla rete, segui una procedura di bootstrap , che richiede assolutamente di conoscere in anticipo l'indirizzo IP e la porta di almeno un nodo già partecipante alla rete DHT. Il tracker a cui ti connetti, ad esempio, può essere esso stesso un nodo DHT. Una volta connesso a un nodo DHT, si procede quindi al download delle informazioni dal DHT, che fornisce informazioni sulla connettività per più nodi e quindi si naviga nella struttura del "grafico" per ottenere connessioni a un numero sempre maggiore di nodi, che possono fornire entrambi connettività ad altri nodi e dati del payload (blocchi del download).

Penso che la tua domanda effettiva in grassetto - quello di come partecipare a una rete Kademlia DHT senza conoscere eventuali altri membri - si basa su un falso presupposto.

La semplice risposta alla tua domanda in grassetto è che non lo fai . Se non conosci NESSUNA informazione su nemmeno un host che potrebbe contenere metadati DHT, sei bloccato - non puoi nemmeno iniziare. Voglio dire, certo, potresti tentare la forza bruta di scoprire un IP su Internet pubblico con una porta aperta che capita di trasmettere informazioni DHT. Ma più probabilmente, il tuo client BT è codificato su un determinato IP statico o DNS che si risolve in un nodo DHT stabile, che fornisce solo i metadati DHT.

Fondamentalmente, il DHT è decentralizzato solo come il meccanismo di giunzione, e poiché il meccanismo di giunzione è abbastanza fragile (non c'è modo di "trasmettere" su tutta Internet! Quindi devi ottenere unicast su un singolo host pre-assegnato per ottenere il DHT dati), Kademlia DHT non è realmente decentralizzato. Non nel senso più stretto della parola.

Immagina questo scenario: qualcuno che vuole fermare il P2P esce e prepara un attacco a tutti i nodi DHT stabili comunemente usati che vengono utilizzati per il bootstrap. Una volta messo in scena il loro attacco, lo fanno scattare su tutti i nodi contemporaneamente. Wham ; ogni singolo nodo DHT di bootstrap è in un colpo solo. E adesso? Sei bloccato con la connessione a tracker centralizzati per scaricare elenchi tradizionali di peer da quelli. Bene, se attaccano anche i tracker, allora sei davvero, davverosu un torrente. In altre parole, Kademlia e l'intera rete BT sono vincolate dalle limitazioni di Internet stesso, in quanto esiste un numero limitato (e relativamente piccolo) di computer che dovresti attaccare con successo o portare offline per prevenire> 90% degli utenti dalla connessione alla rete.

Una volta che i nodi "pseudo-centralizzati" del bootstrap sono andati tutti, i nodi interni del DHT, che non sono bootstrap perché nessuno all'esterno del DHT conosce i nodi interni , sono inutili; non possono portare nuovi nodi nel DHT. Quindi, man mano che ogni nodo interno si disconnette dal DHT nel tempo, a causa di persone che spengono i loro computer, si riavviano per aggiornamenti, ecc., La rete collasserebbe.

Ovviamente, per ovviare a questo problema, qualcuno potrebbe distribuire un client BitTorrent con patch con un nuovo elenco di nodi DHT o indirizzi DNS stabili predeterminati e pubblicizzare ad alta voce la comunità P2P per utilizzare questo nuovo elenco. Ma questa diventerebbe una situazione "da sballo" in cui l'aggressore (il mangiatore di nodi) scaricherebbe progressivamente questi elenchi e prenderà di mira i nuovi coraggiosi nodi di bootstrap, quindi li porterà anche offline.


Il modo in cui descrivi DHT suona allo stesso modo dello scambio tra pari.
Celeritas,

La cosa che è distribuita su DHT è che l'effettivo payload dei dati, ovvero l'elenco di IP e porte su cui è possibile scaricare i file, è distribuito. In uno scambio tra pari, l'intero elenco viene archiviato su un computer, in genere il tracker, e scaricato non diversamente da un download di file. Potrei menzionarlo nella mia risposta, ma l'intera domanda (e le risposte) riguarda solo la scoperta iniziale o l'adesione alla rete DHT, non ciò che accade dopo l'adesione.
allquixotic,

1
Colpire tutti i nodi bootstrap impedirebbe ai nuovi utenti di avviare il bootstrap, ma non necessariamente agli utenti esistenti che vanno offline e poi ritornano. Ho l'impressione che molti client ricordino il loro set di nodi attivi e li usino per riconnettersi, piuttosto che avviare il bootstrap ogni volta.
clacke,

Con progetti come masscan ( github.com/robertdavidgraham/masscan ) la scoperta di nodi DHT senza una directory centralizzata dovrebbe essere fattibile
newlog,

19

Risposta breve: lo ottiene dal file .torrent.

Quando un client BitTorrent genera un file .torrent senza tracker (ovvero quando qualcuno si prepara a condividere qualcosa di nuovo tramite BitTorrent), aggiunge una chiave "nodi" (chiave come in "coppia chiave / valore"; come un'intestazione di sezione, non una chiave crittografica) al file .torrent che contiene i nodi DHT K più vicini noti a quel client.

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

Un dizionario torrent senza tracker non ha un tasto "annuncia". Invece, un torrent trackerless ha una chiave "nodi". Questa chiave deve essere impostata sui nodi K più vicini nella tabella di routing del client che genera torrent. In alternativa, la chiave potrebbe essere impostata su un nodo buono noto come quello gestito dalla persona che genera il torrent. Non aggiungere automaticamente "router.bittorrent.com" ai file torrent o aggiungere automaticamente questo nodo alle tabelle di routing dei client.

Pertanto, quando si alimenta il client BitTorrent il file .torrent di un torrent trackerless che si desidera scaricare, utilizza il valore della chiave "nodes" dal file .torrent per trovare i suoi primi nodi DHT.


3
Questa è una buona informazione esplicativa. Penso che la tua risposta spieghi cosa fanno gli attuali clienti BitTorrent per gestire i limiti teorici e i problemi che sono identificati nella mia risposta. Speriamo che entrambe le nostre risposte siano votate, in quanto spiegano diversi aspetti della risposta.
allquixotic,

3
È per questo che "unire il nuovo file torrent con il download di torrent" in molti client fa prendere vita a un torrent morto?
Jesvin Jose,

2
@aitchnyu sì, ma il file torrent potrebbe avere anche tracker aggiuntivi / diversi.
collo lungo,

2
Sembra che nessun client BitTorrent includa effettivamente le informazioni sui nodi. Ho testato Trasmissione, Vuze, Diluvio, Mainline e altri.
Aeyoun,

1

non puoi! devi conoscere almeno un IP di uno degli sciami, questa è la debolezza di una rete p2p. Puoi trasmettere alla cieca per trovare il primo IP, ma in una grande rete, se tutti lo fanno avremo problemi di congestione. È possibile utilizzare una cache, ma è possibile solo per sciami di grandi dimensioni (cache di indirizzi peer più grandi). Devi sempre connettere un tracker per chiedere solo il primo IP.

Distribuito in DHT significa che i client non devono contenere tutta la lista contenente la somma md5 del nome del file condiviso, con i peer corrispondenti. L'elenco dell'hash è formato in parti uguali e distribuito con ridondanza attraverso lo sciame. Se un peer si disconnette, ne esiste un altro con la stessa parte dell'hashlist. I peer condividono l'un l'altro l'indirizzo con il buon detentore della parte hashlist.

torrent-maniaco ha scritto un post su questo argomento


0

Come può un nuovo cliente unirsi a uno sciame senza un tracker o la conoscenza di almeno un membro dello sciame con cui scambiare colleghi?

Lo chiede.

I client Bittorrent che supportano il DHT eseguono due applicazioni peer-to-peer separate.

Il primo esegue la condivisione di file: uno sciame nel linguaggio bittorrent è un gruppo di peer che condividono un oggetto bittorrent (ad esempio una struttura di file o directory). Ogni oggetto bittorent ha alcuni metadati che vengono salvati in un file .torrent. (Include dimensione dell'oggetto, nome della cartella, possibilmente informazioni sul tracker o nodi. Ect.) L'hash dei metadati richiesti per scaricare questo oggetto bittorrent è chiamato infohash.

Il DHT è fondamentalmente una seconda applicazione P2P che mira a sostituire i tracker: memorizza coppie di (infohash, sciame) e aggiorna lo sciame se riceve messaggi di annuncio. Un nuovo client deve essere a conoscenza di alcuni "nodi" (linguaggio bittorrent per un peer del DHT) per avviare le sue informazioni sul DHT. Qui si applicano gli argomenti forniti da @allquixotic. Dato che l'MDHT è attualmente composto da oltre 7 milioni di colleghi, un improbabile attacco denial of service sembra improbabile.

Può quindi interrogare il DHT rispetto a un infohash e non deve usare un tracker o conoscere un peer che fa parte dello sciame prima. Se uno dei peer che contatta supporta la condivisione dei metadati, ha solo bisogno che infohash possa recuperare il file .torrent dallo sciame.


0

La maggior parte dei client di rete p2p viene avviata da un elenco di peer seed a cui inizialmente si connettono ... una volta che si connettono a un peer bootstrap, scarica il resto in modo distribuito. Si collega al peer bootstrap e scarica la sua lista di peer DHT, quindi passa a ciascuno di essi e fa lo stesso, ecc. Ecc.

Per esempio:

Ecco un elenco di nodi bootstrap:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

Ecco dove il client si connette a loro per idratare l'elenco dei peer:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

Questo è simile a come funziona un tracker, tranne praticamente che chiunque può essere un nodo bootstrap, quindi è quasi impossibile chiuderli.

Il portafoglio core Bitcoin funziona allo stesso modo. Ti consente di modificare i peer seed di bootstrap se per qualche motivo quelli di default ottengono l'arresto.


Il link è morto
zella
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.