En términos simples, ¿cómo descubre inicialmente un cliente BitTorrent pares con DHT?

45

Ya he leído esta respuesta de Superusuario y este artículo de Wikipedia, pero ambos son demasiado técnicos para que realmente pueda entenderlo.

Entiendo la idea de un rastreador: los clientes se conectan a un servidor central que mantiene una lista de pares en un enjambre.

También entiendo la idea del intercambio entre pares: los clientes que ya están en un enjambre se envían la lista completa de sus pares. Si se descubren nuevos pares, se agregan a la lista.

Mi pregunta es, ¿cómo funciona DHT? Es decir, ¿cómo puede un nuevo cliente unirse a un enjambre sin un rastreador o el conocimiento de al menos un miembro del enjambre para intercambiar pares?

(Nota: las explicaciones simples son las mejores).

Steve V.
fuente

Respuestas:

48

Resumen

¿Cómo puede un nuevo cliente unirse a un enjambre sin un rastreador o el conocimiento de al menos un miembro del enjambre con el que intercambiar pares?

No puedes Es imposible.*

* (A menos que un nodo en su red de área local ya sea un nodo en el DHT. En este caso, podría usar un mecanismo de transmisión, como Avahi, para "descubrir" este par y arrancar de ellos. Pero cómo ¿Se reinician ellos mismos? Eventualmente, se encontrará con una situación en la que necesita conectarse a Internet público. Y el Internet público es solo de unidifusión, no de multidifusión, por lo que está obligado a usar listas predeterminadas de pares).


Referencias

Bittorrent DHT se implementa a través de un protocolo conocido como Kademlia , que es un caso especial del concepto teórico de una tabla hash distribuida .


Exposición

Con el protocolo Kademlia, cuando te unes a la red, pasas por un procedimiento de arranque , que requiere que sepas, de antemano , la dirección IP y el puerto de al menos un nodo que ya participa en la red DHT. El rastreador al que se conecta, por ejemplo, puede ser un nodo DHT. Una vez que esté conectado a un nodo DHT, procederá a descargar información del DHT, que le proporciona información de conectividad para más nodos, y luego navegará esa estructura de "gráfico" para obtener conexiones a más y más nodos, que pueden proporcionar ambos conectividad a otros nodos y datos de carga útil (fragmentos de la descarga).

Creo que su pregunta real en negrita, la de cómo unirse a una red DHT de Kademlia sin conocer a ningún otro miembro, se basa en una suposición falsa.

La respuesta simple a su pregunta en negrita es que no . Si no conoce CUALQUIER información sobre siquiera un host que pueda contener metadatos DHT, está atascado, ni siquiera puede comenzar. Quiero decir, claro, podrías intentar por fuerza bruta descubrir una IP en Internet pública con un puerto abierto que transmita información DHT. Pero lo más probable es que su cliente BT esté codificado con alguna IP estática específica o DNS que se resuelva en un nodo DHT estable, que solo proporciona los metadatos DHT.

Básicamente, el DHT solo está tan descentralizado como el mecanismo de unión, y debido a que el mecanismo de unión es bastante frágil (¡no hay forma de "transmitir" por todo Internet! Por lo que debe unidifusión a un host preasignado individual para obtener el DHT datos), Kademlia DHT no está realmente descentralizada. No en el sentido más estricto de la palabra.

Imagine este escenario: alguien que quiere que se detenga P2P sale y prepara un ataque contra todos los nodos DHT estables de uso común que se utilizan para el arranque. Una vez que han organizado su ataque, lo lanzan a todos los nodos a la vez. zas ; Todos los nodos DHT de arranque están inactivos de una sola vez. ¿Ahora que? Estás atascado con la conexión a rastreadores centralizados para descargar listas tradicionales de pares de esos. Bueno, si también atacan a los rastreadores, entonces eres muy, muyhasta un arroyo En otras palabras, Kademlia y toda la red BT están limitadas por las limitaciones de Internet, ya que existe un número finito (y relativamente pequeño) de computadoras que tendrías que atacar con éxito o desconectar para evitar> 90% de usuarios que se conectan a la red.

Una vez que los nodos de arranque "pseudo-centralizados" desaparecen, los nodos interiores del DHT, que no son de arranque porque nadie en el exterior del DHT sabe acerca de los nodos interiores , son inútiles; no pueden traer nuevos nodos al DHT. Entonces, a medida que cada nodo interior se desconecta del DHT con el tiempo, ya sea debido a que las personas apagan sus computadoras, reinician las actualizaciones, etc., la red colapsaría.

Por supuesto, para evitar esto, alguien podría implementar un cliente BitTorrent parcheado con una nueva lista de nodos DHT estables predeterminados o direcciones DNS, y anunciar en voz alta a la comunidad P2P para usar esta nueva lista. Pero esto se convertiría en una situación de "golpe-a-lunar" en la que el agresor (el devorador de nodos) descargaría progresivamente estas listas por sí mismo y apuntaría a los nuevos y valientes nodos de arranque, y luego los desconectaría también.

allquixotic
fuente
La forma en que describe DHT suena igual que el intercambio entre pares.
Celeritas
Lo que se distribuye sobre DHT es que la carga de datos real, es decir, la lista de IP y puertos donde se pueden descargar archivos, se distribuye. En un intercambio de pares, la lista completa se almacena en una computadora, generalmente el rastreador, y se descarga de manera no similar a una descarga de archivos. Podría mencionar eso en mi respuesta, pero toda esta pregunta (y las respuestas) son solo sobre el descubrimiento inicial o la unión de la red DHT, no sobre lo que sucede después de unirse.
allquixotic
1
Golpear todos los nodos de bootstrap detendría a los nuevos usuarios de bootstrapping, pero no necesariamente a los usuarios existentes que se desconectan y luego regresan. Tengo la impresión de que varios de los clientes recuerdan su conjunto de nodos activos y los usan para volver a conectarse, en lugar de iniciar siempre.
clacke
Con proyectos como masscan ( github.com/robertdavidgraham/masscan ) debería ser posible descubrir nodos DHT sin un directorio centralizado
newlog
19

Respuesta corta: lo obtiene del archivo .torrent.

Cuando un cliente BitTorrent genera un archivo .torrent sin seguimiento (es decir, cuando alguien se está preparando para compartir algo nuevo a través de BitTorrent), agrega una clave "nodos" (clave como en "par clave / valor"; como un encabezado de sección, no una clave criptográfica) al archivo .torrent que contiene los K nodos DHT más cercanos conocidos por ese cliente.

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

Un diccionario de torrents sin tracker no tiene una tecla "anunciar". En cambio, un torrent sin tracker tiene una clave de "nodos". Esta clave debe establecerse en los K nodos más cercanos en la tabla de enrutamiento del cliente que genera torrent. Alternativamente, la clave podría establecerse en un nodo bueno conocido, como uno operado por la persona que genera el torrente. No agregue automáticamente "router.bittorrent.com" a los archivos torrent ni agregue automáticamente este nodo a las tablas de enrutamiento de los clientes.

Entonces, cuando alimenta a su cliente BitTorrent con el archivo .torrent de un torrent sin tracker que desea descargar, utiliza el valor de esa clave "nodos" del archivo .torrent para encontrar sus primeros nodos DHT.

Spiff
fuente
3
Esta es buena información explicativa. Creo que su respuesta explica lo que los clientes actuales de BitTorrent hacen para manejar las limitaciones teóricas y los problemas que se identifican en mi respuesta. Afortunadamente, nuestras dos respuestas se votaron positivamente, ya que explican diferentes aspectos de la respuesta.
allquixotic
3
¿Es por eso que la combinación de un nuevo archivo de torrent con la descarga de torrent en muchos clientes hace que un torrent muerto cobre vida?
Jesvin Jose
2
@aitchnyu sí, pero el archivo torrent también puede tener rastreadores adicionales / diferentes.
Longneck
2
Parece que ningún cliente de BitTorrent realmente incluye la información de los nodos. He probado la transmisión, Vuze, diluvio, línea principal y otros.
Aeyoun
1

no puedes! tienes que conocer al menos una IP de uno de los enjambres, esta es la debilidad de una red p2p. Puede transmitir a ciegas para encontrar la primera IP, pero en una red grande, si todo el mundo lo está haciendo, tendremos un problema de congestión. Puede usar un caché, pero solo es posible para grandes enjambres (caché de direcciones de pares más grandes). Siempre tiene que conectar un rastreador para solicitar solo la primera IP.

Distribuido en DHT significa que los clientes no tienen que mantener toda la lista que contiene la suma md5 del nombre de los archivos compartidos, con sus pares correspondientes. La lista de hash se forma en partes iguales y se distribuye con redundancia en todo el enjambre. Si un par se desconecta, hay otro lugar con la misma parte de la lista hash. Los compañeros comparten la dirección del buen titular de la parte hashlist.

torrent-freak escribió una publicación sobre este tema

z8po
fuente
0

¿Cómo puede un nuevo cliente unirse a un enjambre sin un rastreador o el conocimiento de al menos un miembro del enjambre con el que intercambiar pares?

Lo pide

Los clientes de Bittorrent que admiten el DHT ejecutan dos aplicaciones separadas peer-to-peer.

El primero hace el intercambio de archivos: un enjambre en la jerga bittorrent es un grupo de pares que comparten un objeto bittorrent (por ejemplo, un archivo o estructura de directorio). Cada objeto bittorent tiene algunos metadatos que se guardan en un archivo .torrent. (Incluye el tamaño del objeto, el nombre de la carpeta, posiblemente la información del rastreador o los nodos. Ect.) El hash de los metadatos necesarios para descargar este objeto bittorrent se llama infohash.

El DHT básicamente es una segunda aplicación P2P que tiene como objetivo reemplazar a los rastreadores: almacena pares de (infohash, enjambre) y actualiza el enjambre si recibe mensajes de anuncio. Un nuevo cliente debe tener conocimiento de algún "nodo" (jerga de bittorrent para un par del DHT) para arrancar su información del DHT. Aquí se aplican los argumentos dados por @allquixotic. Como el MDHT actualmente consta de más de 7 millones de pares, parece poco probable un ataque sostenido de denegación de servicio.

Luego puede consultar el DHT con respecto a un infohash y no tiene que usar un rastreador o conocer a un par que sea parte del enjambre antes. Si uno de los pares con los que se contacta admite compartir metadatos , solo necesita que infohash pueda recuperar el archivo .torrent del enjambre.

tameit
fuente
0

La mayoría de los clientes de la red p2p se arrancan de una lista de pares de semillas con los que se conectan inicialmente ... una vez que se conectan a un par de botas, descarga el resto de manera distribuida. Se conecta al par de arranque y descarga su lista DHT de pares y luego va a cada uno de ellos y hace lo mismo, etc., etc.

Por ejemplo:

Aquí hay una lista de nodos de arranque:

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

Aquí es donde el cliente se conecta a ellos para hidratar la lista de pares:

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

Esto es similar a cómo funciona un rastreador, excepto que casi cualquier persona puede ser un nodo de arranque, por lo que es casi imposible apagarlo.

La billetera Bitcoin Core funciona de la misma manera. Le permite cambiar los pares de semillas de bootstrap si, por algún motivo, los predeterminados se apagan.

chovy
fuente
Los enlaces están muertos
zella