Colección de citas famosas - Slogan de motivación - * * *¿Por qué BT necesita mapeo de puertos pero el navegador no?

* * *¿Por qué BT necesita mapeo de puertos pero el navegador no?

Diferentes protocolos

Explicación detallada del protocolo BitTorrent

BitTrrent (BT para abreviar) es un protocolo de distribución de archivos que identifica contenido a través de URL y se integra perfectamente con la red. Su ventaja sobre la plataforma HTTP es que los descargadores de un archivo se cargan datos entre sí durante la descarga, de modo que la fuente del archivo puede admitir la descarga de una gran cantidad de descargadores al mismo tiempo con un aumento de carga limitado.

La distribución de archivos BT requiere las siguientes entidades:

Servidor de red ordinario

Archivo de metainformación estático

Rastreador BT

Descargador "original"

Explorador de terminal de red

Descargador de terminal de red

Supongamos que, en una situación ideal, hay varios descargadores para un archivo.

Los pasos para configurar el servidor BT son los siguientes:

1. Comience a ejecutar Tracker (omita este paso si ya se está ejecutando). Comience a ejecutar una red normal. Si el programa del lado del servidor, como Apache, ya se está ejecutando, omita este paso;

3. Un archivo torrent con aplicación tipo mime/x-BitTorrent en el servidor web (omita este paso si es relevante

4. Cree un archivo de metainformación (archivo .torrent) y el archivo completo para publicarlo; URL del rastreador

5. Coloque el archivo de metainformación en el servidor de red;

6. archivo torrent);

7. El descargador original proporciona el archivo completo (original).

Los pasos para descargar a través de BT son los siguientes:

1. Instale el programa cliente de BT (omita este paso si ya está instalado); . Conéctese en línea;

3. Haga clic en el enlace. Archivo torrent;

4. Seleccione la ruta de almacenamiento local y seleccione el archivo para descargar (para usuarios del cliente BT con función de descarga selectiva);

5.

p>

6. El usuario sale de la descarga (el programa de descarga no dejó de cargar antes).

El estado de la conexión es el siguiente:

El sitio web proporciona conexiones de archivos estáticos normalmente y el programa BT se inicia en el cliente;

Tracker recibe toda la información del descargador inmediatamente y proporciona una lista aleatoria de pares por descargador. Implementado a través del protocolo HTTP o HTTPS;

El descargador se conecta a Tracher de vez en cuando, le informa del progreso y carga y descarga datos con aquellos pares conectados directamente. Estas conexiones siguen el protocolo peer-to-peer de BitTorrent y se comunican a través del protocolo TCP.

El descargador original solo carga pero no descarga. Es propietario de todo el archivo, por lo que es necesario transferir todas las partes del archivo a la red. En algunas descargas populares, el descargador original a menudo puede dejar de cargar en un corto período de tiempo, y otros descargadores que han descargado el archivo completo continuarán cargando.

Los archivos de metainformación y la información de respuesta del rastreador se transmiten en un formato simple, eficiente y escalable (Bencoding). La información de bEncoding está anidada en diccionarios y listas que contienen datos de cadenas y números enteros (como en Python). La extensibilidad significa que se pueden agregar nuevas funciones reduciendo la cantidad de valores clave que el diccionario ignora.

bLas reglas de codificación son las siguientes:

Las cadenas se representan como números decimales, con la longitud de cadena dada seguida de dos puntos.

Por ejemplo, 4: spam equivale a ‘spam’.

Los datos enteros se representan sumando 'I' al frente, 'e' al final y un decimal en el medio. Por ejemplo, i3e es equivalente a 3 e i-3e es -3. Los datos enteros no tienen límite de longitud. I-0e no es válido. Todo lo que comience con 'i0' no es válido, excepto i0e, que representa 0.

Una lista se codifica con 'l', seguida de los elementos que contiene (codificados) y finalmente con 'e', ​​por ejemplo L4: spam4: huevos es igual a ['spam', 'huevos'. ].

El diccionario está codificado como "d", seguido de una lista de claves opcionales y sus valores correspondientes, y se agrega una "e" al final.

Por ejemplo, d3:cow3:moo4:spam4:eggse es equivalente a {'cow': 'moo ', 'spam': 'eggs'}

D4:spaml1: a1:bee Equivalente a {'spam': ['a ', ' b']}

