Bittorrent

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 7 de febrero de 2022; las comprobaciones requieren 4 ediciones .

BitTórrent (literalmente en inglés) Bitstream es un protocolo de red peer-to- peer (P2P) para compartir archivos de forma cooperativa a través de Internet .

Los archivos se transfieren por partes, cada cliente de torrent , recibe (descarga) estas partes, al mismo tiempo las entrega (descarga) a otros clientes, lo que reduce la carga y la dependencia de cada cliente de origen y brinda redundancia de datos .

El protocolo fue creado por Bram Cohen , quien escribió el primer cliente de torrent BitTorrent en Python , el 4 de abril de 2001 . El lanzamiento de la primera versión tuvo lugar el 2 de julio de 2001 .

Hay muchos programas cliente para intercambiar archivos utilizando el protocolo BitTorrent.

Archivo de metadatos

El archivo de metadatos es un diccionario en formato bencode con la extensión .torrent: contiene información sobre la distribución (archivos, rastreadores , etc.)

Cómo funciona el protocolo

Antes de descargar, el cliente se conecta al rastreador en la dirección especificada en el archivo torrent, le dice su dirección y la suma hash del archivo torrent, a lo que el cliente recibe en respuesta las direcciones de otros clientes que descargan o distribuyen el mismo archivo. Además, el cliente informa periódicamente al rastreador sobre el progreso del proceso y recibe una lista actualizada de direcciones. Este proceso se denomina anuncio . 

Los clientes se conectan entre sí e intercambian segmentos de archivos sin la participación directa del rastreador, que solo almacena la información recibida de los clientes conectados al intercambio, una lista de los propios clientes y otra información estadística. Para que la red BitTorrent funcione de manera efectiva, es necesario que tantos clientes como sea posible puedan aceptar conexiones entrantes. La configuración incorrecta de NAT o firewall puede evitar esto.

Al conectarse, los clientes inmediatamente intercambian información sobre los segmentos que tienen. Un cliente que desea descargar un segmento ( leecher ) envía una solicitud y, si el segundo cliente está listo para dar, recibe este segmento. Luego, el cliente verifica la suma de verificación del segmento. Si coincide con el registrado en el archivo torrent, el segmento se considera descargado correctamente y el cliente notifica a todos los pares conectados que tiene este segmento. Si las sumas de verificación difieren, el segmento comienza a descargarse nuevamente. Algunos clientes bloquean a aquellos compañeros que dan segmentos incorrectos con demasiada frecuencia.

Por lo tanto, la cantidad de información del servicio (el tamaño del archivo torrent y el tamaño de los mensajes con una lista de segmentos) depende directamente del número y, por lo tanto, del tamaño de los segmentos. Por lo tanto, a la hora de elegir un segmento, es necesario mantener un equilibrio: por un lado, con un tamaño de segmento grande, la cantidad de información del servicio será menor, pero en caso de un error de verificación de la suma de verificación, se deberá obtener más información. ser descargado nuevamente. Por otro lado, con un tamaño pequeño, los errores no son tan críticos, ya que se necesita volver a descargar un volumen más pequeño, pero el tamaño del archivo torrent y los mensajes sobre los segmentos existentes aumentan.

Algoritmo de intercambio de datos

Cada cliente tiene la posibilidad de bloquear temporalmente la devolución a otro cliente ( ing.  choke ). Esto se hace para un uso más eficiente del canal de retorno. Además, al elegir a quién desbloquear, se da preferencia a los compañeros que han transferido muchos segmentos a este cliente. Por lo tanto, las fiestas con buenas tasas de retorno se animan entre sí según el principio "tú - a mí, yo - a ti".

El intercambio de segmentos se lleva a cabo de acuerdo con el principio "tú - a mí, yo - a ti" simétricamente en dos direcciones. Los clientes se dicen entre sí qué fragmentos tienen cuando se conectan y luego cuando reciben nuevos fragmentos, de modo que cada cliente puede almacenar información sobre qué fragmentos tienen otros pares conectados. La orden de intercambio se elige de tal manera que los clientes intercambien primero los segmentos más raros: esto aumenta la disponibilidad de archivos en la distribución. Al mismo tiempo, la elección de un segmento entre los más raros es aleatoria y, por lo tanto, es posible evitar la situación en la que todos los clientes comienzan a descargar el mismo segmento raro, lo que tendría un impacto negativo en el rendimiento.

