BitTorrent (protocolo)

BitTorrent (protocolo)
Para otros usos de este término, véase BitTorrent.

BitTorrent es un protocolo diseñado para el intercambio de ficheros de igual a igual (en inglés: peer-to-peer o P2P). El protocolo BitTorrent fue desarrollado originalmente por el programador Bram Cohen y está basado en software libre.

Contenido

BitTorrent en comparación con otras redes P2P

El método utilizado por BitTorrent para distribuir archivos es similar en muchos aspectos al utilizado por la red eDonkey 2000, pero generalmente los nodos en esta red comparten y bajan mayores cantidades de ficheros, reduciendo el ancho de banda disponible para cada transferencia. Las transferencias en BitTorrent son normalmente muy rápidas ya que todos los nodos en un grupo se concentran en transferir un solo fichero o una colección de los mismos. Además el protocolo eDonkey2000 no premia a aquellos usuarios que comparten un mayor ancho de banda. Sin embargo, hay que aclarar que el cliente más extendido para la red eDonkey, el eMule, sí incorpora un sistema de créditos para recompensar a los que más comparten.

Al contrario que otras redes de intercambio, BitTorrent no incluye ningún mecanismo de búsqueda de archivos. Los usuarios de BitTorrent deberán localizar por sus propios medios los archivos torrent que necesita el protocolo. Normalmente, estos archivos pueden descargarse desde las páginas web que publican grandes archivos (como las distribuciones GNU/Linux) o desde índices web de búsqueda (como The Pirate Bay, Ktorrents o Bitgle).

BitTorrent fue programado originalmente en Python aunque hoy en día se pueden encontrar clientes escritos en C o en Java por ejemplo.

Según CacheLogic,[1] durante el año 2005 BitTorrent se utilizaba especialmente en Asia, mientras que eDonkey2000 se prefería en Europa y América. Por otro lado Estados Unidos prefería el medio tradicional del papel.

Programas cliente

Categoría principal: Clientes BitTorrent

Los clientes de BitTorrent se pueden encontrar de dos tipos distintos:

  • De múltiples descargas simultáneas como Vuze, BitComet, KTorrent, μTorrent o Transmission.
  • De descarga única (solo descarga un archivo .torrent, pero se pueden tener varios abiertos simultáneamente), como BitTornado o el navegador Opera.

Estructura de una red BitTorrent

Una red en Bittorrent está formada por:

  • Peers (pares): Se denomina así a todos los usuarios que están en la red.
  • Leechers (sanguijuelas): Se denomina así a todos los usuarios que están en la red descargando el archivo pero que todavía no tienen el archivo completo.
  • Seeds (semillas): Son los usuarios de la red que poseen el archivo completo. Sólo suben partes a los demás peers, pero no bajan nada.
  • Tracker: Un tracker de BitTorrent es un servidor especial que contiene la información necesaria para que los peers se conecten unos con otros. Inicialmente es la única forma de localizar qué usuarios contienen el archivo que se quiere descargar.
  • Enjambre: El enjambre son los usuarios en general que el tracker se encarga de buscar. El nombre es debido a la similitud con las abejas y su comportamiento; en esta analogía, el tracker es el panal de abejas, el enjambre de abejas son los usuarios y la miel es el torrent con el contenido.
Red bittorrent.jpg

Mecánica del funcionamiento:

  1. Un usuario baja de un servidor web un archivo .torrent que contiene la información del fichero que queremos descargar. Entre otra mucha información contiene la dirección del tracker al que nos tenemos que conectar para unirnos al enjambre de peers (el .torrent generalmente es un archivo muy pequeño, de unos pocos kilobytes).
  2. Este archivo .torrent se abre con algún "programa cliente", que sabe interpretar dicha información. Existen multitud de clientes gratuitos que se pueden utilizar. Entre los más populares están μtorrent, Bitcomet, Vuze (anteriormente Azureus). Todos están basados en el protocolo BitTorrent original pero algunos de ellos incluyen mejoras al protocolo.
  3. El tracker y el peer se comunican a través de una 'conexión HTTP'. El tracker informa de la lista de todos los peers y seeds que contienen partes del archivo que queremos descargar. El tracker se actualiza con la información del nuevo peer que acaba de ingresar.
  4. Una vez que el peer sabe dónde tiene que buscar las partes necesarias, este peer se comunica con otros mediante 'sockets TCP' o 'UDP' y el archivo empieza a descargarse en el ordenador del usuario. Cada parte descargada se comparte automáticamente con otros peers.

Archivos .torrent y su codificación interna

