# Archivo torrent

Un archivo torrent almacena metadatos sobre archivos y carpetas que se van a distribuir y van a ser usados por un cliente de BitTorrent. Está definido en la especificación de BitTorrent. Simplemente, un torrent es información acerca de un archivo de destino, aunque no contiene información acerca del contenido del archivo. La única información que contiene el torrent es la localización de diferentes piezas del archivo de destino. Los torrents funcionan dividiendo el archivo de destino en pequeños fragmentos de información, localizados en un número ilimitado de hosts diferentes. Por medio de este método, los torrents son capaces de descargar archivos grandes rápidamente. Cuando un cliente (el receptor del archivo de destino) ha iniciado una descarga por torrent, los fragmentos del archivo de destino que son necesitados pueden ser encontrados fácilmente, basado en la información del torrent. Una vez que todos los fragmentos son descargados, el cliente puede ensamblarlos en una forma utilizable. Sin embargo, se debe contemplar que la descarga debe ser completada antes de que pueda ensamblarse en una forma utilizable.
Un archivo torrent contiene las URL de muchos trackers y la integridad de los metadatos de todos los fragmentos. También puede contener metadatos adicionales definidos en extensiones de la especificación de BitTorrent. Estos son conocidos como propuestas de mejora de BitTorrent. Ejemplos de tales propuestas incluyen metadatos para informar de quién ha creado el torrent y cuándo.
Los archivos torrent utilizan normalmente la extensión .torrent.

## Estructura del archivo

Un archivo torrent es un diccionario Bencode con las siguientes claves:
* announce - la URL del tracker
* info - esto crea un diccionario cuyas claves son independientes de si uno o más archivos son compartidos:
** name - directorio sugerido donde el o los archivos serán guardados
** piece length - número de bytes por pieza. Es comúnmente 2$^{18}$ = 256 KiB = 262,144 B.
** pieces - una lista de hash. Esto es la concatenación de cada hash SHA-1 de las piezas. Debido a que SHA-1 devuelve un hash de 160 bits, pieces será una cadena cuya longitud será un múltiplo de 160 bits.
** length - tamaño del archivo en bytes (solo cuando un archivo es compartido)
** files - una lista de diccionarios cada uno correspondiente a un archivo (solo cuando múltiples archivos son compartidos). Cada diccionario tiene las siguientes claves:
*** path - una lista de cadenas correspondientes a los nombres de los subdirectorios, el último de los cuales será el verdadero nombre del archivo
*** length - tamaño del archivo en bytes.
Todas las cadenas deben ser codificadas con UTF-8.

## Extensiones
### Extensiones borrador

Estas extensiones de la especificación BitTorrent están en consideración para estandarizarse. Los archivos torrent usan la extensión .torrent.

#### Tablas de hash distribuido

BEP-0005 extiende BitTorrent para soportar tablas de hash distribuido.
Un diccionario torrent sin trackers no tiene la clave announce. En lugar de eso, un torrent sin trackers tiene la clave nodes:
Por ejemplo,
La especificación recomienda que nodes "debería establecerse a los K nodos más cercanos en la tabla de ruta del cliente generada por el torrent. Alternativamente. la clave se podría establecer a un buen nodo conocido como uno operado por la persona que generó el torrent."

#### Múltiples trackers

BEP-0012 extiende el soporte de BitTorrent a múltiples trackers.
Una nueva clave, announce-list, es ubicada en la parte superior de la lista (por ejemplo con announce y info)

#### HTTP seeds

BEP-0017 extiende el soporte de BitTorrent a HTTP seeds.
Una nueva clave, httpseeds, es ubicada en la parte superior de la lista (por ejemplo con announce y info). El valor de esta clave es una lista de las direcciones web donde el torrent puede ser recuperado:

#### Torrents privados

BEP-0027 extiende el soporte de BitTorrent a torrents privados.
Una nueva clave, private, es ubicada en el diccionario de info. El valor de esta clave es 1 si el torrent es privado:

#### Hash trees

BEP-0030 extiende el soporte de BitTorrent a árboles de hash.
Un archivo torrent que use árboles hash no tiene la clave pieces en la lista info. En lugar de eso, tal archivo torrent tiene la clave root hash en la lista info. El valor de esta clave es el hash raíz del árbol de hash:

## Ejemplos
### Múltiples archivos

Así es como un archivo torrent sin Bencode (con piece length 256KiB = 262144) para dos archivos, 111.txt & 222.txt, podría verse: