Algoritmos y Estructuras de Datos Compiladores e Intérpretes Herramientas Lenguaje de programación
!Prog C/C++
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Redes y Computación Distribuida Sistemas Operativos

Redes P2P

[date: 16-01-2025] [last modification: 20-01-2025]
[words: 2666] [reading time: 13min] [size: 24861 bytes]

Introducción a las Redes Peer-to-Peer, con algunos ejemplos notables: Napster, Gnutella, Kazaa y Freenet. También se discutirán redes P2P estructuradas, con la implementación más sencilla: Chord.

Modelo Cliente-Servidor

En el modelo Cliente-Servidor, el servidor es una fuente fiable y bien conocida de datos, que espera de forma pasiva mensajes y conexiones de clientes. Los clientes inician el intercambio de mensajes y simplemente se limitan a pedir datos.

Se trata del modelo más popular usado en la actualidad, sobre todo para servicios web, HTTP y otros (FTP, DHCP, …).

Limitaciones del modelo Cliente-Servidor:

Distribución del tráfico con DNS

Una posible estrategia para distribuir el tráfico son los DNS

Introducción a las Redes P2P

Las redes Peer-to-Peer intentan resolver las limitaciones del paradigma del Cliente-Servidor. Consiste en la compartición de recursos y servicios (información, procesamiento, almacenamiento de disco) mediante el intercambio directo entre sistemas que tradicionalmente eran los clientes.

Nodo o par

Una red P2P está compuesta de máquinas (llamadas nodos o pares) conectadas mediante una red.

  • Todos los nodos son idénticos a nivel lógico

  • Cada nodo aporta (con distintas capacidades):

    • Potencia de cómputo
    • Capacidad de almacenamiento
    • Contenido
  • Todo nodo puede actuar como:

    • Servidor: Proveen de recursos.
    • Cliente: Consumen recursos.
    • Router: Reenvían datos a otro nodo. Punto intermedio con un tercero.

    Por tanto, cualquiera puede iniciar la conexión.

  • Cada nodo es autónomo: no necesitan administración por parte de un tercero y tiene sus propios intereses: compiten y colaboran.

  • La red es dinámica: se añaden o quitan nodos frecuentemente.

Características principales:

Ventajas

Ventajas frente al modelo Cliente-Servidor:

  • Uso eficiente de los recursos
  • Escalable
    • Los consumidores también donan recursos
    • Los recursos crecen naturalmente con el uso
  • Más fiable
    • Existen réplicas de información
    • Distribución geográfica
    • No hay un único punto de fallo
  • Fácil administración: no hay administración
    • Los nodos son autónomos y auto-organizados
    • Diseñado para ser a prueba de fallos: réplicas, distribución de la carga…

Ejemplos notables

Napster

Creada inicialmente para compartir música con otros usuarios.

Tenía un servidor central para realizar búsquedas:

La descarga se realiza por bloques (cuando el archivo es grande), con el propósito de agilizar la descarga:

Sin embargo, cuando los usuarios de la red empezaron a infringir el copyright, cerraron el servidor, el principal punto de fallo. Por tanto, se cayó toda la red dado que no se podían hacer consultas. El servidor también era el cuello de botella del sistema, y era susceptible a ataques DDoS (denegación de servicios).

Ejemplo de una red de Napster

Ejemplo de una red de Napster

Napster

En la red P2P de compartición de música Napster, se usan dos modelos distintos:

  • Cliente-Servidor para las consultas de archivos.
  • P2P para la descarga. Para acelerar el proceso se descargan por bloques.

El problema es que el servidor era el cuello de botella y el principal punto de fallo.

Lo que es un claro ejemplo de una aplicación que se rige por varios modelos de la computación distribuida.

Gnutella

Se trata de una mejora de Napster muy utilizada tras su caída en 2001; y pensada para compartir todo tipo de archivos, no solo música.

Gnutella

Se trata de un sistema completamente P2P, ya que utiliza un método de búsqueda descentralizada, para no depender de un servidor. Por tanto, en principio no es susceptible a ataques [DDoS] y es muy difícil tumbar toda la red: si se apaga uno de los nodos, sea cual sea, la red sigue funcionando.

Aún así, este sistema tiene sus propios problemas: conocimiento de otros nodos, flooding queries, verificación de los resultados…

El funcionamiento es el siguiente:

