Gnutella2 , a menudo denominado G2 , es un protocolo peer-to-peer desarrollado principalmente por Michael Stokes y lanzado en 2002.
Aunque está inspirado en el protocolo gnutella , G2 comparte poco de su diseño con la excepción de su protocolo de conexión y su 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 a reducir eficazmente los archivos falsos, como los virus , en la red.
Historia
En noviembre de 2002, Michael Stokes anunció el protocolo Gnutella2 en el Foro de Desarrolladores de Gnutella. Mientras algunos pensaban que los objetivos establecidos para Gnutella2 eran principalmente romper con el protocolo gnutella 0.6 y empezar de nuevo, de modo que algunas de las partes menos limpias de gnutella se hicieran de forma más elegante y, en general, fueran impresionantes y deseables; otros desarrolladores , principalmente los de LimeWire y BearShare , pensaron que se trataba de un " truco publicitario barato " y descontaron los méritos técnicos. Algunos todavía se niegan a referirse a la red como "Gnutella2", y en su lugar, se refieren a ella como "Protocolo de Mike" ("MP"). [2]
El protocolo Gnutella2 todavía utiliza la antigua cadena de enlace "GNUTELLA CONNECT/0.6" para sus conexiones [1], tal como se define en las especificaciones de Gnutella 0.6. Este método 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 que los clientes actuales de Gnutella agreguen Gnutella2 cuando lo deseen.
Con los desarrolladores atrincherados en sus posiciones, pronto estalló una guerra de llamas , consolidando aún más la resolución de ambos lados. [3] [4] [5] [6]
Las especificaciones preliminares se publicaron el 26 de marzo de 2003, y pronto se publicaron especificaciones más detalladas . G2 no es compatible con muchos de los clientes de la red "antigua" de Gnutella, sin embargo, muchos clientes de Gnutella2 todavía 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 el mérito suficiente para compensar el costo de las reescrituras profundas. [7]
Diseño
Gnutella2 divide los nodos en dos grupos: Leaves y Hubs. La mayoría de los Leaves mantienen dos conexiones con Hubs, [8] mientras que los Hubs aceptan cientos de conexiones Leaf y un promedio de 7 conexiones con 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 han sido buscados, hasta que la lista se agote o se alcance un límite de búsqueda predefinido. Esto permite que un usuario encuentre un archivo popular fácilmente sin cargar la red, mientras que, teóricamente, se mantiene la capacidad de un usuario para encontrar un solo archivo ubicado en cualquier parte de la red.
Los Hubs indexan los archivos que tiene una Leaf por medio de una tabla de enrutamiento de consultas, que se llena con entradas de un solo bit de hashes de palabras clave , que la Leaf carga en el Hub y que luego el Hub combina con todas las tablas de hash que sus Leaves le 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 al no reenviar consultas a Leaves y Hubs vecinos, si las entradas que coinciden con la búsqueda no se encuentran en las tablas de enrutamiento .
Gnutella2 depende en gran medida de UDP , en lugar de TCP , para las búsquedas. La sobrecarga de configurar una conexión TCP haría que un sistema de búsqueda de recorrido aleatorio , que requiere el contacto de una gran cantidad de nodos con pequeños volúmenes de datos, no fuera viable. Sin embargo, UDP tiene sus propios inconvenientes. Debido a que UDP no tiene conexión, no hay un método estándar para informar al cliente que envía 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 la bandera de confiabilidad habilitada, el cliente responderá con un paquete de reconocimiento para informar al cliente que envía que su paquete llegó a su destino. Si el paquete de reconocimiento no se envía, el paquete confiable se retransmitirá en un intento de asegurar la entrega. Los paquetes de baja importancia, que no tienen la bandera habilitada, 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 un paquete de reconocimiento.
Características del protocolo
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 de paquete fue diseñado para que futuras mejoras de red y características de proveedores individuales pudieran agregarse sin temor a causar errores en otros clientes de la red. [9]
Para identificar archivos y comprobar su integridad de forma segura , se utilizan hashes SHA-1 . Para permitir que un archivo se descargue de forma fiable en paralelo desde varias fuentes, así como para permitir la carga fiable de partes mientras el archivo todavía se está descargando (enjambre), se utilizan hashes de árbol Tiger . [10]
Para crear un sistema de búsqueda más robusto y completo, Gnutella2 también tiene un sistema de metadatos para proporcionar en los resultados de búsqueda información más completa sobre etiquetado, calificación y calidad que la que se obtendría simplemente con 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 que conserven 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 videos, aunque solo 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, se mejoró la capa UDP semifiable para agregar reconocimientos acumulativos y extendidos de una manera que sea compatible con versiones anteriores de los clientes G2. [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]
Diferencias con la gnutella
En general, las dos redes son bastante similares, y las principales diferencias están en el formato del paquete y la metodología de búsqueda.
Protocolo
El formato de paquetes de Gnutella ha sido criticado porque no fue diseñado originalmente con la extensibilidad en mente, 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ñó con extensibilidad futura desde el principio.
Algoritmo de búsqueda
Mientras que gnutella utiliza un método de búsqueda por inundación de consultas , Gnutella2 utiliza un sistema de recorrido aleatorio , en el que un nodo de búsqueda reúne una lista de Hubs y los contacta directamente, uno a la vez. Sin embargo, como los Hubs se organizan en los llamados " grupos de Hubs ", en los que cada Hub refleja la información almacenada por sus vecinos, la Hoja recibe la información de todo el grupo de Hubs (normalmente 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 el tráfico de la red de forma exponencial , 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 ha obtenido un umbral predefinido de resultados, de forma más efectiva que en gnutella. Sin embargo, el sistema de recorrido también aumenta la complejidad de la red y el mantenimiento y la gestión de la red necesarios, además de requerir salvaguardas para evitar que un atacante malintencionado utilice la red para ataques de denegación de servicio .
Terminología
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, se denominan Hubs en Gnutella2, y también se utilizan de forma ligeramente diferente en la topología. En gnutella, los Ultrapeers generalmente mantienen tantas hojas como conexiones entre pares, mientras que los Hubs de Gnutella2 mantienen muchas más hojas y menos conexiones entre pares (Hub a Hub). La razón de esto es que los métodos de búsqueda de las distintas redes tienen diferentes topologías óptimas.
Clientela
Lista
Los clientes de software libre Gnutella2 incluyen:
- Adagio [16] (Multiplataforma), escrito en Ada , bajo la GPL.
- Gnucleus (Windows), escrito en C / C++ , bajo la LGPL
- Gtk-gnutella (multiplataforma), escrito en C. Solo admite conexiones en modo leaf a G2 desde la versión 1.1. [17]
MLDonkey(multiplataforma), escrito en OCaml , bajo la GPL, sin embargo a partir de la versión 2.9.0 (2007), el soporte no se mantiene oficialmente y está deshabilitado en los binarios. [18]- Shareaza (Windows), multi-red, escrito en C++, bajo licencia GPL, actualmente +/- 93% de cuota de red [19]
Las implementaciones de software propietario incluyen:
- Foxy (Windows) Programa chino derivado de GnucDNA , no es posible interactuar con ningún otro cliente G2 y utiliza su propia red "Foxy", que está medio mal separada del G2 original y es conocida por fugas de red hacia G2 [ cita requerida ] . En teoría, el cliente es compatible con G2. Gratis.
- Morfeo (Windows)
Comparación
La siguiente tabla compara información general y técnica de una serie de aplicaciones disponibles que admiten la red G2.
Véase también
Referencias
- ^ ab "Discusión de desarrolladores sobre similitudes entre Gnutella y Gnutella2". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 10 de mayo de 2006 .
- ^ "Discusión de GDF sobre el nombre Gnutella2". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 10 de mayo de 2006 .
- ^ "Parte de la guerra de llamas entre Gnutella y Gnutella2 (1)". Foro de desarrolladores de Gnutella. Archivado desde el original el 12 de febrero de 2009. Consultado el 6 de agosto de 2006 .
- ^ "Parte de la guerra de llamas entre Gnutella y Gnutella2 (2)". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 6 de agosto de 2006 .
- ^ "Parte de la guerra de llamas entre Gnutella y Gnutella2 (3)". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 6 de agosto de 2006 .
- ^ "Parte de la guerra de llamas entre Gnutella y Gnutella2 (4)". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 6 de agosto de 2006 .
- ^ "Discusión de desarrolladores sobre la migración a Gnutella2". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 10 de mayo de 2006 .
- ^ "Historial de la red Gnutella2". Rastreador Trillinux (G2paranha). Archivado desde el original el 15 de mayo de 2009. Consultado el 12 de abril de 2009 .
- ^ "Estructura de paquetes". Wiki de Gnutella2. Archivado desde el original el 19 de diciembre de 2007. Consultado el 7 de noviembre de 2007 .
- ^ ab "Gnutella2 Standard". Wiki de Gnutella2. Archivado desde el original el 19 de diciembre de 2007. Consultado el 7 de noviembre de 2007 .
- ^ "Lenguaje de consulta simple y metadatos". Wiki de Gnutella2. Archivado desde el original el 19 de diciembre de 2007. Consultado el 7 de noviembre de 2007 .
- ^ "Transceptor UDP - Gnutella2". G2.doxu.org. Archivado desde el original el 19 de julio de 2014. Consultado el 6 de agosto de 2014 .
- ^ "Q2 - Gnutella2". G2.doxu.org. 25 de febrero de 2014. Archivado desde el original el 14 de julio de 2014. Consultado el 6 de agosto de 2014 .
- ^ "QH2 - Gnutella2". G2.doxu.org. 12 de marzo de 2014. Archivado desde el original el 13 de diciembre de 2013. Consultado el 6 de agosto de 2014 .
- ^ "Discusión de desarrolladores sobre los formatos de paquetes de Gnutella y Gnutella2". Foro de desarrolladores de Gnutella. Archivado desde el original el 17 de enero de 2023. Consultado el 15 de mayo de 2006 .
- ^ "Descargar Adagio | SourceForge.net". Archivado desde el original el 12 de noviembre de 2016. Consultado el 11 de noviembre de 2016 .
- ^ "gtk-gnutella - El cliente gráfico Unix Gnutella". Gtk-gnutella.sourceforge.net. Archivado desde el original el 8 de julio de 2005. Consultado el 6 de agosto de 2014 .
- ^ "OtherNetworksSupported - MLDonkey". mldonkey.sourceforge.net . Archivado desde el original el 2016-11-12 . Consultado el 2016-11-11 .
- ^ UKHL = Lista de centros conocidos de UDP
- ^ "Sitio web de FileScope: Declaración sobre compatibilidad entre plataformas". FileScope . Archivado desde el original el 28 de agosto de 2008 . Consultado el 22 de agosto de 2008 .
- ^ "FileScope". SourceForge . Archivado desde el original el 2021-06-25 . Consultado el 2021-06-25 .
Enlaces externos
- Wiki de Gnutella2
- g2paranha - Rastreador de red G2