Peer-to-peer
# Peer-to-peer

Una red peer-to-peer, red de pares, red entre iguales o red entre pares (P2P, por sus siglas en inglés) es una red de ordenadores en la que todos o algunos aspectos funcionan sin clientes ni servidores fijos, sino una serie de nodos que se comportan como iguales entre sí. Es más, actúan simultáneamente como clientes y servidores respecto a los demás nodos de la red. Las redes P2P permiten el intercambio directo de información, en cualquier formato, entre los ordenadores interconectados.
Cuando un cliente entra a este sistema, hace una conexión directa a uno de estos últimos, en donde recolecta y almacena toda la información y contenido disponible para compartir. Se trata entonces de un programa cuya función es la de conectar a los usuarios a través de una red sin servidores que facilita la descarga de música, películas, libros, fotos y software entre todos los otros usuarios, de manera gratuita. Estos archivos son compartidos “de computador a computador” por el solo hecho de tener acceso al sistema.
Normalmente, este tipo de redes se implementan como redes superpuestas construidas en la capa de aplicación de redes públicas como Internet.
El hecho de que sirvan para compartir e intercambiar información de forma directa entre dos o más usuarios ha propiciado que parte de los usuarios lo utilicen para intercambiar archivos cuyo contenido está sujeto a las leyes de derechos de autor, lo que ha generado una gran polémica entre defensores y detractores de estos sistemas.
Las redes peer-to-peer aprovechan, administran y optimizan el uso del ancho de banda de los demás usuarios de la red por medio de la conectividad entre los mismos, y obtienen así más rendimiento en las conexiones y transferencias que con algunos métodos centralizados convencionales, donde una cantidad relativamente pequeña de servidores provee el total del ancho de banda y recursos compartidos para un servicio o aplicación.
Dichas redes son útiles para diversos propósitos. A menudo se usan para compartir ficheros (archivos) de cualquier tipo (por ejemplo, audio, vídeo o software). Este tipo de red también suele usarse en telefonía VoIP para hacer más eficiente la transmisión de datos en tiempo real.
La eficacia de los nodos en el enlace y transmisión de datos puede variar según su configuración local (cortafuegos, NAT, ruteadores, etc.), velocidad de proceso, disponibilidad de ancho de banda de su conexión a la red y capacidad de almacenamiento en disco, pero mientras el número de nodos crezca más difícil será la administración de recursos de la red, y la seguridad puede ser afectada, ya que si un nodo es infectado es posible que pueda infectar a cada nodo de la red, dado que a mayor número de nodos conectados, mayor es el riesgo que se puede presentar en la red.
En mayo de 1999, con millones de personas más en Internet, Shawn Fanning introdujo la aplicación para compartir música y archivos llamada Napster. Napster fue el comienzo de las redes peer-to-peer, como las conocemos hoy en día, donde "los usuarios que participan pueden establecer una red virtual, totalmente independiente de la red física, sin tener que obedecer a cualquier autoridad administrativa o restricciones".

# Peer-to-peer
## Aplicaciones de las redes P2P

Actualmente, en Internet el ancho de banda o las capacidades de almacenamiento y cómputo son recursos caros. En aquellas aplicaciones y servicios que requieran una enorme cantidad de recursos pueden usarse las redes P2P.
Algunos ejemplos de aplicación de las redes P2P son los siguientes:
* Intercambio y búsqueda de ficheros. Quizás sea la aplicación más extendida de este tipo de redes. Algunos ejemplos son BitTorrent o eMule (de la red eDonkey2000) .
* Sistemas de ficheros distribuidos, como CFS o Freenet.
* Sistemas para proporcionar cierto grado de anonimato, como i2p, Tarzan P2P o MorphMix. Este tipo de tecnologías forman parte de la llamada red oscura y constituyen el llamado peer-to-peer anónimo.
* Sistemas de telefonía por Internet, como versiones anteriores de Skype.
* A partir del año 2006, cada vez más compañías europeas y norteamericanas, como Warner Bros o la BBC, empezaron a ver el P2P como una alternativa a la distribución convencional de películas y programas de televisión, y ofrecen parte de sus contenidos a través de tecnologías como la de BitTorrent.
* Cálculos científicos que procesen enormes bases de datos, como los procedimientos bioinformáticos.
* Monedas virtuales para transacciones entre partes. Bitcoin
* Grabadores de sistemas de CCTV que transmiten las imágenes a usuarios conectados desde celulares y computadores en ISP con puertos bloqueados. DVR
Las redes P2P pueden usarse también para hacer funcionar grandes sistemas de software diseñados para realizar pruebas que identifiquen la presencia de posibles fármacos. El primer sistema diseñado con tal propósito se desarrolló en el 2001, en el Centro Computacional para el Descubrimiento de Medicamentos (Centre for Computational Drug Discovery) en la prestigiosa Universidad de Oxford y con la cooperación de la Fundación Nacional para la Investigación del Cáncer (National Foundation for Cancer Research) de los Estados Unidos.
Actualmente existen varios sistemas software similares que se desarrollan bajo el auspicio de proyectos como el proyecto de Dispositivos Unidos en la Investigación del Cáncer (United Devices Cancer Research Project). En una escala más pequeña, existen sistemas de administración autónoma para los biólogos computacionales, como el Chinook, que se unen para ejecutar y hacer comparaciones de datos bioinformáticos con los más de 25 diferentes servicios de análisis que ofrece. Uno de sus propósitos consiste en facilitar el intercambio de técnicas de análisis dentro de una comunidad local.
Las instituciones académicas también han comenzado la experimentación con compartición de archivos, como es el caso de LionShare.

# Peer-to-peer
## Desarrollo histórico

SETI @ home se estableció en 1999 Si bien los sistemas P2P se habían utilizado anteriormente en muchos dominios de aplicaciones, el concepto se popularizó gracias a los sistemas de intercambio de archivos , como la aplicación para compartir música Napster (originalmente lanzada en 1999). El movimiento de igual a igual permitió que millones de usuarios de Internet se conectaran "directamente, formando grupos y colaborando para convertirse en motores de búsqueda creados por los usuarios, supercomputadores virtuales y sistemas de archivos". El concepto básico de computación peer-to-peer se previó en los sistemas de software anteriores y en las discusiones de redes, remontándose a los principios establecidos en la primera Solicitud de Comentarios , RFC 1 .
La visión de Tim Berners-Lee para la World Wide Web era similar a la de una red P2P, ya que suponía que cada usuario de la web sería un editor y colaborador activo, creando y vinculando contenido para formar una "red" de enlaces entrelazados. La Internet inicial era más abierta que el presente, donde dos máquinas conectadas a Internet podían enviar paquetes entre sí sin firewalls y otras medidas de seguridad. [ página necesaria ] Esto contrasta con la estructura de transmisión de la web como se ha desarrollado a lo largo de los años. Como precursor de Internet, ARPANET fue una exitosa red cliente-servidor donde "cada nodo participante podía solicitar y servir contenido". Sin embargo, ARPANET no se autoorganizó y carecía de la capacidad de "proporcionar ningún medio para el enrutamiento basado en el contexto o el contenido más allá del enrutamiento basado en direcciones 'simple'".
Por lo tanto, se estableció USENET , un sistema de mensajería distribuida que a menudo se describe como una arquitectura de extremo a extremo temprana. Fue desarrollado en 1979 como un sistema que impone un modelo de control descentralizado . El modelo básico es un modelo cliente-servidor desde la perspectiva del usuario o cliente que ofrece un enfoque autoorganizado para los servidores de grupos de noticias. Sin embargo, los servidores de noticias se comunican entre sí como pares para propagar artículos de noticias de Usenet en todo el grupo de servidores de red. La misma consideración se aplica al correo electrónico SMTP en el sentido de que la red central de retransmisión de correo electrónico de los agentes de transferencia de correo tiene un carácter de igual a igual, mientras que la periferia de los clientes de correo electrónico y sus conexiones directas es estrictamente una relación cliente-servidor. [ citación necesitada ]
En mayo de 1999, con millones de personas más en Internet, Shawn Fanning presentó la aplicación de música y uso compartido de archivos llamada Napster. Napster fue el comienzo de las redes P2P, tal como las conocemos hoy en día, donde "los usuarios participantes establecen una red virtual, totalmente independiente de la red física, sin tener que obedecer ninguna autoridad administrativa o restricciones".

# Peer-to-peer
## Características

Seis características deseables de las redes P2P:
* Escalabilidad. Las redes P2P tienen un alcance mundial con cientos de millones de usuarios potenciales. En general, lo deseable es que cuantos más nodos estén conectados a una red P2P, mejor será su funcionamiento. Así, cuando los nodos llegan y comparten sus propios recursos, los recursos totales del sistema aumentan. Esto es diferente en una arquitectura del modo servidor-cliente con un sistema fijo de servidores, en los cuales la adición de clientes podría significar una transferencia de datos más lenta para todos los usuarios. Algunos autores advierten que, si proliferan mucho este tipo de redes, cliente-servidor, podrían llegar a su fin, ya que a cada una de estas redes se conectarán muy pocos usuarios.
* Robustez. La naturaleza distribuida de las redes peer-to-peer también incrementa la robustez en caso de haber fallos en la réplica excesiva de los datos hacia múltiples destinos, y —-en sistemas P2P puros—- permitiendo a los peers encontrar la información sin hacer peticiones a ningún servidor centralizado de indexado. En el último caso, no hay ningún punto singular de falla en el sistema.
* Descentralización. Estas redes por definición son descentralizadas y todos los nodos son iguales. No existen nodos con funciones especiales, y por tanto ningún nodo es imprescindible para el funcionamiento de la red. En realidad, algunas redes comúnmente llamadas P2P no cumplen esta característica, como Napster, eDonkey o BitTorrent.
* Distribución de costes entre los usuarios. Se comparten o donan recursos a cambio de recursos. Según la aplicación de la red, los recursos pueden ser archivos, ancho de banda, ciclos de proceso o almacenamiento de disco.
* Anonimato. Es deseable que en estas redes quede anónimo el autor de un contenido, el editor, el lector, el servidor que lo alberga y la petición para encontrarlo, siempre que así lo necesiten los usuarios. Muchas veces el derecho al anonimato y los derechos de autor son incompatibles entre sí, y la industria propone mecanismos como el DRM para limitar ambos.
* Seguridad. Es una de las características deseables de las redes P2P menos implementada. Los objetivos de un P2P seguro serían identificar y evitar los nodos maliciosos, evitar el contenido infectado, evitar el espionaje de las comunicaciones entre nodos, creación de grupos seguros de nodos dentro de la red, protección de los recursos de la red... La mayor parte de los nodos aún están bajo investigación, pero los mecanismos más prometedores son: cifrado multiclave, cajas de arena, gestión de derechos de autor (la industria define qué puede hacer el usuario; por ejemplo, la segunda vez que se oye la canción se apaga), reputación (permitir acceso sólo a los conocidos), comunicaciones seguras, comentarios sobre los ficheros, etc.

# Peer-to-peer
## Problemas de funcionamiento

La mayor parte de los nodos de Internet no disponen de una dirección IP fija o siquiera accesible para otros nodos de Internet. Este es el caso, por ejemplo, de los nodos que se conectan a través de redes locales como Wifi o Ethernet, de aquellos que tienen algún tipo de cortafuegos y NAT o de los que se conectan a través de la mayor parte de los ISPs del mundo. Para el correcto funcionamiento de una red P2P, hay que resolver dos problemas fundamentales: cómo se encuentra un nodo que ya esté conectado a la red P2P y cómo se conectan los nodos sin dirección IP pública entre ellos.
Para resolver el primer problema, la solución habitual es realizar una conexión a un servidor (o servidores) inicial con dirección bien conocida (normalmente IP fija) que el programa P2P tiene almacenada. Este servidor inicial se encarga de mantener una lista con las direcciones de otros nodos que están actualmente conectados a la red. Tras esto, los clientes ya tienen información suficiente para entrar en la red y pueden intercambiar información con otros nodos, ya sin intervención de los servidores iniciales.
Para resolver el problema de conexión cuando los nodos no tienen dirección pública, estos se conectan a través de otro nodo que funciona como proxy de la conexión. Los dos nodos se conectan al proxy y este envía la información que llega de uno al otro. Cualquier nodo con una dirección IP pública puede ser escogido como proxy de una conexión entre dos nodos. Por ejemplo, en la red Skype a través de nuestro ordenador pueden pasar conversaciones de otras personas. En estos casos, es imprescindible la implementación de algún mecanismo de seguridad para evitar que los proxies pueden llegar a entender la comunicación entre los dos nodos.

# Peer-to-peer
## Clasificación
### Según grado de centralización

Una posible clasificación de las redes P2P pudiera ser acorde a su grado de centralización:

# Peer-to-peer
## Clasificación
### Según grado de centralización
#### Redes P2P centralizadas

Este tipo de red P2P se basa en una arquitectura monolítica en la que todas las transacciones se hacen a través de un único servidor que sirve de punto de enlace entre dos nodos y que, a la vez, almacena y distribuye los nodos donde se almacenan los contenidos.
Poseen una administración muy dinámica y una disposición más permanente de contenido. Sin embargo, está muy limitada en la privacidad de los usuarios y en la falta de escalabilidad de un solo servidor, además de ofrecer problemas en puntos únicos de fallo, situaciones legales y enormes costos en el mantenimiento, así como el consumo de ancho de banda.
Una red de este tipo reúne las siguientes características:
* Se rige bajo un único servidor, que sirve como punto de enlace entre nodos y como servidor de acceso al contenido, el cual distribuye a petición de los nodos.
* Todas las comunicaciones (como las peticiones y encaminamientos entre nodos) dependen exclusivamente de la existencia del servidor.
Algunos ejemplos de este tipo de redes son Napster y Audiogalaxy.

# Peer-to-peer
## Clasificación
### Según grado de centralización
#### Redes P2P híbridas, semicentralizadas o mixtas

En este tipo de red, se puede observar la interacción entre un servidor central que sirve como hub y administra los recursos de banda ancha, enrutamientos y comunicación entre nodos pero sin saber la identidad de cada nodo y sin almacenar información alguna, por lo que el servidor no comparte archivos de ningún tipo a ningún nodo. Tiene la peculiaridad de funcionar (en algunos casos como en Torrent) de ambas maneras, es decir, puede incorporar más de un servidor que gestione los recursos compartidos, pero también, en caso de que el servidor o los servidores que gestionan todo caigan, el grupo de nodos puede seguir en contacto a través de una conexión directa entre ellos mismos, con lo que es posible seguir compartiendo y descargando más información en ausencia de los servidores. Este tipo de P2P presenta las siguientes características:
* Tiene un servidor central que guarda información en espera y responde a peticiones para esa información.
* Los nodos son responsables de hospedar la información (pues el servidor central no almacena la información) que permite al servidor central reconocer los recursos que se desean compartir, y para poder descargar esos recursos compartidos a los usuarios que lo solicitan.
* Las terminales de enrutamiento son direcciones usadas por el servidor, que son administradas por un sistema de índices para obtener una dirección absoluta.
Algunos ejemplos de una red P2P híbrida son BitTorrent, eDonkey y Direct Connect.

# Peer-to-peer
## Clasificación
### Según grado de centralización
#### Redes P2P «puras» o totalmente descentralizadas

