FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS 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) v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 2 1 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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? v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 4 2 Napster: Example (Fuente: Lecture20.ppt / Ion Stoica) m5 E m6 F E? E E? m5 m1 m2 m3 m4 m5 m6 m4 C A m1 D A B C D E F B m3 m2 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 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) v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 6 3 Napster (Fuente: Keith W. Ross / Dan Rubenstein) 1. File list and IP address is uploaded napster.com centralized directory FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 7 Napster (Fuente: Keith W. Ross / Dan Rubenstein) 2. User requests search at server. v.2007.02 napster.com centralized directory Query and results FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 8 4 Napster (Fuente: Keith W. Ross / Dan Rubenstein) 3. User pings hosts that apparently have data. Looks for best transfer rate. napster.com centralized directory pings pings FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 9 Napster (Fuente: Keith W. Ross / Dan Rubenstein) 4. User chooses server Napster’s centralized server farm had difficult time keeping up with traffic v.2007.02 napster.com centralized directory Retrieves file FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 10 5 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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? v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 12 6 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 13 Gnutella: Example (Fuente: Lecture20.ppt / Ion Stoica) Assume: m1’s neighbors are m2 and m3; m3’s neighbors are m4 and m5;… m5 E m6 F E E? D E? m4 E? E? C A m1 v.2007.02 B m3 m2 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 14 7 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 GNUTELLA CONNECT/0.6 CONNECT/0.6 User-Agent: User-Agent: BearShare/1.0 BearShare/1.0 GNUTELLA/0.6 GNUTELLA/0.6 200 200 OK OK User-Agent: User-Agent: BearShare/1.0 BearShare/1.0 GNUTELLA/0.6 GNUTELLA/0.6 200 200 OK OK FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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 Payload ID 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) v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 16 8 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 18 9 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 20 10 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.) FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 22 11 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) FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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 ... v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 24 12 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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> v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 26 13 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. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 28 14 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 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 29 BitTorrent (Fuente: Keith W. Ross / Dan Rubenstein) url 1. GET file.torrent tracker 2. GET 3. list of peers 4. file.torrent info: • length • name • hash • url of tracker v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 30 15 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. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2007.02 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. v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 32 16 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 v.2007.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 33 17