El valor clave debe ser una cadena procesada (codificada con la cadena original, no mezclada con números y letras).

El archivo de metainformación es un diccionario que contiene los siguientes valores clave codificados por B:

Anuncio (declaración)

La URL del seguidor.

Información (información)

El valor clave corresponde a un diccionario que contiene los siguientes valores clave:

El nombre del valor clave corresponde a una cadena que representa El nombre del directorio para descargar o guardar de forma predeterminada. Esto es puramente un consejo.

La longitud del bloque de claves corresponde al número de bytes en bloques en los que se divide el archivo. Para la transferencia, el archivo se divide en fragmentos del mismo tamaño, excepto que el último fragmento suele ser más pequeño. En términos generales, la longitud del bloque es el peso de 2 y la mayoría supone que la longitud del bloque es 256 K (2 es la potencia 18).

Los bloques clave-valor corresponden a cadenas cuya longitud es múltiplo de 20. Se puede subdividir en varias cadenas, cada una de 20 bytes en un segmento, correspondiente al código de verificación SHA1 (hash) del bloque en el índice.

También hay valores clave de longitud y archivos, que no pueden aparecer al mismo tiempo o ambos. Cuando aparece la longitud, significa que este archivo de metainformación es solo una descarga de un solo archivo; de lo contrario, significa que es una descarga de una estructura de directorio de varios archivos.

En el caso de un solo archivo, la longitud corresponde al número de bytes de la longitud del archivo.

La situación de varios archivos se considera como la descarga de varios archivos individuales en un archivo grande en el orden de la lista de archivos. Los archivos de valores clave corresponden a la lista de archivos. donde cada diccionario contiene las siguientes claves:

Longitud (longitud)

El número de bytes de la longitud del archivo.

Ruta (ruta)

Contiene una lista de cadenas, donde la cadena es el nombre del subdirectorio y la última cadena es el nombre del archivo.

Una forma de longitud de longitud cero es incorrecta. )

En el caso de un solo archivo, el nombre de la clave es el nombre del archivo; en el caso de varios archivos, se convierte en el nombre del directorio.

El problema del acosador es bidireccional. Tracker obtiene información a través de parámetros HTTP GET y luego devuelve información codificada en B. Aunque Tracker debe ejecutarse en el lado del servidor, funciona sin problemas, como un módulo de Apache.

La solicitud GET del rastreador es similar a un valor clave:

Hash de información

El código de verificación SHA1 de 20 bytes proviene del archivo de metainformación codificado en B valor de información, el archivo de metainformación codificado en B es una rama del archivo de metainformación. El valor se convierte automáticamente.

ID de par

Una cadena de 20 bytes que es un ID generado aleatoriamente para cada usuario cuando inicia una descarga. El valor también se convierte automáticamente.

Protocolo de Internet (abreviatura de Protocolo de Internet)

Un parámetro opcional proporciona la IP (o nombre de host DNS) del par, que suele ser la misma computadora que el Tracker original. Se obtiene el descargador en la máquina para distribuir los archivos.

Puerto

En cuanto al puerto de escucha, el valor predeterminado oficial es comenzar desde el puerto 6881. Si el puerto está ocupado, retroceda un puerto por turno y busque un puerto libre hasta el puerto 6889.

Carga

El volumen total de carga actual está codificado en código ASCII decimal.

Descargas

El volumen total de descarga actual está codificado en código ASCII decimal.

El número de bytes no descargados a la izquierda

está codificado como código ASCII decimal. Este número no se calcula utilizando la longitud del archivo y el número de descargas, porque el archivo puede continuar y algunos datos descargados no pueden pasar la verificación de integridad y deben descargarse nuevamente.

Evento

Este es un valor clave opcional, las opciones son iniciar, completar o detener (o vacío, equivalente a no ejecutarse). Si no está en funcionamiento, el extracto se emitirá periódicamente. El valor iniciado se emite cuando comienza la descarga y el valor completado se emite cuando se completa la descarga.

Cuando el archivo esté completo, comenzará de nuevo y no habrá problemas de finalización. Detenido se emite cuando el programa de descarga deja de descargar.