Las redes P2P de este tipo son las más comunes, siendo las más versátiles al no requerir de un gestionamiento central de ningún tipo, lo que permite una reducción de la necesidad de usar un servidor central, por lo que se opta por los mismos usuarios como nodos de esas conexiones y también como almacenadores de esa información. En otras palabras, todas las comunicaciones son directamente de usuario a usuario con ayuda de un nodo (que es otro usuario) quien permite enlazar esas comunicaciones. Las redes de este tipo tienen las siguientes características:
* Los nodos actúan como cliente y como servidor.
* No existe un servidor central que maneje las conexiones de red.
* No hay un enrutador central que sirva como nodo y administre direcciones.
Cada par dentro de esta arquitectura trata de mantener un cierto número de conexiones con otros pares durante todo el tiempo. Este conjunto de pares conectados transporta el tráfico de red, que está conformado esencialmente por peticiones y respuestas a esas peticiones, y varios mensajes de control que facilitan el descubrimiento de otros nodos (mensajes ping en Gnutella).
El modelo P2P puro es más robusto al no depender de un servidor central, además más económico. La principal desventaja es el elevado tiempo y sobrecarga de ancho de banda que suponen las búsquedas de información en la red. Además puede ser que el recurso buscado y existente ni siquiera pueda ser encontrado.
Algunos ejemplos de una red P2P "pura" son: Kademlia, Ares Galaxy, Gnutella, Freenet, Gnutella2 y Maidsafe.

# Peer-to-peer
## Clasificación
### Según su estructuración

La red de sobrecapa del P2P consiste en todos los usuarios que participan como nodos de red. Hay enlaces entre dos nodos cualesquiera que se conozcan: es decir, si un usuario participante conoce la localización de otro usuario en la red del P2P, entonces hay un borde dirigido del nodo anterior al último nodo en la red de sobrecapa. Basándonos en cómo los nodos en la red de sobrecapa se enlazan el uno al otro, podemos clasificar las redes del P2P como no estructuradas o estructuradas.
Se forma una red P2P no estructurada cuando los enlaces de la sobrecapa se establecen arbitrariamente. Tales redes pueden construirse muy fácilmente cuando un usuario que desea unirse a la red puede copiar enlaces existentes de otro nodo y después formar sus propios enlaces en un plazo determinado. Ejemplo de este tipo de red es Gnutella.
En una red P2P no estructurada, si un usuario desea encontrar información específica en la red, la petición tiene que recorrer toda la red para encontrar tantos usuarios como sea posible, para conseguir a alguien que comparta los datos. La desventaja principal con estas redes es que las peticiones no siempre podrán resolverse. Es muy probable que un contenido popular esté disponible para varios usuarios, y es muy probable que cualquier usuario que lo busque lo encuentre; sin embargo, si un usuario está buscando datos no muy populares que comparten sólo unos cuantos usuarios, será altamente probable que la búsqueda no dé los resultados esperados. Dado que no hay correlación entre un usuario y el contenido compartido por él, entonces no hay garantía de que el usuario encuentre al que tiene la información deseada.
El flooding también incrementa el tráfico en la red y, por lo tanto, estas redes suelen tener una eficacia muy baja en los resultados de búsqueda. La mayor parte de las redes populares P2P (Napster, Gnutella y KaZaA) son redes P2P sin estructura.
Las redes P2P estructuradas superan las limitaciones de las redes no estructuradas, mantienen una tabla de hash distribuida (DHT) y permiten que cada usuario sea responsable de una parte específica del contenido en la red. Estas redes utilizan funciones de hash distribuido y asignan valores a cada contenido y a cada usuario en la red. Después siguen un protocolo global en la determinación de qué usuario es responsable de qué contenido. De esta manera, siempre que un usuario desee buscar ciertos datos, utilizará el protocolo global para determinar al usuario o usuarios que lo tiene(n) y después dirigirá la búsqueda hacia estos. Algunas redes P2P estructuradas son:
* Chord
* Pastry P2P Network
* Tapestry P2P Network
* Content Addressable Network
* Tulip Overlay
* CAN (red p2p)

# Peer-to-peer
## Clasificación
### Según la generación a la que pertenezcan

También se podría clasificar las redes P2P según su generación:

# Peer-to-peer
## Clasificación
### Según la generación a la que pertenezcan
#### Primera generación P2P

Se trata de las primeras redes P2P, es decir, la definición básica de P2P. El primer ejemplo más representativo de esta generación es Napster que sirvió para intercambiar archivos (no muy grandes) de música a través de una arquitectura centralizada en la que los archivos los almacenaban y los proporcionaban los usuarios.

# Peer-to-peer
## Clasificación
### Según la generación a la que pertenezcan
#### Segunda generación P2P

En esta generación se implementó por primera vez la característica de descentralización, por la cual no existe ningún servidor central y todos los nodos actúan de la misma manera (como cliente y como servidor). Esta característica se ha extendido a la mayoría de las redes P2P actuales. Uno de los ejemplos más conocidos es BitTorrent que entre sus mejoras está el compartir archivos más grandes.

# Peer-to-peer
## Clasificación
### Según la generación a la que pertenezcan
#### Segunda generación P2P
##### Middleware P2P

