racavedigger.com
Daily insights on Bitcoin and crypto markets
  • Facebook
  • Pinterest
  • Home
  • News

BitTorrent usa DHT?

Notizia

BitTorrent usa DHT?

Riepilogo

BitTorrent è un protocollo peer-to-peer progettato per il trasferimento di file. Consente agli utenti di connettersi direttamente tra loro per inviare e ricevere porzioni di file. Il protocollo utilizza un server centrale chiamato tracker per coordinare le azioni di tutti i pari coinvolti. Tuttavia, BitTorrent include anche un’estensione chiamata protocollo DHT (Distributed Sloppy Hash Table), che è un protocollo tracker peer-to-peer basato su UDP.

Punti chiave

  • BitTorrent è un protocollo per il trasferimento di file.
  • Gli utenti si collegano direttamente tra loro per inviare e ricevere porzioni di file.
  • Il protocollo utilizza un server centrale chiamato tracker.
  • Il tracker coordina le azioni dei coetanei coinvolti.
  • Il protocollo DHT è un’estensione di BitTorrent.
  • DHT è un protocollo tracker peer-to-peer basato su UDP.
  • BitTorrent utilizza TCP come protocollo di trasporto.
  • La nota porta TCP per il traffico BitTorrent è 6881-6889.
  • DHT utilizza varie porte UDP negoziate dai pari.
  • BitTorrent è stato ampiamente adottato dalla sua creazione nel 2002.

Domande e risposte


D: Come funziona BitTorrent?

A: BitTorrent è un protocollo peer-to-peer che consente agli utenti di trasferire i file collegandosi direttamente tra loro. Invece di fare affidamento su un server centrale, BitTorrent utilizza un tracker per coordinare le azioni dei pari coinvolti nel trasferimento di file. Questo approccio decentralizzato consente una distribuzione efficiente dei file, poiché gli utenti possono condividere parti del file che hanno già scaricato con altri.


D: Qual è lo scopo del protocollo DHT in BitTorrent?

A: Il protocollo DHT o il protocollo di tabella hash sloppy distribuita è un’estensione a BitTorrent. Consente torrenti senza tracker memorizzando le informazioni di contatto tra pari in una tabella hash distribuita. Ogni peer nella rete diventa un tracker e il protocollo viene implementato su UDP. DHT consente ai peer di trovare e connettersi tra loro senza fare affidamento su un server di tracker centrale.


D: Ciò che il protocollo di trasporto utilizza BitTorrent principalmente?

A: BitTorrent utilizza principalmente TCP (Transmission Control Protocol) come protocollo di trasporto. TCP garantisce la consegna affidabile e ordinata di pacchetti di dati tra i peer. La nota gamma di porte TCP per il traffico BitTorrent è 6881-6889.


D: Il protocollo DHT utilizza UDP o TCP?

A: Il protocollo DHT in BitTorrent utilizza UDP (User Datagram Protocol) come protocollo di trasporto. UDP è un protocollo senza connessione che fornisce una consegna più rapida e meno affidabile dei pacchetti rispetto al TCP. I coetanei coinvolti nel protocollo DHT negoziano le porte UDP per stabilire connessioni.


D: Quando è stato creato BitTorrent?

A: BitTorrent è stato progettato da Bram Cohen nell’aprile 2001 e implementato nell’estate del 2002. È stato il primo programma a utilizzare il protocollo BitTorrent e da allora sono state sviluppate molte applicazioni in base al protocollo.


D: Qual è il ruolo del tracker in BitTorrent?

A: Il tracker in BitTorrent è un server centrale che gestisce le connessioni tra i peer. Tiene traccia di quali peer possiedono le diverse parti di un file e facilita lo scambio di dati tra di loro. Tuttavia, il tracker non ha conoscenza del contenuto effettivo del file distribuito.


D: Esistono numeri di porta specifici associati al traffico bittorrent?

A: Sì, la nota gamma di porte TCP per il traffico BitTorrent è 6881-6889. Queste porte vengono utilizzate per stabilire connessioni TCP tra i peer. Inoltre, le porte UDP utilizzate per il protocollo DHT sono negoziate dai colleghi coinvolti nella comunicazione.


D: Qual è la differenza tra un peer e un nodo in bittorrent?

A: Nel contesto di BitTorrent, un peer si riferisce a un client o server che ascolta una porta TCP e implementa il protocollo BitTorrent per il trasferimento di file. D’altra parte, un nodo si riferisce a un client o server che ascolta una porta UDP e implementa il protocollo DHT (Distributed Hash Table). I nodi vengono utilizzati per archiviare e recuperare le informazioni di contatto tra peer per torrenti senza tracker.


D: Wireshark è in grado di analizzare il traffico bittorrent?

A: Sì, Wireshark include un dissettore bittorrent completamente funzionale in grado di analizzare e decodificare il traffico bittorrent. Le estensioni DHT e UTP sono anche supportate da Wireshark. Il dissettore BitTorrent è stato disponibile da una specifica versione di Wireshark (dettagli non forniti).


D: Ci sono impostazioni di preferenza relative a BitTorrent in Wireshark?

A: Sì, ci sono impostazioni di preferenza in Wireshark relative a BitTorrent. Alcune di queste impostazioni includono la possibilità di riassemblare i messaggi BitTorrent che coprono più segmenti TCP e l’opzione per decodificare il peer_id dei messaggi di Handshake. Queste impostazioni di preferenza forniscono un’analisi più dettagliata del traffico di bittorrent catturato in Wireshark.


D: Puoi fornire un file di acquisizione di esempio di traffico bittorrent?

A: Sì, ci sono file di acquisizione di esempio disponibili per il traffico di bittorrent. Un esempio è “SampleCaptures/BitTorrent.Transfer1.CAP “, catturato utilizzando Microsoft Network Monitor. Contiene alcuni pacchetti BitTorrent ottenuti durante il download su BitTorrent. Un altro esempio è “SampleCaptures/BitTorrent.PCAP “, catturato usando libpcap. Cattura la comunicazione tra due clienti torrent senza DHT o scambio tra pari.


D: Come posso visualizzare solo il traffico bitTorrent in Wireshark?

A: Per visualizzare solo il traffico basato su BitTorrent in Wireshark, è possibile utilizzare il filtro del display “BitTorrent.”L’applicazione di questo filtro mostrerà solo i pacchetti relativi al traffico bittorrent. Si noti che questo filtro potrebbe essere disponibile in Wireshark dopo una versione specifica (dettagli non forniti).


D: È possibile acquisire solo il traffico di tracker BitTorrent utilizzando un filtro specifico?

