Gnutella - Gnutella

Gnutella es un protocolo de red peer-to-peer . Fundada en 2000, fue la primera red peer-to-peer descentralizada de su tipo, lo que llevó a otras redes posteriores a adoptar el modelo.

En junio de 2005, la población de Gnutella era de 1,81 millones de computadoras y aumentó a más de tres millones de nodos en enero de 2006. A finales de 2007, era la red de intercambio de archivos más popular en Internet con una cuota de mercado estimada de más del 40%.

Historia

El primer cliente (también llamado Gnutella) del que la red obtuvo su nombre fue desarrollado por Justin Frankel y Tom Pepper de Nullsoft a principios de 2000, poco después de la adquisición de la empresa por parte de AOL . El 14 de marzo, el programa estuvo disponible para su descarga en los servidores de Nullsoft. El evento se anunció prematuramente en Slashdot y miles descargaron el programa ese día. El código fuente se publicaría más tarde, bajo la Licencia Pública General GNU (GPL); sin embargo, los desarrolladores originales nunca tuvieron la oportunidad de lograr este propósito.

Al día siguiente, AOL detuvo la disponibilidad del programa por cuestiones legales y evitó que Nullsoft siguiera trabajando en el proyecto. Esto no detuvo a Gnutella; después de unos días, el protocolo había sido modificado por ingeniería inversa y comenzaron a aparecer clones compatibles, libres y de código abierto . Este desarrollo paralelo de diferentes clientes por diferentes grupos sigue siendo el modus operandi del desarrollo de Gnutella en la actualidad.

Entre los primeros pioneros independientes de Gnutella se encontraban Gene Kan y Spencer Kimball , quienes lanzaron el primer portal destinado a reunir a la comunidad de código abierto para trabajar en Gnutella y también desarrollaron "GNUbile", uno de los primeros programas de código abierto (GNU-GPL). para implementar el protocolo Gnutella.

La red Gnutella es una alternativa totalmente distribuida a sistemas semicentralizados como FastTrack ( KaZaA ) y el Napster original . La popularidad inicial de la red fue impulsada por la amenaza de desaparición legal de Napster a principios de 2001. Este aumento de popularidad reveló los límites de la escalabilidad del protocolo inicial. A principios de 2001, las variaciones del protocolo (implementado por primera vez en clientes propietarios y de código cerrado ) permitieron una mejora en la escalabilidad. En lugar de tratar a cada usuario como cliente y servidor, algunos usuarios ahora eran tratados como ultrapeers , enrutando solicitudes de búsqueda y respuestas para los usuarios conectados a ellos.

Esto permitió que la red creciera en popularidad. A finales de 2001, el cliente de Gnutella, LimeWire Basic, pasó a ser gratuito y de código abierto. En febrero de 2002, Morpheus , un grupo comercial de intercambio de archivos, abandonó su software peer-to-peer basado en FastTrack y lanzó un nuevo cliente basado en el cliente Gnutella de código abierto y gratuito Gnucleus .

La palabra Gnutella hoy se refiere no a un proyecto o pieza de software en particular, sino al protocolo abierto utilizado por los distintos clientes.

El nombre es un acrónimo de GNU y Nutella , el nombre comercial de una pasta para untar italiana con sabor a avellana: supuestamente, Frankel y Pepper comieron mucho Nutella trabajando en el proyecto original, y tenían la intención de licenciar su programa terminado bajo la Licencia Pública General GNU. Gnutella no está asociado con el proyecto GNU ni con la propia red peer-to-peer de GNU, GNUnet .

El 26 de octubre de 2010, la jueza Kimba Wood del Tribunal de Distrito de los Estados Unidos para el Distrito Sur de Nueva York ordenó el cierre del popular cliente de Gnutella, LimeWire, cuando firmó un Decreto de Consentimiento al que los demandantes de la industria discográfica y LimeWire habían acordado. Este evento fue la causa probable de una caída notable en el tamaño de la red, porque, mientras negociaba la orden judicial , el personal de LimeWire había insertado un código de desactivación remota en el software. Cuando entró en vigor la medida cautelar, los usuarios que habían instalado las versiones afectadas (más recientes que la 5.5.10) fueron desconectados de la red P2P . Dado que LimeWire era software gratuito , nada había impedido la creación de bifurcaciones que omitían el código de desactivación, siempre que no se utilizaran las marcas comerciales de LimeWire. El cierre no afectó, por ejemplo, a FrostWire , una bifurcación de LimeWire creada en 2004 que no lleva ni el código de desactivación remota ni el adware .