Esto puede ser un problema por generar tanto tráfico, por lo que estos mensajes llevan un TTL (Time To Live) que se decrementa con cada salto y al llegar a 0 no se reenvía. Con esto se limita un máximo de x saltos, lo que permite localizar la búsqueda a un área geográfica en concreto.

Ejemplo de búsqueda en una red _Gnutella_

Ejemplo de búsqueda en una red Gnutella

Principales problemas:

Kazaa

Se trata de un híbrido entre Napster y Gnutella, que intenta buscar lo «mejor de los dos mundos». Utiliza un protocolo llamado Fasttrack.

Se añade el concepto de super-peer:

El funcionamiento para los clientes en idéntica que en Napster.

Comparativa entre las topologías de _Napster_, _Gnutella_ y _Kazaa_

Comparativa entre las topologías de Napster, Gnutella y Kazaa

Kazaa
Se persigue el funcionamiento de Napster, que es intuitivo y funciona bien, pero a la vez no es posible echar la red abajo mediante la existencia de múltiples servidores dinámicos (super-peers).

Freenet

Anonimato

Estar conectado a una red P2P no necesariamente implica que sus usuarios son anónimos.

  • Un cliente tiene una copia.
  • Informa al super-peer o servidor central, lo que deja registro en un log.
  • Otros clientes consultan el super-peer o servidor central para encontrar archivos, lo que también puede dejar logs. En el caso de Gnutella, el emisor de la petición es conocido por todos.
  • Durante la descarga, el cliente puede ver quién se lo está enviando.

Una posible estrategia por las autoridades es publicar «contenido interesante», y establecerse como super-peer para recibir consultas de los usuarios junto con su dirección IP, desde la que se puede obtener la dirección física a partir del suministrador de acceso a internet.

A diferencia de las anteriores, Freenet es una red P2P cuyo objetivo principal es la compartición de archivos manteniendo a sus usuarios anónimos.

Las consultas se enrutan a través de distintos nodos (forwarding), es decir, será el nodo siguiente quien repita la consulta. Así, cuando recibo una consulta, no sé si el nodo es intermediario o si es el emisor original.

Se utiliza un algoritmo de búsqueda incremental (discovery) para encaminar las consultas hacia el nodo correcto. En cada nodo se comprueba los caminos por los que puede reenviar la consulta y descartar callejones sin salida y bucles.

Para realizar la descarga, los flujos de datos circulan en la ruta inversa a la consulta: se devuelven al intermediario.

Lógicamente, esta estrategia genera más tráfico, pero:

Redes P2P estructuradas

En las redes P2P no estructuradas, los enlaces son arbitrarios. Si un usuario desea encontrar información específica, la petición debe recorrer toda la red.

Por otro lado, las redes P2P estructuradas son la nueva generación de este paradigma. Se utilizan mayoritariamente en entornos empresariales, donde están obligados a distribuir la información de forma equitativa. Esta clase de sistemas son los que generan el mayor tráfico de todo internet.

Características:

Por tanto, el sistema P2P es un conjunto de nodos con una API para poder acceder a esa tabla hash distribuida.

Distributed Hash Table (DHT)

Se trata de la versión distribuida de una estructura de datos tabla hash.

Cada nodo de la red será responsable de un subconjunto de pares clave-valor, y el tamaño será aproximadamente el mismo para cada todos, consiguiendo así distribuir la carga.

Las búsquedas consistirán en encontrar el nodo responsable a partir de la clave.

Interfaz genérica de DHT

Las operaciones son las siguientes:

Se pueden construir muchos servicios sobre una interfaz DHT:

Características deseables:

Chord API

Se trata del algoritmo más simple que implementa DHT.

Un sistema con $N$ nodos y $K$ claves:

Funcionamiento:

Problemas y desventajas:

Otras implementaciones

Otras implementaciones
Pastry
  • Interfaz muy similar a Chord.
  • Facilita la localidad espacial para minimizar la distancia que tienen que viajar los mensajes:
    • En lugar de organizar el espacio en un círculo, el routing se basa en la cercanía numérica de sus ids.
    • Cambios en un único bit indican que los nodos están próximos físicamente.
    • Cada salto siempre implica el cambio de un bit, y por eso tiene localidad espacial.
CAN
  • La topología de la red es la superficie de un toroide $d$-dimensional con coordenadas cartesianas.
  • Cada nodo es responsable de una zona en el espacio.
  • Las claves se corresponden a un punto en el espacio.
Anterior: Sistemas de Mensajes: RabbitMQ Volver a Redes y Computación Distribuida Siguiente: Agentes