Middleware es software que se sitúa entre un sistema operativo y las aplicaciones que se ejecutan en él. Básicamente, funciona como una capa de traducción oculta para permitir la comunicación y la administración de datos en aplicaciones distribuidas. Un software Middleware funciona como un puente para unir 2 sistemas que son heterogéneos. De esta forma se logra disminuir las complejidades entre aplicaciones y sistemas operativos mediante la utilización de API. Tiene como función principal enmascarar la heterogeneidad del sistema distribuido para proporcionar un modelo de programación conveniente a los programadores de aplicaciones. Existen 2 tipos principales de middleware, de alto nivel y de bajo nivel.
Alto nivel
Ofrece funcionalidades esenciales, generalmente relacionadas con cambios sobre el soporte básico TCP/UDP + IP. Ejemplos : Multicast sobre IP, Red virtual sobre la red IP subyacente y Marshalling.
Bajo nivel
Es de invocación remota y esta centrada en el envío/recepción de datos. Ejemplos: Remote Procedure Call (RPC) y Remote Method Invocation (RMI).
En esta generación surgió el middleware P2P que es un tipo de middleware que da un soporte horizontal a un servicio web. Se trata de una plataforma en la red para acceder a los recursos de manera rápida y sin importar dónde estén ubicados.
El middleware P2P está diseñado para distribuir los recursos en múltiples nodos conectados vía internet. Además, se encarga de enviar los mensajes correspondientes desde los clientes hasta los dispositivos donde se encuentra la información buscada. Como consecuencia, los usuarios no necesitan preocuparse de dónde se almacena su información ni de cómo llegar hasta ella. El conocimiento sobre la ubicación de los recursos debe estar distribuido por toda la red. Cada nodo es responsable de conocer a detalle sus nodos vecinos y los archivos resguardados en su porción de red, además de tener información básica de la topología entera.
Napster (primera generación P2P), para solucionar dicho problema, mantenía un índice unificado de archivos disponibles. Sin embargo, en la segunda generación, los sistemas de archivos como Gnutella y Freenet hacen uso de índices distribuidos, con algoritmos específicos para cada sistema.
Los sistemas middleware P2P están diseñados específicamente para satisfacer la necesidad de ubicación automática de los objetos distribuidos que manejan los sistemas y las aplicaciones peer-to-peer.
* Requisitos funcionales: Su función es simplificar la construcción de servicios que se implementan en muchas máquinas en una red ampliamente distribuida. Para lograrlo, los clientes tienen que poder localizar y comunicarse con cualquier recurso individual de un servicio, aunque los recursos estén distribuidos entre varias máquinas.
    Otro requisito importante es la capacidad de añadir nuevos recursos y eliminarlos cuando se desee, al igual que con los hosts.
    De acuerdo con su definición como middleware, los sistemas middleware P2P deberían ofrecer una interfaz de programación sencilla para los programadores de la aplicación, independientemente de los recursos distribuidos que maneje la misma.
* Requisitos no funcionales: Para funcionar correctamente, los sistemas middleware P2P deben cumplir los siguientes recursos no funcionales:
    - Escalabilidad global: Deben estar diseñados para admitir aplicaciones que acceden a millones de objetos de cientos de miles de hosts.
* Requisitos funcionales: Su función es simplificar la construcción de servicios que se implementan en muchas máquinas en una red ampliamente distribuida. Para lograrlo, los clientes tienen que poder localizar y comunicarse con cualquier recurso individual de un servicio, aunque los recursos estén distribuidos entre varias máquinas.
    Otro requisito importante es la capacidad de añadir nuevos recursos y eliminarlos cuando se desee, al igual que con los hosts.
    De acuerdo con su definición como middleware, los sistemas middleware P2P deberían ofrecer una interfaz de programación sencilla para los programadores de la aplicación, independientemente de los recursos distribuidos que maneje la misma.
* Requisitos no funcionales: Para funcionar correctamente, los sistemas middleware P2P deben cumplir los siguientes recursos no funcionales:
    - Escalabilidad global: Deben estar diseñados para admitir aplicaciones que acceden a millones de objetos de cientos de miles de hosts.
    - Balanceo de carga: El rendimiento de cualquier sistema distribuido depende de la distribución equilibrada de la carga de trabajo entre las máquinas. En los sistemas middleware P2P se logrará mediante la colocación aleatoria de recursos y la replicación de los recursos más usados.
    - Optimización de las interacciones locales entre pares vecinos: La distancia entre los nodos que interactúan supone un impacto sustancial en la latencia de las interacciones individuales. La carga del tráfico de red también se puede ver afectada por esa distancia. Por ello, el middleware debe tratar de dejar los recursos a los que más accede un nodo, cerca del mismo.
El middleware P2P tiene, también, un papel fundamental dentro de la sincronización de los eventos dentro del sistema. Esta función hace posible que usuarios conectados desde diferentes dispositivos puedan interactuar en un ambiente virtual concurrentemente. Como el usuario espera interacciones en tiempo real, el middleware debe asegurarse de que la latencia sea baja y su comunicación fluida.
Algunos ejemplos de middleware P2P son el routing overlay (Red superpuesta), las tablas de hash distribuidas (Tabla de hash distribuida) -o DHT- y Kademlia (Kademlia).

# Peer-to-peer
## Clasificación
### Según la generación a la que pertenezcan
#### Tercera generación P2P

Son las más recientes. En ellas se ha extendido y estabilizado el concepto de Middleware P2P que se dio a conocer en la segunda generación, descentralizando el proceso indizado (DHT) y estableciendo un enrutamiento más eficiente (routing overlay, tablas de encadenamiento). Implementan una comunicación no directa, cifrada y anónima.

# Peer-to-peer
## Clasificación
### Según el grado de protección de nuestra identidad

Podemos clasificar las redes P2P según como protege la identidad:
* Sin características de anonimato
* Pseudónimo
* Red P2P Privada
* Friend-to-friend (de amigo-a-amigo)

# Peer-to-peer
## Clasificación
### Enrutamiento y descubrimiento de recursos

Las redes peer to peer (igual a igual), ponen en práctica la red virtual superpuesta en la parte superior de la topología de la red física, donde los nodos de la capa forman un subconjunto de los nodos de la red física. Los datos se intercambian directamente sobre la red TCP / IP subyacente, pero en la capa de aplicación pares son capaces de comunicarse entre sí directamente, a través de los enlaces lógicos de superposición (cada uno de los cuales corresponde a un camino a través de la red física subyacente). Las superposiciones son utilizadas para la indexación y el descubrimiento de pares, y hacer que el sistema peer to peer sea independiente de la topología de red física. Basado en cómo los nodos están relacionados entre sí dentro de la red de superposición, y cómo se indexan y se encuentran recursos, podemos clasificar como redes no estructurada o estructurada (o como un híbrido entre los dos).

# Peer-to-peer
## Clasificación
### Grids

Recientemente están apareciendo una serie de sistemas que intentan proveer la máxima integración de los peer para lograr compartir eficientemente determinados recursos. Si el sistema está especializado en compartir la capacidad de procesamiento se le llama grid computacional, si está especializado en compartir la capacidad de almacenamiento se le llama grid de datos.

# Peer-to-peer
## Dominio público, Copyleft y Creative Commons

Las aplicaciones P2P resultan útiles para intercambiar y compartir todo tipo de obras, entre ellas destacan los siguientes ejemplos:
* Obras que pertenecen al dominio público, como libros, películas, fotografías, etc.
* Creaciones propias, como vídeos, fotografías y animaciones que no tengan licencia.
* Programas libres publicados con licencias GPL, BSD, MPL, etc.
* Todo tipo de documentos con diversas licencias como el Copyleft y obras publicadas con licencias Creative Commons.

# Peer-to-peer
## Controversia legal
### Declaración de la ONU

En relación con el intercambio de archivos el informe de la ONU Reporte Especial sobre la promoción y la protección del derecho a la libertad de expresión y opinión, analiza la legislación de distintos gobiernos que castiga y considera muy grave que pueda llegar a negarse a los ciudadanos el acceso a Internet. El informe dice así:

# Peer-to-peer
## Controversia legal
### Situación legal en España

Algunos abogados especializados y algunas asociaciones de consumidores y usuarios afirman que es legal descargar archivos audiovisuales dentro del marco de la legislación actual, aunque estén sujetos a derechos de autor, amparándose en el derecho de copia privada y siempre que no haya ánimo de lucro. Parten del supuesto de que se está cumpliendo con el requisito establecido por la ley del uso privado de la obra audiovisual para no solicitar ninguna autorización por parte del titular de los derechos de autor para la reproducción (copia); se produce únicamente durante la ejecución (audición o reproducción visual) de la misma.
En la actualidad el uso de las redes P2P está totalmente permitido en España, ya que su uso puede servir para compartir archivos personales, creaciones propias, obras bajo dominio público, distribuciones Linux o incluso software libre. No hay sanciones para quien utilice las redes de pares porque son una herramienta más para compartir cualquier tipo de archivos. Se han dado algunas acciones policiales contra personas acusadas de intercambio de pornografía infantil por parte de la policía, ya que el P2P permite que cualquiera pueda acceder a los archivos. Por consiguiente, el P2P ha servido también para combatir algunos crímenes.
El 11 de julio de 2008 el gobierno español anunció que aprovecharía la presidencia española de la Unión Europea en el primer semestre del 2010 para frenar el uso de las redes P2P.
Referente a las páginas web de enlaces a redes P2P, el 18 de septiembre de 2008 se notificó el auto de la Audiencia Provincial de Madrid, en el que se confirma el sobreseimiento libre en el caso Sharemula, con lo cual se declaró que enlazarse a las redes de pares no constituye una actividad criminal. La reforma del Código penal de 2015, sin embargo, introdujo un nuevo delito que sanciona "a quien, en la prestación de servicios de la sociedad de la información, con ánimo de obtener un beneficio económico directo o indirecto, y en perjuicio de tercero, facilite de modo activo y no neutral y sin limitarse a un tratamiento meramente técnico, el acceso o la localización en Internet de obras o prestaciones objeto de propiedad intelectual sin la autorización de los titulares de los correspondientes derechos o de sus cesionarios, en particular ofreciendo listados ordenados y clasificados de enlaces a las obras y contenidos referidos anteriormente, aunque dichos enlaces hubieran sido facilitados inicialmente por los destinatarios de sus servicios".
El 20 de diciembre de 2008, los colectivos Compartir es bueno y Hacktivistas realizaron una descarga pública de contenidos con Copyright mediante P2P frente a la sede del PSOE, avisando con diez días de antelación al Ministro de Cultura, César Antonio Molina, y al Jefe de la Unidad de Delitos Telemáticos de la Guardia Civil. La descarga se realizó sin problemas, con la presencia de la policía y de los medios de comunicación.

# Peer-to-peer
## Redes, protocolos y aplicaciones
### Redes y protocolos