El 9 de noviembre de 2010, LimeWire fue resucitado por un equipo secreto de desarrolladores y nombrado LimeWire Pirate Edition . Se basó en LimeWire 5.6 BETA. Esta versión tenía sus dependencias de servidor eliminadas y todas las funciones PRO habilitadas de forma gratuita.

Diseño

Un diagrama de los nodos de Gnutella y sus conexiones.
El protocolo de búsqueda y recuperación de gnutella

Para visualizar cómo funcionaba originalmente Gnutella, imagine un gran círculo de usuarios (llamados nodos), cada uno de los cuales tiene el software cliente de Gnutella. En el arranque inicial, el software de cliente debe arrancar y encontrar al menos otro nodo. Se han utilizado varios métodos para esto, incluida una lista de direcciones preexistente de nodos posiblemente en funcionamiento enviados con el software, utilizando cachés web actualizados de nodos conocidos (llamados cachés web de Gnutella ), cachés de host UDP y, rara vez, incluso IRC . Una vez conectado, el cliente solicita una lista de direcciones de trabajo. El cliente intenta conectarse a los nodos con los que se le envió, así como a los nodos que recibe de otros clientes hasta que alcanza una cierta cuota. Se conecta solo a esa cantidad de nodos, almacenando en caché localmente las direcciones que aún no ha probado y descartando las direcciones que intentó y encontró que no eran válidas.

Cuando el usuario quiere hacer una búsqueda, el cliente envía la solicitud a cada nodo conectado activamente. En la versión 0.4 del protocolo, la cantidad de nodos conectados activamente para un cliente era bastante pequeña (alrededor de 5). En esa versión del protocolo, cada nodo reenvía la solicitud a todos sus nodos conectados activamente, quienes, a su vez, reenvían la solicitud. Esto continúa hasta que el paquete ha alcanzado un número predeterminado de saltos del remitente (máximo 7).

Desde la versión 0.6 (2002), Gnutella es una red compuesta de nodos hoja y ultranodos (también llamados ultrapeers). Los nodos hoja están conectados a una pequeña cantidad de ultrapeers (normalmente 3), mientras que cada ultrapeer está conectado a más de 32 ultrapeers. Con este grado superior , el número máximo de saltos que puede viajar una consulta se redujo a 4.

Las hojas y los ultrapeers utilizan el protocolo de enrutamiento de consultas para intercambiar una tabla de enrutamiento de consultas (QRT), una tabla de 64 ranuras Ki y hasta 2 ranuras Mi que constan de palabras clave hash. Un nodo hoja envía su QRT a cada uno de los ultrapeers a los que está conectado, y los ultrapeers fusionan el QRT de todas sus hojas (reducido a 128 Ki -slots) más su propio QRT (si comparten archivos) e intercambian eso con los suyos. vecinos. Luego, el enrutamiento de consultas se realiza mediante el hash de las palabras de la consulta y ver si todas coinciden en el QRT. Los ultrapeers hacen esa verificación antes de reenviar una consulta a un nodo hoja, y también antes de reenviar la consulta a un nodo ultra peer siempre que este sea el último salto que puede viajar la consulta.

Si una solicitud de búsqueda muestra un resultado, el nodo que tiene el resultado contacta al buscador. En el protocolo clásico de Gnutella, los mensajes de respuesta se enviaban a lo largo de la ruta tomada por la consulta, ya que la consulta en sí no contenía información de identificación para el nodo. Este esquema se revisó posteriormente para entregar resultados de búsqueda a través de UDP , directamente al nodo que inició la búsqueda, generalmente un ultrapeer del nodo. Por lo tanto, en el protocolo actual, las consultas llevan la dirección IP y el número de puerto de cualquiera de los nodos. Esto reduce la cantidad de tráfico enrutado a través de la red Gnutella, haciéndola significativamente más escalable.