A: Quando si acquisiscono il traffico di rete, non è possibile filtrare direttamente i protocolli BitTorrent. Tuttavia, se conosci la porta TCP utilizzata dal BitTorrent Tracker (come 6881), è possibile impostare un filtro di acquisizione per catturare solo il traffico su quella porta. Ad esempio, il filtro di acquisizione “TCP Port 6881” catturerà solo il traffico BitTorrent Tracker sulla porta 6881. Inoltre, è possibile acquisire il traffico BitTorrent Tracker su una gamma di porte predefinite (E.G., 6881-6889) Utilizzo del filtro “TCP Portange 6881-6889.”


D: Ci sono collegamenti esterni relativi a BitTorrent?

A: Sì, ecco alcuni collegamenti esterni relativi a BitTorrent:

  • http: // www.bittorrent.com/ – Il sito Web ufficiale di BitTorrent.
  • Pagina BitTorrent di Wikipedia – Articolo di Wikipedia su BitTorrent.
  • Come funziona BitTorrent – Informazioni su P2P in generale, BitTorrent e Impostazioni del firewall.
  • Protocollo DHT (BEP 5) – L’estensione BitTorrent basata su UDP per i tracker distribuiti.
  • Web Archive Copy (2007-12-21) di Draft DHT Protocol – Progetto archiviato del protocollo DHT.
  • Descrizione della firma del protocollo hippie – Descrizione delle firme del protocollo TCP e UDP che possono essere utilizzate per identificare il protocollo BitTorrent.


D: Come funziona il protocollo DHT in BitTorrent?

A: Il protocollo DHT in BitTorrent utilizza una tabella hash distribuita per archiviare e recuperare le informazioni di contatto peer per torrenti senza tracker. Ogni nodo nel DHT ha un identificatore univoco a livello globale noto come “ID nodo.”I nodi mantengono una tabella di routing che contiene informazioni di contatto per altri nodi. La tabella di routing diventa più dettagliata man mano che i nodi si avvicinano al proprio ID nodo. Questa struttura consente ai nodi di scoprire e connettersi con i pari in modo efficiente.

Informazioni aggiuntive

Bittorrent.Org è il sito ufficiale per BitTorrent. Fornisce risorse, documentazione e aggiornamenti relativi al protocollo BitTorrent e alle sue implementazioni. BitTorrent utilizza il protocollo DHT per abilitare i torrenti senza tracker, che aumenta la scalabilità e il decentralizzazione del processo di condivisione dei file. Il protocollo DHT è implementato su UDP e si basa su nodi per archiviare e recuperare le informazioni di contatto peer.

Nota: questo articolo fornisce una panoramica concisa di BitTorrent, la sua estensione DHT e le informazioni correlate. Per dettagli più approfonditi e specifiche tecniche, si consiglia di visitare il sito Web ufficiale di BitTorrent e i collegamenti esterni forniti.

BitTorrent usa DHT

Dopo di te’Ve ha trovato tutti i tuoi coetanei, inizia il tuo download!

Bittorrent

BitTorrent è un protocollo progettato per il trasferimento di file. È di natura peer-to-peer, poiché gli utenti si collegano direttamente per inviare e ricevere parti del file. Tuttavia, esiste un server centrale (chiamato tracker) che coordina l’azione di tutti questi colleghi. Il tracker gestisce solo le connessioni, non ha alcuna conoscenza del contenuto dei file distribuiti e quindi un gran numero di utenti può essere supportato con larghezza di banda relativamente limitata.

Una recente estensione a BitTorrent è il protocollo DHT (“Distributed Sloppy Hash Table” o semplicemente chiamato UDP Tracker). Un protocollo tracker peer to peer basato su UDP. E l’UTOrrent importa un altro protocollo di trasporto a base di UDP, chiamato UTP.

Storia

Nell’aprile 2001 Bram Cohen ha progettato il protocollo BitTorrent, che ha implementato l’estate 2002. Il primo programma a utilizzare il protocollo era il client BitTorrent originale. Oggi molte applicazioni sono disponibili e il protocollo è ampiamente utilizzato.

Dipendenze del protocollo

  • TCP: in genere, BitTorrent utilizza TCP come protocollo di trasporto. La famosa porta TCP per il traffico BitTorrent è 6881-6889 (e 6969 per la porta del tracker). L’estensione DHT (Peer2Peer Tracker) utilizza varie porte UDP negoziate dai pari.

Traffico di esempio

XXX – Aggiungi il traffico di esempio qui (come screenshot semplice o wireshark).

Wireshark

Il dissettore bittorrent è (pienamente funzionale, parzialmente funzionale, non esistente, … qualunque sia lo stato attuale). L’estensione DHT è stata supportata da R39653. L’estensione UTP è stata supportata da R36716.

Impostazioni di preferenza

  • RIMISSEMBLE BitTorrent Messaggi che abbracciano più segmenti TCP
  • Decodifica il peer_id dei messaggi di Handshake

Esempio di file di acquisizione

Campionati/bitTorrent.Transfer1.CAP (Microsoft Network Monitor) Ecco una acquisizione con alcuni pacchetti BitTorrent; contiene alcuni piccoli pacchetti che ho ottenuto mentre scarica qualcosa su BitTorrent.

Campionati/bitTorrent.PCAP (LiBPCAP) File di acquisizione di due clienti torrent Communicationg senza DHT o peer SCUCH.

Visualizza filtro

Un elenco completo dei campi di filtro di visualizzazione BitTorrent è disponibile nel riferimento del filtro di visualizzazione

Mostra solo il traffico basato su BitTorrent:

 bittorrent

Nota: implementato in Wireshark Post 0.10.12!

Filtro di acquisizione

Non è possibile filtrare direttamente i protocolli BitTorrent durante l’acquisizione. Tuttavia, se conosci la porta TCP utilizzata (vedi sopra), puoi filtrare su quella.

Acquisisci solo il traffico BitTorrent Tracker su una delle porte predefinite (E.G. 6881):

 Porta TCP 6881

Acquisisci il traffico BitTorrent Tracker sulla gamma di porte predefinite (E.G. 6881-6889):

 TCP PORTRANGE 6881-6889