La respuesta de Tracker es también un diccionario de códigos B. Si hay un motivo de error de valor clave en la respuesta del rastreador, indicará el motivo del error de desafío correspondiente a una información de cadena legible por humanos; no se requiere ningún otro valor clave. De lo contrario, la respuesta debe tener dos valores clave: intervalo (intervalo) correspondiente a la cantidad de segundos entre solicitudes regulares del par que realiza la descarga; una cadena de ID, dirección IP o nombre de host DNS seleccionado por el par y número de puerto. Tenga en cuenta que si los pares tienen eventos o quieren más pares, no enviarán solicitudes a intervalos programados.

Si desea ampliar archivos de metainformación o consultas de seguimiento, coordine con Bram Cohen para asegurarse de que todas las extensiones sean compatibles.

El protocolo peer-to-peer de BitTorrent se ejecuta sobre el protocolo TCP. Funciona sin problemas sin ajustar ninguna opción de salida.

Las conexiones entre pares son simétricas. La información enviada desde ambas direcciones debe coordinarse para que los datos puedan fluir hacia cualquiera de las partes.

El protocolo peer-to-peer significa que un peer comienza a descargar desde cero. Cada vez que obtiene un bloque descrito en el índice del archivo de metainformación y el código de verificación es consistente, declara eso a todos los peers. se ha obtenido.

Los dos terminales conectados tienen dos indicaciones de estado, si están bloqueados y si están prestando atención. Si están bloqueados es una notificación, que indica que los datos no se enviarán antes de que se libere el bloqueo. Las razones del bloqueo y los problemas técnicos se discutirán más adelante.

La transferencia de datos se produce cuando una parte sigue a la otra, pero la otra parte no está bloqueada. El estado de atención debe ser consistente: si un par desbloqueado no tiene datos que otros necesitan, otros perderán la atención y prestarán atención a esos pares bloqueados. La implementación completa de esta condición requiere mucho cuidado, pero le permite al descargador saber qué igual puede comenzar a descargar inmediatamente después de que desaparezca la congestión.

Las conexiones se desconectarán gradualmente a pares desinteresados ​​y bloqueados.

Durante la transmisión de datos, el descargador tiene que poner en cola muchas solicitudes para obtener una mayor eficiencia de transmisión TCP (esto se denomina "solicitud de administración"). Por otro lado, las solicitudes que no se pueden escribir en el búfer TCP deben colocarse inmediatamente en la memoria, en lugar del búfer de red a nivel de aplicación. Una vez que se produce el bloqueo, todas estas solicitudes se eliminarán.

El protocolo de conexión peer-to-peer consiste en un apretón de manos seguido de un flujo constante de información de igual tamaño y determinismo. El protocolo de enlace comienza con el carácter 19 (decimal), seguido de la cadena "BitTorrentprotocol". La longitud inicial de los caracteres es fija, espero que otros protocolos nuevos también hagan lo mismo para diferenciarlos.

Después, todos los números enteros enviados al protocolo se codifican como un carácter de parada de 4 bytes.

En las aplicaciones existentes, los datos del encabezado van seguidos de 8 bytes, todos los cuales están reservados como 0. Si desea ampliar el protocolo cambiando estos 8 bytes reservados, coordine con Bram Cohen para asegurarse de que todas las extensiones sean compatibles.

Entonces el código de verificación SHA1 (igual que el valor declarado al rastreador por info_hash, pero aquí está el valor original, con una referencia) tiene 20 bytes de longitud en el valor de información codificado en B en el archivo metainfo. . Si los valores son diferentes, la conexión se interrumpe. Hay una excepción: si el descargador desea usar un puerto para descargar múltiples conexiones, primero obtendrá un código de verificación de la conexión de acceso, luego lo comparará con la lista y responderá si existe el mismo.

El código de verificación va seguido de la identificación del par de 20 bytes, que se incluye en la lista de pares de la respuesta del rastreador y se informa en la solicitud al rastreador. Si el ID del par del destinatario no coincide con las expectativas del remitente, la conexión se desconecta.

Finaliza el apretón de manos. A esto le sigue un flujo de información interactivo de longitud fija. Los mensajes de longitud cero se utilizan para mantener la conexión y se ignoran. Este tipo de información generalmente se envía cada 2 minutos, pero puede expirar fácilmente mientras se esperan datos.

Todas las conexiones no persistentes se escriben por bytes al principio del mensaje. Los valores posibles son los siguientes:

0-Bloqueo

1. -Accesible

2-Atención

3-Desatención

4-Sí