Los archivos .torrent contienen información acerca del archivo que queremos bajar. Esta información está codificada mediante Bencoding. La siguiente tabla muestra los distintos tipos de datos que podemos usar para representar la metainformación contenida en el arhivo .torrent.

Strings Cadenas de Caracteres <longitud de la cadena>:<cadena> 3:red Representa la cadena “red”

Integers Enteros i<entero>e i3e Representa 3.

Lists Lista de tipos [strings, integers, lists, dictionaries] l<bencoded type>e l3:red4:wifie representa la lista de 2 cadenas: ["red", "wifi"]

Dictionaries Son asociaciones de clave -> valor d<bencoded string><bencoded element>e d3:ana4:blas5:mujer6:hombree representa el diccionario { "ana" -> "mujer", "blas" -> "hombre" } d4:spaml1:a1:bee representa el diccionario { "spam" -> [ "a", "b" ] }

Si abrimos con un editor de texto un archivo .torrent nos encontramos con un diccionario que contiene las siguientes claves:

  • info: Un diccionario que describe los archivos del torrent. Puede tener una u otra estructura dependiendo de si el torrent es para bajar un archivo o varios archivos con una jerarquía de directorios.
  • announce: cadena que representa la URL del tracker
  • announce-list: (lista de cadenas opcional). Se usa para representar listas de trackers alternativos. Es una extensión a la especificación original.
  • creation date: (entero opcional) La fecha de creación del torrent en formato de época UNIX.
  • comment: (cadena opcional) Campo libre para el creador del torrent.
  • created by: (cadena opcional) Nombre y versión del programa usado para crear el archivo torrent.

El diccionario info que acabamos de citar contiene a su vez las siguientes claves:

  • name: (cadena) El nombre del archivo o directorio donde se almacenarán los archivos.
  • piece length: Como dijimos en la introducción, el archivo que queremos compartir es dividido en piezas. Este parámetro es un entero que representa el número de bytes de cada pieza. Piezas demasiado grandes causan ineficiencia y piezas demasiado pequeñas forman un archivo .torrent más pesado. Actualmente se aconseja fijar el tamaño de cada pieza en 512 KB o menos para archivos de varios GBs.
  • pieces: Cadena que representa la concatenación de la lista de claves hash de cada parte del fichero compartido. Las claves hash son generadas utilizando SHA-1 con un resumen de 160 bits y un tamaño máximo por parte de 2^64 bits. Este conjunto de claves se utiliza como mecanismo para asegurar la integridad y consistencia de una parte, una vez ha sido completada la descarga de dicha parte.
  • private: (opcional). Es un entero que puede tener valores 0 ó 1 y que indica si se pueden buscar peers fuera de los trackers explícitamente descritos en la metainformación o no.
  • length: (entero) Longitud del archivo en bytes.
  • md5sum: (cadena opcional). Es una cadena hexadecimal de 32 caracteres correspondiente a la suma MD5 del archivo.
  • files: Sólo aparecerá en el caso de que sea un torrent multi archivo. Es una lista de diccionarios (uno para cada archivo, pero con una estructura diferente a info). Cada uno de estos diccionarios contendrá a su vez información sobre la longitud del archivo, la suma MD5 y una ruta (path) en donde debe ubicarse el archivo en la jerarquía de directorios.

Algoritmos: selección de piezas y selección de pares

En esta sección se van a explicar detalladamente las reglas según las cuales se elige a uno u otro usuario para compartir partes del archivo y qué partes son las que se transmiten.

En primer lugar vamos a describir unos cuántos términos importantes:

  • Piezas y bloques. Los archivos transmitidos usando Bittorrent se dividen en piezas y éstas a su vez se dividen en bloques. Los bloques son la unidad de transmisión en la red, pero las piezas parcialmente recibidas no pueden ser servidas por un peer hasta que estén completas, es decir que se tengan todos sus bloques.
  • Interested. Se dice que un peer A está interesado en el peer B (A está en el estado Interested) cuando el peer B tiene piezas que el peer A no tiene. Por el contrario, el peer A no está interesado en el peer B cuando el peer B solo tiene un subconjunto de las piezas del peer A.
  • Choked. Se dice que el peer A bloquea al peer B (B está en el estado Choked) cuando el peer A decide no enviar piezas al peer B. Por el contrario, se dice que el peer A desbloquea al peer B cuando el peer A decide enviar piezas al peer B.
  • Conjunto de peers. Cada peer mantiene una lista de los peers que conoce.
  • Peers locales y remotos. Se llama peer local al par que está ejecutando el cliente bittorrent y peers remotos a los pares que están en el conjunto de peers del peer local.
  • Conjunto de peers activos. El peer A sólo puede enviar datos a un subconjunto de su conjunto de peers. A este conjunto se le llama conjunto de peers activos. El algoritmo de bloqueo , que veremos más adelante, determina los peers que formarán parte del conjunto de peers activos. Solamente los peers que están desbloqueados por el peer local e interesados en él son parte del conjunto de peers activos.
  • Piezas más raras y conjunto de las piezás más raras. Las piezas más raras son las que tienen menos número de copias en el conjunto de peers. En el caso de que la pieza menos replicada en el conjunto de peers tenga m copias, entonces todas las piezas con m copias forman el conjunto de las piezas más raras.

Algoritmo de “las piezas más raras primero” (rarest first algorithm)

Este algoritmo define la estrategia usada por el protocolo Bittorrent para seleccionar la siguiente pieza a descargar. Cada par mantiene una lista del número de copias de cada pieza en su conjunto de pares y usa esta información para definir su conjunto de las piezas más raras. Sea m el número de copias de la pieza más rara, entonces la posición de cada pieza con m copias en el conjunto de peers es añadida al conjunto de las piezas más raras. Cada peer selecciona aleatoriamente la siguiente pieza para bajar de su conjunto de las piezas más raras.

El comportamiento de este algoritmo puede ser modificado por 3 causas:

  1. Si un peer ha bajado menos de 4 piezas, éste elige aleatoriamente la próxima pieza para bajar. Una vez que se han descargado estas 4 piezas, el algoritmo funciona de la manera descrita anteriormente. La razón de este comportamiento inicial es permitir que un peer baje sus primeras piezas muy rápidamente, ya que es importante tener algunas piezas para empezar a intercambiar en el Algoritmo de Bloqueo. De hecho, una pieza elegida aleatoriamente tiene muchas más copias que las piezas más raras, así que probablemente el tiempo de bajada será menor seleccionándola aleatoriamente.
  2. La segunda causa es que cuando uno de los bloques de una pieza se ha pedido, los otros bloques de la misma pieza se piden con la prioridad más alta. La razón de este comportamiento es completar la descarga de una pieza completa lo antes posible, dado que sólo las piezas completas pueden ser enviadas.
  3. La última causa es el modo de fin de juego (End Game Mode). Este modo empieza muy al final de la descarga, cuando el peer pide todos los bloques que todavía no han sido recibidos a todos los peers de su conjunto de peers que tienen esos bloques. Cada vez que se recibe un bloque, el peer cancela la petición para el bloque recibido a todos los peers en su conjunto de peers que tienen la petición activa.

Algoritmo de bloqueo (choke algorithm)

Este algoritmo define la estrategia usada por el protocolo BitTorrent para seleccionar el siguiente peer con el que va a interactuar. Se usa para garantizar una buena relación subida/bajada entre los peers. Por ejemplo los “free riders”, pares que nunca suben, deben penalizarse. El algoritmo se describe desde el punto de vista del peer local, así que “interesado” significa interesado en el peer local y “bloqueado” significa bloqueado por el peer local. El algoritmo funciona así:

  1. Como máximo 4 peers remotos pueden estar desbloqueados e interesados a la vez.
  2. Cada 10 segundos, los peers remotos interesados se ordenan de acuerdo a su velocidad de bajada hacia el peer local y los 3 más rápidos son desbloqueados.
  3. Cada 30 segundos, un peer interesado adicional se desbloquea aleatoriamente. Esto se llama “Desbloqueo Optimista” (Optimistic Unchoke), que tiene dos objetivos: permite evaluar la capacidad de bajada de nuevos peers en el conjunto de peers y también posibilita que los peers que no tienen ninguna pieza que compartir puedan obtener su primera pieza.

Limitaciones y ataques

Se considera que lo justo es subir la misma cantidad de datos que se ha bajado, es decir que la tasa de descarga/subida sea de 1, pero este comportamiento no es común ni está garantizado en BitTorrent. Normalmente los usuarios se desconectan rápidamente una vez que han obtenido la copia completa de su archivo. Esto se denomina leeching.

Esta forma de actuar provoca que aunque todo el contenido nuevo se comparta al principio muy rápidamente, con el paso de los días el torrent caduque porque no quedan semillas, ya que BitTorrent sólo ofrece incentivos a los leechers pero no a los seeds que no obtienen ninguna ventaja por permanecer subiendo a la red.

Para evitar esto han aparecido los denominados trackers privados. Normalmente para usar un tracker privado hay que identificarse previamente. Para cada usuario registrado guardan las estadísticas de tráfico y utilizan un sistema de porcentajes que permite saber si el usuario comparte o no los datos que haya descargado o esté descargando. Muchos de estos trackers suelen expulsar a los usuarios que tienen un porcentaje bajo, ya que al no compartir no colaboran con la red.

Otro punto flaco es que el tracker es un cuello de botella ya que consume el 1 por mil del tráfico total de la red. Teniendo en cuenta la cantidad de datos que circulan en una red de este tipo, es un porcentaje a tener en cuenta. Además, la caída del tracker implica que nuevos peers no se puedan conectar y que aquellos que ya están conectados no puedan descubrir otros. Conceptualmente se forman pequeñas islas desorganizadas, donde en realidad todos los nodos están conectados entre sí a través de vecinos pero no hay comunicación entre esas islas (la comunicación entre ellas la gestionaba el tracker) y por tanto influye muy negativamente en la descarga.

Una debilidad más de BitTorrent es que es poco eficiente en transferencias de archivos pequeños (unos cuantos kb) ya que el ancho de banda usado en mensajes del protocolo es comparativamente alto.

Al contrario que otros famosos programas P2P como Kazaa o Emule, los clientes Bittorrent carecen de alguna utilidad de búsqueda de contenidos. Los archivos .torrent se suelen bajar de páginas web donde se suelen indexar las novedades o bien existen buscadores de torrents como mininova.org o The Pirate Bay, este método garantiza que se esté descargando el fichero correcto. Recientemente la justicia sueca ha condenado a los webmasters de The Pirate Bay a multas y penas de cárcel por colaboración en la distribución de archivos con copyright, a pesar de que los contenidos en sí no están albergados en sus servidores.

Por otra parte, BitTorrent tiene un protocolo considerado de los de modelo económico. Es inocente, no está preparado para clientes maliciosos, y por tanto el protocolo no presenta soluciones para posibles ataques a través de este tipo de clientes.

A continuación vamos a ver algunos ejemplos de estos ataques:

  • Denegación de servicio a través de un ataque Sybil

Cada peer genera un único identificador al comienzo mediante un hash de su dirección IP y la hora. Si un peer generara múltiples identificadores podría ocurrir que el conjunto de peers activos de los otros peers de la red sólo estuviera formado por multitud de identificadores falsos del mismo peer atacante, y de esta manera sólo se servirían datos a él.

  • Ataque de “Sólo a semillas”

Un peer tiene que subir a los otros peers si quiere formar parte de su conjunto de peers activos. Si un peer sólo se conecta a seeds, podría bajarse el archivo entero sin necesidad de haber compartido ni una sola pieza.

  • Ataque de “Subida corrupta”

Bittorrent verifica la integridad de la pieza una vez descargada comparando su código hash con el que aparecía en la metainformación del torrent. Cuando un peer pide un bloque a un peer malicioso, éste puede decir que lo tiene aunque en realidad no sea así. Lo que le envía es basura, aunque el otro peer no se da cuenta hasta que le ha llegado la pieza entera y vuelve a pedir el bloque. Aunque se le están enviando datos corruptos, la tasas de subida sí son actualizadas y el peer malicioso puede mantenerse en la lista de peers preferidos.

Los clientes BitTorrent actuales cuando reciben varios bloques corruptos de un mismo cliente añaden su dirección IP a una lista de usuarios bloqueados y de esta forma solucionan este problema.

Mejoras al protocolo

El protocolo Bittorrent es susceptible de ser mejorado, por lo que algunos clientes han incorporado diversas modificaciones como DHT, Web Seeding y Super Seeding:

DHT

Si el tracker cae, dependemos de los pares a los que estemos conectados para poder finalizar una descarga. No siempre se consigue puesto que es necesario que no se desconecten y que entre todos tengan el archivo completo.

El DHT (Distritbued Hash Table) es una extensión oficial al protocolo de Bittorrent. Consiste en que cada nodo de la red conserva información de los nodos vecinos. De esta forma se evita el cuello de botella del tracker del que hemos hablado antes, ya que si el tracker cae la totalidad de la información de los peers está todavía disponible en los propios peers.

Se puede considerar como una descentralización del protocolo, aunque todavía no es completa porque todavía se depende del tracker para bajarse el .torrent y empezar a conocer los primeros nodos.

El uso del DHT y la comunicación entre nodos sin el paso por el tracker comporta una independencia del nodo que a veces puede no interesar, como en el caso de los trackers privados, donde se suelen aplicar ciertas restricciones al usuario según sus estadísticas y donde es requisito común el estar registrado (como mínimo) para poder entrar en la red.

