¿Cómo funciona Bittorrent?

34

Quiero aprender más sobre la forma de compartir archivos bittorrent. Soy un usuario técnicamente avanzado (programador), por lo que el material técnicamente avanzado no es un problema, pero debe ser conciso y al grano. Necesito un buen libro de recursos / web que explique la arquitectura general de bittorrent.

No me interesan los detalles, solo la arquitectura general y la terminología como semillas, pares, etc.

¿Alguna sugerencia?

explorest
fuente

Respuestas:

29

Descripción general de cómo funciona bittorrent:

  • Tienes compañeros y un rastreador . Todos los compañeros juntos en cualquier momento son el enjambre . La situación habitual es que uno o algunos pares tienen el conjunto de archivos completo y desean que esté disponible para otros pares.

  • Un par adquiere un archivo .torrent, que tendrá entre otras cosas A) el hash SHA-1 del conjunto de archivos, B) la URL del rastreador y C) la cantidad de partes en las que se divide el archivo, así como un hash SHA-1 de cada pieza. El tamaño de las piezas está determinado por el torrente mismo.

  • El par luego se conecta al rastreador utilizando la URL especificada en el torrente. El rastreador responde con una lista de compañeros. Los rastreadores hablan HTTP a través del puerto 80 o 443.

  • El par luego selecciona a otro par, utilizando la información del rastreador, y lo contacta directamente para establecer una sesión de intercambio, intentando obtener una pieza. Tenga en cuenta que las sesiones de intercambio las realizan directamente los pares y el rastreador NO participa en la transferencia. El rastreador solo proporciona información.

  • Una vez que el par tiene una pieza, la verifica contra el hash SHA-1 y la escribe en el archivo. Luego puede ofrecer esa pieza al seleccionar otro par. Las sesiones de intercambio posteriores implican piezas "comerciales". Creo que los compañeros generalmente solo te darán la primera pieza si no tienes otras piezas.

  • El par vuelve a consultar al rastreador de vez en cuando para obtener una lista actualizada de pares. El par no tiene que esperar a que termine un intercambio antes de comenzar otro si tiene varias piezas, por lo que una vez que tiene un montón de piezas, la transferencia realmente puede acelerarse. Esta es la razón por la cual los torrentes comienzan lentamente pero ganan velocidad rápidamente a medida que el compañero adquiere piezas.

  • Cuando un par tiene todas las piezas, se verifica todo el archivo contra el hash SHA-1 del conjunto de archivos. Luego, se convierte en una sembradora , y ahora no hace nada más que ayudar al conjunto de archivos a estar más disponible. Los compañeros que no tienen todas las piezas son leechers .

  • Si un torrent no tiene semillas, está muerto, aunque si existe una copia completa del archivo entre todas las piezas en poder de todos los pares, eventualmente intercambiarán para obtener una copia completa entre ellos.

  • El hash SHA-1 es cómo el rastreador y sus compañeros "saben" qué archivo se supone que está lleno. Los nombres de archivo en el torrent no se utilizan para identificar los datos. Las piezas que no se verifican contra los hases en el archivo .torrent se tiran. Los pares que envían piezas malas continuamente son rechazados por otros pares y eventualmente no podrán conectarse con nadie en el enjambre.

  • Un tamaño de pieza más pequeño significa que el torrent es más robusto ya que los pares pueden intercambiar piezas más rápido, pero también significa que se deben enumerar más hashes de piezas en el archivo .torrent y, por lo tanto, el archivo .torrent puede ser grande.

  • Si está publicando algo a través de BitTorrent, es mejor sembrar el archivo siempre que desee que esté disponible. Otros pares lo ayudarán, ya que la mayoría del software BitTorrent implementa algoritmos que favorecen tratar de distribuir las cosas entre tantos pares como sea posible para maximizar las conexiones concurrentes. De esta manera, BitTorrent puede ayudarlo a publicar cosas y ahorrar costos de ancho de banda.

LawrenceC
fuente
1
Una hermosa respuesta! Una broma: creo que las semillas prefieren las semillas más raras , no las primeras piezas primero. No estoy seguro de si esto es algo de algoritmo, pero eso es lo que obtuve de un programa de torrent una vez al jugar con la configuración.
Gallifreyan
8

Hay un video bastante agradable en YouTube que explica esto de una manera visual con recortes de cartón. No es una explicación altamente técnica, pero es excelente para explicar la idea detrás de BitTorrent a las personas de una manera simple y comprensible.

como funciona bittorrent en youtube

nhinkle
fuente
3
+1 Video útil. Se lo mostré a mi papá. No tuvo preguntas después. Asombroso. :)
zero2cx
2

Una descripción general del protocolo de mensajes de pares .

El cliente puede usar dos protocolos para compartir información con sus pares, TCP o uTP (a través de UDP). Estos datos siguen la especificación del protocolo bittorrent , sección mensajes par .

Entonces, programáticamente, debe comenzar una conexión entre dos clientes. Después de que se establece la conexión (a través de TCP o uTP), el cliente inicia un protocolo de enlace de bittorrent que toma la información remota de pares (ip y puerto) del rastreador o DHT . Este apretón de manos contiene el info_hash que identifica el torrente del que se tratará esta conexión.

Veamos primero cómo se truncan los datos de Torrent a través del protocolo. Una pieza es parte de los datos que comparte a través de la red. No debe confundirse con un bloque , que es una sección de una pieza envuelta en un paquete. El bloque es la granularidad para compartir una pieza a través de paquetes, y una pieza es la granularidad para compartir un Torrent a través de pares.

Cuando se inicia la conexión, ambos clientes (cliente local, que llamaré LC y cliente remoto, RC ) están bloqueados y sin interés . Ahogado significa "No responderé ninguno de sus mensajes, demasiado ocupado, pero podría tenerlos en cuenta". Desbloqueado, por lo tanto, significa "Contestaré sus mensajes". Interesado significa, por supuesto, que me gustaría algunas piezas que tengas. Por lo tanto, el estado de una conexión entre dos pares podría definirse con esos cuatro estados: LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested? Para advertir a RC que estoy (no) bloqueado o (no) interesado, Tengo que enviarle mensajes (no) interesados y (no) bloqueados , y recíprocamente.

Para informarse mutuamente qué piezas tienen, pueden enviar un mensaje de campo de bits justo después del apretón de manos. Como su nombre lo indica, es una cadena de bits donde cada bit se establece 1si el cliente tiene esta pieza peculiar , de lo 0contrario.

Entonces, si LC está bloqueado e interesado y RC lo ha desbloqueado , entonces puede enviar mensajes de solicitud para solicitar un bloque perteneciente a una pieza que sabe que LC tiene gracias al mensaje de campo de bits .

Cuando un par ha recibido la pieza completa , puede enviar un mensaje de pieza para informar a todos sus pares remotos para que actualicen el campo de bits asociado que están sosteniendo.

Esa es una descripción muy básica y, por supuesto, no se proporcionan todos los detalles aquí, como el algoritmo de asfixia, etc. no tiene más de dos enlaces dentro de una publicación).

Jules Randolph
fuente