Quando si utilizza libpcap 0.9.1 o successivo o WinPcap 3.1 o successivo; Quell’espressione non funzionerà con le versioni precedenti di libpcap o winpcap, quindi su Windows, aggiorna a WinPcap 3.1 o successivo e, su un*x, aggiorna a libpcap 0.9.X se possibile e, se non possibile e hai una versione di libpcap prima di 0.8.1, usa

 (TCP [0: 2]> = 6881 e TCP [0: 2] = 6881 e TCP [2: 2] 

(Un bug nell'ottimizzatore libpcap in libpcap 0.8.x significa che questo non funzionerà con libpcap 0.8.X, anche se potresti essere in grado di usare TCPDump con la bandiera "-o").

link esterno

  • http: // www.bittorrent.com/ la pagina BitTorrent ufficiale
  • Pagina BitTorrent di Wikipedia
  • Come funziona BitTorrent su P2P in generale, BitTorrent e Firewall
  • Protocollo DHT (BEP 5), l'estensione BitTorrent basata su UDP per i tracker distribuiti (viene negoziato il numero di porta UDP). Inoltre: Link to Draft DHT Protocol (Dead Link), Web Archive Copy (2007-12-21) del progetto DHT Protocol.
  • Descrizione della firma del protocollo Hippie Le firme del protocollo TCP e UDP che potrebbero essere utilizzate per identificare euristicamente il collegamento dell'archivio Web del protocollo BitTorrent
  • Altro su BitTorrent

Bittorrent .org

BitTorrent usa una "tabella hash slandese distribuita" (DHT) per la memorizzazione delle informazioni di contatto peer per i torrenti "trackerless". In effetti, ogni peer diventa un tracker. Il protocollo si basa su Kademila [1] ed è implementato su UDP.

Si prega di notare la terminologia utilizzata in questo documento per evitare la confusione. Un "peer" è un client/server che ascolta su una porta TCP che implementa il protocollo BitTorrent. Un "nodo" è un client/server che ascolta su una porta UDP che implementa il protocollo della tabella hash distribuita. Il DHT è composto da nodi e memorizza la posizione dei coetanei. I client BitTorrent includono un nodo DHT, che viene utilizzato per contattare altri nodi nel DHT per ottenere la posizione dei pari da scaricare dall'uso del protocollo BitTorrent.

Panoramica

Ogni nodo ha un identificatore univoco a livello globale noto come "ID nodo."Gli ID nodi vengono scelti a caso dallo stesso spazio a 160 bit di BitTorrent Infohashs [2]. Una "metrica a distanza" viene utilizzata per confrontare due ID nodo o un ID nodo e un infohash per "vicinanza."I nodi devono mantenere una tabella di routing contenente le informazioni di contatto per un piccolo numero di altri nodi. La tabella di routing diventa più dettagliata man mano che gli ID si avvicinano all'ID del nodo. I nodi conoscono molti altri nodi nel DHT che hanno ID che sono "vicini" al proprio ma hanno solo una manciata di contatti con ID che sono molto lontani dai propri.

In Kademlia, la metrica di distanza è XOR e il risultato è interpretato come un numero intero non firmato. distanza (a, b) = | a xor b | Valori più piccoli sono più vicini.

Quando un nodo vuole trovare peer per un torrent, utilizza la metrica di distanza per confrontare l'informazione del torrente con gli ID dei nodi nella propria tabella di routing. Quindi contatta i nodi che conosce con ID più vicini a InfoHash e chiede loro le informazioni di contatto dei colleghi che attualmente scaricano il torrent. Se un nodo contattato è a conoscenza dei peer per il torrent, le informazioni di contatto tra pari vengono restituite con la risposta. In caso contrario, il nodo contattato deve rispondere con le informazioni di contatto dei nodi nella sua tabella di routing più vicini all'informazione del torrent. Il nodo originale interroga i nodi più vicini al bersaglio infohash fino a quando non riesce a trovare nodi più vicini. Dopo che la ricerca è stata esaurita, il client inserisce quindi le informazioni di contatto peer per se stesso sui nodi di risposta con ID più vicini all'Infohash del torrent.

Il valore di ritorno per una query per i coetanei include un valore opaco noto come "token."Affinché un nodo annunci che il suo peer di controllo sta scaricando un torrent, deve presentare il token ricevuto dallo stesso nodo interrogato in una recente query per i coetanei. Quando un nodo tenta di "annunciare" un torrente, il nodo interrogato controlla il token contro l'indirizzo IP del nodo di query. Questo per impedire ai padroni di casa dannosi di iscrivere altri host per torrent. Poiché il token viene semplicemente restituito dal nodo di query allo stesso nodo da cui ha ricevuto il token, l'implementazione non è definita. I token devono essere accettati per un ragionevole quantità di tempo dopo che sono stati distribuiti. L'implementazione di BitTorrent utilizza l'hash sha1 dell'indirizzo IP concaterato su un segreto che cambia ogni cinque minuti e token fino a dieci minuti vengono accettati.

Tavolo di routing

Ogni nodo mantiene una tabella di routing di nodi buoni noti. I nodi nella tabella di routing sono usati come punti di partenza per le query nel DHT. I nodi dalla tabella di routing vengono restituiti in risposta alle query da altri nodi.

Non tutti i nodi che apprendiamo sono uguali. Alcuni sono "buoni" e altri non lo sono. Molti nodi che utilizzano il DHT sono in grado di inviare query e ricevere risposte, ma non sono in grado di rispondere alle domande da altri nodi. È importante che la tabella di routing di ogni nodo debba contenere solo buoni nodi noti. Un buon nodo è che un nodo ha risposto a una delle nostre domande negli ultimi 15 minuti. Un nodo è anche buono se ha mai risposto a una delle nostre domande e ci ha inviato una domanda negli ultimi 15 minuti. Dopo 15 minuti di inattività, un nodo diventa discutibile. I nodi diventano cattivi quando non rispondono a più domande di riga. I nodi che sappiamo sono buoni hanno la priorità sui nodi con stato sconosciuto.

La tabella di routing copre l'intero spazio ID nodo da 0 a 2 160 . La tabella di routing è suddivisa in "secchi" che coprono ciascuno una parte dello spazio. Una tabella vuota ha un secchio con un intervallo di spazio ID di min = 0, max = 2 160 . Quando un nodo con id "n" viene inserito nella tabella, viene posizionato all'interno del secchio che ha min <= N < max. Una tabella vuota ha un solo secchio, quindi qualsiasi nodo deve adattarsi al suo interno. Ogni secchio può contenere solo i nodi K, attualmente otto, prima di diventare "pieno."Quando un secchio è pieno di nodi buoni noti, non è possibile aggiungere più nodi a meno che il nostro ID nodo non rientri nell'intervallo del secchio. In tal caso, il secchio è sostituito da due nuovi secchi ciascuno con metà della gamma del vecchio secchio e i nodi del vecchio secchio sono distribuiti tra i due nuovi. Per un nuovo tavolo con un solo secchio, il secchio completo viene sempre diviso in due nuovi secchi che coprono le gamme 0..2 159 e 2 159 ..2 160 .

Quando il secchio è pieno di buoni nodi, il nuovo nodo viene semplicemente scartato. Se si sa che qualche nodi nel secchio è diventato cattivo, allora si è sostituiti dal nuovo nodo. Se ci sono nodi discutibili nel secchio non sono stati visti negli ultimi 15 minuti, il nodo visto meno recente. Se il nodo pingoned risponde, allora il nodo discutibile più recentemente visto recentemente viene pingato fino a quando non si risponde o tutti i nodi nel secchio sono noti per essere buoni. Se un nodo nel secchio non riesce a rispondere a un ping, si suggerisce di provare ancora una volta prima di scartare il nodo e sostituirlo con un nuovo nodo buono. In questo modo, il tavolo si riempie di nodi a lungo termine stabili.

Ogni secchio dovrebbe mantenere una proprietà "ultima modificata" per indicare quanto "freschi" sono i contenuti. Quando un nodo in un secchio viene ping e risponde, oppure un nodo viene aggiunto a un secchio o un nodo in un secchio viene sostituito con un altro nodo, l'ultima proprietà modificata del secchio dovrebbe essere aggiornata. I secchi che non sono stati cambiati in 15 minuti dovrebbero essere "rinfrescanti."Questo viene fatto scegliendo un ID casuale nell'intervallo del secchio ed eseguendo una ricerca find_nodes su di esso. I nodi in grado di ricevere query da altri nodi di solito non hanno bisogno di rinfrescare i secchi spesso. I nodi che non sono in grado di ricevere query da altri nodi di solito dovranno aggiornare periodicamente tutti i secchi per assicurarsi che ci siano buoni nodi nella loro tabella quando è necessario il DHT.

Dopo aver inserito il primo nodo nella sua tabella di routing e quando si avvia da allora in poi, il nodo dovrebbe tentare di trovare i nodi più vicini nel DHT a se stesso. Lo fa emettendo i messaggi find_node a nodi sempre più vicini fino a quando non riescono a trovare più vicini. La tabella di routing dovrebbe essere salvata tra le invocazioni del software client.

Estensione del protocollo BitTorrent

Il protocollo BitTorrent è stato esteso per scambiare numeri di porta UDP del nodo tra i peer che vengono introdotti da un tracker. In questo modo, i clienti possono seminare automaticamente i loro tavoli di routing attraverso il download di torrenti normali. I clienti appena installati che tentano di scaricare un torrent senza tracker al primo tentativo non avranno nodi nella loro tabella di routing e avranno bisogno dei contatti inclusi nel file torrent.

Peer che supportano il DHT impostato l'ultimo bit delle bandiere riservate a 8 byte scambiate nella stretta di mano del protocollo BitTorrent. Peer che riceve una stretta di mano che indica che il peer remoto supporta il DHT dovrebbe inviare un messaggio di porta. Inizia con il byte 0x09 e ha un carico utile a due byte contenente la porta UDP del nodo DHT in byte di rete Ordine. I coetanei che ricevono questo messaggio dovrebbero tentare di eseguire il ping del nodo sulla porta ricevuta e l'indirizzo IP del peer remoto. Se viene ricevuto una risposta al ping, il nodo dovrebbe tentare di inserire le nuove informazioni di contatto nella loro tabella di routing secondo le normali regole.

Estensioni di file torrent

Un dizionario torrent senza tracker non ha una chiave "annuncia". Invece, un torrent senza tracker ha una chiave "nodi". Questa chiave dovrebbe essere impostata sui nodi più vicini nella tabella di routing del client che genera Torrent. In alternativa, la chiave potrebbe essere impostata su un buon nodo noto come uno gestito dalla persona che genera il torrent. Si prega di non aggiungere automaticamente "router.bittorrent.com "ai file torrent o aggiungi automaticamente questo nodo alle tabelle di routing client.

nodi = [["",], ["",], . ] nodi = [["127.0.0.1 ", 6881], [" tuo.router.Node ", 4804], [" 2001: db8: 100: 0: d5c8: db3f: 995e: c0f7 ", 1941]

Protocollo KRPC

Il protocollo KRPC è un semplice meccanismo RPC costituito da dizionari BenCoded inviati su UDP. Viene inviato un singolo pacchetto di query e un singolo pacchetto viene inviato in risposta. Non c'è riproduzione. Esistono tre tipi di messaggi: query, risposta ed errore. Per il protocollo DHT, ci sono quattro query: ping, find_node, get_peers e annuncia_peer.

Un messaggio KRPC è un singolo dizionario con tre chiavi comuni ad ogni messaggio e chiavi aggiuntive a seconda del tipo di messaggio. Ogni messaggio ha una chiave "t" con un valore stringa che rappresenta un ID transazione. Questo ID di transazione è generato dal nodo di query ed è eco nella risposta, quindi le risposte possono essere correlate a più query allo stesso nodo. L'ID della transazione deve essere codificato come una breve stringa di numeri binari, in genere 2 caratteri sono sufficienti in quanto coprono 2^16 query eccezionali. Ogni messaggio ha anche una chiave "y" con un valore singolo carattere che descrive il tipo di messaggio. Il valore della chiave "y" è uno di "Q" per query, "r" per risposta o "e" per errore. Una chiave "V" dovrebbe essere inclusa in ogni messaggio con una versione della versione client. La stringa dovrebbe essere un identificatore client a due caratteri registrato in BEP 20 [3] seguito da un identificatore della versione a due caratteri. Non tutte le implementazioni includono una chiave "V", quindi i clienti non dovrebbero assumere la sua presenza.

Codifica di contatto

Le informazioni di contatto per i peer sono codificate come una stringa a 6 byte. Conosciuto anche come "Informazioni IP-ADDREST/PORTA COMPACT" L'indirizzo IP a 4 byte è in ordine di byte di rete con la porta a 2 byte in byte di rete Concatenate alla fine.

Le informazioni di contatto per i nodi sono codificate come una stringa a 26 byte. Conosciuto anche come "INFO del nodo compatto" L'ID nodo a 20 byte nell'ordine di byte di rete ha il compatto IP-address/Porta Info concatenati fino alla fine.

Interrogazioni

Query o dizionari di messaggio KRPC con un valore "y" di "Q", contengono due chiavi aggiuntive; "Q" e "A". La chiave "Q" ha un valore di stringa contenente il nome del metodo della query. La chiave "A" ha un valore di dizionario contenente argomenti denominati alla query.

Risposte

Le risposte o i dizionari del messaggio KRPC con un valore "y" di "R", contengono una chiave aggiuntiva "R". Il valore di "R" è un dizionario contenente valori di restituzione denominati. I messaggi di risposta vengono inviati al completamento con successo di una domanda.

Errori

Errori o dizionari di messaggi KRPC con un valore "y" di "E", contengono una chiave aggiuntiva "E". Il valore di "E" è un elenco. Il primo elemento è un numero intero che rappresenta il codice di errore. Il secondo elemento è una stringa contenente il messaggio di errore. Gli errori vengono inviati quando una domanda non può essere eseguita. La tabella seguente descrive i possibili codici di errore:

Codice Descrizione
201 Errore generico
202 Errore del server
203 Errore di protocollo, come un pacchetto malformato, argomenti non validi o brutto token
204 Metodo sconosciuto

Esempio di pacchetti di errore:

Errore generico = Bencoded = D1: Eli201E23: un errore generico Ocurrede1: T2: AA1: Y1: EE

Query DHT

Tutte le query hanno un tasto "ID" e un valore contenente l'ID nodo del nodo di query. Tutte le risposte hanno un tasto e un valore di "ID" e un valore contenente l'ID nodo del nodo di risposta.

ping

La query più elementare è un ping. "Q" = "ping" Una query ping ha un singolo argomento, "id" Il valore è una stringa a 20 byte contenente l'ID nodo dei mittenti in ordine di byte di rete. La risposta appropriata a un ping ha un singolo "ID" contenente l'ID nodo del nodo di risposta.

Argomenti: "> Risposta:">

ping query => Bencoded = d1: ad2: id20: abcdefghij0123456789e1: q4: ping1: t2: aa1: y1: qe

Risposta => Bencoded = D1: RD2: ID20: MnopqRStuvwxyz123456E1: T2: AA1: Y1: re

find_node

Trova il nodo viene utilizzato per trovare le informazioni di contatto per un nodo dato il suo ID. "Q" == "find_node" Una query find_node ha due argomenti, "ID" contenente l'ID nodo del nodo di query e "target" contenente l'ID del nodo richiesto dal queryer. Quando un nodo riceve una query find_node, dovrebbe rispondere con un "nodi" chiave e il valore di una stringa contenente le informazioni del nodo compatto per il nodo target o il k (8) i nodi buoni più vicini nella propria tabella di routing.

Argomenti: "," Target ":" "> Risposta:", "nodi": "">>

find_node Query = > bencoded = d1:ad2:id20:abcdefghij01234567896:target20:mnopqrstuvwxyz123456e1:q9:find_node1:t2:aa1:y1:qe

Risposta => Bencoded = D1: RD2: ID20: 0123456789ABCDEFGHIJ5: nodi9: def456. E1: T2: AA1: Y1: RE

get_peers

Ottieni i coetanei associati a un'informazione torrent. "Q" = "get_peers" Una query get_peers ha due argomenti, "id" contenente l'ID nodo del nodo di query e "info_hash" contenente l'informazione del torrent. Se il nodo interrogato ha peer per l'informazione, vengono restituiti in un "valori" chiave come un elenco di stringhe. Ogni stringa contenente informazioni peer in formato "compatto" per un singolo peer. Se il nodo interrogato non ha peer per l'informazione, viene restituito un "nodi" chiave contenente i nodi K nella tabella di routing dei nodi interrogati più vicini all'informazione fornita nella query. In entrambi i casi un tasto "token" è anche incluso nel valore di ritorno. Il valore token è un argomento richiesto per una query di ANNUNCHE_PEER FUTURE. Il valore token dovrebbe essere una corta stringa binaria.

Argomenti: "," info_hash ":" "> Risposta:", "token": "", "valori": ["", ""]> o: "," token ":" "," nodi ":" ">

get_peers query => bencoded = d1: ad2: id20: abcdefghij01234567899: info_hash20: mnopqrstuvwxyz123456e1: q9: get_peers1: t2: aa1: y1: qe

Risposta con peer => Bencoded = D1: Rd2: ID20: Abcdefghij01234567895: token8: aoeusnth6: valoril6: axje.U6: idhtnmee1: t2: aa1: y1: re

Risposta con nodi più vicini => Bencoded = D1: RD2: ID20: ABCDEFGHIJ01234567895: nodi9: def456. 5: token8: aoeusnthe1: t2: aa1: y1: re

Annuncer_peer

Annuncia che il peer, che controlla il nodo di query, sta scaricando un torrent su una porta. Annuncer_peer ha quattro argomenti: "ID" contenente l'ID nodo del nodo di query, "info_hash" contenente l'informazione del torrent, "porta" contenente la porta come intero e il "token" ricevuto in risposta a una precedente query Get_Peers query. Il nodo interrogato deve verificare che il token fosse stato precedentemente inviato allo stesso indirizzo IP del nodo di query. Quindi il nodo interrogato deve archiviare l'indirizzo IP del nodo di query e il numero di porta fornito nell'ambito di InfoHash nel suo negozio di informazioni di contatto tra pari.

C'è un argomento opzionale chiamato implied_port Quale valore è 0 o 1. Se è presente e diverso da zero, il porta L'argomento dovrebbe essere ignorato e la porta di origine del pacchetto UDP dovrebbe essere utilizzata come porta del peer. Ciò è utile per i coetanei dietro un NAT che potrebbe non conoscere la loro porta esterna e supportare UTP, accettano connessioni in arrivo sulla stessa porta della porta DHT.

Argomenti: "," Implied_port ":,," info_hash ":" "," port ":," token ":" "> Risposta:">

Annunune_Peers query => Bencoded = D1: AD2: ID20: ABCDEFGHIJ012345678912: implied_porti1e9: info_hash20: mnopqrsuvwxyz1234564: porti6881e5: token8: aoeusnthe1: q13: ta2: t2: aA1: y1: y1: y1: y1: y1: y1: y1: y1: y1: y1: y1: y1: y1: y1: y1: aA1: y1: y1: y1: y1: y1: y1: aA1: y.

Risposta => Bencoded = D1: RD2: ID20: MnopqRStuvwxyz123456E1: T2: AA1: Y1: re

Riferimenti

[1] Peter Maymounkov, David Mazieries, "Kademlia: un sistema di informazione peer-to-peer basato sulla metrica XOR", IPTPS 2002. http: // www.cs.riso.EDU/Conferences/IPTPS02/109.PDF
[2] Usa Sha1 e molta entropia per garantire un ID univoco.
[3] Bep_0020. Convenzioni ID peer. (http: // www.bittorrent.Org/Beps/BEP_0020.HTML)

Diritto d'autore

Questo documento è stato posto nel pubblico dominio.

WebTorrent/BitTorrent-DHT

Questo commit non appartiene a nessun ramo in questo repository e può appartenere a una forchetta al di fuori del repository.

Switch Branches/Tags

Tag di rami

Impossibile caricare i rami

Niente da mostrare

Impossibile caricare tag

Niente da mostrare

Nome già in uso

Un tag esiste già con il nome della filiale fornito. Molti comandi git accettano nomi di tag e ramo, quindi la creazione di questo ramo può causare comportamenti imprevisti. Sei sicuro di voler creare questo ramo?

Annulla Crea

  • Locale
  • Codpaces

Https github cli

Utilizzare GIT o checkout con SVN utilizzando l'URL Web.

Lavorare velocemente con la nostra CLI ufficiale. Ulteriori informazioni sulla CLI.

Autenticazione richiesta

Si prega di accedere per utilizzare Codespaces.

Avvio del desktop GitHub

Se non succede nulla, scarica Github Desktop e riprova.

Avvio del desktop GitHub

Se non succede nulla, scarica Github Desktop e riprova.

Avvio di Xcode

Se non succede nulla, scarica Xcode e riprova.

Avvio del codice Visual Studio

Il tuo Codpace si aprirà una volta pronto.

C'è stato un problema a preparare il tuo codice, riprova.

Ultimo commit

3b4ed64 8 maggio 2023

... v1.0.9

Statistiche git

File

Impossibile caricare le ultime informazioni sulla commissione.

Ultimo messaggio di commit

Commettere tempo

Readme.MD

Implementazione DHT semplice, robusta, BitTorrent

Nodo.Implementazione di JS del protocollo BitTorrent DHT. BitTorrent DHT è il principale livello di scoperta peer per bitTorrent, che consente torrenti senza tracker. I DHT sono fantastici!

Questo modulo viene utilizzato da WebTorrent.

  • Implementazione completa del protocollo DHT in JavaScript
  • segue le specifiche
  • Supporta BEP44 per la memorizzazione di dati arbitrari nel DHT
  • robusto e ben testato
    • Suite di test completa e completamente offline
    • Utilizzato da WebTorrent, Peerflix e riproduzione

    NPM Installa BitTorrent-DHT 

    NPM Installa magnet-uri 

    importare Dht da 'BitTorrent-Dht' importare magnete da 'Magnet-Uri' const Uri = 'magnete:?XT = Urn: Btih: E3811B9539Cacff680E418124272177C47477157 ' const analizzato = magnete(Uri) console.tronco d'albero(analizzato.Info Hash) // 'E3811B9539CACFF680E418124272177C47477157' const dht = nuovo Dht() dht.Ascoltare(20000, funzione ()  console.tronco d'albero('ora ascolto') >) dht.SU('pari', funzione (pari, Info Hash, da)  console.tronco d'albero('trovato potenziale pari' + pari.ospite + ':' + pari.porta + ' Attraverso ' + da.indirizzo + ':' + da.porta) >) // Trova i coetanei per l'informazione torrent data hash dht.cercare(analizzato.Info Hash)

    dht = new dht ([Opts])

    Crea una nuova istanza DHT.

    Se viene specificato OPTS, verranno sovrascritte le opzioni predefinite (mostrate di seguito).

     nodeid: '', // ID nodo DHT DHT a 160 bit (stringa buffer o esadecimale, impostazione predefinita: generato casualmente) bootstrap: [", // server bootstrap (impostazione predefinita: router.bittorrent.com: 6881, router.UTorrent.com: 6881, DHT.TransmissionBt.com: 6881) ospite: falso, // host di peer locale, se specificato quindi annuncia aggiunto alla tabella locale (stringa, disabilitata per impostazione predefinita) concorrenza: 16, // Opzione K-RPC per specificare le richieste UDP concorrenti massime consentite (numero, 16 per impostazione predefinita) hash: Funzione, // Funzione hash personalizzata da utilizzare (funzione, sha1 per impostazione predefinita), KRPC: KRPC(), // istanza K-RPC opzionale Time -boxtoutdated: 900000, // Controlla i secchi ogni 15 minuti maxage: Infinito // Impostazione facoltativa per i colleghi annunciati da timeout >

    Per utilizzare dht_store, imposta opt.Verificare un'implementazione ED25519 SuperCop/Ref10. opti.Verificare (firma, valore, publickey) dovrebbe restituire un booleano se i buffer di firma e valore sono stati generati dal publickey .

    Ad esempio, per dht_store puoi fare:

    importare ed da 'ED25519-SUPERCOP' const dht = nuovo Dht( verificare: ed.verificare >)

    Trova coetanei per le informazioni fornite hash.

    Questo fa una ricerca ricorsiva nel DHT. I potenziali coetanei che vengono scoperti vengono emessi come eventi tra pari. Vedi l'evento peer qui sotto per maggiori informazioni.

    InfoHash può essere una stringa o un buffer. Il callback viene chiamato quando la ricerca ricorsiva è terminata e viene chiamata con due parametri. Il primo è un errore o un null. Il secondo è il numero di nodi trovati che avevano peer. Di solito non è necessario utilizzare queste informazioni e puoi semplicemente ascoltare gli eventi peer.

    Restituisce una funzione abort () che ci consentirebbe di interrompere la query.

    dht.Ascolta ([porta], [indirizzo], [onlistening])

    Fai ascoltare il DHT sulla porta data . Se la porta non è definita, una porta disponibile viene automaticamente scelta.

    Se l'indirizzo non è definito, il DHT proverà ad ascoltare tutti gli indirizzi.

    Se viene definito l'onstaning, è allegato all'evento di ascolto.

    Restituisce un oggetto contenente le informazioni sull'indirizzo per la presa di ascolto del DHT. Questo oggetto contiene proprietà, familiari e porti.

    dht.Annuncio (InfoHash, [Port], [Callback])

    Annuncia che il peer, che controlla il nodo di query, sta scaricando un torrent su una porta.

    Se si omette la porta, l'opzione porta implicita verrà impostata e altri colleghi utilizzeranno la porta DHT pubblica come porta annunciata.

    Se Dht.ANNUNCHE viene chiamato e non c'è tavolo di routing memorizzato nella cache, quindi un DHT.La ricerca verrà prima eseguita per scoprire nodi pertinenti e ottenere "token" validi da ciascuno di essi. Questo ci vorrà più tempo.

    Un "token" è un valore opaco che deve essere presentato per un nodo per annunciare che il suo peer di controllo sta scaricando un torrent. Deve presentare il token ricevuto dallo stesso nodo interrogato in una recente domanda per i coetanei. Questo per impedire ai padroni di casa dannosi di iscrivere altri host per torrent. Tutta la gestione dei token è gestita internamente da questo modulo.

    Il callback verrà chiamato quando l'operazione di annuncio è completata e viene chiamata con un singolo parametro che è un errore o null.

    Restituisce lo stato attuale del DHT, inclusi i nodi DHT e i valori BEP44.

    < "Nodi": [], "valori": <>>

    I nodi DHT, in particolare, sono utili per persistere il DHT su disco tra i riavvio di un client bittorrent (come raccomandato dalla specifica). Ogni nodo nell'array è un oggetto con proprietà host (stringa) e porta (numero).

    Per ripristinare i nodi DHT quando istanziano un nuovo oggetto DHT, basta analizzare i nodi nell'array e aggiungerli con il metodo AddNode.

    const dht1 = nuovo Dht() // un po 'di tempo passa . // Distruggi il DHT const nodi = dht1.tojson().nodi dht1.distruggere() // un po 'di tempo passa . // inizializza un nuovo DHT con la stessa tabella di routing del primo const dht2 = nuovo Dht() nodi.per ciascuno(funzione (nodo)  dht2.addnode(nodo) >)

    Aggiungi manualmente un nodo alla tabella di routing DHT. Se c'è spazio nella tabella di routing (o un nodo non rispondente può essere sfrattato per fare spazio), il nodo verrà aggiunto. In caso contrario, il nodo non verrà aggiunto. Questo è utile chiamare quando un filo peer invia un messaggio di porta per condividere la loro porta DHT.

    Un nodo dovrebbe apparire così:

     ospite: Nodehost, porta: Nodeport >

    Distruggi il DHT. Chiude la presa e pulisce le risorse della struttura dei dati di grandi dimensioni.

    Scrivi un carico utile arbitrario al DHT. (BEP 44).

    Per tutte le richieste, è necessario specificare:

    • opti.V - Un payload buffer da scrivere, meno di 1000 byte

    Se specifichi solo Opts.v, il contenuto è considerato immutabile e l'hash sarà solo l'hash del contenuto.

    Ecco un semplice esempio di creazione di alcuni contenuti immutabili sul DHT:

    importare Dht da 'BitTorrent-Dht' const dht = nuovo Dht() const valore = Respingente.aloc(200).riempire('ABC') dht.Mettere( v: valore >, funzione (err, hash)  console.errore('Errore =', err) console.tronco d'albero('hash =', hash) >)

    Per contenuti mutabili, l'hash sarà l'hash della chiave pubblica, opta.K . Queste opzioni sono disponibili:

    • opti.K - ED25519 Buffer a chiave pubblica (32 byte) (richiesto)
    • opti.Segno (BUF) - Funzione per generare un buffer di firma ED25519 (64 byte) corrispondente alle opt.K Public Key (richiesto)
    • opti.Seq - sequenza opzionale (intero), deve aumentare monotonicamente (richiesto)
    • opti.CAS-Sequenza precedente opzionale per confronto e swap
    • opti.Salt - tampone salato opzionale da includere (

    Si noti che BitTorrent BEP44 utilizza ED25519. È possibile utilizzare il pacchetto ED25519-SUPERCOP per generare le firme appropriate, BitTorrent-Dht-Store-Keypair, BitTorrent-DHT-Sodio o per una versione più conveniente.

    Per effettuare un aggiornamento mutabile, dovrai creare una chiave ellittica e valori di pacchetto precisamente in base alla specifica, come così:

    importare ed da 'BitTorrent-Dht-Sodium' const tastiera = ed.Keygen() const valore = Respingente.aloc(200).riempire('Qualunque cosa') // il payload che desideri inviare const opti =  K: tastiera.pk, seq: 0, v: valore, cartello: funzione (buf)  ritorno ed.cartello(buf, tastiera.SK) > > importare Dht da 'BitTorrent-Dht' const dht = nuovo Dht() dht.Mettere(opti, funzione (err, hash)  console.errore('Errore =', err) console.tronco d'albero('hash =', hash) >)

    In forme mutabili o immutabili, il callback (errore, hash, n) si accende con un errore se nessun nodi è stato in grado di archiviare il valore . n è impostato la quantità di coetanei che hanno accettato il put e l'hash, la posizione in cui è possibile recuperare il contenuto mutabile o immutabile (con DHT.get (hash)).

    Nota che dovresti chiamare .Put () ogni ora per i contenuti che si desidera mantenere in vita, poiché i nodi possono scartare i nodi di oltre 2 ore.

    Se ricevi una coppia chiave/valore e si desidera nuovamente aggiungerlo al DHT per mantenerlo in vita, puoi semplicemente rimetterlo.

    importare ed da 'BitTorrent-Dht-Sodium' const dht = nuovo Dht( verificare: ed.verificare >) // È necessario specificare il parametro "Verifica" se si desidera ottenere contenuti mutabili, altrimenti NULL verrà restituito dht.Ottenere(chiave, funzione (err, res)  dht.Mettere(res, funzione ()  // ha ri-aggiunto la coppia di tasti/valore >) >)

    dht.get (hash, opts, callback)

    Leggi un record di dati (creato con .put ()) dal DHT. (BEP 44)

    Dato l'hash, una stringa esagonale o un buffer, il contenuto dei dati di ricerca dal DHT, inviando il risultato in callback (err, res) .

    Queste opzioni sono disponibili:

    • opti.Verifica: sostituire la funzione di verifica predefinita ED25519 fornita durante l'istanza DHT.
    • opti.sale - tampone sale opzionale (se presente) utilizzato per calcolare l'hash. Deve essere specificato se incluso nell'hash.
    • opti.Cache: utilizzare il valore di risposta memorizzato a livello locale quando disponibile invece di eseguire una ricerca di rete (impostazione predefinita su True).

    Gli oggetti Res sono simili agli oggetti delle opzioni scritti al DHT con .Mettere() :

    • res.v - il valore messo
    • res.ID - Il nodo che ha restituito il contenuto
    • res.K - La chiave pubblica (presente solo per dati mutabili)
    • res.SIG - La firma (presente solo per dati mutabili)
    • res.SEQ - La sequenza (opzionale, presente solo per dati mutabili)

    Emesso quando il DHT è completamente avvolto (i.e. La tabella di routing è sufficientemente popolata tramite i nodi bootstrap). Nota che va bene fare ricerche prima che l'evento "pronto".

    Nota: se si inizializza il DHT con il < bootstrap: false >Opzione, quindi l'evento "Ready" sparerà il segno di spunta successiva anche se non ci sono nodi nella tabella di routing. Si presume che popolerai manualmente la tabella di routing con DHT.AddNode Se si passa questa opzione.

    Emesso quando il DHT sta ascoltando.

    dht.on ('peer', funzione (peer, infohash, da) < . >)

    Emesso quando si trova un potenziale pari. Il peer è della forma . Infohash è il torrent info hash dello sciame a cui appartiene il pari. Emesso in risposta a una chiamata di ricerca (infohash).

    dht.on ("errore", funzione (err) < . >)

    Emesso quando il DHT ha un errore fatale.

    dht.on ('node', funzione (nodo) < . >)

    Emesso quando il DHT trova un nuovo nodo.

    dht.on ('annuche', funzione (peer, infohash) < . >)

    Emesso quando un pari si annuncia per essere archiviato nel DHT.

    dht.on ('warning', funzione (err) < . >)

    Emesso quando il DHT riceve un messaggio inaspettato da un altro nodo DHT. Questo è puramente informativo.

    • Protocollo DHT BitTorrent
    • Kademlia: un sistema informativo peer-to-peer basato sulla metrica XOR

    MTE spiega: come funziona BitTorrent DHT Peer Discovery

    Peer Discovery è una parte essenziale del protocollo BitTorrent. Esso&rsquo;S come si verificano i suoi download così rapidamente: ti connetti a più persone e ognuno di essi carichi un piccolo pezzo del file per te. Questo fenomeno ha creato un modo molto popolare per scaricare e condividere informazioni su Internet, sia legittimo che illegittimo. Indipendentemente dagli effetti che ha avuto sulla proprietà intellettuale, io&rsquo;m qui per descrivere una cosa: come funziona davvero l'intero processo di scoperta peer dht dht. Potresti sapere un po '(o molto) su questo meccanismo, ma sicuramente abbastanza te&rsquo;sono curioso di sapere cosa significa il termine DHT e come i coetanei elencati sotto di esso ti hanno trovato in primo luogo.

    Cosa significa DHT?

    DHT è breve per &ldquo;Tabella hash distribuita,&rdquo; e rappresenta un mezzo attraverso il quale trovi coetanei, noti anche come &ldquo;bootstrap.&rdquo; IO&rsquo;Lo spiegherò tra un po '. Tieni presente il fatto che puoi trovare colleghi attraverso il DHT.

    Posizione DHT BitTorrent

    Mentre molte persone lo dicono&rsquo;s decentralizzato, esso&rsquo;in realtà molto difficile farlo, data la natura unicast di Internet. Quando ti connetti al Web, non&rsquo;Annuncia la tua presenza a miliardi di computer già connessi. Ciò spreverebbe solo enormi quantità di larghezza di banda. Invece, il tuo fornitore di servizi Internet locale&rsquo;Il router S, così come le destinazioni a cui ti colleghi, sono le uniche a conoscenza&rsquo;essere anche online. Quello&rsquo;s cosa &ldquo;unico&rdquo; significa, nel laico&rsquo;termini. Il multicast è ciò che accade quando il tuo computer entra in una rete locale. La sua presenza è resa nota a ogni altro computer nella stessa sottorete e loro&rsquo;ora sono a conoscenza della tua presenza. Poiché questo non lo fa&rsquo;t accade in Internet esterno, lì&rsquo;non è davvero quello di comporre una struttura completamente decentralizzata, dati i limiti del protocollo BitTorrent stesso.

    Di conseguenza, tende ad esserci due DHT principali a cui ti connetti quando si inizia a scaricare un file torrent: router.bittorrent.com E router.UTorrent.com. Nel caso tu&rsquo;Re Curioso, ti connetti a loro sulla porta 6881. Esso&rsquo;non è assolutamente necessario per memorizzare queste informazioni. A volte i dati peer sono incorporati nel file torrent per facilitare la ricerca dei pari.

    Bootstrap

    Bitdht-Discovery

    Per iniziare a raccogliere colleghi, bisogna prima bootstrap nella rete torrent. Il bootstrap è solo un modo elegante per descrivere il processo di connessione al DHT e trovare coetanei. Una volta connesso, il server DHT invierà una manciata di indirizzi IP peer che tu&rsquo;Ll si connette anche a. Essi&rsquo;Ti darà gli indirizzi dei colleghi collegati ad essi, e così via, e così via, fino a quando la tua lista dei pari non mostra tutti i coetanei che scaricano (o seminano) il file&rsquo;sta cercando di ottenere. Esso&rsquo;s come seguire un albero dalle radici ai rami.

    Teoricamente parlando, hai davvero bisogno di un solo indirizzo peer per ottenere tutti gli altri pari, poiché condividerà il resto degli indirizzi con te. Ciò salva i tracker e il DHT una tonnellata di larghezza di banda che altrimenti verrebbe sprecata nell'invio di elenchi di pari a ogni nuovo pari collegato e avvisando ogni persona quando uno di essi si disconnette. La seccatura è ridotta al minimo facendo relè ai pari a vicenda.

    Dopo di te&rsquo;Ve ha trovato tutti i tuoi coetanei, inizia il tuo download!

    Se i DHT sono là fuori, perché la maggior parte delle persone usa ancora i tracker?

    DHT può essere divertente, ma la maggior parte delle persone usa ancora i tracker per scaricare i loro dati. Ciò è dovuto alla natura intrinseca del DHT. Permettere&rsquo;s Diciamo che ho un sito in cui carico un sacco delle mie creazioni open source come torrenti. Per controllare completamente ciò che accade a quei torrenti e proteggere la privacy delle persone che li scaricano, esso&rsquo;s più redditizio per me ospitare il mio tracker. Siti che pubblicano materiale di download illeciti usano i tracker come mezzo di preferenza per mantenere un aspetto sotterraneo e controllare ciò che viene pubblicato su di loro e ciò che viene rimosso.

    Detto questo, non tutti i download torrent sono illegali. Là&rsquo;è un enorme repository di progetti open source e opere di dominio pubblico da persone che vogliono solo condividere ciò che hanno senza sprecare la larghezza di banda dei loro host web.

    Confuso?

    Se tu&rsquo;Rimane ancora perplesso dalle informazioni condivise qui, lascia un commento qui sotto e possiamo discutere!

    Miguel Leiva-Gomez

    Miguel è un esperto di crescita e tecnologia aziendale da più di un decennio e ha un software scritto ancora più a lungo. Dal suo piccolo castello in Romania, presenta prospettive fredde e analitiche a cose che colpiscono il mondo tecnologico.

    Iscriviti alla nostra Newsletter!

    I nostri ultimi tutorial consegnati direttamente alla tua casella di posta

BitLocker rallenta Windows 10? Bixby costa denaro?

Related Posts

Notizia

Vinyl suona bene su Sonos

Notizia

Fa Epson 4700 Print Cardstock

Notizia

Le cuffie ad alto volume di volume

banner
banner

PROMO

racavedigger.com
© racavedigger.com 2026