Gnutella2 , a menudo denominado G2 , es un protocolo peer-to-peer desarrollado principalmente por Michael Stokes y lanzado en 2002.
Si bien está inspirado en el protocolo gnutella , G2 comparte poco de su diseño con la excepción de su conexión y mecánica de descarga . [1]
G2 adopta un formato de paquete binario extensible y un algoritmo de búsqueda completamente nuevo .
Además, G2 tiene una topología de red relacionada (pero significativamente diferente) y un sistema de metadatos mejorado , que ayuda eficazmente a reducir archivos falsos, como virus , en la red.
En noviembre de 2002, Michael Stokes anunció el protocolo Gnutella2 en el Foro de Desarrolladores de Gnutella. Si bien algunos pensaron que los objetivos establecidos para Gnutella2 son principalmente romper con el protocolo gnutella 0.6 y comenzar de nuevo, de modo que algunas de las partes menos limpias de gnutella se hagan de manera más elegante y, en general, sean impresionantes y deseables; otros desarrolladores , principalmente los de LimeWire y BearShare , pensaron que se trataba de un " truco publicitario barato " y descontaban méritos técnicos. Algunos todavía se niegan a referirse a la red como "Gnutella2" y, en cambio, se refieren a ella como "Protocolo de Mike" ("MP"). [2]
El protocolo Gnutella2 todavía utiliza la antigua cadena de protocolo de enlace "GNUTELLA CONNECT/0.6" para sus conexiones [1] como se define en las especificaciones de gnutella 0.6. Este método de protocolo de enlace compatible con versiones anteriores fue criticado por el Foro de Desarrolladores de Gnutella como un intento de utilizar la red gnutella para iniciar la nueva red no relacionada, mientras que los defensores de la red afirmaron que su intención era seguir siendo compatible con versiones anteriores de gnutella y permitir la versión actual de gnutella. clientes puedan agregar Gnutella2 cuando lo deseen.
Con los promotores atrincherados en sus posiciones, pronto estalló una guerra explosiva que consolidó aún más la resolución de ambas partes. [3] [4] [5] [6]
El borrador de las especificaciones se publicó el 26 de marzo de 2003 y pronto siguieron especificaciones más detalladas. G2 no es compatible con muchos de los "antiguos" clientes de la red gnutella; sin embargo, muchos clientes Gnutella2 todavía también se conectan a gnutella. Muchos defensores de Gnutella2 afirman que esto se debe a razones políticas , mientras que los partidarios de Gnutella afirman que los cambios drásticos no tienen suficiente mérito para compensar el costo de reescrituras profundas. [7]
Gnutella2 divide los nodos en dos grupos: hojas y centros. La mayoría de los Leaves mantienen dos conexiones a Hubs, [8] mientras que los Hubs aceptan cientos de conexiones Leaf y un promedio de 7 conexiones a otros Hubs. Cuando se inicia una búsqueda, el nodo obtiene una lista de Hubs, si es necesario, y se pone en contacto con los Hubs de la lista, anotando cuáles se han buscado, hasta que se agota la lista o se alcanza un límite de búsqueda predefinido. Esto permite al usuario encontrar un archivo popular fácilmente sin cargar la red, mientras, en teoría, mantiene la capacidad del usuario de encontrar un único archivo ubicado en cualquier lugar de la red.
Los Hubs indexan los archivos que tiene un Leaf mediante una tabla de enrutamiento de consultas, que se llena con entradas de un solo bit de hashes de palabras clave , que el Leaf carga en el Hub y que luego el Hub combina con todas las tablas hash que sus Leaves han enviado. , para crear una versión para enviar a sus Hubs vecinos. Esto permite que los Hubs reduzcan en gran medida el ancho de banda simplemente no reenviando consultas a los Leaves y a los Hubs vecinos, si las entradas que coinciden con la búsqueda no se encuentran en las tablas de enrutamiento .
Gnutella2 depende ampliamente de UDP , en lugar de TCP , para las búsquedas. La sobrecarga de configurar una conexión TCP haría inviable un sistema de búsqueda de paseo aleatorio , que requiere el contacto de una gran cantidad de nodos con pequeños volúmenes de datos. Sin embargo, UDP no está exento de inconvenientes. Debido a que UDP no tiene conexión, no existe un método estándar para informar al cliente emisor que se recibió un mensaje y, por lo tanto, si el paquete se pierde, no hay forma de saberlo. Debido a esto, los paquetes UDP en Gnutella2 tienen una bandera para habilitar una configuración de confiabilidad. Cuando se recibe un paquete UDP con el indicador de confiabilidad habilitado, el cliente responderá con un paquete de reconocimiento para informar al cliente emisor que su paquete llegó a su destino. Si no se envía el paquete de reconocimiento, el paquete confiable se retransmitirá en un intento de garantizar la entrega. Los paquetes de baja importancia, que no tienen el indicador habilitado, no requieren un paquete de reconocimiento, lo que reduce la confiabilidad, pero también reduce la sobrecarga, ya que no es necesario enviar ni esperar ningún paquete de reconocimiento.
Gnutella2 tiene un formato de paquete binario extensible, comparable a un árbol de documentos XML , que fue concebido como una respuesta para algunas de las partes menos elegantes de gnutella. El formato del paquete se diseñó para que se pudieran agregar futuras mejoras de la red y características de proveedores individuales sin preocuparse de causar errores en otros clientes de la red. [9]
Para la identificación de archivos y la verificación segura de la integridad de los archivos, emplea hashes SHA-1 . Para permitir que un archivo se descargue de manera confiable en paralelo desde múltiples fuentes, así como para permitir la carga confiable de partes mientras el archivo aún se está descargando (enjambre), se utilizan hashes de árbol de Tiger . [10]
Para crear un sistema de búsqueda más sólido y completo, Gnutella2 también tiene un sistema de metadatos para proporcionar información de calidad, clasificación y etiquetado más completa en los resultados de la búsqueda que la que simplemente se recopilaría mediante los nombres de los archivos. [11] Los nodos pueden incluso compartir esta información después de haber eliminado el archivo, lo que permite a los usuarios marcar virus y gusanos en la red, sin necesidad de conservar una copia.
Gnutella2 también utiliza compresión en sus conexiones de red para reducir el ancho de banda utilizado por la red. [10]
Shareaza tiene la función adicional de solicitar vistas previas de imágenes y vídeos , aunque sólo FilesScope aprovecha esto de forma limitada.
gtk-gnutella amplió el protocolo para reducir aún más la brecha entre Gnutella y G2. En particular, la capa UDP semiconfiable se mejoró para agregar reconocimientos acumulativos y extendidos de una manera que sea compatible con versiones anteriores de los clientes G2 heredados. [12] Otras extensiones incluyen la cadena "A" en /Q2/I [13] y la introducción de /QH2/H/ALT, /QH2/H/PART/MT, /QH2/HN, /QH2/BH y / QH2/G1 en los resultados de la consulta. [14]
En general, las dos redes son bastante similares, siendo las principales diferencias el formato del paquete y la metodología de búsqueda.
El formato de paquete de Gnutella ha sido criticado porque no fue diseñado originalmente teniendo en cuenta la extensibilidad y ha tenido muchas adiciones a lo largo de los años, dejando la estructura del paquete desordenada e ineficiente. [15] Gnutella2 aprendió de esto y, además de tener muchas de las características agregadas del estándar gnutella en Gnutella2, diseñó la extensibilidad futura desde el principio.
Mientras que gnutella utiliza un método de búsqueda por inundación de consultas , Gnutella2 utiliza un sistema de recorrido aleatorio , donde un nodo de búsqueda reúne una lista de Hubs y los contacta directamente, uno a la vez. Sin embargo, a medida que los Hub se organizan en los llamados " clústeres de Hubs ", donde cada Hub refleja la información almacenada por sus vecinos, el Leaf recibe la información de todo el clúster de Hubs (generalmente 7 Hubs). Esto tiene varias ventajas sobre el sistema de inundación de consultas de gnutella. Es más eficiente, ya que continuar una búsqueda no aumenta exponencialmente el tráfico de la red , las consultas no se enrutan a través de tantos nodos y aumenta la granularidad de una búsqueda, lo que permite que un cliente se detenga una vez que se haya alcanzado un umbral predefinido de resultados. obtenido con mayor eficacia que en gnutella. Sin embargo, el sistema walk también aumenta la complejidad de la red y el mantenimiento y la gestión de la red necesarios, además de requerir medidas de seguridad para evitar que un atacante malintencionado utilice la red para ataques de denegación de servicio .
También hay una diferencia en la terminología: mientras que los nodos más capaces, que se utilizan para condensar la red, se denominan Ultrapeers en gnutella, en Gnutella2 se denominan Hubs y también se utilizan de forma ligeramente diferente en topología. En gnutella, los Ultrapeers generalmente mantienen tantas hojas como conexiones entre pares, mientras que los Gnutella2 Hubs mantienen muchas más hojas y menos conexiones entre pares (Hub-to-Hub). La razón de esto es que los métodos de búsqueda de las distintas redes tienen diferentes topologías óptimas.
Los clientes de software libre Gnutella2 incluyen:
Las implementaciones de software propietario incluyen:
La siguiente tabla compara la información general y técnica de una serie de aplicaciones disponibles que admiten la red G2.