Debido a esto, y para evitar que los administradores de los trackers privados banearan a los usuarios de clientes con DHT activado, se ha añadido la posibilidad de establecer un nuevo parámetro en el archivo .torrent llamado “Private Flag”. Cuando el cliente lee esta opción automáticamente desactiva el DHT para esa descarga. Este tipo de parámetro es compatible con todos los clientes. Así si uno no implementa DHT lo omitirá sin más.

Web Seeding

En muchas ocasiones en una misma página web aparecen enlaces HTTP o FTP además del archivo .torrent como posibles alternativas para bajar un archivo. La idea de Web seeding es combinar la potencia de la descarga directa del servidor con la del P2P. De esta manera siempre habría como mínimo una semilla completa de la que descargar inicialmente. El primer cliente en incluir esta mejora fue BitTornado.

Super Seeding

La supercompartición — en inglés superseeding (Vuze) o initial seeding (µtorrent) — sirve para que el primer seed que sube un nuevo archivo pueda reducir el número de piezas que tiene que subir para crear las primeras semillas y para que los peers que lo están bajando lo puedan hacer más rápidamente.

Cuando un seed “A” entra a un enjambre en modo super seeding, no aparece en el enjambre como una semilla normal con el 100% del archivo sino que se oculta como un leecher normal que no tiene ningún dato. A medida que otros peers entran en el enjambre, el superseeder (el peer disfrazado) les manda un mensaje de que tiene una nueva pieza — una pieza que en realidad nunca ha sido enviada. Esto hará que el peer “B” del enjambre pida solamente ese trozo.

Cuando el peer “B” termina de descargar aquella pieza, el seed "A" no le comunicará que tiene otras piezas para enviar hasta que vea que la primera pieza que le envió a "B" haya sido compartida con al menos otro peer “C”. Mientras eso no pase, el peer “B” no tendrá acceso a ninguna de las demás piezas de la semilla “A”, y así “A” no desperdiciará su ancho de banda de subida teniendo que volver a enviar piezas que ya ha enviado.

Buscadores de archivos torrent

Debido a la gran proliferación de este tipo de descargas P2P, han aparecido en la red motores de búsqueda personalizados y especializados en encontrar archivos torrent alojados en servidores como The Pirate Bay, BTJunkie u otros.

Véase también

Referencias

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Mira otros diccionarios:

  • BitTorrent — es un protocolo diseñado para el intercambio de ficheros entre pares (peer to peer o P2P) creada por el programador estadounidense Bram Cohen y que se estrenó en la Codecon 2002. Está escrita en Python y está publicada bajo la licencia MIT …   Enciclopedia Universal

  • BitTorrent — La palabra BitTorrent puede referirse a: Protocolo BitTorrent, un protocolo P2P que permite a distintos ordenadores compartir ficheros a través de una red. Cliente BitTorrent, un programa de ordenador que implementa el protocolo. BitTorrent, Inc …   Wikipedia Español

  • BitTorrent (programa) — Para otros usos de este término, véase BitTorrent. Este artículo trata sobre el cliente BitTorrent original. Para clientes BitTorrent en general, véase Anexo:Clientes BitTorrent. BitTorrent Desarrollador BitTorrent, Inc. www.bi …   Wikipedia Español

  • Clientes BitTorrent — Anexo:Clientes BitTorrent Saltar a navegación, búsqueda Para otros usos de este término, véase BitTorrent. Un cliente BitTorrent es un programa o aplicación de computadora que permite a un usuario establecer una conexión tipo P2P para descargar… …   Wikipedia Español

  • Anexo:Clientes BitTorrent — Para otros usos de este término, véase BitTorrent. Un cliente BitTorrent es un programa o aplicación de computadora que permite a un usuario establecer una conexión tipo P2P para descargar ficheros que otros usuarios (de la misma red de archivos) …   Wikipedia Español

  • Transmission (BitTorrent) — Transmission Transmission 1.75 …   Wikipedia Español

  • Tracker (BitTorrent) — Un tracker o rastreador de BitTorrent es un servidor especial que contiene la información necesaria para que los peers se conecten con otros peers asistiendo la comunicación entre ellos usando el protocolo BitTorrent. Los rastreadores son el… …   Wikipedia Español

  • Vuze — 4.1 Desarrollador …   Wikipedia Español

  • ΜTorrent — Saltar a navegación, búsqueda µTorrent Desarrollador BitTorrent, Inc. www.utorrent.com Información general …   Wikipedia Español

  • Zeno Clash — Desarrolladora(s) ACE Team …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”