Departament d Arquitectura de Computadors Peer-to-Peer Peer-to-Peer Peer-to-Peer Necesidad de compartir para recibir Los nodos de una P2P son máquinas de usuarios finales El tiempo de servicio de estos nodos no es continuo se conectan/desconectan según las necesidades de cada usuario final Peer-to-Peer versus Cliente/Servidor Los nodos de una P2P son clientes y servidores al mismo tiempo En P2P la información esta distribuida entre los nodos de los usuarios finales En la arquitectura C/S la información está centralizada en el servidor ( que puede ser un cluster) En P2P un cliente que quiere un fichero no sabe donde encontrarlo y pregunta al sistema quien puede dárselo En la arquitectura C/S un cliente sabe quien tiene el fichero (un servidor) 2
Componentes básicos en toda red P2P Localización de los contenidos (ficheros) en la red P2P Es como un DNS a nivel de aplicación. Hay que tener en cuenta como se realiza la publicación y eliminación de contenidos Gestión de la red Tiene en cuenta aspectos como: enrutamiento de mensajes, mantenimiento de la red, procedimiento para que un usuario pueda darse de alta en la red, procedimiento para darse de baja, control de vecinos... Transferencia de la información En las P2P iniciales la unidad de transferencia es el fichero Para ficheros grandes este mecanismo genera muchos fallos en la transferencia En las P2P actuales la unidad de transferencia no es el fichero sino un bloque 3 Napster (Inicio del P2P) Modelo Cada usuario final comparte un subconjunto de ficheros de música Cada usuario puede bajarse ficheros de todos los usuarios finales de la red Servicio de localización centralizado Asume la existencia de servidores que mapean ficheros (canciones) a máquinas de usuarios finales conectados a la red Cómo encontrar un fichero (canción)? Consulta al servidor -> devuelve una máquina conectada que comparte el fichero Idealmente es la máquina más cercana/menos cargada Transferencia ftp del fichero directamente de la máquina del usuario final conectado Ventajas: Simplicidad, fácil implementar motores de búsqueda sofisticados en el servidor Desventajas: Robustez? Escalabilidad? 4
Napster: Example (Fuente: Lecture20.ppt / Ion Stoica) m5 m6 E F E? E E? m5 m1 A m2 B m3 C m4 D m5 E m6 F m4 D m1 A m2 B m3 C 5 Napster: how did it work (Keith W. Ross / Dan Rubenstein) Application-level, client-server protocol over point-to-point TCP Centralized directory server Steps: connect to Napster server upload your list of files to server. give server keywords to search the full list with. select best of correct answers. (pings) 6
Napster (Fuente: Keith W. Ross / Dan Rubenstein) 1. File list and IP address is uploaded napster.com centralized directory 7 Napster (Fuente: Keith W. Ross / Dan Rubenstein) 2. User requests search at server. napster.com centralized directory Query and results 8
Napster (Fuente: Keith W. Ross / Dan Rubenstein) 3. User pings hosts that apparently have data. napster.com centralized directory Looks for best transfer rate. pings pings 9 Napster (Fuente: Keith W. Ross / Dan Rubenstein) 4. User chooses server napster.com centralized directory Napster s centralized server farm had difficult time keeping up with traffic Retrieves file 10
Gnutella (Historia) Los desarrolladores fueron Justin Frankel y Tom Pepper en el año 2000 mientras trabajaban en Nullsoft El código fuente iba a salir bajo licencia GNU pero AOL se interpuso. La ingeniería inversa se puso en funcionamiento. Se tardó 6 días. Este protocolo se presentaba como la gran esperanza tras la caída en picado de Napster en 2001. Por qué pudo cerrase Napster? Actualmente su desarrollo se lleva a cabo por el GDF http://groups.yahoo.com/group/the_gdf/ The Gnutella Developer Forum (GDF) is a neutral, open forum for communication between Gnutella developers on topics of common interest. Gnutella2 http://es.wikipedia.org/wiki/gnutella2 11 Gnutella Servicio de localización descentralizado por inundación (flooding) Cómo encontrar un fichero? Consulta a los nodos a los que está conectado. Estos a su vez harán un forwarding de la petición si no pueden satisfacerla Transferencia http del fichero directamente de la máquina del usuario final conectado Ventajas: Totalmente descentralizado Bastante robusto Desventajas: Escalabilidad? La red entera puede ser inundada con la petición (para aliviar el problema TTL) Garantías de encontrar fichero aunque se encuentre en la red? 12
Gnutella: Cómo funciona? Un nodo A se conecta a otro B, mediante un mecanismo de bootstrap (autosuficiente), dirección bien conocida o algún mecanismo similar. Debe conocerse un nodo conectado a la red de Gnutella Gnutella no define cómo encontrar un nodo conectado B envía a A una lista de nodos actualmente activos en la red A se conectará a un número determinado de ellos (normalmente 5) y guarda el resto Cuando A realice una búsqueda manda las peticiones a los nodos a los que está conectado. Estos a su vez harán un forwarding de la petición Al encontrar resultados se reenvían hacia A directamente o bien indirectamente 13 Gnutella: Example (Fuente: Lecture20.ppt / Ion Stoica) Assume: m1 s neighbors are m2 and m3; m3 s neighbors are m4 and m5; m5 m6 E F E E? E? m4 D E? E? m1 A m2 B m3 C 14
Gnutella (protocolo) The annotated Gnutella Protocol Specification v0.4. http://rfc-gnutella.sourceforge.net/developer/stable/index.html Inicializar la conexión El nodo A establece una conexión TCP con el nodo B GNUTELLA CONNECT/0.6 User-Agent: BearShare/1.0 GNUTELLA/0.6 200 OK User-Agent: BearShare/1.0 GNUTELLA/0.6 200 OK 15 Gnutella (protocolo v0.4) Cabecera Una vez conectados dos nodos, se pueden comunicar utilizando mensajes del protocolo. Cada mensaje es precedido de una cabecera de mensaje de 23 bytes Message ID Payload Type TTL HOPS Payload Lenght Message ID: identificador único de mensaje (16 bytes) Payload Type: Ping, Pong, Bye, Push, Query, Query Hit (1 byte) TTL: número de veces que se puede hacer forwading (1 byte) HOPS: el número de veces que ha sido forwarded (1 byte) Payload Lenght: longitud del mensaje de protocolo (4 bytes) 16
Gnutella (protocolo v0.4) 5 tipos principales de mensajes: Ping. Se emplea para descubrir nodos nuevos en la red Un nodo que recibe un Ping, se espera que responda con uno o varios mensajes Pong Pong. Es la respuesta a un Ping Incluye la dirección de un nodo Gnutella e información sobre los datos que comparte Query. Mecanismo principal de Búsqueda en la red Un nodo responderá con un mensaje QueryHits si tiene la información pedida QueryHits. La respuesta a un mensaje Query Provee la suficiente información como para recuperar los datos solicitados Push. Permite a los nodos detrás de un cortafuegos (firewall) proveer datos 17 Gnutella (protocolo v0.4) Ping (Payload Type = 0x00) Estos mensajes no llevan Payload Cada nodo que reciba un mensaje Ping debe responder generando mensajes Pong (pueden ser n) donde anuncien su presencia ó de otros nodos que ellos conozcan Ejemplo mensaje Ping (hexadecimal) 27 08 3F 71 49 B2 D4 11 88 23 00 80 AD 40 4E 62 00 07 00 00 00 00 00 Mensaje Message ID : 27 08 3F 71 49 B2 D4 11 88 23 00 80 AD 40 4E 62 Payload Type : 00 TTL : 07 Hops : 00 Payload Lenght : 00 00 00 00 18
Gnutella (protocolo v0.4) Pong (Payload Type = 0x01) Emitidos en respuesta a un mensaje Ping. Un Ping puede provocar el envío de 1 o más mensajes Pong de respuesta Un nodo al recibir mensajes Pong puede abrir nuevas conexiones con otros nodos lo que le permite conocer más nodos de la red y darle una mayor estabilidad a su presencia en la red Gnutella La cabecera debe tener el mismo ID que la cabecera del Ping que ocasiona el Pong Payload (después de la cabecera): Port Number: puerto para las conexiones de entrada IP Address: dirección IP del host Shared Files Number: número de ficheros compartidos Shared Files Size: tamaño en KB s de ficheros compartidos 19 Gnutella (protocolo v0.4) Pong (Payload Type = 0x01) Ejemplo mensaje Pong (hexadecimal) 27 08 3F 71 49 B2 D4 11 88 23 00 80 AD 40 4E 62 01 07 00 0E 00 00 00 CA 18 AA D2 62 95 03 00 00 00 0A 00 00 00 Mensaje Message ID : 27 08 3F 71 49 B2 D4 11 88 23 00 80 AD 40 4E 62 Payload Type : 01 TTL : 07 Hops : 00 Payload Lenght : 0E 00 00 00 Carga Port Number : CA 18 IP Addres : AA D2 62 95 Shared Files Number : 03 00 00 00 Shared Files Size : 0A 00 00 00 20
Gnutella (protocolo v0.4) Uso del Ping y el Pong Cuando se recibe un Ping con TTL>1 y ha pasado más de 1 segundo desde el anterior se debe responder con 1 o más Pong. 10 es un número razonable. Los hosts deben minimizar el número de Pings y Pongs para no consumir bandwidth Un Ping con TTL=1 y Hops=0 se utiliza para probar al host remoto de una conexión. Debe responderse con un Pong Un Ping con TTL=2 y Hops = 0 se denomina Crawler Ping. Se debe responder con varios Pong que contengan la información del host que recibió el Ping y de sus vecinos. (La información de sus vecinos se puede generar en el propio host o bien reenviando el Ping original a sus vecinos.) 21 Gnutella (protocolo v0.4) Query (Payload Type = 0x80) Mecanismo para realizar búsquedas por la red. Si hay éxito se responde con un Query Hit Si no hay éxito el mensaje Query se reenvía a todos los nodos excepto al que nos lo envió Payload (después de la cabecera): Minimun Speed: velocidad mínima en kb/s a la que debe responder el receptor del mensaje Search Criteria: criterio de búsqueda de longitud variable. Terminado en 0x00 22
Gnutella (protocolo v0.4) Query (Payload Type = 0x80) Ejemplo mensaje Query (hexadecimal) 28 08 3F 71 49 B2 D4 11 88 23 00 80 AD 40 4E 62 80 07 00 06 00 00 00 00 00 2A 2E 61 00 Mensaje Message ID : 28 08 3F 71 49 B2 D4 11 88 23 00 80 AD 40 4E 62 Payload Type : 80 TTL : 07 Hops : 00 Payload Lenght : 06 00 00 00 Carga Minimun Speed : 00 00 Search Criteria : 2A 2E 61 00 (*.a + carácter nulo) 23 Gnutella (protocolo v0.4) QueryHit (Payload Type = 0x81) Los Query Hit deben enviarse como respuesta a un Query siempre que haya un matching entre la información local y el Search Criteria, por la misma ruta por la que llegó al nodo Un Query Hit tendrá el mismo Message ID que el Query que lo genera. El método de matching para el Search Criteria no se especifica. Un Query con TTL = 1, HOPS = 0 y Search Criteria = indica a un host que debe enviar toda la información sobre sus archivos compartidos a través de Query Hits Payload (después de la cabecera): Hits Number: número de Query Hits en el Result Set Port: el puerto por el que aceptar peticiones HTTP IP Address: dirección del responding host Speed: velocidad en KB/s del responding host... 24
Gnutella (protocolo v0.4) Evitando tráfico excesivo: Para evitar transmisiones duplicadas, cada nodo mantiene una lista de mensajes recibidos recientemente Los mensajes Query se reenvían a todos los nodos excepto al que nos lo envió Los mensajes QueryHits se encaminan sólo hacia el nodo del que se recibió el mensaje Query con el mismo campo ID Los duplicados con el mismo campo ID y tipo de mensaje se descartan Los mensajes QueryHits con un campo ID para el que no se haya visto un mensaje Query correspondiente se descartan 25 Gnutella (protocolo v0.4) Después de recibir mensajes QueryHits: El peticionario elige la mejor respuesta QueryHits. Inicia una petición HTTP directamente a la IP+puerto del nodo que contestó: GET /get/<índice fichero>/<nombre fichero>/http/1.0\r\n Connection: Keep-Alive\r\n Range: bytes=<desplazamiento desde comienzo>-\r\n User-Agent: Gnutella\r\n \r\n El nodo que lo recibe responde: HTTP/1.0 200 OK\r\n Server: Gnutella/0.4\r\n Content-Type: application/binary\r\n Content-Length: 4356789\r\n \r\n <datos del fichero> 26
Gnutella (protocolo v0.4) No hay servidores Los nodos en la red mantienen vecindades, constituyendo grafos superpuestos Los nodos almacenan sus propios ficheros Las peticiones (mensajes Query) se difunden, con TTL restringidos Las respuestas (mensajes QueryHits) se encaminan en sentido inverso al que llevaron las peticiones Soporta transferencia de ficheros a través de cortafuegos Ping-Pong periódicos para mantener la lista de vecinos al día, a pesar de los nodos uniéndose, abandonando o fallando. 27 BitTorrent BitTorrent es el nombre del protocolo de distribución de archivos mediante peer to-peer creado por Bram Cohen. Se refiere también a la aplicación cliente original. Y al tipo de archivos.torrent Servicio de localización La búsqueda es realizada por el usuario que consigue un archivo.torrent y lo carga en su aplicación cliente El archivo.torrent es creado por el usuario que quiere compartir un archivo El archivo.torrent enlaza al cliente con el fichero a descargar: Nombre del archivo, tamaño y el hash de cada bloque del archivo. La dirección de un servidor tracker. Otras informaciones, como instrucciones para el cliente Se distribuyen archivos.torrent mediante email o en websites 28
BitTorrent Cómo funciona? Seeds (semilla) Clientes que tienen un archivo completo compartido para que el resto de los usuarios lo puedan descargar Tracker (rastreador) servidores que recopilan información de los clientes que comparten un archivo (swarm), así como de todas las semillas que se están moviendo. El tracker indicado por el archivo mantiene un log de cuales usuarios están bajando el archivo y donde están el archivo y sus fragmentos. Los trackers son servicios que responden a HTTP/HTTPS request, usando un URL con método GET, la respuesta es en texto plano e incluye una lista de peers que ayudan al cliente a participar en el torrent Swarm (enjambre) Conjunto formado por todos los clientes que comparten un archivo.torrent, tanto los que aún tienen el archivo incompleto como las semillas 29 BitTorrent (Fuente: Keith W. Ross / Dan Rubenstein) url tracker 1. GET file.torrent 2. GET 3. list of peers 4. file.torrent info: length name hash urlof tracker 30
BitTorrent Transferencia de la información El archivo es roto en bloques pequeños (256 Kb estándar) los peers bajan los fragmentos entre ellos y mandan los que ya posean a los que lo requieran. El protocolo escoge la conexión más buena disponible para los fragmentos que requiere. Para incrementar la eficiencia los clientes piden los fragmentos que están disponibles en el menor número de peers, evitando cuellos de botella. Los clientes comienzan a mandar los fragmentos antes de terminar de bajar el archivo. 31 BitTorrent Los BitTorrent trackers asisten la comunicación entre peers. Los clientes deben comunicarse con estos para empezar a bajar los archivos. Si todas las semillas son quitadas, el archivo no podrá ser bajado nuevamente La propiedad leech resistance de BitTorrent provee a los que mandan más información el mejor desempeño al bajar los archivos Leech (sanguijuelas) Exprimir las descargas al máximo compartiendo lo mínimo posible. Al finalizar la descarga mueven el archivo para evitar la subida de partes. 32
Implementaciones Gnutella MLDonkey: Linux, Mac y Windows. Licencia GNU GPL Limewire: Java. Licencia GNU GPL Shareaza: Windows. Licencia GNU GPL BitTorrent azureus: Java. Licencia GNU GPL µtorrent: Windows. Código cerrado. BitTorrent y edonkey2000 Lphant: Linux, Mac y Windows. Licencia Freeware con Adware. Kadmelia y edonkey2000 emule: Windows. Licencia GNU GPL 33