El intercambio de datos comienza cuando ambas partes están interesadas en él, es decir, cada una de las partes tiene segmentos que la otra no tiene. Se cuenta el número de segmentos transmitidos, y si una de las partes encuentra que está transmitiendo en promedio más de lo que recibe, bloquea ( ing.  ahogar ) por un tiempo el regreso al otro lado. Por lo tanto, la protección contra los sanguijuelas se incorpora al protocolo .

Los segmentos se dividen en bloques con un tamaño de 16-4096 kilobytes , y cada cliente solicita exactamente estos bloques. Se pueden solicitar bloques de diferentes segmentos al mismo tiempo. Además, algunos clientes admiten la descarga de bloques del mismo segmento de diferentes pares. En este caso, los algoritmos y mecanismos de intercambio descritos anteriormente también son aplicables al nivel de bloque.

Finalizar el modo de juego

Cuando la descarga está casi completa, el cliente ingresa a un modo especial llamado juego final. En este modo, solicita todos los segmentos restantes de todos los pares conectados, lo que evita una ralentización o un "congelamiento" completo de una descarga casi completa debido a varios clientes lentos.

La especificación del protocolo no define exactamente cuándo el cliente debe ingresar al juego final, pero existe un conjunto de prácticas generalmente aceptadas. Algunos clientes ingresan a este modo cuando no quedan bloques no solicitados, otros hasta que la cantidad de bloques restantes es menor que la cantidad de bloques transmitidos y no más de 20. Existe una opinión tácita de que es mejor mantener la cantidad de bloques pendientes bajo (1 o 2) para minimizar la redundancia, y que cuando se solicita aleatoriamente hay menos posibilidades de obtener duplicados del mismo bloque [1] [2] .

Siembra

Cuando se recibe un archivo completo, el cliente cambia a un modo especial de operación en el que solo envía datos (se convierte en semilla). Además, la semilla informa periódicamente al rastreador sobre los cambios en el estado de los torrents (descargas) y actualiza las listas de direcciones IP.

Características generales

Protocolos y puertos

Los clientes se conectan al rastreador utilizando el protocolo TCP . Puerto de entrada del rastreador más utilizado: 6969. Rango de puerto de entrada del cliente más utilizado: 6881-6889.

Los números de puerto no están fijados en la especificación del protocolo y se pueden cambiar según sea necesario. Actualmente, la mayoría de los rastreadores usan el puerto HTTP 80 y se recomienda que los clientes elijan un puerto de entrada aleatorio. Además, algunos rastreadores no permiten el uso de puertos de cliente del rango estándar 6881-6889, ya que algunos proveedores prohíben el uso de este rango de puertos.

La red DHT en los clientes BitTorrent utiliza el protocolo UDP .

Además, los rastreadores UDP usan el protocolo UDP (no es compatible con todos los clientes y no es una parte oficial del protocolo) y para conectar clientes entre sí a través de UDP NAT Traversal (solo se usa en el cliente BitComet y es no es una parte oficial del protocolo).

Rastreador

Tracker ( rastreador en inglés  ; /ˈtɹækə(ɹ)/ ) es un servidor especializado que se ejecuta sobre el protocolo HTTP . El rastreador es necesario para que los clientes puedan encontrarse. De hecho, el rastreador almacena direcciones IP , puertos de clientes entrantes y sumas de hash que identifican de manera única los objetos involucrados en las descargas. De acuerdo con el estándar, los nombres de los archivos no se almacenan en el rastreador y es imposible reconocerlos mediante sumas hash. Sin embargo, en la práctica, el rastreador a menudo, además de su función principal, también realiza la función de un pequeño servidor web . Dicho servidor almacena archivos de metadatos y descripciones de archivos distribuidos, proporciona estadísticas de descarga para diferentes archivos, muestra el número actual de pares conectados, etc.

Trabajar sin rastreador

Las nuevas versiones del protocolo han desarrollado sistemas sin seguimiento  que resuelven algunos de los problemas anteriores. La falla de un rastreador en dichos sistemas no conduce automáticamente a la falla de toda la red.

A partir de la versión 4.2.0 del cliente oficial, lanzada a finales de 2015, se ha implementado una función de trabajo trackerless basada en DHT Kademlia . En tal implementación, el rastreador está disponible de forma descentralizada en los clientes en forma de una tabla hash distribuida .

Por el momento, no todos los clientes utilizan un protocolo que sea compatible entre sí. BitComet , µTorrent , Deluge , KTorrent , Transmission , qBittorrent y el cliente oficial de BitTorrent son compatibles entre sí . Vuze (Azureus) también tiene un modo trackerless, pero su implementación difiere de la oficial, por lo que no puede funcionar vía DHT con los clientes anteriores [3] . Sin embargo, hay soporte para DHT estándar para Vuze a través del complemento Mainline DHT.