| Red o Protocolo | Uso | Programas |
| ANts P2P | Intercambio de ficheros/Distribución de software/Distribución de multimedia | ANts P2P |
| Ares | Intercambio de ficheros | Ares Galaxy, Warez P2P, KCeasy, jAres P2P |
| BitTorrent | Intercambio de ficheros/Distribución de software/Distribución de multimedia | Ver Anexo:Comparativa de clientes BitTorrent para una lista detallada. |
| Bitcoin | Dinero electrónico | Bitcoin-Qt, Armory, MultiBit, Electrum, BitcoinSpinner, así como varias aplicaciones web: Coinbase, Instawallet, MyWallet |
| Direct Connect | Intercambio de ficheros, chat | DC++, NeoModus Direct Connect, SababaDC, BCDC++, RevConnect, fulDC, LDC++, CzDC, McDC++, DCDM++, DDC++, iDC++, IceDC++, Zion++, R2++, rmDC++, LinuxDC++, LanDC++, ApexDC++, StrongDC++ |
| eDonkey | Intercambio de ficheros | aMule, eDonkey2000 (extinguido), eMule, eMule Plus, FlashGet, iMesh, Jubster, lMule, MLDonkey, Morpheus, Pruna, Shareaza, xMule |
| FastTrack | Intercambio de ficheros | giFT, Grokster, iMesh (y sus variantes como iMesh Light), Kazaa (y sus variantes como Kazaa Lite), KCeasy, Mammoth, MLDonkey, Poisoned |
| Fopnu | Intercambio de ficheros | Fopnu |
| Freenet | Almacenamiento distribuido | Freenet, Entropy (red separada de Freenet) |
| GNUnet | Intercambio de ficheros, chat | GNUnet, (GNUnet-gtk) |
| Gnutella | Intercambio de ficheros | BearShare, Cabos, FilesWire, FrostWire, Gnucleus, Grokster, gtk-gnutella, iMesh, Kiwi Alpha, LimeWire (extinguido), MLDonkey, Morpheus, MP3 Rocket, Poisoned, Shareaza, Swapper, XoloX, KCeasy |
| Gnutella2 | Intercambio de ficheros | Adagio, Gnucleus, Kiwi Alpha, MLDonkey, Morpheus, Shareaza, TrustyFiles |
| Infinit | Intercambio de ficheros | Infinit |
| JXTA | Aplicaciones distribuidas | Collanos Workplace (Software colaborativo), Sixearch |
| Kad | Intercambio de ficheros | aMule, eMule, MLDonkey |
| Napster | Intercambio de ficheros | Napigator, Napster |
| OpenNap | Intercambio de ficheros | WinMX, Utatane, XNap, Napster |
| Osiris sps | creación de portales web anónimos | Osiris (Serverless Portal System) |
| P2PSP | Streaming de video | P2PSP |
| P2PTV | Streaming de video | TVUPlayer, Joost, CoolStreaming, Cybersky-TV, TVants, PPLive, LiveStation, Sopcast |
| PDTP | Streaming e intercambio de ficheros | PDTP |
| Peercasting | Streaming | PeerCast, IceShare, FreeCast, Rawflow |
| Pichat | Chat e intercambio de información | Pichat, Pidgin, Moonchat, C4 |
| RetroShare | Intercambio de ficheros, charla, Instant Messenger, Grupos de noticias, darknet | |
| Usenet | Grupos de noticias | |
| Utopia | Chat anónimo, minado de criptomonedas (CRP) mediante protocolo P2P, intercambio de ficheros, navegación P2P, hosting, charla, grupos de noticias, administración | Utopia |
| WPNP | Intercambio de ficheros | WinMX |
| Windows Peer-to-Peer | Desarrollo de aplicaciones distribuidas, colaboración | Incluido en el Advanced Networking Pack para Windows XP, Windows XP SP2, Windows Vista. |
* Otras redes: Applejuice, Audiogalaxy, Avalanche, CAKE, Chord, The Circle, Coral, Dijjer, FileTopia, Groove, Hamachi, iFolder, konspire2b, Madster/Aimster, MUTE, NeoRouter, OpenFT, P-Grid, IRC, MojoNation, Mnet, Octoshape, Omemo, Overnet, Peersites, Perfect Dark, Scour, SharingZone, Skype, Solipsis, soribada, Soulseek, SPIN, Swarmcast, WASTE, Winny, Wippien.

# Peer-to-peer
## Redes, protocolos y aplicaciones
### Aplicaciones multirred

| Aplicación | Red o Protocolo | Sistema operativo | Software libre |
| aMule | eDonkey, Kad | Multiplataforma | Sí |
| eMule | eDonkey, Kad | Windows | Sí |
| FilesWire | Gnutella, G3 | Multiplataforma | No |
| giFT | eDonkey, FastTrack, Gnutella | Multiplataforma | Sí |
| Gnucleus | Gnutella, Gnutella2 | Windows | Sí |
| iMesh | FastTrack, eDonkey, Gnutella, Gnutella2 (versiones anteriores a la 6.0) | Windows | No |
| KCeasy | Ares Galaxy, FastTrack, Gnutella, OpenFT | Windows | Sí |
| Kiwi Alpha | Gnutella, Gnutella2 | Windows | No |
| MLDonkey | BitTorrent, Direct Connect, eDonkey, FastTrack, Kad, OpenNap, SoulSeek, HTTP/FTP | Multiplataforma | Sí |
| Morpheus | BitTorrent, Gnutella, Gnutella2 | Windows | No |
| Shareaza | Gnutella, Gnutella2, eDonkey, BitTorrent, HTTP/FTP | Windows | Si |
| Vagaa | BitTorrent, eDonkey, Kad | Windows | No |
| WinMX | WPNP, OpenNap | Windows | No |
| Zultrax | Gnutella, ZEPP | Windows | No |