Si el usuario decide descargar el archivo, negocia la transferencia del archivo . Si el nodo que tiene el archivo solicitado no tiene cortafuegos , el nodo de consulta puede conectarse directamente. Sin embargo, si el nodo tiene un cortafuegos, lo que impide que el nodo de origen reciba conexiones entrantes, el cliente que desea descargar un archivo envía una llamada solicitud de inserción al servidor para que el cliente remoto inicie la conexión en su lugar (para enviar el archivo) . Al principio, estas solicitudes push se enrutaban a lo largo de la cadena original que usaba para enviar la consulta. Esto era bastante poco confiable porque las rutas a menudo se interrumpían y los paquetes enrutados siempre están sujetos a control de flujo. Se introdujeron proxies push para abordar este problema. Suelen ser los ultrapeers de un nodo hoja y se anuncian en los resultados de búsqueda. El cliente se conecta a uno de estos proxies push mediante una solicitud HTTP y el proxy envía una solicitud push a una hoja en nombre del cliente. Normalmente, también es posible enviar una solicitud de inserción a través de UDP al proxy de inserción, que es más eficiente que usar TCP. Los proxies push tienen dos ventajas: en primer lugar, las conexiones ultrapeer-leaf son más estables que las rutas. Esto hace que las solicitudes de inserción sean mucho más confiables. En segundo lugar, reduce la cantidad de tráfico enrutado a través de la red Gnutella.

Finalmente, cuando un usuario se desconecta, el software del cliente guarda una lista de nodos conocidos. Contiene los nodos a los que se conectó el cliente y los nodos aprendidos de los paquetes pong. El cliente lo usa como su lista de semillas, cuando comienza a continuación, volviéndose independiente de los servicios de arranque.

En la práctica, este método de búsqueda en la red de Gnutella a menudo no era confiable. Cada nodo es un usuario habitual de la computadora; como tales, se conectan y desconectan constantemente, por lo que la red nunca es completamente estable. Además, el costo de ancho de banda de la búsqueda en Gnutella creció exponencialmente a la cantidad de usuarios conectados, a menudo saturando las conexiones e inutilizando los nodos más lentos. Por lo tanto, las solicitudes de búsqueda a menudo se descartan y la mayoría de las consultas solo llegan a una parte muy pequeña de la red. Esta observación identificó a la red Gnutella como un sistema distribuido no escalable e inspiró el desarrollo de tablas hash distribuidas , que son mucho más escalables pero solo admiten búsquedas de coincidencia exacta, en lugar de palabras clave.

Para abordar los problemas de los cuellos de botella , los desarrolladores de Gnutella implementaron un sistema escalonado de ultrapeers y hojas . En lugar de que todos los nodos se consideraran iguales, los nodos que ingresaban a la red se mantenían en el "borde" de la red, como una hoja. Las hojas no proporcionan ruta. Los nodos que son capaces de enrutar mensajes se promueven a ultrapeers. Los ultrapeers aceptan conexiones de hoja y búsquedas de rutas y mensajes de mantenimiento de la red. Esto permite que las búsquedas se propaguen más a través de la red y permite numerosas alteraciones en la topología. Esto mejoró enormemente la eficiencia y la escalabilidad.

Además, gnutella adoptó una serie de otras técnicas para reducir la sobrecarga de tráfico y hacer que las búsquedas sean más eficientes. Los más notables son Query Routing Protocol (QRP) y Dynamic Querying (DQ). Con QRP, una búsqueda llega solo a aquellos clientes que probablemente tengan los archivos, por lo que las búsquedas de archivos raros se vuelven mucho más eficientes. Con DQ, la búsqueda se detiene tan pronto como el programa haya obtenido suficientes resultados de búsqueda. Esto reduce enormemente la cantidad de tráfico causado por las búsquedas populares.

Uno de los beneficios de tener Gnutella tan descentralizado es hacer muy difícil cerrar la red y convertirla en una red en la que los usuarios son los únicos que pueden decidir qué contenido estará disponible. A diferencia de Napster , donde toda la red dependía del servidor central, Gnutella no se puede cerrar cerrando ningún nodo. Una red descentralizada evita que los malos actores tomen el control de los contenidos de la red y / o manipulen los datos controlando el servidor central.

Funciones y extensiones de protocolo

Gnutella una vez operó con un protocolo basado puramente en la inundación de consultas . El protocolo de red desactualizado de Gnutella versión 0.4 emplea cinco tipos de paquetes diferentes, a saber:

  • ping: descubre hosts en la red
  • pong: responder a ping
  • consulta: busca un archivo
  • consulta hit: responder a la consulta
  • push: solicitud de descarga para servidores con cortafuegos

Estos paquetes facilitan las búsquedas. En cambio, las transferencias de archivos son manejadas por HTTP .

