P2P applications

De Departamento de Informatica
Saltar a: navegación, buscar
Red P2P

P2P significa Peer-to-Peer, red entre pares o una red punto a punto. Consiste en una red de computadores en donde todos o algunos aspectos funcionan sin servidores fijos. Esto se debe a que esta red es una serie de nodos que se comportan iguales entre sí. Estos nodos no son de un proveedor de servicios, ni nada parecido, son simplemente computadores controlados por usuarios, ya sean de escritorio o portátiles.

En una red P2P, un computador conectado a esta actúa como cliente, cuando está recibiendo una transferencia de datos desde otro nodo, o como servidor, cuando envía paquetes hacia otro nodo, respecto a los demás nodos entre sí permitiendo un intercambio directo de información, que puede ser cualquier formato y tamaño, entre los distintos computadores interconectados.

Este tipo de red se implementa en la capa de aplicación de redes como internet donde principalmente es utilizada para la distribución de contenido que está sujeto a las leyes de copyright.

Contenido

Distribución de archivos (P2P File Distribution)

Esta aplicación de P2P consiste en distribuir un archivo desde un único origen a un gran número de nodos.

Para una primera aproximación se verá la diferencia entre cliente-servidor y P2P bajando una película. Para distribuir cualquier archivo en cliente-servidor, el servidor debe comunicarse con cada unos de los nodos y enviarles la película, en cambio, con una red P2P, cada nodo puede redistribuir cualquier parte del archivo que ha recibido de cualquier otro nodo. Es decir, si en mi computador se bajó un porcentaje de la película, esta misma parte puedo redistribuirla mientras bajo el porcentaje restante.

¿Cuál es la ventaja respecto a cliente-servidor? En una red P2P, el servidor no se sobrecarga, ni tampoco consume una excesiva cantidad de ancho de banda como en el caso de cliente-servidor, dado que no solo él comparte, sino que todos los demás nodos que han recibido parte del archivo compartido también lo hacen.

Un claro ejemplo de esto es el popular sistema BitTorrent.

Escalabilidad de las arquitecturas P2P

Siguiendo el ejemplo anterior, se tomará como supuesto que el servidor y los clientes no tienen ninguna otra aplicación de red corriendo, de forma que lo único que hace uso del ancho de banda es la distribución de la película.

A modo de comparación, se determinará el tiempo de distribución (Dcs) para las dos arquitecturas, cliente-servidor y P2P. Para esto, la velocidad de subida del servidor se denotará como Us, la velocidad de subida del nodo i será Ui, y Di la velocidad de descarga del nodo i. El tamaño de bits de la película será F, y N el número de nodos que desean obtener la película.

En el caso de cliente-servidor se presentan las siguiente observaciones:

  1. El servidor debe enviar la película a cada uno de los N nodos, por lo tanto, debe transmitir N * F bits. Además, sabiendo que la velocidad de subida del servidor es Us, el tiempo para distribuir el archivo será como mínimo (N * F) / Us segundos.
  2. Por otro lado, el nodo con la menor velocidad de descarga, no puede obtener los F bits que pesa la película en menos de F / Dmin segundos, siendo Dmin la velocidad de descarga menor entre todos los nodos.
P2P vs Cliente-Servidor

Tomando estas dos observaciones en cuenta, se puede decir que el tiempo de distribución de la película en la arquitectura cliente-servidor, debe ser mayor o igual al máximo tiempo entre éstas. Si la película pesará 5600 Mb (700 MB), la velocidad de subida del servidor fuera de 10 Mbps y la velocidad de descarga más lenta entre 6 nodos fueran 2 Mbps, entonces, el tiempo distribución sería mayor o igual a 56 mins, dado que por parte del servidor el tiempo mínimo sería de 56 mins, y en cambio, de parte de los nodos, sería de 47 mins aproximadamente.

Ahora, en el caso de P2P, cada nodo puede ayudar al servidor a distribuir la película. Al tener parte de la película puede ocupar su velocidad de subida para redistribuir con los demás. Para este caso es más complicado calcular el tiempo de distribución, ya que depende de cómo cada nodo distribuya partes del archivo a los demás, pero se tratará de hacer una aproximación al caso real.