# Peer-to-peer
## Ventajas

* La alta capacidad de almacenamiento: La información no se encuentra centralizada o puesta sobre un punto sino que está distribuida,entonces podemos tener gran volumen de información almacenada en la red porque está de forma focalizada o distribuida en muchos equipos.
* Disponibilidad: Dado que la información se encuentra repartida, hay muchos sitios para poder descargar por lo que existe una gran probabilidad de conseguir lo que nosotros necesitemos en ese momento.
* La fiabilidad: Es fiable porque si falla un nodo podemos seguir descargando, podemos encontrar más modos que sí permiten las descargas.
* Distribución de tráfico en la red: La información está en todos los puntos o en todos los nodos dentro de la red la información puede ser realmente localizada en cualquier lugar por lo tanto el tráfico se va hacer reducido y los servidores no se van a saturar.
* Compatibilidad: Tiene alta compatibilidad con cualquier sistema operativo para conectarse en red entre las computadoras.
* Accesibilidad: Al no tener que pagar cargo por uso o licencia tiene una gran accesibilidad.
* Sencillez: El uso de P2P es muy fácil ya que solo se tiene que descargar el programa.

# Peer-to-peer
## Desventajas

* Los pares de nodos se desconectan después de descargar, de esta forma reciben datos pero no ceden contenidos por lo que la arquitectura fallará, ya que no hay donde descargar.
* Presencia de los famosos firewall, ocasionalmente estos evitan que los usuarios reciban contenidos y que a su vez los cedan.
* Los problemas de confianza en ocasiones se descargan archivos con errores, los cuales pueden contener información que no se desea.
* Algunas veces las compañías intentan poner trampas para saber quien descarga la información.
* Un problema serio que tienen las redes P2P es la violación de derechos de autor y propiedad intelectual.
* Es muy fácil disipar virus y demás programas maliciosos por redes P2P que tiene como lógica la cooperación desinteresada.
* No se puede tener el control sobre la accesibilidad de la información en el software, por lo que se puede dificultar navegar para obtener un archivo en específico.
* Al aumentar la cantidad de dispositivos conectados, disminuye el rendimiento de los datos de navegación.
* La red no es totalmente estable, si los clientes no dejan acceder a los archivos, no podrán ser descargados por otros clientes.

# Peer-to-peer
## Otras aplicaciones

* Bitcoin y PPCoin son monedas digitales punto a punto basadas en pares, que permite el manejo y transacción de las monedas por medio de la red; promovido por la comunidad e independizado de cualquier autoridad central.
* Red comunitaria inalámbrica, Netsukuku (sistema de routing experimental de tipo peer-to-peer), permite una rápida conexión de la red en cualquier espacio del tiempo, sin la ayuda de ningún servidor central o de alguna firma autoritaria.
* Peer-to-peer para redes de área local (basado en la multidifusión IP), en las LAN los ordenadores trabajan en forma de igualdad, de tal manera que todos manejen las mismas funciones; sin privilegiarse uno sobre otro.
* Garden, aplicación que permite compartir la conexión abierta que comparte el acceso a Internet con otros dispositivos mediante Wi-Fi o Bluetooth.
* JXTA (plataforma de protocolo de red peer-to-peer), se centra en definir un conjunto de protocolos para creación de redes P2P, facilitando así a los programadores y diseñadores de aplicaciones; la creación de una topología que suministre los requisitos específicos para la aplicación propuesta.
* Algunas empresas que utilizan P2P para proveer servicios a sus clientes son:
** Skype y su exitoso servicio de telefonía VoIP.
** Netflix con streaming de películas.
** Spotify hace la distribución de música.

# Peer-to-peer
## Relación con los sistemas distribuidos

Si bien los sistemas distribuidos existen desde antes de la arquitectura P2P, esta última representó una revolución en el campo. P2P permitió abstraer a un mayor nivel a los sistemas distribuidos, de forma que, para los usuarios externos, pareciera una única máquina virtual. Todos los pormenores relacionados con los protocolos de comunicación entre nodos, las diferencias técnicas entre los dispositivos del sistema, el manejo de recursos y la seguridad se ocultaron. Así, P2P tomó los fundamentos existentes de los sistemas distribuidos y los llevó al siguiente nivel. A su vez, los sistemas distribuidos más recientes retomaron lo aprendido de las redes P2P, generando una relación simbiótica. Por ejemplo, el middleware P2P fungió como base para el middleware de otros sistemas distribuidos, favoreciendo la independencia entre las aplicaciones que corren sobre ellos y el sistema en sí. Profundizando más sobre el middleware P2P, en la actualidad las aplicaciones que corren sobre sistemas distribuidos requieren poder ejecutarse desde cualquier sitio, sin que esto afecte a su velocidad de respuesta o su rendimiento en general. Por lo tanto, requieren que el middleware ofrezca los servicios y recursos necesarios para que los programas se ejecuten de manera fluida. Además, este módulo abstrae a las capas inferiores del sistema y las independiza de las superiores, simplificando la tarea de usuarios y de programadores. Todos estos aspectos fundamentales para cualquier sistema distribuido, fueron traídos a la luz en el desarrollo de las redes P2P primigenias.