El desarrollo del protocolo Gnutella está actualmente dirigido por el Foro de Desarrolladores de Gnutella (GDF). Muchas extensiones de protocolo han sido y están siendo desarrolladas por los proveedores de software y por los desarrolladores gratuitos de Gnutella del GDF. Estas extensiones incluyen enrutamiento de consultas inteligente, sumas de verificación SHA-1 , transmisión de aciertos de consultas a través de UDP , consultas a través de UDP, consultas dinámicas a través de TCP , transferencias de archivos a través de UDP, metadatos XML , intercambio de fuentes (también denominado malla de descarga ) y descarga paralela en porciones ( enjambre).

Hay esfuerzos para finalizar estas extensiones de protocolo en la especificación Gnutella 0.6, en el sitio web de desarrollo del protocolo Gnutella. El estándar Gnutella 0.4 está desactualizado pero sigue siendo la última especificación de protocolo porque todas las extensiones, hasta ahora, existen como propuestas. De hecho, es difícil o imposible conectarse hoy con 0.4 apretones de manos. Según los desarrolladores del GDF, la versión 0.6 es lo que los nuevos desarrolladores deberían buscar utilizando las especificaciones del trabajo en curso .

El protocolo de Gnutella sigue en desarrollo. A pesar de los intentos de romper con la complejidad heredada del antiguo Gnutella 0.4 y de diseñar una nueva arquitectura de mensajes limpia, sigue siendo uno de los protocolos de intercambio de archivos más exitosos hasta la fecha.

Software

Las siguientes tablas comparan información general y técnica para una serie de aplicaciones que admiten la red Gnutella. Las tablas no intentan dar una lista completa de los clientes de Gnutella . Las mesas están limitadas a clientes que pueden participar en la red actual de Gnutella.

Especificaciones generales

Nombre Plataforma Licencia Proyecto activo?
(de lo contrario descontinuado)
Último lanzamiento Herencia
Adquisición Mac OS Propiedad No 2.2 (v223) (19 de noviembre de 2010 ; hace 10 años ) [±] ( 19/11/2010 ) LimeWire
BearFlix Ventanas Propiedad No 5.2.6.0 BearShare
BearShare Ventanas Propiedad No 10.0.0.131462 (29 de enero de 2013 ; hace 8 años ) [±] ( 29/01/2013 ) Trabajo original
Cabos Java GNU GPL No 0.8.2 (9 de febrero de 2010 ; hace 11 años ) [±] ( 2010-02-09 ) LimeWire
CitrixWire Ventanas Propiedad No 2014 Addax
CocoGnut Sistema operativo RISC Propiedad No 1.21 (21 de junio de 2005) Trabajo original
FilesWire (P2P) Java Propiedad No Beta 1.1 (2007) Trabajo original
giFT (complemento de Gnutella) Multiplataforma GNU GPL No 0.0.11 (2006-08-06) Trabajo original
Gnúcleo - GnucDNA Ventanas GNU GPL, LGPL No 2.2.0.0 (17 de junio de 2005 ; hace 16 años ) [±] ( 17 de junio de 2005 ) Trabajo original
gtk-gnutella Multiplataforma GNU GPL 1.2.0 (9 de julio de 2020 ; hace 15 meses ) [±] (9 de julio de 2020 ) Trabajo original
KCeasy Ventanas GNU GPL No 0.19-rc1 (3 de febrero de 2008 ; hace 13 años ) [±] ( 2008-02-03 ) regalo
Kiwi Alpha Ventanas GNU GPL No 2.2.0.0 (17 de junio de 2005 ; hace 16 años ) [±] ( 17 de junio de 2005 ) GnucDNA
LimeWire Java GNU GPL No 5.5.16 (30 de septiembre de 2010 ; hace 11 años ) [±] ( 30 de septiembre de 2010 ) Trabajo original
Morfeo Ventanas Propiedad No 5.55.1 (15 de noviembre de 2007 ; hace 13 años ) [±] ( 15/11/2007 ) GnucDNA
Phex Java GNU GPL No 3.4.2.116 (1 de febrero de 2009 ; hace 12 años ) [±] ( 2009-02-01 ) Trabajo original
Envenenado Mac OS GNU GPL No 0,5191 (8 de agosto de 2006 ; hace 15 años ) [±] ( 2006-08-08 ) regalo
Shareaza Ventanas GNU GPL 2.7.10.2 (18 de septiembre de 2017 ; hace 4 años ) [±] ( 18 de septiembre de 2017 ) Trabajo original
Symella Symbian GNU GPL No Trabajo original
WireShare (también conocido como LimeWire Pirate Edition ) Java GNU GPL 6.0.1 (2020-08-29) LimeWire
Zultrax Ventanas Propiedad No 4.33 (abril de 2009) Trabajo original

  Proyecto discontinuado

