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 1
si el cliente tiene esta pieza peculiar , de lo 0
contrario.
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).