También es posible trabajar sin un rastreador cuando se usan clientes multiprotocolo que soportan BitTorrent. Shareaza intercambia hashes y direcciones de pares de otras redes compatibles, incluido BitTorrent, a través de la red Gnutella2 . La compatibilidad con BitTorrent está prevista en GreyLink 6.0, mientras que la red Direct Connect se puede utilizar no solo para convertir a TTH , sino también para encontrar pares.

Trabajar sin un cliente torrent

Para tomar y distribuir archivos en redes torrent, no es necesario usar programas especiales. Hay varios servicios que le permiten descargar archivos usando solo un navegador [4] .

La presencia de información adicional en los archivos de metadatos, como fuentes adicionales y hashes opcionales, permite el uso de un archivo de metadatos .torrent de forma similar a los formatos Metalink , MAGMA , File List (Direct Connect) . El cliente de Shareaza usa hashes opcionales para buscar fuentes alternativas en otras redes.

Semillas web

Un caso de uso es la llamada siembra web. A veces, por varias razones, no se puede iniciar un cliente de torrent completo en el servidor. En este caso, un servidor que opera sobre el protocolo HTTP actúa como fuente de distribución. Por regla general, los clientes prefieren otros clientes de BitTorrent y acceden a la semilla web solo cuando es necesario. Tenga en cuenta que este caso de uso se implementa al menos de tres maneras: BEP0017 Semilla web de estilo BitTornado , BEP0019 Semilla web de estilo GetRight y External Sourcing , cada una de las cuales difiere en los detalles de implementación.

Primero fue creado por John "TheSHAD0W" Hoffman, quien creó BitTornado [5] . Dado que la versión 5.0 del cliente BitTorrent admite semillas web y descargas desde sitios web, se ha creado una herramienta sencilla que crea publicaciones semilla web torrent. μTorrent agregó soporte para obtener semillas web en la versión 1.7. BitComet agregó soporte para obtener semillas web en la versión 1.14.

BTIH (BitTorrent Info Hash)

Este es el hash SHA-1 del campo de información del archivo de metadatos . Este hash se utiliza en enlaces magnéticos , así como para la identificación en el rastreador y entre clientes. Al cargar un archivo de metadatos en un rastreador , su Hash de información puede cambiar, ya que el rastreador puede cambiar el campo de información configurando el indicador de distribución privada o cambiando/agregando campos dentro de la información. Por lo tanto, debe descargar el archivo de metadatos (archivo .torrent) del rastreador nuevamente y agregarlo al cliente [6] .

Enlace BTC

Especificado como:

btc://[Адрес]: [Порт]/[Peer ID]/[ BTIH ]

Un enlace de este tipo se refiere a la distribución y su fuente. Soportado en Shareaza .

Desventajas y limitaciones

Indisponibilidad de distribución

Si la distribución no es popular, puede surgir una situación en la que no haya una sola semilla y los pares presentes no tengan suficientes datos para completar la descarga. En este caso, es necesario esperar a que aparezca una semilla o un compañero que tiene segmentos que faltan en los demás. También puede utilizar copias de archivos obtenidos de otra forma. Una mano que no tiene ninguna semilla durante mucho tiempo se llama "muerta".

Para fomentar los sorteos, incluso se ha creado un token de BitTorrent [7] .

Falta de anonimato y personalización

El principio del protocolo BitTorrent implica que cada cliente conozca las direcciones IP de al menos otros clientes recibidos del servidor. El uso de varias extensiones de protocolo en algunos casos también le permite averiguar las direcciones de otros pares del enjambre. Es por eso:

El problema del anonimato se puede resolver usando Tor [8] . El cliente Vuze BitTorrent tiene soporte de software integrado para esta red anónima . Pero este método no es 100% efectivo [9] .

Por otro lado, el protocolo no implica el uso de apodos. No hay chat entre compañeros. No se pueden enumerar los archivos del mismo nivel (buscando otros archivos que puedan ser de interés). La mayoría de estas funciones se implementan en otros protocolos (como Direct Connect ).

El problema del leecher

Algunos usuarios, especialmente en rastreadores que no requieren registro, no admiten la distribución una vez que se completa la descarga, lo que conduce a una disminución en el rendimiento general, por lo que algunos rastreadores de torrent también tienen en cuenta la cantidad descargada/regalada y dan permiso. para descargar dependiendo del tamaño de los datos proporcionados por el cliente.

Falta de contabilidad precisa del tráfico