Grupo de 5 bits

6-Solicitar

7 Bloqueos

8-Cancelar

No hay carga para información como "bloquear", "desbloquear", "seguir" y "no seguir".

La información del "Grupo de Bits" se envía únicamente como información de encabezado. Carga una matriz de bytes con el índice del descargador establecido en 1 y todo lo demás en 0. Los descargadores que comienzan a descargar sin ningún dato omiten la información del "grupo de bits". Los bits altos del primer byte corresponden a los índices 0-7, y así sucesivamente, el segundo byte corresponde a los índices 8-15, y así sucesivamente. Los bits restantes al final se ponen a 0.

El mensaje "Ya" lleva un número, que es el número de índices que se acaban de descargar y verificar en busca de códigos de verificación.

La información del tipo "Solicitud" incluye índice, inicio y longitud. Los dos últimos son compensaciones de bytes. La longitud generalmente tiene un peso de 2 a menos que se trunque al final del archivo. La potencia actual generalmente se eleva 15 a la potencia 2 y se cierran 17 conexiones con una longitud de potencia mayor que 2.

La carga útil de información de la clase "Cancelar" es la misma que la de la clase "Solicitar". Generalmente se emite durante las "etapas finales" de una descarga que está a punto de finalizar. Cuando la descarga está casi completa, los fragmentos restantes tienden a descargarse del mismo hilo, lo que será muy lento. Para garantizar que los fragmentos restantes se descarguen rápidamente, las solicitudes de todos los fragmentos restantes se envían a todos los conectores que descargan datos de la otra parte, una vez que aún no se ha decidido a quién enviar las solicitudes de descarga de los fragmentos restantes. Para evitar ineficiencias, cada vez que comienza a descargarse un fragmento, se envía un mensaje de cancelación a los demás pares.

La información del tipo "Bloque" incluye índice, inicio y bloque. Recuerde, se trata de "solicitar" información. Se pueden cargar fragmentos innecesarios cuando las velocidades de transmisión son lentas o cuando los mensajes "bloqueados" y "borrados" se envían alternativamente a alta frecuencia o ambos al mismo tiempo.

El orden en el que los descargadores descargan fragmentos es aleatorio, para evitar adecuadamente que los descargadores tengan el mismo subconjunto o superconjunto de fragmentos que otros pares.

Hay muchas razones para el bloqueo. En el proceso de envío instantáneo de información a múltiples conexiones, el protocolo TCP tiene un control de congestión de información muy deficiente. Al mismo tiempo, la existencia de bloqueo permite a los descargadores utilizar algoritmos de ojo por ojo para garantizar una tasa de descarga estable.

El algoritmo de bloqueo que se presenta a continuación es la configuración básica actual. Es importante que todos los algoritmos nuevos funcionen bien no sólo en redes que contienen todos los algoritmos extendidos, sino también en redes que contienen principalmente este algoritmo básico.

Existen muchos estándares para buenos algoritmos de bloqueo. Debe bloquear una cierta cantidad de cargas simultáneas para obtener un buen rendimiento de TCP, evitar bloqueos frecuentes y una alternancia fluida, lo que se denomina "fiberación". Debería recompensar a su par con el intercambio de datos. Finalmente, ocasionalmente debería intentar conectarse con pares no utilizados para encontrar una conexión mejor que la existente, esto se llama intentar desbloquear.

El algoritmo de bloqueo actual evita la fibrosis cambiando la lista de bloqueo cada 10 segundos. Desbloquee a cuatro compañeros que lo siguen y obtenga de ellos la tasa de descarga más alta, y cargue e intercambie datos. Se desbloquean los pares con altas tasas de carga pero que no prestan atención a los descargadores. Una vez que estos pares comiencen a llamar la atención, aquellos con las tasas de carga más bajas serán bloqueados. Si el descargador tiene un archivo completo, utiliza su tasa de carga en lugar de su tasa de descarga para decidir de quién desconectarse.

Durante el intento de desbloqueo, en cualquier momento se desbloquea a un peer independientemente de su tasa de carga (si fuera seguido, sería uno de los cuatro peers que ofrecen uno de descarga). Este ciclo heurístico de desbloqueo rota cada 30 segundos. Para darles la oportunidad de cargar el fragmento completo, se iniciará una nueva conexión con tres veces el número de intentos en el bucle.