Características de Gnutella

Cliente Búsqueda hash Chat lista de amigos Maneja archivos grandes (> 4 GB ) Enrutamiento de consultas compatible con Unicode Mapeo de puertos UPnP NAT transversal Mapeo de puertos NAT RUD Proxy de envío TCP Proxy de inserción UDP Ultrapeer GWebCache Caché de host UDP THEX TLS Otro
BearShare No No No No No -
giFT (núcleo y complementos) N / A N / A No No No No No No No No No No No -
GnucDNA N / A N / A No No No No No No No No No No No -
gtk-gnutella No No No (caído) IPv6 , DHT , GUESS, G2
LimeWire GMail o XMPP DHT
WireShare GMail o XMPP DHT
Phex No No No No No I2P
Shareaza No No No No G2 , BT , eD2k , IRC

Notas

  • Morpheus difiere significativamente y puede tener un código completamente independiente del motor GnucDNA. Morpheus puede funcionar como un ultrapeer moderno, mientras que otros clientes de GnucDNA no pueden.
  • Gnucleus y Kiwi Alpha utilizan el motor GnucDNA .
  • BearFlix , una versión funcionalmente limitada de la serie BearShare 5.2, puede buscar solo imágenes o videos y los videos compartidos están limitados a una duración relativamente corta.
  • giFTcurs , Apollon , FilePipe , giFToxic , giFTui, giFTwin32 , KCeasy , Poisoned y Xfactor son interfaces de interfaz gráfica de usuario para el motor giFT .
  • etomi utiliza un código de red de Shareaza obsoleto .
  • MP3 Rocket, 360Share, LemonWire, MP3Torpedo y DexterWire son variantes de LimeWire .
  • FrostWire (hasta la versión 4.21.8) es casi idéntico a LimeWire 4.18 pero las versiones superiores a 5.00 ya no usan gnutella.
  • Adquisición y Cabos son interfaces personalizadas que se superponen al motor LimeWire .
  • LimeWire Pirate Edition (5.6.2) es una versión resucitada del inédito LimeWire 5.6.1 alpha, por lo que tiene características similares menos actualizaciones automáticas (con molestas) y se eliminaron controles remotos centralizados para deshabilitar funciones básicas como búsquedas y descargas.

Gnutella2

El protocolo Gnutella2 (a menudo denominado G2), a pesar de su nombre, no es un protocolo sucesor de Gnutella ni está relacionado con el proyecto original de Gnutella, sino que es un protocolo completamente diferente que se bifurcó del proyecto original y se superpuso al nombre de Gnutella. Un punto delicado con muchos desarrolladores de Gnutella es que el nombre Gnutella2 transmite una mejora o superioridad, lo que llevó a una guerra de llamas. Otras críticas incluyeron el uso de la red Gnutella para arrancar pares G2 y la documentación deficiente del protocolo G2. Además, los reintentos de búsqueda más frecuentes del cliente de Shareaza , uno de los clientes iniciales de G2, podrían sobrecargar innecesariamente la red de Gnutella.

Ambos protocolos han sufrido cambios significativos desde la bifurcación en 2002. G2 tiene ventajas y desventajas en comparación con Gnutella. Una ventaja que se cita a menudo es que la búsqueda híbrida de Gnutella2 es más eficiente que la inundación de consultas de Gnutella original . Sin embargo, Gnutella reemplazó la inundación de consultas con métodos de búsqueda más eficientes, comenzando con el Enrutamiento de consultas en 2002. Esto fue propuesto en 2001 por los desarrolladores de Limewire. Una ventaja de Gnutella es su gran base de usuarios, que asciende a millones. La red G2 es aproximadamente un orden de magnitud más pequeña. Es difícil comparar los protocolos en su forma actual. La elección del cliente, en cualquiera de las redes, probablemente afecte igualmente al usuario final.

Ver también

Referencias

  • Tinte, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, capítulo 3. p91
  • Tinte, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, capítulo 3. p90

enlaces externos