A diferencia de muchos protocolos de distribución de contenido de medios comerciales, la arquitectura del protocolo no proporciona un mecanismo preciso para contabilizar y controlar el tráfico entre los puntos de la red. Todo lo que hay son los campos descargados y cargados, en los que los clientes pasan la cantidad de bytes que se tomaron en cuenta al descargar/cargar datos desde el anuncio anterior al anunciar al rastreador. Sin embargo, al no estar controlados por nadie más que el cliente, pueden ser falsificados fácilmente. Para ello, los usuarios asignan estáticamente los valores de estos campos a la URI del rastreador , usan parches para clientes o programas separados (RatioMaster, GiveMeTorrent, GreedyTorrent, etc.), o simplemente eliminan el registro del rastreador del cliente inmediatamente después de recibir un lista de puntos de red del rastreador. Todo esto le permite eludir las restricciones artificiales creadas por la administración de muchos rastreadores públicos y privados.


Terminología

BitTorrent v2

El trabajo en el protocolo BitTorrent de la segunda versión ha estado en marcha desde 2008. El protocolo ha dejado de usar el algoritmo SHA-1, que tiene problemas con la selección de colisiones, a favor de SHA2-256. SHA2-256 se usa tanto para controlar la integridad de los bloques de datos como para las entradas en los índices (info-diccionario), lo que rompe la compatibilidad con DHT y rastreadores. Se ha propuesto un nuevo prefijo "urn:btmh:" para enlaces magnéticos a torrents con hash SHA2-256 (para SHA-1 y torrents híbridos, se usa "urn:btih:").

Debido a que el cambio en la función hash rompe la compatibilidad del protocolo (un campo hash de 32 bytes en lugar de 20 bytes), el desarrollo de la especificación BitTorrent v2 originalmente no era compatible con versiones anteriores y se realizaron otros cambios significativos, como el uso de un hash Merkle. árbol en índices para reducir el tamaño de los archivos torrent y comprobar los datos descargados a nivel de bloque.

Otros aspectos destacados de los cambios en BitTorrent v2 son pasar a asociar árboles hash separados para cada archivo y aplicar la alineación de archivos en partes (sin agregar relleno adicional después de cada archivo), lo que elimina la duplicación de datos cuando hay archivos idénticos y facilita la identificación. diferentes fuentes de archivos. Se mejoró la eficiencia de codificación de la estructura del directorio de torrents y se agregaron optimizaciones para manejar grandes cantidades de archivos pequeños.

Para suavizar la coexistencia de BitTorrent v1 y BitTorrent v2, se implementa la capacidad de crear archivos torrent híbridos, que incluyen, además de estructuras con hash SHA-1, índices con SHA2-256. Estos torrents híbridos se pueden usar con clientes que solo admitan el protocolo BitTorrent v1. El desarrollo también está en marcha para admitir el protocolo WebTorrent [10] . La transición de SHA-1 en sí crea incompatibilidad en las redes DHT, rastreadores (que tiene una longitud de hash de información fija de 20 caracteres). Para no perder compatibilidad, en un principio puedes marcar tanto SHA-1 como SHA-256, reduciendo los 32 caracteres, incompatibles con el antiguo protocolo BitTorrent v1, SHA-256 a 20 caracteres [11] .

Notas

  1. Especificación de BitTorrent: Fin del juego
  2. HAL - INRIA:: [inria-00000156, versión 3] Comprender BitTorrent: una perspectiva experimental
  3. ¿Qué es DHT? // Preguntas frecuentes sobre torrents Archivado el 8 de julio de 2007.
  4. Descargar torrents sin cliente: Bitlet, Torrent2exe, httpTorrents . cosas de internet Archivado desde el original el 13 de diciembre de 2009.
  5. Especificación de siembra basada en HTTP (TXT)  (enlace descendente) . Consultado el 9 de mayo de 2006. Archivado desde el original el 22 de agosto de 2011.
  6. Cómo iniciar la distribución (usando el ejemplo del cliente µTorrent 1.8.3.)
  7. Ficha de BitTorrent (BTT) |  Tokenización del uso compartido de archivos descentralizado .
  8. Cómo hacer que BitTorrent sea seguro para usar sobre Tor
  9. Bittorrent sobre Tor no es una buena idea
  10. Lanzamiento de libtorrent 2.0 con soporte para el protocolo BitTorrent 2 . www.opennet.ru _ Fecha de acceso: 13 de noviembre de 2020.
  11. Bram Cohen. Propuesta de mejora de BitTorrent (BEP) - 0052 . bittorrent.org . Fecha de acceso: 13 de noviembre de 2020.

Enlaces