Diferencia entre revisiones de «BitTorrent»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
JorgeGG (discusión · contribs.)
m Revertidos los cambios de 213.97.175.222 (disc.) a la última edición de AVBOT
Línea 32: Línea 32:
Según [[CacheLogic]],<ref>[http://www.cachelogic.com/home/pages/news/pr290805.php CacheLogic Announces eDonkey Has Become World's Largest P2P File Trading Network, Surpassing BitTorrent]</ref> durante el año 2005 BitTorrent se utilizaba especialmente en [[Asia]], mientras que [[eDonkey2000]] se prefería en [[Europa]] y [[América]].
Según [[CacheLogic]],<ref>[http://www.cachelogic.com/home/pages/news/pr290805.php CacheLogic Announces eDonkey Has Become World's Largest P2P File Trading Network, Surpassing BitTorrent]</ref> durante el año 2005 BitTorrent se utilizaba especialmente en [[Asia]], mientras que [[eDonkey2000]] se prefería en [[Europa]] y [[América]].


== Programas cliente ==
==

{{CP|Clientes BitTorrent}}

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

*De múltiples descargas simultáneas como [[Ares Galaxy]], [[Azureus]], [[BitComet]], [[KTorrent]], [[uTorrent|μTorrent]] o [[Transmission]].
*De descarga única (solo descarga un archivo .torrent, pero se pueden tener varios abiertos simultáneamente), como [[BitTornado]] o el [[Opera (navegador)|navegador Opera]].


== Estructura de una red Bittorrent ==
== Estructura de una red Bittorrent ==

Revisión del 13:10 3 nov 2009

BitTorrent es un protocolo diseñado para el intercambio de archivos punto a punto (peer to peer o P2P). El protocolo Bit Torrent fue desarrollado originalmente por el programador Bram Cohen y está basado en software libre.

Funcionamiento

BitTorrent reduce enormemente la carga en el servidor, ya que los usuarios generalmente descargan los archivos entre ellos, no del servidor. Como muestran las barras coloreadas debajo de cada cliente, el archivo es descargado en un orden aleatorio, en lugar de llevar un orden secuencial.

A diferencia de los sistemas de intercambio de ficheros tradicionales, su principal objetivo es el proporcionar una forma eficiente de distribuir un mismo fichero a un gran grupo de personas, forzando a todos los que descargan un fichero a compartirlo también con otros. Primero se distribuye por medios convencionales un pequeño fichero con extensión .torrent. Este fichero es estático, por lo que a menudo se encuentra en páginas web o incluso se distribuye por correo electrónico. El fichero 'torrent' contiene la dirección de un "servidor de búsqueda", el cual se encarga de localizar posibles fuentes con el fichero o parte de él.

Este servidor realmente se encuentra centralizado y provee estadísticas acerca del número de transferencias, el número de nodos con una copia completa del fichero y el número de nodos que poseen sólo una porción del mismo.

El fichero o colección de ficheros deseado es descargado de las fuentes encontradas por el servidor de búsqueda y, al mismo tiempo que se realiza la descarga, se comienza a subir las partes disponibles del fichero a otras fuentes, utilizando el ancho de banda asignado a ello. Ya que la acción de compartir comienza incluso antes de completar la descarga de un fichero, cada nodo inevitablemente contribuye a la distribución de dicho fichero. El sistema se encarga de premiar a quienes compartan más, a mayor ancho de banda mayor el número de conexiones a nodos de descarga que se establecerán.

Cuando un usuario comienza la descarga de un fichero, BitTorrent no necesariamente comienza por el principio del fichero, sino que se baja por partes al azar. Luego los usuarios se conectan entre sí para bajar el fichero. Si entre los usuarios conectados se dispone de cada parte del fichero completo (aún estando desparramado), finalmente todos obtendrán una copia completa de él. Por supuesto, inicialmente alguien debe poseer el fichero completo para comenzar el proceso. Este método produce importantes mejoras en la velocidad de transferencia cuando muchos usuarios se conectan para bajar un mismo fichero.

Cuando no existan ya más nodos con el fichero completo ("semillas" o "seeds") conectados al servidor de búsqueda, existe la posibilidad de que el fichero no pueda ser completado.

Creación y publicación de archivos “torrent”

Los archivos que se distribuyen entre los nodos, tratan al archivo como una separación del mismo en un cierto número de piezas dimensionadas idénticamente, normalmente de entre 32 KB y 4 MB cada una. Cada nodo realiza una suma de chequeo (checksum) para cada parte, usando el algoritmo SHA-1, y almacenándolo en el archivo torrent. Piezas mayores a 512 kB reducirá el tamaño de un archivo torrent para cada carga útil, pero esto reduciría la eficiencia del protocolo. Cuando otro nodo más adelante reciba una pieza en particular, se realiza la suma de chequeo de la pieza la cual es comparada con la suma de chequeo de esa pieza que está almacena, para comprobar que se encuentra libre de error. Los nodos que ofrecen un archivo completo son llamados semillas (seeders), y el nodo que ofrece la copia inicial del archivo es llamado semilla inicial (initial seeder).

La información exacta, que se encuentra contenida en el archivo torrent, depende de la versión del protocolo BitTorrent. Por convención, el nombre de un archivo torrent, tiene el sufijo “.torrent”. Los archivos torrent tiene una sección llamada “anuncio”, la cual especifica la URL de su servidor central, y una sección “información”, la cual contiene los nombres de los archivos, sus tamaños, longitud de piezas utilizadas, y el código hash SHA-1 por cada una de las piezas; toda esta información es usada por los clientes para verificar la integridad de los datos recibidos.

Una vez completados los archivos torrents, son publicados en algún sitio web o en otra parte, y son registrados con un servidor de origen al cual se le conoce como tracker, éste mantiene la lista de clientes que actualmente están participando sobre el archivo torrent. Alternativamente, en un sistema descentralizado, cada nodo actúa como un servidor de origen. Esto está siendo implementado por los clientes Cliente BitTorrent, µTorrent, BitComet, KTorrent y Deluge, a través de métodos de Tabla de Hash Distribuido (DHT). Azureus también soporta el método del trazabilidad de nodos que es incompatible (desde abril de 2007) con el DHT que ofrece a sus clientes.

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.

Programas cliente

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

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: 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.

                       

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.

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 B-Encoding. 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 representaLa 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:

o 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.

o 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.

o 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.

o Conjunto de peers. Cada peer mantiene una lista de los peers que conoce.

o 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.

o 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.

o 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.

El 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.


El Algoritmo de Bloqueo (Choke Algorithm)

Este algoritmo define la estrategia usada por el protocolo Bittorrent para seleccionar el siguiente peer con el que interactuar. Se usa para garantizar un buen ratio subida/bajada entre los peers. Por ejemplo los “free riders”, pares que nunca suben, deben ser penalizados. 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).

El Desbloqueo Optimista 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 en Bittorrent

Se considera que lo justo es subir la misma cantidad de datos que se ha bajado, es decir que el ratio Upload/Download=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 de 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 comporta que nuevos peers no puedan conectarse y que aquéllos 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. 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.

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 que vamos a ver con cierto detalle a continuación.

  • 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”. Hasta que 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.

Véase también

Referencias

Enlaces externos