Al igual que en el caso anterior, se deben tomar en cuenta ciertas observaciones:

  1. Al inicio de la distribución, la película solo la tiene el servidor, así que debe enviar el archivo completo al menos una vez, para que así llegue a los N nodos. Por lo tanto, el tiempo mínimo será de F / Us segundos. Cabe destacar que algunos bits puede que no vuelvan a ser enviados, ya que éstos, se pueden distribuir entre los mismos nodos.
  2. Al igual que la arquitectura cliente-servidor, el nodo con la menor velocidad de descarga no podrá obtener los F bits que pesa la película en menos de F / Dmin segundos.
  3. La velocidad de subida total será igual a la velocidad de subida del servidor, más la velocidad de subida de cada nodo Utotal = U1 + U2 + U3, etc. Por otro lado, el sistema servidor-nodos debe subir F bits en cada uno de los N nodos (o peers), suministrando en total N * F bits. Por lo tanto, la distribución de la película tendrá un tiempo de distribución mínimo de (N * F) / Utotal segundos.

Teniendo en cuenta estas observaciones, el tiempo mínimo de distribución en la arquitectura P2P, será el máximo entre estos tres factores. Si ponemos el mismo caso anterior (película de 5600 Mb, velocidad subida de servidor 10 Mbps, velocidad de descarga mas lenta de los 6 nodos, 2 Mbps, y velocidad de subida 1 Mbps de los nodos), entonces el tiempo mínimo de distribución sería de 47 mins, dado que es el mayor entre las tres observaciones hechas anteriormente, 9, 47 y 35 mins respectivamente.

Suponiendo que todos los nodos tienen la misma velocidad de subida U, que F / U = 1 hora, que la velocidad de subida del servidor es 10 veces la velocidad de un nodo (Us = 10 * U), y que la velocidad de descarga mínima entre todos los nodos es mayor o igual a la velocidad de subida del servidor (Dmin > = Us), podemos ver (figura P2P vs Cliente-Servidor) que para la arquitectura cliente-servidor el tiempo de distribución aumenta linealmente y sin límite a medida que el número de pares aumenta. Sin embargo, en una arquitectura P2P, el tiempo mínimo de distribución no sólo siempre es menor que el tiempo de distribución en la arquitectura cliente-servidor, sino que también, el tiempo de descarga es menor que una hora para cualquier número N de nodos. Por lo tanto, las aplicaciones que emplean la arquitectura P2P pueden auto-escalarse, lo cual es una consecuencia directa de que los nodos actúan como redistribuidores y consumidores de bits a la vez.

Tabla Hash Distribuida (DHT, Distributed Hash Table)

Las aplicaciones P2P necesitan contar contar con un índice (una base de datos) que soporte operaciones de búsqueda y actualización. Esto se debe a que al no ser un sistema centralizado, se necesita que los pares puedan llevar a cabo operaciones de almacenamiento del contenido en caché y de enrutamiento complejo de consultas entre ellos.

¿Qué es DHT?

Las tablas de hash distribuidas es una técnica de indexación y búsqueda. Forman una base de datos distribuida que permite la indexación y realización de consultas simples entre una gran cantidad (del orden de millones) de pares.

Es una clase de sistema distribuido descentralizado que proveen un servicio de búsqueda que almacena un par clave-valor. Cualquier nodo participante puede recuperar el valor asociado con una clave dada. Estas claves pueden ser, por ejemplo, nombres de películas, albums, entre otros, cuyo valor podría ser una dirección IP en donde se encuentra almacenado dicho contenido.

¿Cómo funcionan?

La información almacenada en estas está formada en parejas clave-valor. Los peers consultan esta base de datos suministrando la clave, en caso de que exista un par con la clave suministrada, la base de datos devuelve el listado de pares correspondiente al peer que realizó la consulta. En los sistemas P2P, se necesita distribuir las parejas clave-valor a todos los pares, de forma tal de que cada par sólo almacene un pequeño subconjunto de la totalidad parejas clave-valor. Una forma para solucionar este problema es repartir, de manera aleatoria, estas parejas a lo largo de todos los pares participantes. De esta forma, un par que necesite realizar una cierta consulta para obtener un resultado de una clave específica, la realiza a todos los demás pares y a partir de esto obtiene una respuesta de todos los que contienen esa clave, retornando la pareja clave-valor. Lo malo de este método es que no es escalable, requiere de que cada par siga la pista de los demás pares, los cuales pueden ser millones, por lo que tendría que enviar la consulta a cada uno de estos.

