Peer-to-Peer

Anuncio
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
Descargar