Por primera vez utilicé un enlace magnético . Curioso sobre cómo funciona, busqué las especificaciones y no encontré ninguna respuesta. El wiki dice que xt
significa "tema exacto" y es seguido por el formato ( btih
en este caso) con un hash SHA1. Vi a base32 mencionado, sabiendo que son 5 bits por carácter y 32 caracteres, descubrí que contiene exactamente 160 bits, que es exactamente el tamaño del SHA1.
No hay espacio para una dirección IP ni nada, es solo un SHA1. Entonces, ¿cómo encuentra el cliente BitTorrent el archivo real? Encendí URL Snooper para ver si visita una página (usando TCP) o hace una búsqueda o similar, pero no pasó nada. No tengo idea de cómo el cliente encuentra compañeros. ¿Como funciona esto?
Además, ¿de qué se trata el hash? ¿Es un hash de una matriz de todos los hashes de archivos juntos? ¿Quizás es un hash del archivo de torrent real requerido (eliminando cierta información)?
En una máquina virtual, probé un enlace magnético con uTorrent (que estaba recién instalado) y logró encontrar pares. ¿De dónde vino el primer compañero? Estaba fresco y no había otros torrentes.
fuente
Respuestas:
Un enlace de imán BitTorrent identifica un torrent utilizando 1 un SHA-1 o un valor hash SHA-256 truncado conocido como "infohash". Este es el mismo valor que los pares (clientes) usan para identificar torrentes cuando se comunican con rastreadores u otros pares. Un archivo .torrent tradicional contiene una estructura de datos con dos claves de nivel superior:
announce
identificar los rastreadores que se usarán para la descarga yinfo
contener los nombres de archivo y los hash para el torrent. El "infohash" es el hash de losinfo
datos codificados .Algunos enlaces magnéticos incluyen rastreadores o semillas web, pero a menudo no lo hacen. Es posible que su cliente no sepa nada sobre el torrent, excepto su infohash. Lo primero que necesita es encontrar otros pares que estén descargando el torrent. Lo hace utilizando una red de igual a igual 2 que opera una "tabla hash distribuida" (DHT). Un DHT es un gran índice distribuido que asigna torrents (identificados por infohashes) a listas de pares (identificados por dirección IP y puertos) que participan en un enjambre para ese torrent (carga / descarga de datos o metadatos).
La primera vez que un cliente se une a la red DHT, genera una ID aleatoria de 160 bits desde el mismo espacio que las casillas de información. Luego, inicia su conexión a la red DHT utilizando direcciones codificadas de clientes controlados por el desarrollador del cliente o clientes compatibles con DHT encontrados previamente en un enjambre de torrentes. Cuando quiere participar en un enjambre de un torrente determinado, busca en la red DHT varios otros clientes cuyas identificaciones estén lo más cerca posible 3 del infohash. Notifica a estos clientes que le gustaría participar en el enjambre, y les solicita la información de conexión de sus compañeros que ya conocen de quién está participando en el enjambre.
Cuando los pares cargan / descargan un torrent en particular, intentan contarse entre sí sobre todos los otros pares que conocen que están participando en el mismo enjambre de torrent. Esto permite que los compañeros se conozcan entre sí rápidamente, sin someter a un rastreador o DHT a solicitudes constantes. Una vez que se haya enterado de algunos pares del DHT, su cliente podrá solicitar a esos pares la información de conexión de aún más pares en el enjambre de torrentes, hasta que tenga todos los pares que necesita.
Finalmente, podemos pedir a estos pares los
info
metadatos del torrent , que contienen los nombres de archivo y la lista hash. Una vez que hemos descargado esta información y verificado que es correcta usando lo conocidoinfohash
, estamos prácticamente en la misma posición que un cliente que comenzó con un.torrent
archivo normal y obtuvo una lista de pares del rastreador incluido.La descarga puede comenzar.
1 El infohash generalmente está codificado en hexadecimal, pero algunos clientes antiguos usaban la base 32 en su lugar. v1 (
urn:btih:
) usa el resumen SHA-1 directamente, mientras que v2 (urn:bimh:
) agrega un prefijo multihash para identificar el algoritmo hash y la longitud del resumen.2 Hay dos redes DHT principales: la DHT "mainline" más simple y un protocolo más complicado utilizado por Azureus.
3 La distancia se mide por XOR.
Otras lecturas
fuente
dht.transmission.com
, simplemente un rastreador? Según tengo entendido, necesita hacer un seguimiento de la lista de pares por hash de información, que es exactamente lo que hace un rastreador.ws=
parámetro apunta a una URL de inicio web BEP-19 de los datos reales, y elxs=
parámetro apunta a una URL con el.torrent
archivo mismo. Creo que esto es un poco inconsistente con otros usos delmagnet:
esquema, pero así es como es. Olvidé si algún cliente usaas=
para algo ... tal vez solo como una alternativa para elxs=
IIRC, pero no es ampliamente compatible.El descubrimiento entre pares y el descubrimiento de recursos (archivos en su caso) son dos cosas diferentes.
Estoy más familiarizado con JXTA, pero todas las redes punto a punto funcionan con los mismos principios básicos.
Lo primero que debe suceder es el descubrimiento entre pares.
Descubrimiento entre pares
La mayoría de las redes p2p son redes "sembradas": cuando se inicia por primera vez, un par se conectará a una dirección conocida (codificada) para recuperar una lista de pares en ejecución. Puede ser una siembra directa como conectarse a
dht.transmissionbt.com
como se menciona en otra publicación o una siembra indirecta como se hace generalmente con JXTA donde el par se conecta a una dirección que solo entrega una lista de texto sin formato de otras direcciones de red de pares.Una vez que se establece la conexión con los primeros (pocos) pares, el par de conexión realiza un descubrimiento de otros pares (enviando solicitudes) y mantiene una tabla de ellos. Dado que el número de otros pares puede ser enorme, el par de conexión solo mantiene parte de una tabla de hash distribuido (DHT) de los pares. El algoritmo para determinar qué parte de la tabla debe mantener el par de conexión varía según la red. BitTorrent usa Kademlia con identificadores / claves de 160 bits.
Descubrimiento de recursos
Una vez que el par de conexión ha descubierto algunos pares, este último envía algunas solicitudes para que descubran recursos. Los enlaces magnéticos identifican esos recursos y están construidos de tal manera que son una "firma" para un recurso y garantizan que identifiquen de manera única el contenido solicitado entre todos los pares. El par de conexión enviará una solicitud de descubrimiento para el enlace / recurso magnético a los pares a su alrededor. El DHT está construido de tal manera que ayuda a determinar a qué pares se les debe pedir primero el recurso (lea en Kademlia en Wikipedia para obtener más información). Si el par solicitado no retiene el recurso solicitado, generalmente "transmitirá" la consulta a pares adicionales extraídos de su propio DHT.
El número de "saltos" a los que se puede pasar la consulta suele ser limitado; 4 es un número habitual con redes de tipo JXTA.
Cuando un compañero retiene el recurso, responde con todos sus detalles. El par de conexión puede conectarse al par que contiene el recurso (directamente o mediante un relé; no entraré en detalles aquí) y comenzar a buscarlo.
Los recursos / servicios en las redes P2P no están directamente conectados a las direcciones de red: se distribuyen y esa es la belleza de estas redes altamente escalables.
fuente
Tenía curiosidad por la misma pregunta yo mismo. Leyendo el código para la transmisión, encontré lo siguiente en
libtrnasmission/tr-dht.c
:Lo intenta 6 veces, esperando 40 (!) Segundos entre intentos. Supongo que puede probarlo eliminando los archivos de configuración (
~/.config/transmission
en Unix) y bloqueando toda comunicacióndht.transmissionbt.com
, y vea qué sucede (espere al menos 240 segundos).Entonces parece que el cliente tiene un nodo de arranque incorporado para comenzar. Por supuesto, una vez que ha entrado en la red, ya no necesita ese nodo de arranque.
fuente
Finalmente encontré especificación. Por primera vez, Google no ayudó . (wiki vinculado a bittorrent.com, que es el sitio principal. Hice clic en el enlace de desarrolladores, observe la pestaña bittorrent.org a la derecha, entonces fue fácil a partir de ahí. Es difícil encontrar enlaces cuando no tiene idea de lo que están etiquetados y muchos clics de distancia).
Parece que todos los torrents tienen una red de pares. Encuentra compañeros de los rastreadores y los mantiene entre sesiones. La red le permite encontrar compañeros y otras cosas. No he leído cómo se usa con enlaces magnéticos, pero parece que no está definido cómo un cliente nuevo encuentra pares. Quizás algunos están integrados, o usan su servidor doméstico o rastreadores conocidos incrustados en el cliente para obtener el primer par en la red.
fuente
Cuando comencé a responder tu pregunta, no me di cuenta de que estabas preguntando cómo funciona el esquema magnético. Solo pensé que querías saber cómo se generaron las partes relevantes para el protocolo bittorrent.
El hash que figura en el uri del imán es el hash de información del torrent codificado en base32. El hash de información es el hash sha1 del bloque de información codificado del torrent.
Este código de Python demuestra cómo se puede calcular.
Escribí una implementación de C # (muy ingenua) para probar esto ya que no tenía un bencoder a mano y coincide con lo que se espera del cliente.
Según tengo entendido, este hash no incluye ninguna información sobre cómo ubicar el rastreador, el cliente debe averiguarlo a través de otros medios (se proporciona la URL de anuncio). Esto es justo lo que distingue un torrente de otro en el rastreador.
Todo lo relacionado con el protocolo bittorrent todavía gira en torno al rastreador. Sigue siendo el principal medio de comunicación entre el enjambre. El esquema uri del imán no fue diseñado específicamente para su uso por bittorrent. Es utilizado por cualquier protocolo P2P como una forma alternativa de comunicación. Los clientes de Bittorrent se adaptaron para aceptar enlaces magnéticos como otra forma de identificar torrents de esa manera, ya no es necesario descargar archivos .torrent. El uri del imán aún necesita especificar el
tr
acker para localizarlo y que el cliente pueda participar. Puede contener información sobre otros protocolos, pero es irrelevante para el protocolo bittorrent. El protocolo bittorrent finalmente no funcionará sin los rastreadores.fuente
la lista de pares probablemente esté poblada del torrent que actualiza el cliente (por ejemplo, hay un torrent para utorrent que lo actualiza). siempre y cuando todos usen el mismo cliente, debería ser bueno porque no tiene más remedio que compartir la actualización.
fuente