Diseño de base de datos para P2P

Se asigna un identificador a cada par, este identificador es un entero comprendido entre el rango de 0 a 2n − 1 para un cierto n fijo. Es necesario que cada clave esté dentro del rango mencionado anteriormente y para esto es necesario la utilización de una función hash. Una función hash es una función muchos a uno en la cual puede existir para dos entradas distintas una salida en común, aunque esto último es de una probabilidad muy baja. Esta función hash es pública para todos los peers del sistema. Lo principal es definir una regla para asignar las claves a los pares ya que cada par tiene asociado un identificador entero y cada clave también es un número entero contenido en el mismo rango, por lo tanto, lo más normal es asignar a cada pareja clave-valor al peer cuyo identificador sea el más próximo a la clave.

Para la definición de “el peer más próximo” se debe adoptar un convenio. Se puede definir como el más próximo al inmediato sucesor de la clave. Si la clave es exactamente igual a uno de los identificadores de par, se almacena la pareja clave-valor en dicho par, en caso de que la clave sea mayor que todos los identificadores de par, se aplica el convenio de módulo 2n, almacenando la pareja clave-valor en el par con el identificador más pequeño.

Caso de estudio: Telefonía por Internet P2P con Skype

Todos hemos utilizado la aplicación llamada Skype, o al menos, hemos escuchado sobre ella, ya que es un servicio de telefonía Internet PC a PC, o teléfono a PC, el cuál es muy popular. Esta aplicación, utiliza tecnicas P2P en una serie de formas bastantes innovadores, que ilustran a la perfección cómo puede utilizarse P2P en aplicaciones que van más allá de la distribución de contenido y la compartición de archivos. La aplicación es P2P ya que su base está en que hay parejas de usuarios (peers) que se comunican entre sí en tiempo real. Sin embargo Skype no sólo aplica la técnica P2P en lo último, sino que también se aplican en funciones como la ubicación de usuarios y el NAT transversal (Traducción de direciones de red).

¿Cómo funciona?

Los nodos de Skype, están organizados en una red jerárquica superpuesta en la que cada par se clasifica como super par o como par normal. Además, Skype incluye un índice que asigna los nombres de usuario de Skype a las direcciones IP actuales junto con sus números de puertos. Este índice esta distribuido sobre los super pares. De esta forma, nosotros cuando llamamos a un amigo utilizando esta aplicación, nuestro cliente Skype busca en el índice distribuido para determinar la dirección IP actual de nuestro amigo.

Otras técnicas

Skype también emplea técnicas P2P en los retransmisores que se usan para establecer llamadas entre hosts situados en redes domésticas. Hoy en día, se suelen ocupar mucho los routers para proporcionar internet a una mayor cantidad de computadores. Sin embargo, estos routers, incluyen un mecanismo de NAT, los cuales impiden que un host situado fuera de la red doméstica, inicie una conexión con un host situado dentro de esa red. Ilustrando lo anterior, si quisieramos comunicarnos con un amigo y los dos tenemos activados los mecanismos NAT, entonces ningúno de los dos podremos aceptar una llamada iniciada por el otro. Es por esto que se utiliza de forma inteligente los super pares y los retransmisores para resolver el problema anterior. Esto se logra de la siguiente forma: Supongamos que iniciamos sesión en Skype. Al momento de ingresar, se nos asigna un super par sin mecanismo NAT. De esta forma, podremos iniciar sesión con nuestro super par ya que NAT solo prohíbe las sesiones iniciadas fuera de su red doméstica. Lo mismo sucederá con nuestro amigo. De esta forma, cuando llamemos a nuestro amigo, nuestro super par informará al super par de nuestro amigo. Luego cuando acepte la llamada, los dos super pares selecciona un tercer super par sin NAT, llamado nodo retransmisor. De esta forma el retransmisor actuará como canal de mensajes entre los super pares nuestros y de nuestro amigo. Esta utilización de retransmisores, ilustra el diseño cada vez más sofisticado de los sistemas P2P.

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas