UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA PROYECTO FIN DE CARRERA DISEÑO E IMPLEMENTACIÓN DE UN PROTOCOLO DE REDES PEER-TO-PEER LUIS MARÍA GARCÍA SANJUÁN MADRID, JUNIO DE 2009 Autorizada la entrega del proyecto del alumno: Luis María García Sanjuán EL DIRECTOR DEL PROYECTO José Manuel Muñoz Berengena Fdo: Fecha: Vo Bo del Coordinador de Proyectos David Contreras Bárcena Fdo: Fecha: UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERO EN INFORMÁTICA PROYECTO FIN DE CARRERA DISEÑO E IMPLEMENTACIÓN DE UN PROTOCOLO DE REDES PEER-TO-PEER AUTOR: LUIS MARÍA GARCÍA SANJUÁN DIRECTOR: JOSÉ MANUEL MUÑOZ BERENGENA MADRID, JUNIO DE 2009 A mi madre y a mi hermana. Dicen que “quien convive con lo que admira termina imitándolo”, y la dedicación y entrega que mostráis cada día en vuestro trabajo ha sido para mí todo un ejemplo a seguir, guiándome hacia el ocaso de esta etapa. I AGRADECIMIENTOS Mi más sincero agradecimiento a José Manuel Muñoz Berengena, mi director de proyecto. Una vez terminado el trabajo, sólo me queda decir gracias y perdón. Gracias por todo el tiempo que me has dedicado, por tu ayuda e inagotable paciencia. Perdón por los momentos en los que el peso del proyecto me ha superado, y has tenido que transmitirme tu sosiego y tranquilidad. Deseo expresar mi agradecimiento a David Contreras Bárcena, mi coordinador de proyecto, y a todos los profesores de la Escuela Técnica Superior De Ingeniería de la Universidad Pontificia Comillas de Madrid por su trabajo realizado durante estos años de carrera. A Pilar Balda, Marta Galán y Marta Lozoya por ese día en el que os sentasteis a mi lado, regalándome así la oportunidad de conoceros. Gracias por todo vuestro cariño y por los momentos que habéis compartido conmigo. Por último, no quisiera olvidarme de mis amigos Beatriz, Juan y Julio. Aunque ya sabéis lo mucho que os quiero, no está de más agradeceros el cómo sois y el estar, a pesar de la distancia, tan cerca de mí. II RESUMEN Actualmente existe una gran variedad de clientes de redes peer-to-peer con diferentes finalidades, telefonía por Internet, sistemas de ficheros distribuidos, cálculo científico y demás. Probablemente, la finalidad con más uso sea la de búsqueda y transferencia de archivos. Haciendo uso de determinadas aplicaciones que cubren esta finalidad, se puede comprobar que la búsqueda e intercambio de archivos de las actuales aplicaciones de redes peer-to-peer están muy condicionadas al servidor al que el cliente se encuentre conectado, ya que diferentes conexiones entre distintos servidores producen diferentes resultados. Por lo tanto, se puede concluir que existe un desequilibrio entre lo que ofrecen este tipo de aplicaciones y lo que demandan los usuarios. Por este motivo, el objetivo de este proyecto es el diseño e implementación de un protocolo peer-to-peer, que mejore el proceso de búsqueda de los archivos entre los usuarios que se encuentren conectados a la red. Se entiende por mejora la eliminación de la dependencia del proceso de búsqueda al servidor al que el usuario se encuentre conectado. Para poder desarrollar el proyecto, es necesario que los servidores compartan la misma información acerca de los archivos y de los clientes que se encuentran conectados a la red peer-to-peer. Dado el gran número de clientes de este tipo de redes, es inviable que un servidor albergue toda ésta información, ya que manejaría una gran volumen de datos que además estaría duplicado en el resto de servidores. Por este motivo, la arquitectura propuesta se basa en la conexión de todos los servidores a una red IP multicast, para así poder distribuir la información por medio de mensajes, sin la necesidad de almacenarla en la base de datos de cada uno de ellos. Cuando un cliente de la red peer-to-peer desea realizar una búsqueda de un determinado archivo, envía una solicitud de búsqueda al servidor al que se encuentra conectado. El servidor procesa la solicitud, realizando una consulta en su base de datos, en la que están registrados todos los archivos de los clientes con los que mantiene una conexión. Al finalizar la consulta, transmite la solicitud de búsqueda del III cliente a la red IP multicast para que todos los servidores, que se encuentran conectados a esta red, reciban dicha solicitud y consulten en sus bases de datos, al igual que hizo el primer servidor, para obtener los resultados que satisfacen la petición. Una vez consultada la base de datos, se envían los resultados al servidor que los solicitó para añadir esos resultados a los que ya tenía. Una vez terminado este proceso, todos los resultados se envían al cliente que inició el proceso de búsqueda. Dado que el proyecto realizado tiene características de un sistema distribuido, el protocolo se ha implementado bajo el lenguaje de programación Java, para asegurar la portabilidad en entornos heterogéneos, con hardware y sistemas operativos diversos. El protocolo implementado aporta una serie de mejoras tanto en los servidores como en los clientes. El número de archivos encontrados en el proceso de búsqueda, el número de comentarios de los usuarios que califican los archivos y el número de fuentes encontradas que tienen disponible el archivo para compartir son mayores, ya que se elimina la dependencia de la conexión con el servidor. Dado que el número de fuentes encontradas es mayor, se reduce considerablemente el tiempo de transferencia del archivo, ya que la posibilidad de conexión a un mayor número de pares se incrementa. Al no existir una dependencia con el servidor, en los clientes no se requiere un mantenimiento de una lista de servidores en la que elegir sus favoritos y su prioridad en el proceso de conexión, por lo que se le libera de una tarea innecesaria. Al eliminar una preferencia de conexión entre un servidor u otro, las conexiones de los clientes entre los distintos servidores de la red están más equilibradas y por lo tanto el reparto de carga de trabajo entre estos y las solicitudes de búsqueda de un archivo entre los usuarios de la red estarán más equilibradas. En el presente proyecto, se ha realizado un exhaustivo análisis sobre los sistemas actuales peer-to-peer de transferencia de archivos, detallando sus características, funcionamiento y mejoras con respecto a otros sistemas y, conjuntamente, se ha introducido el problema de las búsquedas de archivos en este tipo de redes. Sobre esa IV base, se ha realizado el diseño e implementación de un protocolo independiente del servidor al que el usuario se encuentre conectado. El sistema desarrollado se podría enmarcar dentro de los sistemas peer-to-peer estructurados, ya que se conoce la localización exacta de los recursos, pero sin la necesidad de que los clientes tengan que mantener una tabla hash para calcular el lugar en el que está cada recurso como sucede en el caso de las redes Pastry, CAN o Chord, proporcionando un mecanismo de búsqueda determinista, de tal forma que se asegura la localización de un recurso siempre y cuando se encuentre en la red, encaminando los mensajes de forma eficiente. Con la realización de este proyecto, se suplen algunas carencias de las actuales aplicaciones de búsqueda y transferencia de archivos en redes peer-to-peer, como es el caso de la búsqueda de fuentes o de comentarios de un determinado archivo. Además, otras características y funcionalidades de estas aplicaciones se optimizan, como por ejemplo la previsualización de los archivos en estado de descarga y la gestión del espacio de los archivos temporales. V ABSTRACT Currently there is a wide variety of clients on peer-to-peer networks, with different determinations, such as telephony through internet, distributed file systems, scientific calculation and so on. Most likely, the determinations most widely used are search and file transfers. Using specific applications that cover this determination, it is clear that the search and exchange of files using the current applications of the peer-to-peer networks are highly conditioned by the server being used by the client, as different connections between different servers produce different results. Therefore, one comes to the conclusion that there is an imbalance between what this type of applications offers and what the users need. For this reason, the objective of this project is to design and install a peer-to-peer protocol to improve the search process of files between the users that are connected to the network. Improvement is understood to be the elimination of the dependence of the search process to the server that the user is connected to. To develop the project, the servers must share the same information on the files, as well as on the clients that are connected to the peer-to-peer network. Given the large number of clients on these networks, it is unviable that one server would store all of this information, as it would handle a large volume of data that would be duplicated in the rest of the servers. For this reason, the architecture proposed is based on the connection of all the servers to an IP multicast network, to be able to distribute the information through messages without the necessity of storing it in the database of each one. When a client on the peer-to-peer network wants to initiate a search for a certain file, he sends a search request to the server he is connected to. The server processes the request, consulting its database, in which all of the files of the clients that maintain a connection are registered. When the consulting process is finished, the search request is transmitted from the client to the IP multicast network so that all of the servers that are connected to this network receive the request and consult their VI database, just like the first server did, to obtain the results that satisfy the request. Once the database has been consulted, the results are sent to the server that requested them, to add them to already existing information. Once concluded this process, all of the results are sent to the client that initiated the search process. Given that the project carried out has the characteristics of a distributed system, the protocol has been set up under Java language programming, to assure the portability in heterogeneous settings, with hardware and several operative systems. The protocol installed provides a series of improvements in both the servers and the clients. Since the dependence of the connection with the server is eliminated, the number of files found in the search process, the number of comments of the users that describe the files y and the number of sources found that have the file available to share are greater. Considering that the number of sources found is greater, the time to transfer the file is reduced, as the possibility of connecting to a larger number of peers is increased. Eliminating the dependence with the server, the clients are not required to maintain a list of servers to choose their favourites and their priority in the connecting process, saving them from an unnecessary task. Eliminating a connection preference between one server or another, the connections of the clients between the different servers of the network are more balanced and, as a result, the distribution of work load among them, as well as the file search requests among the users of the network, are more balanced. In this project, an exhaustive analysis on the current peer-to-peer systems of file transfers has been carried out, detailing its characteristics, its performance and improvements over other systems, together with the introduction of the problem of file searches in this type of network. Using this as a base, the design and installation of an independent protocol of the server to which the user is connected to have been carried out. VII The system developed could be kept within the structured peer-to-peer systems, since the exact location of the resources is known, but without the necessity of the clients maintaining a hash table to calculate where each resource is located, as in the networks Pastry, CAN o Chord, providing a deterministic search mechanism that always lets you know where the resource is and when it is on the network, efficiently channelling the messages. This project has supplemented some of the deficiencies of the current search applications and file transfers in peer-to-peer networks, such as the search of sources or comments of a determined file. Furthermore, other characteristics and functions of these applications are optimized, such as the previsualization of files in an unloading state and the procedure of space for temporary files. VIII ÍNDICE 1. INTRODUCCIÓN .................................................................................................. 13 1.1. INTRODUCCIÓN A LAS REDES PEER-TO-PEER.................................................................... 2 1.1.1. REDES PEER-TO-PEER ................................................................................................ 2 1.1.2. ELEMENTOS DE UNA RED PEER-TO-PEER ................................................................. 4 1.1.3. ARQUITECTURA DE LAS REDES PEER-TO-PEER ......................................................... 5 1.1.4. CLASIFICACIÓN DE LAS REDES PEER-TO-PEER........................................................... 7 1.1.5. APLICACIONES DE REDES PEER-TO-PEER .................................................................. 9 1.1.6. PROBLEMAS DE LAS REDES PEER-TO-PEER ............................................................. 10 1.2. TECNOLOGÍAS ................................................................................................................. 11 1.2.1. JAVA ........................................................................................................................ 11 1.2.2. MYSQL ..................................................................................................................... 12 2. ESTADO DEL ARTE DE LAS APLICACIONES PEER-TO-PEER ..................................... 15 2.1. ESTADO DEL ARTE ........................................................................................................... 16 2.2. CONCEPTOS Y TECNOLOGÍAS ACTUALES ........................................................................ 33 2.2.1. P2P ANÓNIMO ........................................................................................................ 33 2.2.2. REDES FRIEND-TO-FRIEND ...................................................................................... 34 2.2.3. PEER-TO-MAIL ......................................................................................................... 34 2.2.4. WEBCACHÉ .............................................................................................................. 35 2.2.5. PROACTIVE NETWORK PROVIDER PARTICIPATION FOR P2P .................................. 35 3. MOTIVACIÓN Y OBJETIVOS DEL PROYECTO ......................................................... 36 4. ANÁLISIS DEL SISTEMA........................................................................................ 41 4.1. IDENTIFICACIÓN DE NECESIDADES ................................................................................. 42 4.1.1. ALCANCE DEL SISTEMA ........................................................................................... 42 4.1.2. TOPOLOGÍA DE USUARIOS FINALES ........................................................................ 43 4.1.3. RESTRICCIONES ....................................................................................................... 44 4.2. ANÁLISIS DE REQUISITOS ................................................................................................ 44 4.2.1. CONTEXTO GENERAL DEL SISTEMA ........................................................................ 44 4.2.2. ÁMBITO DEL SISTEMA ............................................................................................. 46 4.2.3. ÁMBITO DEL CLIENTE .............................................................................................. 46 4.2.4. ÁMBITO DEL SERVIDOR........................................................................................... 48 4.2.5. DECISIONES DE DISEÑO .......................................................................................... 49 4.3. METODOLOGÍA ............................................................................................................... 52 4.3.1. DIAGRAMA DE DOMINIO ........................................................................................ 52 4.3.2. DIAGRAMA DE CASOS DE USO ................................................................................ 54 4.3.3. DIAGRAMA DE PAQUETES....................................................................................... 56 4.3.4. DIAGRAMA DE CLASES ............................................................................................ 58 4.3.5. DISEÑO DE LA BASE DE DATOS ............................................................................... 65 5. PROTOCOLO DEL SISTEMA .................................................................................. 68 5.1. PROTOCOLO ENTRE CLIENTE Y SERVIDOR ...................................................................... 69 5.1.1. SOLICITUD DE CONEXIÓN A LA RED PEER-TO-PEER ................................................ 69 5.1.2. SOLICITUD DE BÚSQUEDA DE ARCHIVOS................................................................ 69 5.1.3. SOLICITUD DE BÚSQUEDA DE COMENTARIOS ........................................................ 70 5.1.4. SOLICITUD DE BÚSQUEDA DE CLIENTES ................................................................. 70 5.1.5. SOLICITUD DE SINCRONIZACIÓN............................................................................. 71 IX 5.1.6. SOLICITUD DE DESCONEXIÓN DE LA RED PEER-TO-PEER ....................................... 72 5.2. PROTOCOLO ENTRE SERVIDORES ................................................................................... 72 5.2.1. SOLICITUD DE CONEXIÓN A LA RED MULTICAST .................................................... 72 5.2.2. SOLICITUD DE BÚSQUEDA DE ARCHIVOS................................................................ 73 5.2.3. SOLICITUD DE BÚSQUEDA DE COMENTARIOS ........................................................ 73 5.2.4. SOLICITUD DE BÚSQUEDA DE CLIENTES ................................................................. 74 5.3. PROTOCOLO ENTRE CLIENTES......................................................................................... 75 6. PROGRAMACIÓN Y PRUEBAS DEL SISTEMA ......................................................... 77 6.1. PROGRAMACIÓN............................................................................................................. 78 6.1.1. INTRODUCCIÓN....................................................................................................... 78 6.1.2. LENGUAJES DE PROGRAMACIÓN ............................................................................ 78 6.1.3. MANUAL DE USUARIO ............................................................................................ 78 6.2. PRUEBAS DEL SISTEMA ................................................................................................... 79 6.2.1. PRUEBAS DE ENCADENAMIENTO ........................................................................... 80 6.2.2. PRUEBAS DE INTEGRACIÓN .................................................................................... 80 6.2.3. PRUEBAS DE EXPLOTACIÓN DEL SISTEMA .............................................................. 80 6.2.4. PRUEBAS DE SOBRECARGA ..................................................................................... 80 6.2.5. PRUEBAS DE RECUPERACIÓN.................................................................................. 80 6.2.6. PRUEBAS DE SEGURIDAD ........................................................................................ 81 6.2.7. PRUEBAS DE USABILIDAD ....................................................................................... 81 6.2.8. PRUEBAS DE ACEPTACIÓN DEL USUARIO ............................................................... 81 7. PLANIFICACIÓN DEL PROYECTO........................................................................... 82 8. VALORACIÓN ECONÓMICA DEL PROYECTO ......................................................... 85 8.1. COSTES DE TECNOLOGÍA ................................................................................................. 86 8.1.1. COSTES DE HARDWARE........................................................................................... 86 8.1.2. COSTES DE SOFTWARE ............................................................................................ 86 8.2. COSTES DE IMPLANTACIÓN ............................................................................................ 87 8.3. VALORACIÓN FINAL......................................................................................................... 89 9. CONCLUSIONES Y FUTURAS LÍNEAS DE DESARROLLO........................................... 90 BIBLIOGRAFÍA Y REFERENCIAS ................................................................................ 94 ANEXO I. MANUAL DE USUARIO DE LA APLICACIÓN CLIENTE................................... 98 ANEXO II. MANUAL DE USUARIO DE LA APLICACIÓN SERVIDOR ............................ 115 X TABLA DE FIGURAS IDENTIFICADOR DESCRIPCIÓN PÁGINA Figura 1 Figura 2 Figura 3 Figura 4 Figura 5 Figura 6 Figura 7 Figura 8 Figura 9 Figura 10 Figura 11 Figura 12 Figura 13 Figura 14 Figura 15 Figura 16 Figura 17 Figura 18 Figura 19 Figura 20 Figura 21 Figura 22 Figura 23 Figura 24 Figura 25 Figura 26 Figura 27 Figura 28 Figura 29 Figura 30 Figura 31 Figura 32 Figura 33 Figura 34 Figura 35 Figura 36 Figura 37 Figura 38 Figura 39 Figura 40 Arquitectura P2P Arquitectura cliente-servidor Modelo centralizado Modelo totalmente descentralizado Modelo semicentralizado Arquitectura de Hotline Connect Arquitectura de Napster Arquitectura de eDonkey Clientes de eDonkey Cantidad de contenido compartido de BitTorrent Enjambre de BitTorrent Clientes BitTorrent Resultados en la conexión con el servidor 212.63.206.35 Resultados en la conexión con el servidor 195.22.108.26 Arquitectura propuesta Red IP multicast Contexto general del sistema Conexiones entre clientes de la red Capas de la aplicación cliente Capas de la aplicación servidor Diagrama de dominio del sistema Diagrama de casos de uso del usuario de la aplicación cliente Diagrama de paquetes Clases del paquete gui Clases del paquete client Clases del paquete constants Clases del paquete util Clases del paquete packets Clases del paquete data Clases del paquete server Clases del paquete dao Solicitud de conexión a la red P2P Solicitud de búsqueda de archivos Solicitud de búsqueda de comentarios Solicitud de búsqueda de comentarios Solicitud de sincronización de archivos Solicitud de desconexión a la red P2P Solicitud de conexión a la red IP multicast Solicitud de búsqueda de archivos a la red IP multicast Solicitud de búsqueda de comentarios a la red IP multicast 2 3 6 6 7 17 18 20 21 27 28 31 37 37 40 42 44 45 48 49 53 54 56 58 59 60 61 62 63 64 65 69 69 70 71 71 72 72 73 74 XI IDENTIFICADOR DESCRIPCIÓN PÁGINA Figura 41 Figura 42 Figura 43 Figura 44 Figura 45 Figura 46 Figura 47 Figura 48 Figura 49 Figura 50 Figura 51 Solicitud de búsqueda de direcciones IP a la red IP multicast Solicitud de transferencia de un parte del archivo Sincronización de transferencia de un parte del archivo Costes de hardware Costes de software Costes de tecnología Estimación del esfuerzo de los integrantes del proyecto Costes de implantación Costes de desarrollo del proyecto Planificación del proyecto Planificación de la etapa de desarrollo e implementación 74 75 76 83 83 84 85 86 86 88 89 XII Capítulo 1 Introducción Diseño e implementación de un protocolo peer-to-peer 1.1 INTRODUCCIÓN A LAS REDES PEER-TO-PEER 1.1.1 REDES PEER-TO-PEER Debido a un notable crecimiento en el número de equipos conectados a Internet, una mayor capacidad de almacenamiento de éstos y un rápido incremento del ancho de banda disponible, ha surgido una enorme difusión de recursos de todo tipo en Internet. Esta circunstancia ha hecho que sea necesario el desarrollo de una nueva arquitectura de red para poder compartir y acceder a los recursos disponibles en Internet. Esta arquitectura de red se conoce con el nombre de arquitectura peer-topeer, red peer-to-peer o más comúnmente P2P. Una red peer-to-peer, en adelante P2P, es un conjunto de equipos conectados por medio de un método de transporte de datos en el que se comparten recursos y en el que no están definidos ni clientes ni servidores fijos. Se puede decir que los equipos conectados a la red se comportan, simultáneamente como clientes y como servidores con respecto al resto y todos tienen capacidades y responsabilidades equivalentes [AFAN06]. Figura 1. Arquitectura P2P Frente a este tipo de redes, se encuentran las que se basan en una arquitectura cliente-servidor, en la que los clientes solicitan recursos a uno o más servidores. En este tipo de arquitectura, según se añaden más usuarios a la red, la tasa de 2 Diseño e implementación de un protocolo peer-to-peer transferencia1 disminuye ya que los recursos de los que dispone el servidor se consumen debido al intenso tráfico. En las redes P2P, cada nodo provee al resto de los recursos que dispone, obteniendo de esta forma un mayor rendimiento en las conexiones y en las transferencias. Figura 2. Arquitectura cliente-servidor Los aspectos fundamentales que caracterizan una red P2P son los que se muestran a continuación. Escalabilidad. El alcance de las redes P2P es mundial, con un gran número de usuarios potenciales. A diferencia de las redes basadas en una arquitectura cliente-servidor, cuantos más usuarios estén conectados a la red, mayor rendimiento se obtiene. Descentralización. Por definición, estas redes son descentralizadas y los usuarios se comportan, simultáneamente como clientes y servidores, lo que hace que ningún nodo sea imprescindible. Robustez. La naturaleza distribuida y descentralizada de las redes P2P incrementan la robustez, ya que en el caso de fallo de un nodo, este no es imprescindible. Seguridad. Es la característica menos implementada, aunque existen mecanismos de cifrado de clave, comunicaciones seguras, gestión de derechos de autor, firmas digitales y demás métodos de seguridad. 1 El término tasa de transferencia se refiere al número de bits que se transmiten durante un tiempo determinado entre dos dispositivos digitales. Mide la velocidad de transferencia de datos. 3 Diseño e implementación de un protocolo peer-to-peer Anonimato. Aunque es deseable que queden en anonimato el autor de un contenido, el editor, el lector, el servidor que lo alberga y la petición para encontrarlo, esta característica es incompatible con los derechos de autor, por lo que se proponen mecanismos de limitación de derechos como DRM2 (Digital Rights Management). 1.1.2 ELEMENTOS DE UNA RED PEER-TO-PEER El elemento fundamental de una red P2P es una unidad de procesamiento lógico, capaz de llevar a cabo una tarea encomendada y comunicar los resultados de la ejecución de dicha tarea a otra entidad de la red, ya sea directa o indirectamente. Esta unidad de procesamiento se conoce con el nombre de par o igual. Existen dos tipos de pares [SANT07], los pares simples y los superpares. Los primeros sirven a un único usuario final, proporcionándole servicios y demandándolos a otros pares de la red. Los segundos gestionan el tráfico recibiendo solicitudes de búsqueda de otros pares e indicando el acceso a los mismos. Estos dos tipos de pares pueden agruparse con otros de su misma especie, formando lo que se conoce como grupo de pares. Un grupo de pares es un conjunto de pares del mismo tipo, configurado para servir un interés común, señalado por el resto de pares del grupo. Los grupos de pares proporcionan servicios a sus pares miembro que no son accesibles por otros pares de la red P2P. Este concepto es necesario para poder dividir el espacio de la red. Los servicios que proporcionan los pares de una red, proveen una funcionalidad útil que se consigue por medio de la comunicación de los mismos. Esta funcionalidad cubre una larga lista de diferentes finalidades, entre las que se encuentran la búsqueda y transferencia de archivos, la telefonía por internet y los cálculos de carácter científico. 2 El término DRM (Digital Rights Management) se refiere al conjunto de tecnologías de control para la limitación del uso de medios o dispositivos digitales. También se puede referir a las restricciones asociadas a instancias específicas de obras digitales o dispositivos. 4 Diseño e implementación de un protocolo peer-to-peer Los servicios pueden clasificarse en servicios de pares y servicios de grupos de pares. Los primeros son funcionalidades que ofrece un par concreto a otros pares de la red. Si el par se desconecta, el servicio deja de estar disponible. Los segundos son funcionalidades que ofrece un grupo de pares, consiguiendo así un acceso concurrente al servicio. Si un par del grupo se desconecta, el servicio sigue estando disponible, ya que el resto de los pares que forman parte del grupo continúan conectados. 1.1.3 ARQUITECTURA DE LAS REDES PEER-TO-PEER El modelo en el que se basa la arquitectura de una red P2P puede ser centralizado, totalmente descentralizado, semicentralizado. En modelo centralizado, las solicitudes de búsqueda y control se realizan a través de un único servidor central, que sirve de punto de enlace entre los nodos de la red. Este servidor mantiene una base de datos en la que almacena la información de los archivos que tiene cada cliente, actualizándola cada vez que un cliente se conecta o desconecta. Cada solicitud de búsqueda es comparada en servidor central con la información de la base de datos, y contestada con las correspondencias encontradas. Una vez que el cliente tiene las correspondencias, se conecta directamente con cada par y accede al recurso solicitado. Este modelo se caracteriza por poseer una administración dinámica, una disposición más permanente de los recursos y un elevado rendimiento en la localización de recursos, sin embargo, está muy limitado en lo referente a la escalabilidad3 y a la robustez4, ya que únicamente tiene un punto de fallo. Algunos ejemplos de redes que se basan en este modelo son Napster y Audiogalaxy. 3 El término escalabilidad se refiere a una propiedad deseable en un sistema, que indica su habilidad para poder hacerse más grande sin perder calidad en sus servicios. 4 El término robustez se refiere a una propiedad deseable de un sistema, que indica su habilidad para poder funcionar o continuar funcionando correctamente bajo situaciones inesperadas. 5 Diseño e implementación de un protocolo peer-to-peer Figura 3. Modelo centralizado El modelo totalmente descentralizado o puro se caracteriza porque no existe un servidor central, cada nodo actúa como cliente y como servidor, tratando de mantener un cierto número de conexiones con otros pares, mandando y recibiendo peticiones y mensajes de control que facilitan el descubrimiento y encaminamiento de otros nodos. Las redes que se ajustan a este modelo son las más versátiles y robustas al no depender de un servidor central, no obstante, el elevado tiempo y la sobrecarga de ancho de banda que suponen las búsquedas de información son las principales desventajas de esta arquitectura. Algunos ejemplos de redes que se basan en este modelo son Kademlia, Gnutella y Freenet. Figura 4. Modelo totalmente descentralizado 6 Diseño e implementación de un protocolo peer-to-peer El modelo semicentralizado o mixto es el más extendido entre las arquitecturas de redes P2P. En este modelo, se seleccionan ciertos nodos para que cumplan la función de superpares y así ayudar a encaminar el tráfico hacia otros pares. Los superpares cambian dinámicamente a medida que otros clientes se conectan a la red. Cada par mantiene un número limitado de conexiones abiertas a un superpar y cada superpar está conectado con el resto de superpares de la red. Este modelo se caracteriza por presentar un alto grado de escalabilidad, al reducir el número de nodos implicados en el proceso de encaminamiento, y disminuir el volumen de tráfico entre estos. Algunos ejemplos de redes que se basan en este modelo son eDonkey y BitTorrent. Figura 5. Modelo semicentralizado 1.1.4 CLASIFICACIÓN DE LAS REDES PEER-TO-PEER La clasificación más utiliza para identificar las redes P2P es de acuerdo al tipo de estructura que presente, así se pueden presentar redes estructuradas o no estructuradas [RODE05]. Las redes P2P estructuradas son aquellas en la que los recursos están situados en pares precisos. Cada nodo de la red cuenta con su propia tabla hash5, el lugar en el que 5 El término tabla hash se refiere a una estructura de datos que asocia claves con valores, cuya operación fundamental es la búsqueda, permitiendo el acceso a los valores almacenados a partir de una clave generada. 7 Diseño e implementación de un protocolo peer-to-peer está cada recurso es calculado mediante una función hash6 aplicada sobre la tabla, la cual indica que par de la red conoce la localización del recurso. Algunos ejemplos de este tipo de redes son Pastry, CAN y Chord. Este tipo de redes proporcionan un mecanismo de búsqueda determinista, de tal forma que asegura la localización de un recurso siempre y cuando se encuentre en la red. Además los mensajes de búsqueda son encaminados de forma eficiente, de tal forma que el recurso es encontrado en saltos, donde es el tamaño de la red. Sin embargo, estas redes son ineficientes para realizar búsquedas por palabras clave, ya que el usuario debe conocer el nombre exacto del recurso para poder aplicar la función hash y así poder enrutar la búsqueda de forma eficaz. Además en este tipo de redes, los usuarios deben organizar sus tablas hash cada vez que otro usuario se conecta o desconecta, lo que provoca un proceso bastante complejo y un gran número de mensajes de sincronización, lo que puede dar lugar a un colapso de la red. En las redes P2P no estructuradas, la localización de los recursos no está determinada en pares concretos, sino que a cada nodo se le asignan enlaces arbitrariamente. No existe garantía alguna de encontrar el recurso, aunque éste esté en la red, ya que la búsqueda no es determinista. Un ejemplo de este tipo de redes es Gnutella. Existen distintos mecanismos de búsqueda dentro de las redes no estructuradas, pero los más utilizados son el de inundación y el de paseos aleatorios. En el primero, cuando un nodo recibe un mensaje de solicitud de búsqueda de un recurso, si no conoce el recurso buscado, reenvía el mensaje a todos los pares con los que tiene una conexión. El inconveniente de este método de búsqueda es que introduce mucho tráfico en la red. En el segundo mecanismo, los mensajes no se envían a todos los pares con los que se tiene conexión, sino que sólo es enviado a uno ellos elegido aleatoriamente. El alcance del mensaje está limitado por medio de la utilización de un 6 El término función hash se refiere a un algoritmo para la generación de claves que representen de forma unívoca un determinado valor. 8 Diseño e implementación de un protocolo peer-to-peer mecanismo basado en TTL7 (Time To Live). Este método introduce mucho menos tráfico en la red que el primero, sin embargo, reduce la probabilidad de encontrar el recurso debido a la limitación de la distribución del mensaje de búsqueda. Aunque no se han detallado, existen muchas más clasificaciones de las redes P2P, atendiendo a su generación y a sus características de anonimidad. 1.1.5 APLICACIONES DE REDES PEER-TO-PEER Aunque, como se ha detallado anteriormente, una mayor capacidad de almacenamiento y un rápido incremento del ancho de banda disponible han ayudado al desarrollo de las redes P2P, estos recursos son costosos. Aquellos servicios y aplicaciones que requieran un uso considerable de estos recursos pueden utilizarse las redes P2P. Algunos ejemplos de aplicación de estas redes son los siguientes. Sistemas de intercambio de archivos. Posiblemente sea la aplicación más extendida en este tipo de redes. Los propósitos de este tipo de aplicación son muy variados, desde el uso particular hasta el ámbito educativo. Algunos ejemplos son LionShare, eDonkey2000 y BitTorrent. Sistemas de telefonía por Internet. Sistemas basados en VoIP8 (Voice over Internet Protocol) que permite la transmisión en tiempo real de señales de voz por la Red. Algunos ejemplos de este tipo de aplicación son Skype y Gizmo5. Sistemas de archivos distribuidos. Sistema de datos distribuido en los que la información se almacena en nodos de la red y se permite el acceso de otros pares a la misma. Algunos ejemplos de este tipo de aplicación son Freenet y CFS. Sistemas de P2PTV. Sistemas para la transmisión y difusión de contenidos audiovisuales a través de Internet. En este tipo de sistemas, los nodos se 7 El término TTL (Time To Live) se refiere al número de veces que puede ser enrutado un paquete antes de ser descartado o devuelto al origen. 8 El término VoIP (Voice over Internet Protocol) se refiere al conjunto de recursos que hacen posible enviar la voz en forma digital a través de Internet, utilizando para ello el protocolo IP. 9 Diseño e implementación de un protocolo peer-to-peer conectan a sus pares para recibir los streams9 de video y audio, en lugar de conectarse con un servidor central en la televisión basada en IP (Internet Protocol), IPTV10 (Internet Protocol Television). Algunos ejemplos de este tipo de aplicación son SopCast y CoolStreaming. Sistemas de cálculo científico. Sistemas que tienen que manejar grandes cantidades de datos y tienen una gran carga computacional, como es el caso de sistemas de administración autónoma para la bioinformática. Un ejemplo de este tipo de aplicación es Chinook. 1.1.6 PROBLEMAS DE LAS REDES PEER-TO-PEER Como ya se ha detallado anteriormente, uno de los problemas de las redes P2P radica en el proceso de búsqueda de los nodos. El problema de encontrar un par que se encuentre conectado a la red P2P es, comúnmente, solucionado realizando una conexión con un servidor, en el que la dirección IP es conocida. Este servidor es el encargado de mantener una lista con las direcciones de los nodos que se encuentran conectados a la red. Otro problema es el de la conexión de pares sin dirección IP pública. La solución que se suele aplicar es la conexión de otro nodo que cumple la función de proxy11. El resto de los pares se conectan a este proxy el cual envía la información que llega de uno al otro. Cualquier nodo que esté conectado a la red P2P y tenga una dirección IP pública puede ser elegido para que cumpla con el cometido de proxy. En este caso, es de implementación obligatoria el desarrollo de mecanismos de seguridad para evitar que los proxies puedan acceder a la información que se comunican dos pares de la red. 9 El término stream se refiere a un elemento software que permite un flujo de información entre un origen y un destino. 10 El término IPTV (Internet Protocol Television) se refiere a una tecnología basada en video streaming de distribución de señales de televisión y video, que usa conexiones de banda ancha sobre el protocolo IP. 11 El término proxy se refiere a un dispositivo de red que realiza una acción en representación de un equipo perteneciente a esa red. Su finalidad más usual es permitir el acceso a Internet a todos los equipos de una organización. 10 Diseño e implementación de un protocolo peer-to-peer 1.2 TECNOLOGÍAS En este apartado se realizará una breve explicación sobre las principales tecnologías del proyecto y el motivo de su elección. 1.2.1 JAVA Java fue desarrollado en 1990 por Sun Microsystems, como parte de un proyecto de investigación para el desarrollo de una amplia variedad de dispositivos de red, con el fin de que fuera independiente de la arquitectura del dispositivo. El propósito era crear una nueva plataforma operativa que, además de ser independiente de la arquitectura del dispositivo, fuera sencilla, portable, fiable, distribuida y en tiempo real. Este lenguaje de programación toma mucha de su sintaxis de otros lenguajes como C, C++, Eiffel y SmallTalk, pero el modelo de objetos que utiliza es más simple y elimina accesos de bajo nivel. El resultado es un lenguaje que se ha mostrado ideal para desarrollar aplicaciones de usuario final seguras, distribuidas y basadas en red en un amplio rango de entornos desde los dispositivos de red embebidos hasta los sistemas de sobremesa e Internet. Las características principales de Java [MUÑO04] son las que se muestran a continuación. Sencillo, orientado a objetos y familiar: Sencillo, para que no requiera grandes esfuerzos de entrenamiento para los desarrolladores. Orientado a objetos, porque la tecnología de objetos se considera madura y es el enfoque más adecuado para las necesidades de los sistemas distribuidos y clienteservidor. Familiar, porque aunque se rechazó C++, se mantuvo Java lo más parecido posible a C++, eliminando sus complejidades innecesarias, para facilitar la migración al nuevo lenguaje. Robusto y seguro: Robusto, simplificando la gestión de memoria y eliminando las complejidades de la gestión explicita de punteros y aritmética de punteros de C. Seguro para que pueda operar en un entorno de red. Independiente de la arquitectura y portable: Java está diseñado para soportar aplicaciones que serán instaladas en un entorno de red heterogéneo, 11 Diseño e implementación de un protocolo peer-to-peer con hardware y sistemas operativos diversos. Para hacer esto posible el compilador Java genera bytecodes, un formato de código independiente de la plataforma diseñado para transportar código eficientemente a través de múltiples plataformas de hardware y software. Es además portable en el sentido de que es rigurosamente el mismo lenguaje en todas las plataformas. El bytecode es traducido a código máquina y ejecutado por la Máquina Virtual Java, que es la implementación Java para cada plataforma hardware software concreta. Alto rendimiento: A pesar de ser interpretado, Java tiene en cuenta el rendimiento, y particularmente en las últimas versiones dispone de diversas herramientas para su optimización. Cuando se necesitan capacidades de proceso intensivas, pueden usarse llamadas a código nativo. Interpretado, multi-thread y dinámico: El intérprete Java puede ejecutar bytecodes en cualquier máquina que disponga de una Máquina Virtual Java. Además Java incorpora capacidades avanzadas de ejecución multi-thread, ejecución simultánea de más de un flujo de programa, y proporciona mecanismos de carga dinámica de clases en tiempo de ejecución. Dado que el presente proyecto tiene características de un sistema distribuido, éste ha de ser independiente tanto del hardware como del sistema operativo en el que se ejecute. Además la arquitectura planteada se ajusta muy bien a las características anteriormente mencionadas, sencillez, robustez, multi-thread y demás, por lo que la elección de Java como lenguaje de implementación es la más indicada para la implementación del proyecto. 1.2.2 MYSQL MySQL es un sistema de gestión de bases de datos relacionales desarrollado por David Axmark y Michael Widenius y actualmente distribuido por la compañía comercial MySQL AB. Actualmente, según las cifras de la página del proyecto, existen más de seis millones de copias funcionando en equipos de todo el mundo, lo que le convierte en uno de los sistemas gestores de bases de datos relacionales más utilizados. MySQL es muy utilizado en aplicaciones web, ya que es un sistema gestor muy rápido en la 12 Diseño e implementación de un protocolo peer-to-peer lectura, y en este tipo de aplicaciones el entorno es intensivo en lectura de datos, lo que hace que MySQL sea excelente para este tipo de aplicaciones. Este hecho hace que portales web con alta tasa de tráfico, como Google, Amazon y YouTube entre otros, utilicen este sistema gestor para el almacenamiento y recuperación de datos así como para el proceso de autenticación de los usuarios. MySQL está escrito en los lenguajes de programación C y C++, utilizando yacc como analizador gramatical de SQL (Structured Query Language). Además existen varias APIs (Application Programming Interface) que permiten a aplicaciones realizadas en una gran variedad de lenguajes, acceder a las bases de datos, incluyendo C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, y Tcl. También existe un interfaz ODBC12 (Open Database Connectivity), llamado MyODBC que permite a cualquier lenguaje de programación que soporte ODBC comunicarse con las bases de datos MySQL. Las principales características de este sistema gestor de bases de datos relacionales [MYSQ09] son las siguientes. Entorno cliente-servidor o incrustados. El software de bases de datos MySQL es un sistema cliente-servidor que consiste en un servidor SQL multi-thread que trabaja con diferentes backends13, programas y bibliotecas cliente, herramientas administrativas y un amplio abanico de interfaces de programación para aplicaciones. También proporciona MySQL Server como biblioteca incrustada multi-thread, la cual se puede lincar en cualquier tipo de aplicación para obtener un producto más pequeño, rápido y fácil de administrar. Rápido, fiable y fácil de usar. MySQL Server se desarrolló originalmente para tratar grandes bases de datos mucho más rápido que soluciones existentes y ha sido usado con éxito en entornos de producción de alto rendimiento durante varios años. MySQL Server ofrece hoy en día una gran cantidad de 12 El término ODBC (Open Database Connectivity) se refiere a un estándar de acceso a bases de datos desarrollado por Microsoft con el objetivo de hacer posible la comunicación entre una aplicación y el sistema gestor de bases de datos. 13 El término backend se refiere a un tipo de abstracción que engloba las diferentes partes finales de un sistema o proceso. 13 Diseño e implementación de un protocolo peer-to-peer funciones. Su conectividad, velocidad, y seguridad hacen de MySQL Server altamente apropiado para acceder bases de datos en Internet. Open source. Open source significa que es posible usar y modificar el software. Se puede bajar el software MySQL desde internet y usarlo sin pagar nada. Si se desea se puede estudiar el código fuente y cambiarlo para adaptarlo a las necesidades del usuario. El software MySQL usa la licencia GPL (GNU General Public License) y en caso de necesitar añadir código MySQL en una aplicación comercial, se puede adquirir una licencia de tipo privativa. Tras la descripción detalla de las características, se puede apreciar que el sistema gestor de bases de datos relacionales MySQL es una de las mejores propuestas tecnológicas, ya que las características se ajustan a los requisitos del proyecto, tales como multi-thread, rapidez y fiabilidad. Además MySQL está bajo licencia GPL, un valor añadido al producto final que hoy en día es bastante valorado en algunos proyectos. 14 Capítulo 2 Estado del Arte de las Aplicaciones Peer-to-Peer Diseño e implementación de un protocolo peer-to-peer 2.1 ESTADO DEL ARTE Como ya se ha detallado anteriormente en el apartado de aplicaciones de redes P2P, existe una gran variedad de aplicaciones P2P con diferentes finalidades. Ya que el marco de desarrollo del presente proyecto se encuentra en la búsqueda e intercambio de archivos, el siguiente estudio del estado del arte sólo afecta a aquellas aplicaciones cuya finalidad es la anteriormente mencionada. El sistema global de discusión en Internet Usenet, fue unos de los primeros sistemas de comunicación entre redes. Desarrollado por Tom Truscott y Jim Ellis en 1979 y actualmente vigente, permite el intercambio de opiniones y experiencias entre los usuarios interesados en el mismo tema. Comenzó a utilizarse en 1980 empleando UUCP14 (Unix to Unix Copy), lo que permite el uso de servicio de email y transferencia de archivos, sosteniéndose gracias a un gran número de servidores distribuidos y actualizados mundialmente que almacenan y transmiten los mensajes. El gran número de usuarios y grupos, la escasez de recursos requeridos, la velocidad, el anonimato, su libre acceso y su descentralización, entre otros, hacen de Usenet la mayor red de intercambio de información y debate del mundo. También goza de una importancia cultural significativa, habiendo dado lugar al nacimiento, y popularizado, conceptos considerablemente reconocidos, como FAQ (Frequently Asked Questions) y spam. La primera aplicación P2P conocida, desarrollada en el año 1996 por Adam Hinkley para Mac OS, fue Hotline Connect, más conocida simplemente como Hotline, y se basaba en la librería AppWarrior que el propio Hinkley había implementado anteriormente. Distribuida por Hotline Communications, pretendía ser una plataforma de distribución de archivos destinada al ámbito empresarial y universitario, pero en muy poco tiempo empezó a servir de intercambio de archivos de dudosa legalidad y como servicio de IRC (Internet Relay Chat), pasando a segundo plano el intercambio de archivos de libre distribución. 14 El término UUCP (Unix to Unix Copy) se refiere a un conjunto de programas y protocolos que permiten la ejecución remota de comandos y transferencia de archivos, emails y netnews entre los ordenadores de una red. 16 Diseño e implementación de un protocolo peer-to-peer Hotline se distribuía como shareware15 junto con los servicios de IRC bajo una arquitectura cliente-servidor. Este hecho obligaba a que en caso de que un servidor cerrase, la descarga se tenía que cancelar y empezar de nuevo desde otro servidor del cual seguir descargando el archivo, ya que no existía ningún otro lugar del cual descargar el archivo. Existen varias versiones open source de Hotline que no se basan en el código original de Hinkley, y que incluyen mejoras al protocolo y al servicio IRC, como IRC bridge o KDX bridge [HAXI01]. Las aplicaciones de las que constaba Hotline eran las que se detallan a continuación. Hotline Client. La aplicación que se utilizaba para poder acceder a los usuarios que ejecutaban la aplicación servidora conociendo la dirección IP de estos. Hotline Server. La aplicación que ejecutaban los clientes para gestionar el acceso a los recursos. Hotline Tracker. Un servidor de nombres que mantenía las direcciones IP de los clientes que ejecutaban la aplicación servidora. Figura 6. Arquitectura de Hotline Connect 15 El término shareware se refiere a un tipo de distribución de aplicaciones en la que el usuario puede evaluar el software de forma gratuita y durante un tiempo determinado. 17 Diseño e implementación de un protocolo peer-to-peer El problema de la dependencia de las descargas al servidor al que el usuario se encontrara conectado y la dependencia de la ejecución de la aplicación en sistemas MAC, una plataforma minoritaria en aquel tiempo, motivó la aparición de Napster. Napster fue desarrollado por Shawn Fanning y ofrecía un servicio de distribución de archivos de música en formato MP3 (MPEG-1 Audio Layer 3), que facilitaba la búsqueda de estos por medio de la centralización, en lugar de buscar en IRCs o en buscadores de Internet. Fue el primer sistema P2P de distribución de archivos entre pares basado en una red centraliza, ya que utilizaba un servidor central para mantener la lista de usuarios conectados y archivos compartidos por cada uno de ellos, mientras que las transferencias de archivos, sin embargo, eran realizadas entre los usuarios sin ningún tipo de intermediario. Aunque hubo varias redes que facilitaban la distribución de archivos a través del Internet, Napster se especializaba directamente en música, en archivos de formato MP3, presentados a través de una interfaz amigable al usuario. El resultado fue un sistema cuya popularidad generó una enorme selección de música para descargar. El servicio y programa eran inicialmente sólo para plataformas Windows, pero en el 2000 Black Hole Media realizó un cliente llamado Macster para sistemas Mac. Figura 7. Arquitectura de Napster 18 Diseño e implementación de un protocolo peer-to-peer El hecho de que Napster fuera un servicio centralizado resultó su perdición ya que varias discográficas estadounidenses demandaron a Napster, reclamando su cierre a la RIAA16 (Recording Industry Association of America). A pesar de la clausura del servicio, existían ya bastantes alternativas, como servidores no oficiales, OpenNap, y una gran variedad de aplicaciones como Winmx e iMesh. Después se estableció Audiogalaxy como el sistema P2P más utilizado por los usuarios de Internet, otra aplicación centralizada de intercambio de música, que acabó clausurada también por orden judicial de la RIAA. El cierre de los servidores de aplicaciones centralizadas como Napster y Audiogalaxy, motivó nacimiento de las redes descentralizadas y semicentralizadas, pues para terminar con estas bastaba con eliminar el servidor central que almacenaba las listas de los archivos compartidos y de los usuarios conectados a la red. Una de ellas, eDonkey, también conocida como eDonkey2000 o eD2K, apareció por primera vez en Septiembre del 2000 desarrollada por MetaMachine. Esta red se puede clasificar del tipo semicentralizada, pues utilizaba servidores para almacenar la información de los usuario y de los archivos, pero ninguno de estos era central, por lo que en caso de fallo otro servidor podía seguir ofreciendo el servicio, incluso los usuarios de las red podían crear sus propios servidores. Los elementos de la red eDonkey son los que se detallan a continuación. Servidores. Utilización de servidores para conectar a los clientes. Metadatos. Envío de metadatos de un archivo justo en el momento de enviar la información de los archivos compartidos al servidor. Enlaces. Utilización de enlaces llamados elinks o ed2k links para permitir la identificación, por medio de una función hash, de un archivo o un servidor en el navegador del cliente y transferirlo a la aplicación. La estructura típica de los enlaces para identificar un archivo es la siguiente. ed2k://|file|NOMBRE.EXTENSIÓN|TAMAÑO|HASH|. Opcionalmente se podía 16 El término RIAA (Recording Industry Association of America) se refiere a una asociación americana que representa a la industria discográfica. 19 Diseño e implementación de un protocolo peer-to-peer añadir al final del enlace la referencia a la dirección IP y el puerto del cliente que compartía el archivo /|sources, DIRECCIÓN_IP:PUERTO|/. La estructura típica de los enlaces para identificar un servidor es la siguiente. ed2k://|server|IP|PUERTO|/ Detección de errores. División de los archivos transmitidos en bloques de 9500 KB generando un hash, por medio del algoritmo MD417, por cada bloque y luego de la suma del resto, conocido como raíz o root, para comprobar los datos transmitidos y evitar la corrupción de los bloques. El funcionamiento de la red era el siguiente. Cuando un cliente se conecta a la red, se realiza un proceso de handshake entre éste y el servidor, para anunciar los archivos que se comparten. En el proceso de las búsquedas, el cliente envía la petición al servidor, el cual se encarga de buscar el archivo en la información que los clientes le proporcionaron durante el handshake. Cuando la petición es aceptada, el servidor establece una conexión entre los dos clientes y comienza la descarga. Figura 8. Arquitectura de eDonkey 17 El término algoritmo MD4 se refiere a un algoritmo de función hash diseñado Ronald Rivest para el uso en comprobaciones de integridad de mensajes que produce un identificador de 128 bits. 20 Diseño e implementación de un protocolo peer-to-peer Ya que la red eDonkey estaba basada en servidores administrados por los usuarios, estos podían ser objeto de tráfico pesado y, por consiguiente, más vulnerables a los ataques. Para solventar este problema, MetaMachine, desarrolló la red Overnet como su sucesor en el protocolo eDonkey. Overnet fue una red de ordenadores P2P descentralizada, normalmente usada para compartir grandes archivos que implementaba una variante del protocolo Kademlia. En 2006, MetaMachine, alcanzó un acuerdo con la RIAA para evitar un juicio por infracción de los derechos de propiedad intelectual. La compañía dejó de distribuir su software y acordó pagar una compensación monetaria. En Septiembre del 2006, la red eDonkey2000 dejó de funcionar, sin embargo, se puede comprobar que, por el momento, sigue en funcionamiento usando otros clientes, como los que se muestran a continuación. NOMBRE REDES ANÓNIMO LICENCIA PLATAFORMA LENGUAJE aMule eDonkey Kad No GPL Windows, Linux MAC OS C++ eMule eDonkey Kad No GPL Windows C++ BitTorrent eDonkey FastTrack MLDonkey Gnutella Gnutella2 Kad No GPL Windows, Linux MAC OS Ocaml Lphant BitTorrent eDonkey No Freeware con Adware Windows, Linux MAC OS C# Shareaza BitTorrent eDonkey Gnutella Gnutella2 No GPL Windows C++ TrustyFile BitTorrent eDonkey FastTrack Gnutella Gnutella2 Overnet No Código cerrado Windows Desconocido Figura 9. Clientes eDonkey 21 Diseño e implementación de un protocolo peer-to-peer NOTA: En la tabla anterior no se han incluido todos los mods, modificaciones de los clientes con respecto a su original, ya que el tamaño de la tabla habría aumentado considerablemente. Paralelamente al cliente eDonkey, existía el cliente eMule, desarrollado por Hendrik Breitkreuz en Mayo del 2002 por discordancias con este, en poco tiempo lo superó en funciones, y sumando el hecho de que era libre y gratuito, entre otros motivos, lograron que en poco tiempo lo superase en popularidad para convertirse en uno de los programas más usados por los usuarios de redes P2P. eMule es un programa para intercambio de archivos con sistema P2P que utiliza el protocolo eDonkey y la red Kad, publicado como software libre para sistemas Windows. Está implementado en Microsoft Visual C++ haciendo uso de la librería Microsoft Foundation Classes y se encuentra bajo licencia GPL. Las características de eMule son las que se detallan a continuación. Intercambio directo. Al igual que eDonkey, el intercambio de los archivos se realiza directamente entre clientes, con el previo proceso de handshake con el servidor. Uso de una red descentralizada. Los clientes de eMule pueden conectarse opcionalmente a una red descentralizada denominada Kad, utilizando el protocolo Kademlia, la cual no depende de servidores centrales pero sí utiliza tablas hash distribuidas. Licencia GPL. El hecho de estar bajo esta licencia, implica que cualquier usuario puede modificar el código libremente. Por este motivo han proliferado toda una serie de modificaciones, mods, del programa original, como eMule Plus o eMule MorphXT. Detección de errores y recuperación de partes. Se utiliza algoritmos de detección de errores, que dividen los archivos en bloques de 9500 KB y generando un hash, por medio del algoritmo MD4, para comprobar los datos transmitidos. Además el sistema AICH (Advanced Intelligent Corruption 22 Diseño e implementación de un protocolo peer-to-peer Handling) utiliza el método de hashtree18 para fragmentar el archivo en bloques de 180 KB, disminuyendo así la cantidad de datos que hay que volver a descargar para corregir un error de transmisión. Transferencias comprimidas. Cada vez que eMule transmite datos, estos se comprimen con la librería zlib, de forma totalmente transparente al usuario y ahorrando ancho de banda. Comentarios para los archivos. Se permite calificar la calidad de un archivo y escribir comentarios sobre él para que otros usuarios los puedan leer, pudiendo así saber de antemano si el archivo tiene la calidad esperada o si está corrupto. El problema es que para leer los comentarios de un usuario, previamente se ha tenido que conectar a este. Archivos de colección. Se permite crear archivos en un formato especial llamado colección. Este tipo de archivo contiene un conjunto de enlaces de eMule, dando la posibilidad de bajarlo como un conjunto y guardar toda la colección de archivos como un conjunto, aunque cada descarga se gestiona independientemente. Previsualización archivos multimedia. Se permite la visualización de diversos tipos de archivos, como audio y vídeo, aunque el archivo no se haya descargado completamente, siempre que el usuario tenga instalado un reproductor multimedia. Mensajería instantánea. Cuenta con la posibilidad de enviar mensajes a usuarios de la red eDonkey 2000 conectados a las descargas en curso y de un chat IRC para buscar información sobre lo que interese a los usuarios. Además de las características anteriores, eMule se distingue por la utilización de un sistema de créditos por el cual los usuarios que más archivos aporta a la red, más rápido avanzan en las colas de descarga de un archivo. Es la forma de recompensar, mediante un algoritmo meritocrático, a los usuarios que aportan recursos a la red. El sistema de gestión de la cola de descarga está basado en el tiempo de espera de un usuario en la cola de descarga de un archivo. El sistema de créditos proporciona un 18 El término hashtree se refiere a una estructura de datos que contiene los valores hash de un árbol y que se utiliza para verificar su contenido. 23 Diseño e implementación de un protocolo peer-to-peer ratio de modificación al algoritmo de gestión de la cola de descarga, en función de la cantidad de datos transferidos entre dos clientes. Los créditos se almacenan en cada usuario para evitar que sean modificados, con la problemática de que únicamente se obtendrán créditos en los usuarios en los que se haya transferido un archivo. La expresión de cálculo que utiliza el sistema de créditos está compuesta por dos ratios [MONK03]. 1 2 2 √ 2 Al terminar el cálculo, ambos ratios son comparados y el sistema de créditos elige el menor como ratio de modificación al algoritmo de gestión de la cola de descarga. Existen tres restricciones a este cálculo, que son las siguientes. El ratio de modificación al algoritmo de gestión de colas es un número entre 1 y 10. Si el total subido es menor que 1 MB, entonces el ratio de modificación permanece a 1. Si el cliente no ha descargado nada, el ratio de modificación es fijado a 10. Una excepción a esta regla se aplica sólo cuando un par es asignado como amigo después de la agregación a la lista de amigos del cliente. Esto automáticamente asigna una posición en la cola de descarga para que se pueda comenzar a descargar, independientemente de la calificación de los anteriores ratios. Sólo se puede reservar una posición para un amigo, para impedir cualquier forma de abuso. Otra de las características de distinción es la ofuscación del protocolo. Esta función evita que las conexiones sean detectadas y, posteriormente, bloqueadas por los ISPs (Internet Service Provider). La ofuscación del protocolo es una característica que hace que eMule encubra su protocolo al comunicarse con un servidor u otros clientes. Sin ofuscación, cada comunicación de eMule tiene una estructura predeterminada que puede ser fácilmente identificada por un packet sniffer, programa 24 Diseño e implementación de un protocolo peer-to-peer de captura de las tramas de red. Si se activa el modo ofuscado, toda la comunicación simula estar compuesta de datos aleatorios y ya no es posible realizar una identificación. Esto ayuda en situaciones en las que, mediante identificación de paquetes, el protocolo eMule es bloqueado. No hay que confundir el modo ofuscado con un modo que proporciona anonimato. Para la identificación de archivos, estos tienen asignado un valor mediante una función hash, que identifica de forma unívoca un archivo aunque este tenga diversos nombres, de manera que un mismo archivo que tengan diferentes usuarios, aunque alguno de ellos modifique el nombre, este sigue siendo el mismo. Además, todos los archivos se separan en bloques de 9500 KB y de cada una de estas partes se calcula su valor hash, mediante el algoritmo MD4, de manera que el valor hash final del archivo es el resultado de aplicar la función hash MD4 a la concatenación de los valores hash de todas sus partes. En los elinks es imprescindible especificar el hash del archivo y también su tamaño correcto. Como se ha detallado anteriormente, eMule dispone de dos redes, una red basada en servidores eDonkey y una descentralizada, denominada Kad. A continuación se explica el funcionamiento de cada una de ellas. Para conectarse a la red de servidores, es necesario conocer la dirección IP del servidor. Una vez el cliente se ha conectado a un servidor, éste le comunica los archivos que quiere compartir. La lista de servidores que presenta eMule puede ser actualizada, permitiendo búsquedas más precisas y extensas y encontrar servidores más rápidos. La red Kad es una red totalmente descentralizada, que usa una variante del protocolo Kademlia y diseñada para que eMule pueda mantenerse activo tras una posible caída de la red de servidores. Para conectarse a esta red hay que conocer la dirección IP de otro par, pero es posible conectarse a partir de los pares obtenidos de la red de servidores. Cada par conoce una pequeña parte de la red, de manera que el tamaño de la red puede crecer tanto como haga falta sin afectar al rendimiento. 25 Diseño e implementación de un protocolo peer-to-peer Cuando un nodo se conecta, almacena los identificadores de los archivos que quiere compartir con otros pares, escogidos en función del identificador del archivo mediante tablas hash distribuidas. Cuando se quiere descargar un archivo, se localizan los pares que lo indexan y estos devuelven la lista de fuentes para este archivo concreto. La búsqueda por nombre funciona de una manera parecida, guardando el nombre del archivo dentro de otros nodos escogidos en función de cada palabra del nombre. Una búsqueda en Kad se ejecuta siempre en toda la red. Esta red utiliza el protocolo de nivel de transporte UDP (User Datagram Protocol) para las siguientes funciones. Encontrar fuentes para valores hash eDonkey. Búsquedas de valores hash eDonkey basadas en palabras clave del nombre archivo. Encontrar comentarios y valoraciones de los archivos. Almacenar direcciones, comentarios y nombres de archivos. Uno de los problemas de esta red es que ya que los nodos están comunicándose continuamente entre ellos puede producir una mayor carga en máquinas. Como alternativa a eMule, en Abril del 2001 apareció el protocolo BitTorrent, desarrollado por Bram Cohen y liberada la primera implementación en Julio del 2001 [COHE01], actualmente mantenido por la empresa BitTorrent. BitTorrent es un protocolo P2P de transferencia de archivos más comunes para transferir archivos grandes, algunas estimaciones otorgan la cantidad total de contenido compartido actualmente en más de 1,4 PB [ISOH08]. 26 Diseño e implementación de un protocolo peer-to-peer Figura 10. Cantidad de contenido compartido de BitTorrent El protocolo trabaja inicialmente cuando un usuario crea un archivo y lo hace disponible a otros usuarios de la red, esto es lo que comúnmente se conoce con el nombre de semilla y permite que otros pares se puedan descargar este archivo. Para compartir un archivo o grupo de archivos, un usuario debe crear primero un pequeño archivo con extensión .torrent. Este archivo es estático, por lo que a menudo se encuentra en páginas web o incluso se distribuye por correo electrónico. El archivo .torrent contiene la dirección de un servidor de búsqueda, o tracker, el cual se encarga de localizar posibles fuentes. Este servidor realmente se encuentra centralizado y provee estadísticas acerca del número de transferencias, el número de nodos con una copia completa del archivo y el número de nodos que poseen sólo una parte del mismo. Los clientes que deseen descargar el archivo primero debe obtener el archivo .torrent, para poder conectarse a otros nodos de la red que tiene el archivo y así poder empezar la descarga. La estructura que forman sus conexiones es conocida con el nombre de enjambre. El archivo deseado es descargado de las fuentes encontradas por el servidor de búsqueda y, al mismo tiempo que se realiza la descarga, se comienza a subir las partes disponibles del archivo a otros pares. El hecho de compartir el archivo, incluso antes de completar la descarga, contribuye a la distribución de este ya que a medida que más pares se descarguen el archivo, la probabilidad de éxito de la descarga y la velocidad de la misma aumentan. 27 Diseño e implementación de un protocolo peer-to-peer Figura 11. Enjambre de BitTorrent Cuando un usuario comienza la descarga de un archivo, no necesariamente se comienza por el principio, sino que se descarga por partes al azar. Luego los usuarios se conectan entre sí para la descarga. Por supuesto, inicialmente alguien debe poseer el archivo completo para comenzar el proceso. Este método produce importantes mejoras en la velocidad de transferencia cuando muchos usuarios se conectan para bajar un mismo fichero. Cuando no existan ya más nodos conectados al servidor de búsqueda con el fichero completo, existe la posibilidad de que el fichero no pueda ser completado. La eficacia de la transferencia depende en gran medida de las políticas que los clientes usan para determinar a qué par enviar los datos. Los clientes pueden preferir enviar datos a los pares que les han envían anteriormente datos que a los nuevos pares que se han añadido al enjambre, ésta estrategia se conoce con el nombre tit for tat19. Para contrarrestar este efecto, el cliente BitTorrent utiliza un mecanismo, según el cual el cliente se reserva un porcentaje de su ancho de banda disponible para el envío de bloques a pares tomados al azar, con la finalidad de garantizar que pares nuevos puedan unirse al enjambre [AMIL06]. 19 El término tit for tat se refiere a un estrategia en teoría de juegos, propuesta por Anatol Rapoport para el dilema del prisionero, que consiste en repetir lo que el oponente hizo en la ronda anterior. 28 Diseño e implementación de un protocolo peer-to-peer Los archivos que se distribuyen entre los pares son tratados en bloques, normalmente, de entre 32 KB y 4 MB. El par aplica una función hash, usando el algoritmo SHA120, y almacenándolo en el archivo torrent. Cuando otro par recibe un bloque del archivo que se está descargando, se le aplica la función hash, y el valor obtenido es comparado con el almacenado, para comprobar que se encuentra libre de error. El valor de comprobación que se encuentra contenido en el archivo torrent, depende de la versión del protocolo BitTorrent utilizado. Por convención, los archivos torrent tiene un apartado llamado anuncio, en el cual se especifica la URL (Uniform Resource Locator) del servidor de búsqueda, y una sección de información, la cual contiene los nombres de los archivos, sus tamaños, longitud, y el valor hash SHA1 por cada uno de los bloques. Toda esta información es usada por los clientes para verificar la integridad de los datos recibidos. Una vez creado el archivo torrent, este es publicado en algún sitio web o en otra parte, y registrado en el servidor de búsqueda. El servidor de búsqueda mantiene una lista de clientes que se encuentran participando sobre el archivo torrent. Alternativamente, en un sistema descentralizado, cada par actúa como un servidor de búsqueda, característica implementada por clientes como µTorrent, BitComet y KTorrent a través de métodos de tablas de hash distribuidas. A pesar de la eficacia y el alto rendimiento de las transferencias, el protocolo BitTorrent tiene unas cuantas limitaciones, que se pasaran a detallar a continuación. El protocolo no ofrece anonimato a los clientes, haciendo posible que se puedan obtener las direcciones IP de los clientes que se encuentran en un enjambre. Esto puede exponer a los usuarios a posibles ataques de agentes externos o propios de la red. Un usuario BitTorrent, a menudo, puede decidir dejar el enjambre en cuanto tenga una copia completa del archivo descargado, a este usuario se le conoce comúnmente con el nombre de leecher o sanguijuela. Si un número considerable de 20 El término algoritmo SHA1 se refiere a un algoritmo de función hash diseñado por NIST (National Institute of Standards and Technology) y NSA (National Security Agency) para el uso en comprobaciones de integridad de mensajes que produce un identificador de 160 bits. 29 Diseño e implementación de un protocolo peer-to-peer usuarios siguen esta conducta, el número de semillas se reduce hasta que llegar a cero y por lo tanto el archivo desaparece. Algunos sitios web BitTorrent han intentado solventar este problema mediante el seguimiento de los ratios de subida y descarga de archivos. En caso de existir una diferencia considerable entre ambos ratios, los clientes obtendrán velocidades de descarga inferiores hasta que los ratios se compensen. Ya que el protocolo BitTorrent es open source, al igual que sus clientes, han proliferado una gran cantidad de clientes basándose en el código original, disponibles en cualquier plataforma e implementados en una larga lista de lenguajes de programación. El cliente oficial de BitTorrent, BitComet, Vuze y μTorrent son los más populares entre los usuarios de este protocolo. Algunos clientes, como Torrentflux y TorrentVolve, se pueden ejecutar directamente desde un servidor, lo que permite a empresas de hosting ofrecer velocidades superiores a los usuarios. BitLet permite a los usuarios descargar torrents directamente desde su navegador, usando un applet de Java. Existen versiones propietarias del protocolo que implementan DRM, como es el caso de Pando. Algunos clientes del protocolo BitTorrent son los que se muestran a continuación. NOMBRE PLATAFORMA LENGUAJE TRACKER ADMITE DHT TORRENTS ACTIVOS ABC Windows Linux Python No No 8 Ares Galaxy Windows Delphi BitComet Windows C++ BitTornado BitSpirit Ktorrent Lphant Windows, Linux MAC OS Windows Linux, MAC OS Windows, Linux MAC OS Desconocido Desconocido Desconocido Descargas Sí 8 separadas Python Sí No 8 C++ C++ No No Sí Sí 8 8 C# Sí Desconocido 8 30 Diseño e implementación de un protocolo peer-to-peer MLNet Rtorrent Shareaza Vuze μTorrent Windows, Linux Ocalm MAC OS Linux, MAC OS C++ Windows C++ Windows, Linux Java y SWT MAC OS Windows, Linux C++ MAC OS No No 8 No No No Sí 8 10 Integrado Sí Sin límite Integrado Sí 8 Figura 12. Clientes BitTorrent NOTA: En la tabla anterior no se han incluido todos los clientes, ya que el tamaño de la tabla habría aumentado considerablemente. Sólo se han mostrado los más populares. El sistema de más reciente aparición ha sido Omemo, un sistema de almacenamiento virtual distribuido open source, basado en tablas de hash distribuidas, distribuido por la firma española MP2P Technologies y desarrollado por Pablo Soto. La diferencia fundamental de Omemo con el resto de los sistemas P2P radica en que no se comparten archivos, sino espacio libre de almacenamiento. Con el hecho de aportar parte de espacio al disco, se obtienen dos beneficios a cambio, el primero, el derecho de escritura persistente en el disco y el segundo, el derecho de lectura de todos los contenidos del disco. El derecho de escritura es calculado en base a la cantidad de espacio que se aporta y al tiempo durante el que se contribuye. La principal novedad es la persistencia, no es necesario que el usuario esté conectado para que los que dispone archivos estén accesibles para el resto de la red. Omemo ofrece muchas más novedades, tantas que sus creadores lo denominan P2P 2.0. Las características de Omemo son las siguientes [SOTO06]. Persistente. Se puede copiar algo en él, y luego desconectarse. A diferencia de los P2P actuales, el contenido que se comparte sigue disponible en Omemo cuando el usuario se desconecta. 31 Diseño e implementación de un protocolo peer-to-peer Rápido. Se puede transferir archivos del disco con velocidades iguales o superiores a las de un servidor FTP (File Transfer Protocol) o HTTP (HyperText Transfer Protocol). Organizado. Se puede crear y destruir carpetas para organizar categóricamente los archivos. El estado actual del disco es el resultado democrático de los cambios que todos los usuarios van haciendo sobre él. Anónimo. No hay forma de conocer quién es el usuario que publica un archivo, ni quién lo descarga. El diseño lógico del disco impide a un observador externo conocer las actuaciones de otros usuarios. Buscable. Se puede buscar cualquier archivo entre todos los que hay en el disco. El horizonte buscable, a diferencia de los P2P actuales, es ilimitado. Por muy grande que sea el disco, se puede buscar en toda su estructura. Para la búsqueda de archivos, Omemo incluye un buscador que muestra todos los resultados, salvo lo que cada usuario quiere reservar para sí mismo y los que él desee, ya que el programa permite crear carpetas de acceso restringido. En el proceso de transferencia del archivo, este es fragmentado en paquetes de 64 KB y a cada trozo se le imprime una clave digital única, después se cifran los fragmentos y antes de lanzarlo a la red se les asigna un identificador que permite al sistema su posterior rastreo y recomposición en el archivo original. Estas medidas de seguridad hacen de Omemo el programa de intercambio más anónimo y refractario a la censura. No existe, actualmente, forma alguna de conocer quién ha subido un determinado archivo y quién se lo descarga. Siguiendo la corriente Web 2.0, los diferentes archivos pueden ser valorados por los usuarios etiquetando cada archivo. Cuando alguien no quiere determinado material se elimina, desapareciendo de la lista del usuario pero no de la red. La combinación de votos negativos y positivos hace que unos archivos suban de puntuación y otros vayan quedando obsoletos. 32 Diseño e implementación de un protocolo peer-to-peer 2.2 CONCEPTOS Y TECNOLOGÍAS ACTUALES Para concluir el presente estudio del estado del arte de las aplicaciones P2P, se detalla a continuación conceptos y tecnologías actuales. 2.2.1 P2P ANÓNIMO Una red P2P anónima es un tipo particular de red P2P en la que los pares son anónimos por defecto. La principal diferencia entre las redes P2P habituales y las anónimas está en el método de encaminamiento de las respectivas arquitecturas de redes. Estas redes permiten el flujo libre de información. En una red P2P anónima, cada par de la red tiene un pseudónimo asociado a su dirección IP, para poder ser alcanzado por otro par y así intercambiar archivos. Sin embargo, normalmente esta dirección, especialmente en redes anónimas, no contiene información alguna que pueda permitir la identificación. Por tanto, un usuario es prácticamente anónimo. El anonimato viene de la idea en la que nadie sabe quien requiere la información, ya que es difícil determinar si un usuario ha pedido los datos para él mismo o simplemente está pidiendo datos que le ha requerido otro usuario. El resultado final es que todos los pares en una red anónima actúan como un emisor y un receptor global para mantener el anonimato. El interés de la comunidad P2P en el anonimato ha incrementado muy rápidamente desde hace unos años por varias razones, entre ellas la desconfianza en todos los gobiernos y los permisos digitales. Tales redes suelen ser utilizadas por aquellos que comparten archivos musicales con copyright. Los usos más frecuentes de la tecnología P2P anónima son los que se muestran a continuación. Navegación anónima por Internet. Bloqueo de la posibilidad del registro de visitantes de sitios web. Evasión de la censura de ISPs. 33 Diseño e implementación de un protocolo peer-to-peer 2.2.2 REDES FRIEND-TO-FRIEND El término friend-to-friend, en adelante F2F, fue acuñado por Dan Bricklin y hace referencia a un tipo particular de red P2P anónima en donde los pares se conectan directamente a otros pares conocidos. Las aplicaciones F2F solamente permiten la conexión con otros pares en los que el usuario confía, usando direcciones de IP o firmas digitales para las transferencias de archivos. De esta manera, los usuarios pueden descargar indirectamente archivos de otro nodo de manera anónima. Una de las mayores ventajas de este tipo de redes es que pueden crecer en tamaño sin comprometer el anonimato del usuario. Ejemplos de este tipo de redes son ANts P2P, GNUnet, Mute y Turtle F2F. 2.2.3 PEER-TO-MAIL Peer-to-mail, en adelante P2M, es un programa que permite almacenar y compartir archivos en cuentas de correo. La posibilidad hoy en día de emplear cuentas privadas para el intercambio de ficheros por el aumento de la capacidad de almacenamiento, ha facilitado el uso del P2M, el cual ha surgido ante los problemas que encuentran algunos usuarios al usar programas P2P. El principal inconveniente es que en programas P2P no se consigue siempre una gran velocidad y un rango de tiempo corto para descargar un archivo. Además, las descargas en las aplicaciones P2P están reguladas por un sistema de colas, el cual ocasiona que estas sean muchas veces bastantes grandes, causando con ello una demora en la descarga. P2M funciona de la siguiente manera, primero los archivos compartidos se dividen en segmentos que son hospedados en servidores de correo, el tamaño del segmento está condicionado por el tamaño máximo de archivo adjunto que admite el servidor de email donde son alojados. Mediante programas se accede a las cuentas creadas por los usuarios con el fin de subir los archivos a compartir y dichos programas recopilan y descargan todos los segmentos de la cuenta. Una vez descargados, el programa une todos los segmentos para restablecer el archivo íntegro tal y como se 34 Diseño e implementación de un protocolo peer-to-peer subió al servidor. La unión de los segmentos descargados se realiza con programas externos a la aplicación P2M. 2.2.4 WEBCACHÉ Webcaché es una característica de algunos clientes P2P de la red eDonkey que hacen uso de un proxy caché, una máquina que almacenan en su memoria lo que acaba de pasar por ella en el tránsito de un par a otro, con la finalidad de disminuir el tráfico entre estos. Los usuarios que usan la opción webcaché de estos programas, suben una parte del archivo que comparten. De esta forma, se permite que otro usuario que pida al usuario ese trozo de archivo, en realidad le pida el mismo trozo de archivo al proxy caché, que lo tiene en su memoria, la cual es mucho más rápida. Estas máquinas tienen un ancho de banda muy grande, más que cualquier conexión entre dos pares, con lo que se permite aprovechar la velocidad de conexión, siempre que no se colapsen. 2.2.5 PROACTIVE NETWORK PROVIDER PARTICIPATION FOR P2P Proactive network Provider Participation for P2P, más conocido por su acrónimo P4P, es un medio utilizado por los proveedores de Internet para optimizar el tráfico de las redes P2P de sus usuarios. Es el siguiente paso en el desarrollo de servicios P2P, ya que permite minimizar el número de saltos requeridos para las transferencias de archivos, eligiendo los pares más cercanos a otro, siempre y cuando pertenezcan al mismo proveedor. 35 Capítulo 3 Motivación y Objetivos del Proyecto Diseño e implementación de un protocolo peer-to-peer La búsqueda e intercambio de archivos de las actuales aplicaciones de redes P2P están muy condicionados al servidor al que se encuentre conectado el cliente, ya que diferentes conexiones entre distintos servidores producen diferentes resultados. Para demostrar este hecho, se ha hecho uso del cliente de la red eDonkey, eMule v0.49b, y se ha buscado en dos servidores distintos un archivo del sistema operativo Ubuntu, versión 8.04 Hardy Heron, para arquitecturas AMD. Los resultados obtenidos son los que se muestran a continuación. Figura 13. Resultados en la conexión con el servidor 212.63.206.35 Figura 14. Resultados en la conexión con el servidor 195.22.108.26 37 Diseño e implementación de un protocolo peer-to-peer Como se puede apreciar en las dos imágenes anteriores, los resultados de la búsqueda difieren en el número de resultados, 18 para el primer caso y 10 para el segundo. Además, para resultados iguales, como sucede en el primer caso, la disponibilidad y el número de fuentes completas, atributos que reflejan el número de fuentes que tienen el archivo, también es diferente, por lo que la búsqueda y la posterior descarga del archivo dependen del servidor en el que el cliente se conecte. Además, con el fin de reducir la cadena de búsqueda, si el usuario de la aplicación cliente introduce “Ubu”, “Ubun”, “Ubunt” o cualquier combinación que no contenga una palabra del nombre completo del archivo a buscar, “Ubuntu”, no se produce ningún resultado en ambos servidores. Tras el breve análisis anterior, se demuestra que los resultados de las búsquedas que realiza el cliente, dependen de la conexión con el servidor, dando lugar a diferentes resultados en diferentes conexiones. Este hecho origina una preferencia por parte de los clientes en el momento de elegir el servidor al que conectarse, y por lo tanto que exista una serie de servidores preferidos. De este modo se consigue que unos servidores alcancen un gran número de conexiones con clientes, mientras que en otros el número de estas sea mínimo, provocando una ineficiente gestión y reparto de los recursos disponibles. Otra consecuencia de este hecho es el deficiente reparto de la carga de trabajo entre los servidores, ya que en aquellos en los que más conexiones haya, mayor será la carga de trabajo, mientras que los menos favorecidos apenas recibirán solicitudes de búsqueda de archivos. Otra ineficiencia, común entre los clientes de redes P2P, es que en el momento de introducir una cadena de búsqueda para la posterior descarga de un archivo, ésta a de contener el nombre exacto del archivo, en algunos casos, o al menos una palabra completa de la totalidad del nombre del archivo a buscar, como ya se detalló con anterioridad. De esta forma se caracteriza de cierta severidad a las búsquedas en estos sistemas, obligando al usuario conocer una serie de atributos del nombre del archivo, a diferencia de las búsquedas en buscadores de Internet, que son menos rígidas en lo referente a la cadena de búsqueda. 38 Diseño e implementación de un protocolo peer-to-peer Como ya se detalló en el estado del arte, algunas aplicaciones P2P permiten que los usuarios califiquen la calidad de un archivo mediante la escritura de comentarios sobre ese determinado archivo para que otros usuarios puedan leerlos, y así saber de antemano si el archivo tiene la calidad esperada o si está corrupto. El problema es que para leer los comentarios de un usuario, es necesario el inicio de la descarga de un archivo y la conexión a usuarios que tenga disponible este archivo para compartir y que hayan escrito comentario sobre él. Además, no todos los comentarios de la red son accesibles ya que en este tipo de aplicaciones se suelen limitar el número de conexiones y por lo tanto, indirectamente, afectan a la cantidad de comentarios a los que se puede acceder. Después de haber analizado y detallado algunas de las carencias de los actuales clientes de búsqueda y transferencia de archivos de redes P2P, se puede concluir que existe un desequilibrio entre lo que ofrecen este tipo de aplicaciones y lo que demandan los usuarios. Por este motivo, el objetivo de este proyecto es el diseño e implementación de un protocolo P2P, que mejore el proceso de búsqueda de los archivos entre los usuarios que se encuentren conectados a la red. Se entiende por mejora la eliminación de la dependencia del proceso de búsqueda al servidor al que el usuario se encuentre conectado, obteniendo de esta forma las siguientes mejoras tanto en los servidores como en los clientes. Aumento del número de resultados. Al eliminar la dependencia de la conexión con el servidor, el número de archivos encontrados en el proceso de búsqueda, el número de fuentes encontradas que tienen disponible el archivo para compartir y el número de comentarios de los usuarios que califican los archivos, serán mayores. Reducción del tiempo de transferencia del archivo. Dado que el número de fuentes encontradas es mayor, se reducirá considerablemente el tiempo de transferencia del archivo, ya que la probabilidad de conexión a un mayor número de pares se incrementa. 39 Diseño e implementación de un protocolo peer-to-peer Eliminación del mantenimiento de una lista de servidores. Al no existir una dependencia con el servidor, los clientes no tendrán que mantener una lista de servidores en la que elegir sus favoritos y su prioridad en el proceso de conexión, por lo que se le libera de una tarea innecesaria. Óptima gestión de los recursos. Al eliminar una preferencia de conexión entre un servidor u otro, las conexiones de los clientes entre los distintos servidores de la red estarán más equilibradas. Eficiente reparto de la carga de trabajo. Al realizar un gestión óptima de los recursos, en este caso los servidores que se encuentran conectados a la red, el reparto de carga de trabajo entre estos y las solicitudes de búsqueda de un archivo entre los usuarios usu de la red estarán más equilibradas. Para poder desarrollar el principal objetivo del proyecto, es necesario que los servidores compartan la misma información acerca de los archivos y de los clientes que se encuentren conectados a la red P2P. Dado el gran número de clientes de este tipo de redes, es inviable que un servidor albergue toda ésta información, ya que manejaría una gran volumen de datos que además estaría duplicado en el resto de servidores. Por este motivo, la arquitectura propuesta se basa basa en la conexión de todos los servidores a una red IP multicast, para así poder distribuir la información por medio de mensajes sin la necesidad de almacenarla en la base de datos de cada uno de ellos. Figura 15. Arquitectura propuesta 40 Capítulo 4 Análisis del Sistema Diseño e implementación de un protocolo peer-to-peer 4.1 IDENTIFICACIÓN DE NECESIDADES 4.1.1 ALCANCE DEL SISTEMA El objetivo del proyecto es el diseño e implementación de un protocolo P2P, que mejore el proceso de búsqueda de los archivos entre los usuarios que se encuentren conectados a la red, ya que, como se detalló en el capítulo anterior, en los actuales clientes de búsqueda y transferencia P2P, el proceso de búsqueda de archivos y su posterior transferencia están condicionados al servidor al que se encuentre conectado el cliente. Para poder mejorar el proceso de búsqueda, es necesario eliminar la dependencia de los clientes al servidor que se encuentren conectados, haciendo obligatorio que los servidores compartan la misma información acerca de los archivos y de los clientes que se encuentren conectados a la red P2P. Dado el gran número de clientes de este tipo de redes, es inviable que un servidor albergue toda ésta información, ya que manejaría una gran volumen de datos que además estaría duplicado en el resto de servidores. Por este motivo, la arquitectura propuesta se basa en la conexión de todos los servidores a una red IP multicast, para así poder distribuir la información por medio de mensajes sin la necesidad de almacenarla en la base de datos de cada uno de ellos. Figura 16. Red IP multicast 42 Diseño e implementación de un protocolo peer-to-peer Cuando un cliente de la red P2P desea realizar una búsqueda de un determinado archivo, envía una solicitud de búsqueda al servidor al que se encuentra conectado. El servidor procesa la solicitud, realizando una consulta en su base de datos, en la que están registrados todos los archivos de los clientes con los que mantiene una conexión. Al finalizar la consulta, transmite la solicitud de búsqueda del cliente a la red IP multicast para que todos los servidores, que se encuentran conectados a esta red, reciban dicha solicitud y consulten en sus bases de datos, al igual que hizo el primer servidor, para obtener los resultados que satisfacen la petición. Una vez consultada la base de datos, se envían los resultados al servidor que los solicitó para añadir esos resultados a los que ya tenía. Una vez terminado este proceso, todos los resultados se envían al cliente que inició el proceso de búsqueda. El proceso anteriormente explicado, se realiza tanto para las búsquedas de archivos, para las búsquedas de comentarios de los archivos que comparten los clientes, como para las búsquedas de los clientes que tienen el archivo que el usuario desea descargarse. 4.1.2 TOPOLOGÍA DE USUARIOS FINALES Hay que distinguir entre dos tipos de usuarios claramente definidos por su uso de la aplicación diseñada. Por una parte se encuentran los administradores de los servidores de la red, personas con conocimientos de la aplicación, conocimientos de bases de datos y con derechos a acceso a esta para realizar los procesos de control y mantenimiento que crean adecuados. Además este tipo de usuario será el encargado de establecer una política, y mantener su cumplimiento, con respecto al tipo de archivos que maneje el servidor que se encuentra a su cargo. Por otro lado, se encuentran los usuarios de la aplicación cliente, la cual es utilizada para buscar y transferir archivos con otros usuarios de la red. 43 Diseño e implementación de un protocolo peer-to-peer 4.1.3 RESTRICCIONES No existe ningún tipo de restricción de tipo económica, ya que estas no son considerables en el desarrollo del proyecto. Sin embargo, sí existen restricciones de carácter temporal, ya que el proyecto ha de ser presentado en Junio del 2009, la planificación de este está condicionada a esta fecha. Con respecto a restricciones tecnológicas, dado que el lenguaje a utilizado para la implementación del protocolo ha sido Java, las máquinas en las que se ejecute tanto el cliente como el servidor, han de tener instaladas una implementación de la Máquina Virtual Java. Con respecto al sistema operativo, al haber elegido un lenguaje multiplataforma, no existe ninguna restricción en lo referente al entorno de ejecución de la aplicación. 4.2 ANÁLISIS DE REQUISITOS 4.2.1 CONTEXTO GENERAL DEL SISTEMA Este contexto general del sistema está representado mediante un diagrama de presentación, con símbolos y figuras, donde se muestra la iteración del sistema con el cliente, y las relaciones entre ambos. Figura 17. Contexto general del sistema En el diagrama anterior se ha presentado el proceso de una solicitud de un cliente. Como ya se detalló anteriormente, cuando un cliente de la red P2P desea 44 Diseño e implementación de un protocolo peer-to-peer realizar una búsqueda, envía una solicitud al servidor al que se encuentra conectado. El servidor procesa la solicitud, consultando en su base de datos, en la que están registrados todos los archivos de los clientes con los que mantiene una conexión. Al finalizar la consulta, transmite la solicitud del cliente a la red IP multicast para que todos los servidores, que se encuentran conectados a esta red, la reciban y consulten en sus bases de datos, al igual que lo hizo el primer servidor, para obtener de esta forma más resultados que satisfacen la petición. Una vez consultada la base de datos, envían los resultados al servidor que los solicitó para añadir esos resultados a los que ya tenía. Una vez terminado este proceso, todos los resultados se envían al cliente que inició el proceso de búsqueda. El proceso anterior, se realiza tanto para las búsquedas de archivos, como para las búsquedas de comentarios de los archivos que comparten los clientes, como para las búsquedas de los clientes que tienen el archivo que el usuario desea descargarse. Después de que el cliente obtenga los resultados de los clientes que tienen un determinado archivo disponible para su transferencia, éste realiza una conexión con cada uno de ellos para obtener las partes del archivo que necesite. Figura 18. Conexiones entre clientes de la red 45 Diseño e implementación de un protocolo peer-to-peer 4.2.2 ÁMBITO DEL SISTEMA Partiendo de los objetivos señalados en el anterior capítulo, se definen a continuación, las entidades principales del proyecto. Hermes. Es la aplicación cliente que ejecuta el usuario para la búsqueda y posterior transferencia de archivos. Mantiene conexiones con otros pares de la red para la transferencia de archivos, ya sea porque los haya solicitado este u otro par. Servidor. Es la entidad a la los clientes que se encuentran conectados para solicitar determinados servicios, ya sean de búsqueda de archivos, comentarios o clientes que ofrecen un determinado archivo. Además mantiene un conexión con la red IP multicast para enviar la solicitud del cliente al resto de los servidores que se encuentran conectados a la red. Delphic. Es la base de datos en la cual se encuentran registrados los usuarios conectados a la red y los archivos que comparten, así sus comentarios. Es consultada por la aplicación servidora para satisfacer las peticiones de los clientes. 4.2.3 ÁMBITO DEL CLIENTE Partiendo de los objetivos señalados en el capítulo anterior, los requisitos identificados en la aplicación cliente, son lo que se muestran a continuación. Eliminación de lista de servidores. Con la finalidad de eliminar el mantenimiento de la lista de servidores por parte del cliente, y la elección de sus favoritos, este recibirá la información necesaria acerca de los servidores que se encuentran conectados a la red, para su agregación automática en la lista de servidores. Limitación de búsquedas. Con el fin de que los resultados de las búsquedas se ciñan más a los requisitos del usuario, este podrá introducir el tipo de archivo a buscar, obteniendo de esta forma un conjunto de resultados más limitado a las necesidades del cliente. 46 Diseño e implementación de un protocolo peer-to-peer Transferencias simultáneas. Para poder reducir el tiempo de las transferencias, los clientes mantendrán distintas conexiones entre los pares de la red para así poder mantener transferencias paralelas, tanto de subida de un archivo como de descarga. Control de errores de conexión. Con el objetivo de controlar los posibles errores de las conexiones entre clientes, si ocurriese alguna desconexión imprevista de alguno de estos, el resto de los clientes mantendrán la conexión con los clientes a los que se encuentran conectados, sin afectar a las comunicaciones ni a los datos transferidos. Incremento paulatino del tamaño del fichero temporal. Con el fin de realizar una correcta gestión del espacio del disco duro del usuario, el tamaño del archivo temporal asociado a una descarga, se incrementará a medida que la descarga avanza y no se establecerá al tamaño del archivo original, como sucede en los actuales clientes. Previsualización de los archivos. Con la finalidad de eliminar los archivos corruptos, los clientes podrán reproducir los archivos multimedia que se encuentran descargando sin la necesidad de que estos estén completamente descargados. Será requisito indispensable en este caso, que el cliente disponga de la una aplicación instalada en su equipo que permita la reproducción de archivos multimedia. Para el desarrollo del cliente se ha elegido una arquitectura de tres capas, con el objetivo de reducir las dependencias y mantener acotado el impacto de los cambios. Los elementos agrupados en una misma capa pueden comunicarse entre sí. Cada capa presta sus servicios a la capa superior y depende de los servicios prestados por la inferior. Esta descomposición separa los diferentes módulos de los que consta la aplicación, proporcionando transparencia para modificar el sistema. Cada subsistema engloba una funcionalidad diferente de la aplicación. La independencia entre los subsistemas identificados permite realizar modificaciones sobre cualquier capa sin afectar a la interfaz del resto de componentes. 47 Diseño e implementación de un protocolo peer-to-peer Las capas identificadas en el ámbito del cliente son las que se muestran a continuación. Figura 19. Capas de la aplicación cliente GUI. Es la capa más cercana al usuario. Recoge la interfaz gráfica que este utilizará para interactuar con el sistema y redirige sus peticiones a la capa de lógica. Lógica. Recoge toda la lógica del cliente, necesaria para la gestión de los archivos locales, las transferencias de archivos en la red y las solicitudes de servicios a la capa de comunicaciones. Comunicaciones. Recoge la implementación del protocolo desarrollado, y las comunicaciones tanto con el servidor al que el usuario se encuentra conectado, como las comunicaciones con el resto de los clientes para la transferencia de archivos. 4.2.4 ÁMBITO DEL SERVIDOR Partiendo de los objetivos señalados en el capítulo anterior, los requisitos identificados en la aplicación servidor, son lo que se muestran a continuación. Comunicación entre servidores. Con la finalidad de que las búsquedas sean independientes del servidor al que se esté conectado, los servidores distribuirán una lista en la que estén registrados los usuarios conectados a la red y los archivos que comparten, así como sus comentarios. Gestión de comentarios. Para otorgar una mayor información a los clientes con respecto a los archivos que se descargan, los servidores de la red gestionarán los comentarios de los usuarios con el fin de que éstos puedan solicitar esta información como si se tratase de un recurso más de la red. 48 Diseño e implementación de un protocolo peer-to-peer Gestión de errores. Para conseguir un mantenimiento correctivo del sistema, los posibles errores que sucedan en el servidor, tras una solicitud de un cliente, se registrarán en un archivo log. Para el desarrollo del servidor se ha elegido, al igual que el cliente, una arquitectura de tres capas, con el objetivo de reducir las dependencias y mantener acotado el impacto de los cambios. Las capas identificadas en el ámbito del servidor son las que se muestran a continuación. Figura 20. Capas de la aplicación servidor Comunicaciones. Recoge la implementación del protocolo desarrollado, y las comunicaciones tanto con el resto de los servidores de la red IP multicast, como las comunicaciones con los clientes que se encuentran conectados a él. Lógica. Recoge toda la lógica del servidor, necesaria para la gestión las solicitudes de los clientes y las solicitudes de servicios a la capa de acceso a la base de datos, DAO. DAO. Esta capa utiliza objetos DAO (Data Access Object) para abstraer y encapsular todo el acceso a la información contenida en la base de datos. Este conjunto de objetos gestiona la conectividad con la base de datos, exponiendo una interfaz más simple, actuando como adaptadores entre el componente de la lógica y la base de datos. 4.2.5 DECISIONES DE DISEÑO El lenguaje de programación Java proporciona dos clases para la implementación de sockets. Estas clases son Socket y DatagramSocket. La principal diferencia entre 49 Diseño e implementación de un protocolo peer-to-peer estas dos clases está en el uso del protocolo de transporte, mientras Socket hace uso del protocolo TCP (Transmission Control Protocol), DatagramSocket hace uso de UDP. TCP proporciona una cantidad considerablemente mayor de servicios a las aplicaciones que UDP, ya que se trata de un protocolo orientado a conexión, a diferencia de UDP. Las principales características de este protocolo son las que se detallan a continuación [GARC05]. Control de flujo. Mediante el uso de ventanas de envío y la identificación de paquetes transmitidos, se proporciona un modo para que dos sistemas cooperen activamente en la transmisión de paquetes para evitar exceso de flujo y pérdida de paquetes y adaptarse a la congestión de la red. Detección y corrección de errores. Mediante una utilidad de código de paridad, checksum21, números de secuencia, confirmaciones y temporizadores de retransmisión se asegura la integridad de los paquetes, dando lugar a que no existan rechazos. La retransmisión de los paquetes corrompidos o perdidos se puede manejar de una manera oportuna y eficiente. Reconocimiento del paquete recibido. El envío de un acknowledgement22 por parte del emisor, permite al emisor saber que el receptor ha recibido los paquetes. Si los paquetes no son notificados, el transmisor puede reenviar los paquetes. Como contrapartida, el protocolo TCP, al precisar de fases de establecimiento de la conexión y liberación, conlleva muchos más controles que el protocolo UDP, llegando a aumentar el tiempo de procesamiento considerablemente. 21 El término checksum se refiere a una forma de control de redundancia empleada en comunicaciones y en almacenamiento de datos que consiste en el almacenamiento de la suma de bytes para su posterior comparación. 22 El término acknowledgement se refiere a un mensaje enviado por el receptor al emisor indicando bien que éste está listo para recibir una transmisión o que una transmisión fue recibida sin error. 50 Diseño e implementación de un protocolo peer-to-peer A pesar del inconveniente anterior, se ha implementado la comunicación entre cliente y servidor y entre clientes haciendo uso de la clase Socket, y por consiguiente del protocolo TCP, ya que se ha considerado que las características que aporta este protocolo son más significativas que el inconveniente de su uso. Ya que la arquitectura propuesta entre los servidores de la red P2P es una arquitectura basada en una red IP multicast, se ha hecho uso de la única clase que proporciona el lenguaje de programación Java para la implementación de conexiones a este tipo de redes. Esta clase es MulticastSocket, y es un caso particular de la clase DatagramSocket con capacidades adicionales para la conexión a grupos de redes IP multicast [MICRO04]. Por este motivo el uso de UDP como protocolo de transporte en las comunicaciones de los servidores conectados a la red IP multicast ha sido establecida por el lenguaje de programación utilizado. Para la identificación de los archivos que los clientes ponen a disposición de la red P2P, ha sido necesario el uso de un sistema de funciones hash criptográficas para asegurar que la identificación se realiza de forma unívoca. Actualmente existen varios algoritmos hash, entre los que se encuentra SHA1. Este algoritmo procesa la información de un archivo en bloques de 512 bits y produce un valor de 160 bits, lo que le otorga una mayor seguridad que algoritmos que produces valores hash de 128 bits, como es el caso de RIPEMD23 (RACE Integrity Primitives Evaluation Message Digest). Además, hasta hoy día, no se han registrado ataques contra este algoritmo, comprometiendo su resistencia, como sí sucede con otros como MD5. En el año 2005, Xiaoyun Wang y Hongbo Yu de la Universidad Shandong, China, publicaron un artículo en el cual se describía la forma de encontrar dos secuencias diferentes de 128 bits con el mismo valor hash MD5 [WANG04]. Los hechos anteriormente detallados han sido los motivos de elección del algoritmo SHA1 como función hash para el cálculo de identificadores de los archivos de la red P2P. 23 El término RIPEMD se refiere a un algoritmo de función hash diseñado por Hans Dobbertin, Antoon Bosselaers y Bart Preneel para el uso en comprobaciones de integridad de mensajes que produce un identificador de un archivo de 128 bits. 51 Diseño e implementación de un protocolo peer-to-peer 4.3 METODOLOGÍA Para la realización del proyecto se ha aplicado la metodología UML (Unified Modeling Language) en su versión 2.0, ya que se utiliza un lenguaje que permite de forma gráfica visualizar, especificar, construir y documentar un sistema [OMG09]. Además, ofrece un estándar para describir el modelo de un sistema, incluyendo aspectos conceptuales como reglas de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, modelos de bases de datos y componentes reutilizables. 4.3.1 DIAGRAMA DE DOMINIO Un diagrama de dominio muestra los conceptos básicos del dominio, sus propiedades más importantes y las relaciones entre dichos conceptos. El diagrama de dominio del sistema es el que se muestra a continuación. 52 Diseño e implementación de un protocolo peer-to-peer Figura 21. Diagrama de dominio del sistema 53 Diseño e implementación de un protocolo peer-to-peer 4.3.2 DIAGRAMA DE CASOS DE USO Un diagrama de casos de uso muestra la relación entre los actores y los casos de uso del sistema. Representa la funcionalidad que ofrece el sistema en lo que se refiere a su interacción externa. El diagrama de casos de uso para el usuario de la aplicación cliente es el que se muestra a continuación. Conectar a la red P2P Buscar archivos en la red P2P Buscar comentarios de un archivo Eliminar resultados de una búsqueda Descargar archivo de la red P2P Previsualizar archivo Usuario Añadir comentario a un archivo Ver comentarios de un archivo local Eliminar comentario de un archivo local Recargar archivos locales Figura 22. Diagrama de casos de uso del usuario de la aplicación cliente 54 Diseño e implementación de un protocolo peer-to-peer Seguidamente, se detalla cada uno de los casos de uso descritos en el diagrama anterior. CASOS DE USO. - Conectar a la red P2P. Conexión a la red P2P para poder comenzar con la búsqueda de archivos o continuar con las transferencias pendientes. - Buscar archivos en la red P2P. Búsqueda de archivos en la red P2P introduciendo el nombre del archivo o parte de él, con la posibilidad de limitación de la búsqueda, seleccionando el tipo de archivo a buscar. - Buscar comentarios de un archivo. Una vez obtenidos los resultados de una búsqueda, búsqueda de los comentarios con los que otros usuarios han calificado un determinado archivo. - Eliminar resultado de una búsqueda. Eliminación de los resultados de una búsqueda en caso de que estos no sean satisfactorios para el usuario o por cualquier motivo no sean necesarios. - Descargar un archivo de la red P2P. Descarga de un archivo seleccionado de entre los resultados de una búsqueda o descarga de los archivos pendientes. - Previsualizar archivo. Previsualización de un archivo en estado de descarga, una vez iniciada esta y con al menos el primer trozo del archivo descargado (RN01). - Añadir comentario. Insertar la evaluación de un archivo y su comentario de un archivo descargado o en estado de descarga. - Ver comentarios de un archivo local. Visualización de los comentarios de los archivos que el usuario pone a disposición del resto de usuarios de la red P2P. - Eliminar comentario de un archivo local. Eliminación, por cualquier motivo que considere el usuario, de un comentario de un archivo local. - Recargar archivos locales. Recarga de los archivos locales y sincronización con el servidor al que el usuario se encuentra conectado, por si el usuario ha eliminado un archivo o introducido uno nuevo. 55 Diseño e implementación de un protocolo peer-to-peer REGLAS DE NEGOCIO. - RN01. Prioridad de partes de un archivo. Con la finalidad de que el archivo pueda ser previsualizado, es necesario que la primera parte, y en algunos casos la última, esté completamente descargada. Por este motivo, esta primera parte tendrá mayor prioridad, seguida de la última y a continuación del resto. 4.3.3 DIAGRAMA DE PAQUETES Los diagramas de paquetes reflejan la organización de los subsistemas en que se descompone el sistema y las dependencias entre ellos. Representa una visión fundamental para el control de alto nivel de un sistema. El diagrama de paquetes es el que se muestra a continuación. Figura 23. Diagrama de paquetes A continuación se detalla cada uno de los paquetes que aparecen en el diagrama anterior. Paquete gui. Contiene la interfaz gráfica del usuario y gestiona las acciones de este sobre cada una de sus componentes. 56 Diseño e implementación de un protocolo peer-to-peer Paquete client. Contiene toda la lógica del cliente en clases denominadas gestores, como son los gestores de transferencias, comentarios, archivos locales y demás. Paquete constants. Contiene la definición de las constantes usadas por la aplicación, como definición de directorios, ficheros necesarios para la ejecución y tipos de datagramas y paquetes. Paquete útil. Contiene las definiciones de los conceptos del dominio del sistema. Paquete packets. Contiene la definición de los paquetes que se transmiten en la comunicación del cliente con el servidor y el cliente con el resto de los clientes de la red P2P. Paquete data. Contiene la información de los datagramas que se transmiten en la comunicación entre los servidores de las red IP multicast. Paquete server. Contiene toda la lógica del servidor para el servicio de solicitudes y la gestión del fichero de control de errores. Paquete dao. Contiene la abstracción del acceso a la base de datos por parte del servidor. 57 Diseño e implementación de un protocolo peer-to-peer 4.3.4 DIAGRAMA DE CLASES A continuación se detallan cada una de las clases de cada unos de los paquetes anteriores. Las clases del paquete gui son las que se muestran a continuación. Figura 24. Clases del paquete gui 58 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete client son las que se muestran a continuación. Figura 25. Clases del paquete client 59 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete constants son las que se muestran a continuación. Figura 26. Clases del paquete constants 60 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete util son las que se muestran a continuación. Figura 27. Clases del paquete util 61 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete packets son las que se muestran a continuación. Figura 28. Clases del paquete packets 62 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete data son las que se muestran a continuación. Figura 29. Clases del paquete data 63 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete server son las que se muestran a continuación. Figura 30. Clases del paquete server 64 Diseño e implementación de un protocolo peer-to-peer Las clases del paquete dao son las que se muestran a continuación. Figura 31. Clases del paquete dao 4.3.5 DISEÑO DE LA BASE DE DATOS A continuación se detallan las tablas y relaciones que componen la base de datos de la aplicación. TABLA EXTENSIONS. - Descripción: contiene las extensiones de los archivos. - Relación con: ninguna tabla. - Sentencia de creación: CREATE TABLE DELPHIC.EXTENSIONS( EXTENSION VARCHAR(6) NOT NULL, TYPE VARCHAR(8) NOT NULL, PRIMARY KEY(EXTENSION) )ENGINE=INNODB DEFAULT CHARSET=latin1; 65 Diseño e implementación de un protocolo peer-to-peer EXTENSIONS PK EXTENSION: varchar(6) TYPE: varchar(8) TABLA SHARES. - Descripción: contiene los archivos de los usuarios conectados a la red. - Relación con: ninguna tabla. - Sentencia de creación: CREATE TABLE DELPHIC.SHARES( NAME VARCHAR(256) NOT NULL, SIZE BIGINT NOT NULL, HASH CHAR(40) NOT NULL, EXTENSION VARCHAR(6) NOT NULL, COUNTER INT NOT NULL DEFAULT 0, PRIMARY KEY(NAME,HASH) )ENGINE=INNODB DEFAULT CHARSET=latin1; TABLA CLIENTS. - Descripción: contiene la información de los clientes conectados a la red. - Relación con: COMMENTS. - Sentencia de creación: CREATE TABLE DELPHIC.CLIENTS( IP VARCHAR(15) NOT NULL, HASH CHAR(40) NOT NULL, NAME VARCHAR(256) NOT NULL, PRIMARY KEY(IP,HASH) )ENGINE=INNODB DEFAULT CHARSET=latin1; 66 Diseño e implementación de un protocolo peer-to-peer TABLA COMMENTS. - Descripción: contiene los comentarios de los usuarios conectados a la red. - Relación con: CLIENTS. - Sentencia de creación: CREATE TABLE DELPHIC.COMMENTS( NCOMMENT INT NOT NULL AUTO_INCREMENT, CLIENTIP VARCHAR(15) NOT NULL, HASH CHAR(40) NOT NULL, COMMENT VARCHAR(120), EVALUATION TINYINT, PRIMARY KEY(NCOMMENT), INDEX (CLIENTIP,HASH), FOREIGN KEY(CLIENTIP,HASH) REFERENCES DELPHIC.CLIENTS(IP,HASH) ON DELETE CASCADE)ENGINE=INNODB DEFAULT CHARSET=latin1; COMMENTS PK NCOMMENT: int FK1,I1 FK1,I1 CLIENTIP: varchar(15) HASH: char(40) COMMENT: varchar(120) EVALUATION: tinyint 67 Capítulo 5 Protocolo del Sistema Diseño e implementación de un protocolo peer-to-peer 5.1 PROTOCOLO ENTRE CLIENTE Y SERVIDOR 5.1.1 SOLICITUD DE CONEXIÓN A LA RED PEER-TO-PEER Cuando un cliente se conecta la red P2P, se envía un paquete a la dirección IP del servidor para que se contemple la nueva agregación de este cliente, registrando en la base de datos la dirección del cliente, los archivos que comparte y sus comentarios. El servidor acredita al nuevo cliente con el correspondiente paquete de contestación. Figura 32. Solicitud de conexión a la red P2P PAQUETE REQUEST_CONNECT. - Implementado por la clase: ConnectPacket. - Datos. La dirección IP del cliente y los archivos que pone a disposición de la red P2P. PAQUETE REPLY_ CONNECT. - Implementado por la clase: StandardPacket. - Datos. Sin datos. El tipo de paquete transmitido es la propia confirmación del protocolo. 5.1.2 SOLICITUD DE BÚSQUEDA DE ARCHIVOS Cuando un cliente solicita una búsqueda de archivos, se envía un paquete a la dirección IP del servidor al que se encuentra conectado para que consulte su base de datos. El servidor contesta con los resultados que satisfacen los requisitos de búsqueda del archivo, tanto los suyos como los que provienen de la red IP multicast. Figura 33. Solicitud de búsqueda de archivos 69 Diseño e implementación de un protocolo peer-to-peer PAQUETE REQUEST_SEARCH. - Implementado por la clase: RequestSearchPacket. - Datos. La secuencia de la cadena de búsqueda y el tipo de archivo a buscar. PAQUETE REPLY_SEARCH. - Implementado por la clase: ReplySearchPacket. - Datos. Los archivos que satisfacen los requisitos de búsqueda. 5.1.3 SOLICITUD DE BÚSQUEDA DE COMENTARIOS Cuando un cliente solicita una búsqueda de comentarios de un archivo determinado, se envía un paquete a la dirección IP del servidor al que se encuentra conectado para que consulte su base de datos. El servidor contesta con los resultados que satisfacen los requisitos de búsqueda de la solicitud, tanto los suyos como los que provienen de la red IP multicast. Figura 34. Solicitud de búsqueda de comentarios PAQUETE REQUEST_COMMENTS. - Implementado por la clase: RequestCommentsPacket. - Datos. El valor de la función hash que identifica un archivo en la red P2P. PAQUETE REPLY_ COMMENTS. - Implementado por la clase: ReplyCommentsPacket. - Datos. Los comentarios que satisfacen los requisitos de búsqueda. 5.1.4 SOLICITUD DE BÚSQUEDA DE CLIENTES Cuando un cliente solicita una búsqueda de otros clientes que tienen disponible un archivo determinado para su transferencia, se envía un paquete a la dirección IP del servidor al que se encuentra conectado para que consulte su base de datos. El servidor 70 Diseño e implementación de un protocolo peer-to-peer contesta con las direcciones IP de los clientes que satisfacen los requisitos de búsqueda de la solicitud, tanto las que tiene registradas en sus base de datos como las que provienen de la red IP multicast. Figura 35. Solicitud de búsqueda de comentarios PAQUETE REQUEST_COMMENTS. - Implementado por la clase: RequestIPsPacket. - Datos. El valor de la función hash que identifica un archivo en la red P2P. PAQUETE REPLY_ COMMENTS. - Implementado por la clase: ReplyIPsPacket. - Datos. Las direcciones IP de los clientes que tienen disponible un archivo determinado para su transferencia. 5.1.5 SOLICITUD DE SINCRONIZACIÓN Cuando un cliente ha terminado de descargar completamente un archivo de la red P2P, se envía un paquete a la dirección IP del servidor al que se encuentra conectado para que añada a la disponibilidad del archivo a este cliente. Figura 36. Solicitud de sincronización de archivos PAQUETE REQUEST_SYNCHRONIZE. - Implementado por la clase: SynchronizePacket. - Datos. El archivo descargado del cliente. 71 Diseño e implementación de un protocolo peer-to-peer 5.1.6 SOLICITUD DE DESCONEXIÓN DE LA RED PEER-TO-PEER Cuando un cliente se desconecta la red P2P, se envía un paquete a la dirección IP del servidor para que se contemple la desconexión de este cliente, eliminando los registros de la base de datos, los archivos que comparte y sus comentarios. El servidor acredita la desconexión con el correspondiente paquete de contestación. Figura 37. Solicitud de desconexión a la red P2P PAQUETE REQUEST_COMMENTS. - Implementado por la clase: StandardPacket. - Datos. La dirección IP del cliente que se desconecta de la red P2P. PAQUETE REPLY_ COMMENTS. - Implementado por la clase: StandardPacket. - Datos. Sin datos. El tipo de paquete transmitido es la propia confirmación del protocolo. 5.2 PROTOCOLO ENTRE SERVIDORES 5.2.1 SOLICITUD DE CONEXIÓN A LA RED MULTICAST Cuando un servidor se conecta la red IP multicast, se envía un datagrama a la dirección de esta red para que el resto de los servidores contemplen la nueva agregación del servidor. El resto de los servidores conectados a la red IP multicast, acreditan a este nuevo servidor con el correspondiente datagrama de contestación. Figura 38. Solicitud de conexión a la red IP multicast 72 Diseño e implementación de un protocolo peer-to-peer DATAGRAMA REQUEST_JOIN. - Implementado por la clase: RequestJoinData. - Datos. La dirección IP y el puerto asignado a la red IP multicast del servidor que solicita la conexión. DATAGRAMA REPLY_JOIN. - Implementado por la clase: ReplyJoinData. - Datos. La dirección IP y el puerto asignado a la red IP multicast del servidor que contesta a la solicitud de conexión. 5.2.2 SOLICITUD DE BÚSQUEDA DE ARCHIVOS Cuando un servidor solicita una búsqueda de archivos, se envía un datagrama a la dirección de la red IP multicast para que el resto de los servidores consulten sus bases de datos. El resto de los servidores contestan con los resultados que satisfacen los requisitos de búsqueda del archivo. Figura 39. Solicitud de búsqueda de archivos a la red IP multicast DATAGRAMA REQUEST_SEARCH. - Implementado por la clase: RequestSearchData. - Datos. La secuencia de la cadena de búsqueda y el tipo de archivo a buscar. DATAGRAMA REPLY_ SEARCH. - Implementado por la clase: ReplySearchData. - Datos. Los archivos que satisfacen los requisitos de búsqueda. 5.2.3 SOLICITUD DE BÚSQUEDA DE COMENTARIOS Cuando un servidor solicita una búsqueda de comentarios de un archivo determinado, se envía un datagrama a la dirección de la red IP multicast para que el 73 Diseño e implementación de un protocolo peer-to-peer resto de los servidores consulten sus bases de datos. El resto de los servidores contestan con los resultados que satisfacen los requisitos de búsqueda de la solicitud. Figura 40. Solicitud de búsqueda de comentarios a la red IP multicast DATAGRAMA REQUEST_SEARCH. - Implementado por la clase: RequestCommentsData. - Datos. El valor de la función hash que identifica un archivo en la red. DATAGRAMA REPLY_ SEARCH. - Implementado por la clase: ReplyCommentsData. - Datos. Los comentarios que satisfacen los requisitos de búsqueda. 5.2.4 SOLICITUD DE BÚSQUEDA DE CLIENTES Cuando un servidor solicita una búsqueda de clientes que tienen disponible un archivo determinado para su transferencia, se envía un datagrama a la dirección de la red IP multicast para que el resto de los servidores consulten sus bases de datos. El resto de los servidores contestan con las direcciones IP de los clientes que satisfacen los requisitos de búsqueda de la solicitud. Figura 41. Solicitud de búsqueda de direcciones IP a la red IP multicast DATAGRAMA REQUEST_IPS. - Implementado por la clase: RequestIPsData. - Datos. El valor de la función hash que identifica un archivo en la red. 74 Diseño e implementación de un protocolo peer-to-peer DATAGRAMA REPLY_ IPS. - Implementado por la clase: ReplyIPsData. - Datos. Las direcciones IP de los clientes que tienen disponible un archivo determinado para su transferencia. 5.3 PROTOCOLO ENTRE CLIENTES Cuando un cliente se conecta a otro par de la red P2P al que ha solicitado la descarga de un determinado archivo, su petición es insertada en la cola de descargas del cliente que sirve, para su posterior procesamiento. Cuando esta solicitud es atendida, el cliente que sirve el archivo envía un mensaje al cliente que solicita para que le indique el identificador de la parte del archivo que necesita. Figura 42. Solicitud de transferencia de un parte del archivo PAQUETE START. - Implementado por la clase: StandardPacket. - Datos. Sin datos. El tipo de paquete transmitido es la propia sincronización del protocolo. PAQUETE CHUNK_1. - Implementado por la clase: ChunkPacket. - Datos. El identificador de la parte del archivo. PAQUETE CHUNK_2. - Implementado por la clase: ChunkPacket. Datos. El identificador de la parte del archivo y los datos de esa parte. Posteriormente, el cliente que recibe la parte del archivo solicitado, indica inmediatamente después al cliente que se la ha servido que la transferencia a de finalizarse, porque ya tiene el archivo completo, o bien a de continuar. Este mensaje es 75 Diseño e implementación de un protocolo peer-to-peer necesario para que el cliente que sirve el archivo elimine o vuelva a insertar la petición en la cola de descargas. Figura 43. Sincronización de transferencia de un parte del archivo PAQUETE CONTINUE. - Implementado por la clase: StandardPacket. - Datos. Sin datos. El tipo de paquete transmitido es la propia sincronización del protocolo. PAQUETE END. - Implementado por la clase: StandardPacket. - Datos. Sin datos. El tipo de paquete transmitido es la propia sincronización del protocolo. 76 Capítulo 6 Programación y Pruebas del Sistema Diseño e implementación de un protocolo peer-to-peer 6.1 PROGRAMACIÓN 6.1.1 INTRODUCCIÓN El objetivo de esta etapa es alcanzar la transformación del sistema en un conjunto de programas que puedan ser ejecutados correctamente bajo los criterios de calidad definidos. La dificultad radica en la manera de realizar esta transformación de la mejor forma posible, ya que dependen de factores como el lenguaje de programación y las herramientas y utilidades software utilizadas. Esta etapa recoge los detalles de la programación empleada para realizar la aplicación con explicaciones de los lenguajes utilizados en todos los componentes. 6.1.2 LENGUAJES DE PROGRAMACIÓN Para la implementación del protocolo se ha utilizado Java como lenguaje de programación, puesto que el proyecto tiene características de un sistema distribuido, y este ha de ser independiente tanto del hardware como del sistema operativo en el que se ejecute. Además la arquitectura planteada se ajusta muy bien a las características del lenguaje de programación anteriormente mencionadas. Para la implementación de la base de datos de los servidores se ha utilizado el sistema gestor de bases de datos relacionales MySQL, unos de los más utilizados, ya que las características de este sistema gestor, detalladas anteriormente, se ajustan a los requisitos del proyecto, tales como multi-thread, rapidez y fiabilidad. Además MySQL está bajo licencia GPL, un valor añadido al producto final que hoy en día es bastante valorado en algunos proyectos. 6.1.3 MANUAL DE USUARIO En esta etapa es donde, por último, se ha procedido a la realización del manual de usuario, incluido en el anexo I para el cliente y en el anexo II para el servidor. La realización de estos manuales está orientada a las funciones que puede realizar el usuario sobre cada uno de los controles del sistema, ya que dependerá del uso que se haga del mismo y de la determinación del usuario de cómo utilizarlo. 78 Diseño e implementación de un protocolo peer-to-peer 6.2 PRUEBAS DEL SISTEMA Después de haber desarrollado cada una de las clases que componen el dominio de la aplicación, es necesario realizar una serie de pruebas para conseguir una correcta integración y funcionamiento de esta. El objetivo global de esta fase es someter a todas las componentes de la aplicación a una serie de planes de prueba y verificaciones encaminadas a garantizar el nivel de fiabilidad exigido. En esta fase se recogen las distintas pruebas a las que puede someterse el software, desde las pruebas de encadenamiento entre los distintos componentes, hasta las pruebas de sobrecarga para diagnóstico del rendimiento del sistema ante situaciones límites. A continuación se detalla las distintas pruebas a las que se ha sometido todas las componentes sistema: Pruebas de encadenamiento. Aseguran y verifican las llamadas entre los distintos componentes de la aplicación. Pruebas de integración. Verifican la funcionalidad de toda la aplicación y el rendimiento de los recursos utilizados. Pruebas de explotación del sistema. Confirman la correcta operación de la totalidad del sistema. Pruebas de sobrecarga. Comprueban el correcto funcionamiento y comportamiento de la aplicación ante los estados de sobrecarga en los que se puede ver envuelto. Pruebas de recuperación. Verifica la capacidad de la aplicación para recuperar la información ante posibles errores de ejecución. Pruebas de seguridad. Verifican los aspectos de seguridad exigidos en los requisitos del sistema. Pruebas de usabilidad. Aseguran la accesibilidad de la aplicación por parte de los usuarios finales. Pruebas de aceptación del usuario. Certifican por parte de los usuarios finales la funcionalidad y rendimiento de la aplicación de acuerdo con los requisitos establecidos. 79 Diseño e implementación de un protocolo peer-to-peer 6.2.1 PRUEBAS DE ENCADENAMIENTO Una vez comprobado el correcto funcionamiento de cada componente software, estas pruebas garantizan la adecuada comunicación y llamadas remotas entre unos componentes y otros. 6.2.2 PRUEBAS DE INTEGRACIÓN Una vez verificadas las comunicaciones y llamadas entre módulos y programas de la aplicación se procede a integrar todos sus componentes. 6.2.3 PRUEBAS DE EXPLOTACIÓN DEL SISTEMA Estas pruebas van encaminadas a determinar la facilidad que ofrece el sistema para su explotación u operación. Para ello, se han ejecutado todos los procesos recogidos en el manual de explotación siguiendo en todo momento las instrucciones sobre entradas, sus salidas, mensajes de error y controles que se describe en dicho manual. 6.2.4 PRUEBAS DE SOBRECARGA Estas pruebas consisten en realizar distintos informes relacionados con el rendimiento de la aplicación en situaciones de sobrecarga de trabajo y concurrencia de usuarios o tareas. Estas pruebas ayudan a establecer el nivel de sobrecarga máximo que puede soportar el sistema, a partir del cual se puede hacer necesaria la escalabilidad de la arquitectura del sistema en cuanto al hardware, software o comunicaciones. 6.2.5 PRUEBAS DE RECUPERACIÓN En toda aplicación es necesario establecer determinados procesos y mecanismos para que en caso de un mal funcionamiento del sistema y su posterior pérdida de información, esta pueda ser recuperada o en su defecto llevar al sistema a un estado consistente anterior. 80 Diseño e implementación de un protocolo peer-to-peer 6.2.6 PRUEBAS DE SEGURIDAD Una vez verificadas las comunicaciones y llamadas entre módulos y programas de la aplicación se procede a integrar todos sus componentes. 6.2.7 PRUEBAS DE USABILIDAD El objetivo de estas pruebas es verificar la facilidad de uso del sistema, en lo referente al diseño de la interfaz y al manual de usuario. Esta prueba es muy importante para el sistema ya que una de las prioridades del proyecto es permitir que los usuarios, tengan o no conocimientos previos en informática, puedan utilizar esta aplicación sin ningún tipo de problema. 6.2.8 PRUEBAS DE ACEPTACIÓN DEL USUARIO Estas pruebas, junto con las de usabilidad, son realizadas por el usuario. Su objetivo es validar el sistema desde el punto de vista funcional y operativo, haciendo uso del manual de usuario para guiarse por la navegación del sistema. 81 Capítulo 7 Planificación del Proyecto Diseño e implementación de un protocolo peer-to-peer El presente proyecto comenzó el día 28 de Octubre del 2008 con la reunión de lanzamiento mantenida entre el director de proyecto y el jefe de proyecto, en la que se firmó la información del proyecto contenida en el anexo A. Posteriormente, este anexo fue entregado al coordinador de proyectos. Aunque la realización del proyecto ha sido constante, se ha visto interrumpida por los exámenes intersemestrales de Noviembre y Abril y los exámenes finales del curso. Cabe destacar, que se han mantenido reuniones periódicas con el director de proyecto, identificadas como reuniones de seguimiento, con el fin de exponer y controlar el progreso de los objetivos del proyecto, así como presentar las decisiones de diseño tomadas y registrar las incidencias ocurridas. Figura 50. Planificación del proyecto El proyecto concluyó el día 4 de Junio del 2009 con la reunión de finalización mantenida entre el director de proyecto y el jefe de proyecto. Posteriormente, el día 5 de Junio del 2009 se entregó el presente documento al coordinador de proyecto. 83 Diseño e implementación de un protocolo peer-to-peer La etapa de desarrollo e implementación tanto del servidor como del cliente se ha dividido en las fases que se muestran a continuación. Figura 51. Planificación de la etapa de desarrollo e implementación Interfaz. Corresponde a la fase de diseño del medio de interactuación del usuario con la aplicación, ya sea bien por medio de componentes visuales o por medio de ficheros de registro, como es el caso del servidor. Lógica. Corresponde a la fase de diseño de los algoritmos y métodos necesarios para la ejecución del sistema. Programación. Corresponde a la fase de implementación de los requisitos y conclusiones de las dos fases anteriores. Diseño de la base de datos. Corresponde a la fase de diseño de la base de datos utilizada por los servidores. Implementación de la base de datos. Corresponde a la fase de implementación del diseño de la fase anterior. 84 Capítulo 8 Valoración Económica del Proyecto Diseño e implementación de un protocolo peer-to-peer El objetivo de esta valoración es dotar al proyecto de un valor económico y realizar una estimación del desarrollo del mismo. 8.1 COSTES DE TECNOLOGÍA Los costes de tecnología son costes procedentes de la adquisición de todo tipo de máquinas hardware para el correcto funcionamiento del sistema, así como las licencias necesarias para la utilización de las herramientas, IDEs (Integrated Development Environment) y los distintos lenguajes empleados en el proyecto. 8.1.1 COSTES DE HARDWARE Los recursos hardware que se han utilizado para la realización del proyecto han sido un equipo de trabajo AMD Athlon 64 X2 Dual Core Processor 3800+ 2.00 GHz, 1 GB de RAM, disco duro de 60 GB y una conexión a Internet. CONCEPTO Equipo de trabajo Amortización estación de trabajo Conexión a Internet Total COSTE 800,00 € 200,00 € 315,00 € 1.315,00 € Figura 44. Costes de hardware 8.1.2 COSTES DE SOFTWARE Los recursos software han sido, Windows XP Professional Versión 2002 Service Pack 3 y el paquete ofimático Microsoft Office 2007. El resto de componentes software necesarios, Java SE Development Kit, Eclipse Ganymede 3.4 y Omondo EclipseUML 2008 Studio Edition for Eclipse 3.4 Java Modelers, se encuentran bajo licencias de código abierto, por lo que no representan coste alguno en la valoración económica. CONCEPTO Windows XP Professional 2002 Service Pack 3 Microsoft Office 2007 Total COSTE 700,00 € 800,00 € 1.500,00 € Figura 45. Costes de software 86 Diseño e implementación de un protocolo peer-to-peer NOTA: La valoración anterior corresponde al valor máximo, ya que se han tomado los costes de licencias de nueva adquisición. En caso de poseer licencias para el uso de las anteriores herramientas, o adquirir ampliaciones de licencias, los costes de tecnología serían inferiores. Con el cálculo de los dos costes anteriores se puede calcular los costes de tecnología, como se detalla a continuación. CONCEPTO Costes de hardware Costes de software Total COSTE 1.315,00 € 1.500,00 € 2.815,00 € Figura 46. Costes de tecnología 8.2 COSTES DE IMPLANTACIÓN Los costes de implantación son costes procedentes del trabajo de todo el personal implicado en el desarrollo del proyecto. A continuación se detalla las funciones de cada una de las personas integrantes del proyecto. Director de proyecto. Su labor consiste en que el jefe de proyecto presente un proyecto y una documentación de calidad exigida en los plazos acordados, aportando conocimiento de tipo técnico y funcional. Es el responsable de dirigir el proyecto, facilitar conocimientos y orientar indicaciones para la resolución ante posibles problemas surjan, y supervisar la realización del proyecto así como la calidad de sus contenidos. Jefe de proyecto. Es el máximo responsable del proyecto. Su labor consiste en gestionar el proyecto realizando actividades de seguimiento, control y planificación, asignación de recursos y demás actividades de gestión. 87 Diseño e implementación de un protocolo peer-to-peer Analista. Es el responsable de analizar los requisitos de la aplicación y elaborar las especificaciones técnicas de los programas. Además, en algunos casos puede ayudar al programador en la realización de alguna actividad. Programador. Es el responsable de implementar el código ejecutable de la aplicación con los requisitos y especificaciones facilitadas por el analista, así como realizar parte de la documentación del proyecto, como el manual de usuario y el manual del administrador. A continuación se muestra la estimación del esfuerzo de cada unos de los integrantes del proyecto. Dicha estimación se ha realizado junto con la planificación del proyecto. ACTIVIDAD Reunión de lanzamiento Anexo A Estudio de clientes actuales Anexo B Reunión de seguimiento Interfaz del servidor Lógica del servidor Programación del servidor Diseño de la BBDD Implementación de la BBDD Reunión de seguimiento Interfaz del cliente Lógica del cliente Programación del cliente Pruebas unitarias Pruebas de integración Pruebas de aceptación Reunión de seguimiento Documentación Anexos Reunión de finalización DIRECTOR DE PROYECTO 1 1 --1 2 ----------2 ------------2 4 --2 JEFE DE ANALISTA PROGRAMADOR PROYECTO 1 ----1 ----2 20 --1 ----2 ------1 2 --5 15 --25 55 --2 3 ----5 2 ------10 25 --10 20 --30 75 --5 15 --5 15 --5 15 2 ----10 30 30 --2 10 4 ----- Figura 47. Estimación del esfuerzo de los integrantes del proyecto 88 Diseño e implementación de un protocolo peer-to-peer Con la estimación anterior, y el coste base de cada integrante del proyecto, se puede realizar el cálculo de los costes de implantación, como se detalla a continuación. FUNCIÓN Director de proyecto Jefe de proyecto Analista Programador NÚMERO DE HORAS 15 25 150 285 COSTE/HORA 100,00 € 80,00 € 60,00 € 40,00 € Total COSTE 1.500,00 € 2.000,00 € 9.000,00 € 11.400,00 € 23.900,00 € Figura 48. Costes de implantación 8.3 VALORACIÓN FINAL En total, los costes del desarrollo del proyecto ascienden a una cantidad de 26.865,00 €. CONCEPTO DETALLE Costes de hardware Costes de software Director de proyecto Jefe de proyecto Analista Programador COSTE Otros gastos 1.315,00 € 1.500,00 € 1.500,00 € 2.000,00 € 9.000,00 € 11.400,00 € 150,00 € Total 26.865,00 € Costes de tecnología Costes de implantación Figura 49. Costes de desarrollo del proyecto NOTA: El concepto de otros gastos hace referencia a gastos de material consumible. 89 Capítulo 9 Conclusiones y Futuras Líneas de Desarrollo Diseño e implementación de un protocolo peer-to-peer En el presente proyecto se ha realizado un exhaustivo análisis sobre los sistemas actuales P2P de transferencia de archivos, detallando sus características, funcionamiento y mejoras con respecto a otros sistemas y, conjuntamente, se ha introducido el problema de las búsquedas de archivos en este tipo de redes. Sobre esa base, se ha realizado el diseño e implementación de un protocolo independiente del servidor al que el usuario se encuentre conectado. Al eliminar la dependencia de la conexión con el servidor, el número de archivos encontrados en el proceso de búsqueda, el número de fuentes encontradas que tienen disponible el archivo para compartir, y el número de comentarios de los usuarios que califican los archivos, son mayores. Además, dado que el número de fuentes encontradas es mayor, se reduce considerablemente el tiempo de transferencia del archivo, ya que la posibilidad de conexión a un mayor número de pares se incrementa. Al no existir una dependencia con el servidor, los clientes no tienen que mantener una lista de servidores en la que elegir sus favoritos y su prioridad en el proceso de conexión, por lo que se le libera de una tarea innecesaria, equilibrando de esta forma las conexiones de los clientes entre los distintos servidores. Además, al realizar una gestión óptima de los recursos, en este caso los servidores que se encuentran conectados a la red, el reparto de carga de trabajo entre estos y las solicitudes de búsqueda de un archivo entre los usuarios de la red están más proporcionadas. La arquitectura propuesta, basada en una red IP multicast, permite que cada servidor conozca una pequeña parte de la red P2P y no sea necesario conocer toda la tipología de esta, de manera que el tamaño de la red puede crecer tanto como sea necesarios sin la necesidad de afectar al rendimiento de los nodos. Asimismo, con una única conexión, a la red IP multicast, se permite mantener un intercambio continuado de la información de la base de datos entre los distintos servidores, sin la necesidad de mantener tantas conexiones como servidores estén conectados a la red P2P, lo que disminuye la sobrecarga y el coste computacional de estos. 91 Diseño e implementación de un protocolo peer-to-peer El sistema propuesto se podría enmarcar dentro de los sistemas P2P estructurados, ya que se conoce la localización exacta de los recursos, pero sin la necesidad de que los clientes tengan que mantener una tabla hash para calcular el lugar en el que está cada recurso como sucede en el caso de las redes Pastry, CAN o Chord. Este sistema, proporciona un mecanismo de búsqueda determinista, de tal forma que se asegura la localización de un recurso siempre y cuando se encuentre en la red, encaminando los mensajes de forma eficiente. Con la realización de este proyecto, se suplen algunas carencias de las actuales aplicaciones de búsqueda y transferencia de archivos en redes peer-to-peer, como es el caso de la búsqueda de fuentes o de comentarios de un determinado archivo. Además, otras características y funcionalidades de estas aplicaciones se optimizan, como por ejemplo la previsualización de los archivos en estado de descarga y la gestión del espacio de los archivos temporales. Las posibles futuras líneas de investigación en el contexto de las redes P2P son numerosas y amplias. Las capacidades que aporta la infraestructura de clave pública, PKI24 (Public Key Infrastructure), a las aplicaciones en las que es necesaria la ejecución con garantías de operaciones criptográficas como el cifrado, la firma digital o el no repudio de transacciones electrónicas, son extremadamente seguras. Las operaciones criptográficas de clave pública, son procesos en los que se utilizan determinados algoritmos de cifrado que son conocidos y se encuentran accesibles. Por este motivo la seguridad que puede aportar la tecnología PKI, está fuertemente ligada a la privacidad de la llamada clave privada y los procedimientos operacionales o políticas de seguridad aplicados. El uso de esta infraestructura de clave pública se podría extender al presente proyecto para así poder limitar la conexión entre los pares de la red exclusivamente a aquellos nodos en los que el usuario confía, transformando así la red P2P en una red F2F. Conjuntamente, esta infraestructura se podría extender al sistema del presente proyecto para, además de garantizar un alto grado de seguridad en las 24 El término PKI (Public Key Infrastructure) se refiere a la combinación de hardware, software y políticas de seguridad para permitir la ejecución de cifrados y firmas digitales en operaciones electrónicas. 92 Diseño e implementación de un protocolo peer-to-peer comunicaciones, que los contenidos que estén bajo derechos de autor sean compatibles con las transferencias. De esta forma, existiría una compatibilidad con los derechos de autor y las licencias de los archivos. Con el objetivo de dotar de una mayor estabilidad a las conexiones de los clientes, se podría realizar un proceso de reconexión de estos a otros servidores de la red P2P, en caso de que el servidor al que se encuentren conectados dejara de estar accesible por cualquier motivo. De esta forma se garantizaría un rápido retorno de la disponibilidad de los recursos en caso de fallo de algún servidor de la red. Con el fin de encontrar el equilibrio con otras aplicaciones que se ejecuten en el cliente y que hagan uso de una conexión a Internet, se podría dar la posibilidad al usuario de elegir los rangos de velocidades máximas de subida y descarga de archivos. De esta forma, la aplicación cliente no coparía todo el ancho de banda disponible y el usuario podría ejecutar otras aplicaciones que necesiten de conexión a Internet. Ampliando la propuesta anterior, la aplicación cliente podría añadir un sistema de filtrado de paquetes, aplicando técnicas de traffic shaping25, para otorgar mayor prioridad a los paquetes, protocolos o servicios que decida el usuario. El resultado de la aplicación de este sistema de filtrado, sería una navegación por Internet mucho más fluida, un menor valor del ping y mejores rendimientos en lo referente a servicios de streaming26 o VoIP. Ya que los archivos que se suelen transferir en las redes P2P son de un tamaño considerable y por lo tanto el tiempo de transferencia suele ser alto, se podría añadir una aplicación web para la gestión y monitorización remota por parte del cliente, para así ofrecer la posibilidad de gestionar sus transferencias, sin la necesidad de estar delante del equipo de trabajo desde el cual ha iniciado las transferencias de los archivos. 25 El término traffic shaping se refiere a una técnica de catalogación del tráfico para optimizar el rendimiento de una red. 26 El término streaming se refiere a un servicio para la reproducción de contenidos multimedia directamente desde una página web. 93 Bibliografía y Referencias Diseño e implementación de un protocolo peer-to-peer BIBLIOGRAFÍA DE CONSULTA [MILL06] Millán R. J. Domine las redes P2P: Peer to Peer orígenes, funcionamiento y legislación del P2P, selección y configuración del acceso de banda ancha a Internet. Creaciones Copyright. ISBN 849630020X. [TAVE08] Tavera M. L. Apuntes de la asignatura Tecnologías avanzadas de sistemas operativos. Universidad Pontificia de Comillas de Madrid. [STEV02] Stevens P., Pooley R. Traducción de Alarcón M., Sanjuán O., Pérez F. Utilización de UML en ingeniería del software. Addison Wesley. ISBN 9788478290864 [BARR01] Barranco J. Metodología del análisis estructurado de sistemas. Universidad Pontificia de Comillas de Madrid. ISBN 8484680436. [ESQU08] Esquivel J. C. Apuntes de la asignatura Ingeniería del software II. Universidad Pontificia de Comillas de Madrid. [ECKE02] Eckel B. Traducción de González J. Thinking in Java. Prentice Hall. ISBN 8420531928. [RUST04] Rusty E. Java Network Programming. O’REILLY. ISBN 0596007213. [MYSQ09] MySQL AB. MySQL 5.0 Reference Manual. http://dev.mysql.com/doc/ refman/5.0/en/what-is-mysql.html [MICR03] Microsoft. Revisión Barahona E, Sánchez B. Diccionario de informática e Internet. McGraw Hill. ISBN 8448138600. [GOME02] Gómez M. J., de Pino L. Diccionario inglés-español de informática y telecomuniacaciones. McGraw Hill. ISBN 8448136403. 95 Diseño e implementación de un protocolo peer-to-peer REFERENCIAS BIBLIOGRÁFICAS [AFAN06] Afanador J. A., Ribero D. F., Ulloa G. E. Redes P2P y enrutamiento en capa de de aplicación. Revista Sistemas Nº 98. [SANT07] Santín A. Peer 2 Peer. Sistemas Operativos Distribuidos. http://jungla. dit.upm.es/~joaquin/so/p2p/p2p.pdf [RODE05] Rodero L., Fernández A., López L., Cholvi V. Topologías dinámicas en redes P2P no estructuras. XV Jornadas Telecom I+D. [MUÑO04] Muñoz J. M. SIRTED. Sistema Inteligente de Reparto de Trabajo en Entornos Distribuidos. Proyecto Final de Carrera. Universidad Pontificia de Comillas de Madrid. [MYSQ09] MySQL AB. MySQL 5.0 Reference Manual. http://dev.mysql.com/doc/ refman/5.0/en/what-is-mysql.html [HAXI01] http://www.haxial.com/products/kdx/index2.html [MONK03] Monk. Credit System. http://emule-project.net/home/perl/help.cgi?l=1& rm=show_topic&topic_id=134 [COHE01] Cohen B. http://finance.groups.yahoo.com/group/decentralization/ message/3160 [ISOH08] http://isohunt.com/forum/viewtopic.php?t=145853 [AMIL06] Amilmani, K. Studying and enhancing the BitTorrent protocol. Stony Brook University. [SOTO06] Soto P. http://www.pablosoto.com/2006/11/omemo.html [GARC05] García A. Apuntes de la asignatura Redes de ordenadores. Universidad Pontificia de Comillas de Madrid. 96 Diseño e implementación de un protocolo peer-to-peer [MICRO04] Sun Microsystems. API specification for the Java 2 Platform Standard Edition 5.0. http://java.sun.com/j2se/1.5.0/docs/api/ [WANG04] Wang X., Feng D., Lai X., Yu H. Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD. http://eprint.iacr.org/2004/199.pdf [OMG09] Object Management Group. http://www.omg.org/gettingstarted/ what_is_uml.htm 97 Anexo I Manual de Usuario de la Aplicación Cliente ÍNDICE 1. INTRODUCCIÓN ............................................................................................... 101 1.1. OBJETIVO DEL MANUAL DE USUARIO ........................................................................... 101 1.2. OBJETIVO DE LA APLICACIÓN ........................................................................................ 101 2. ENTORNO DE LA APLICACIÓN ........................................................................... 101 2.1. REQUISITOS HARDWARE ............................................................................................... 101 2.2. REQUISITOS SOFTWARE ................................................................................................ 103 3. INSTALACIÓN DE LA APLICACIÓN...................................................................... 103 4. EJECUCIÓN DE LA APLICACIÓN ......................................................................... 103 4.1. CONEXIÓN A LA RED P2P .............................................................................................. 103 4.2. BÚSQUEDAS DE ARCHIVOS ........................................................................................... 104 4.3. TRANSFERENCIAS .......................................................................................................... 105 4.4. ARCHIVOS LOCALES....................................................................................................... 107 5. ESTRUCTURA DE DIRECTORIOS Y ARCHIVOS ..................................................... 108 5.1. DIRECTORIOS DE LA APLICACIÓN .................................................................................. 108 5.2. ARCHIVOS DE LA APLICACIÓN ....................................................................................... 109 6. INCIDENCIAS MÁS FRECUENTES ....................................................................... 110 7. MENSAJES DE AVISO ........................................................................................ 110 7.1. AVISO DE NO CONEXIÓN ............................................................................................... 110 7.2. AVISO DE NO SELECCIÓN DE ARCHIVO ......................................................................... 111 7.3. CONFIRMACIÓN DE CIERRE........................................................................................... 111 8. MENSAJES DE ERROR ....................................................................................... 112 8.1. ERROR EN LA CONEXIÓN ............................................................................................... 112 8.2. ERROR EN LA BÚSQUEDA DE ARCHIVOS ....................................................................... 112 8.3. ERROR EN LA OBTENCIÓN DE DIRECCIONES IP ............................................................. 112 8.4. ERROR DE OBTENCIÓN DE ARCHIVOS LOCALES............................................................ 113 8.5. ERROR EN LA DESCONEXIÓN......................................................................................... 113 9. GLOSARIO DE TÉRMINOS ................................................................................. 113 TABLA DE FIGURAS IDENTIFICADOR DESCRIPCIÓN PÁGINA Figura 1 Figura 2 Figura 3 Figura 4 Figura 5 Figura 6 Figura 7 Figura 8 Figura 9 Figura 10 Figura 11 Figura 12 Figura 13 Figura 14 Figura 15 Figura 16 Figura 17 Figura 18 Figura 19 Figura 20 Figura 21 Requisitos para sistemas Solaris Requisitos para sistemas Windows Requisitos para sistemas Linux Parámetros de búsqueda de archivos Tabla de resultados de una búsqueda Ventana de comentarios de un archivo Tabla de descargas actuales del cliente Acciones sobre los archivos en estado de descarga Ventana de registro de un nuevo comentario Ventana de comentarios de un archivo Previsualización de un archivo de vídeo Ventana de recursos locales Acciones sobre los archivos locales Aviso de desconexión del cliente Aviso de archivo no seleccionado Confirmación de cierre de la aplicación Aviso de error en la conexión Error en la búsqueda de archivos Error en la obtención de direcciones IP Aviso de error en la obtención de archivos locales Aviso de error en la obtención de archivos locales 101 102 102 104 104 105 105 106 106 106 107 108 108 111 111 111 112 112 113 113 113 Diseño e implementación de un protocolo peer-to-peer 1. INTRODUCCIÓN 1.1 OBJETIVO DEL MANUAL DE USUARIO El objetivo del presente manual es facilitar al usuario el aprendizaje y uso de la de la aplicación cliente que se ha desarrollado. Contiene descripciones y detalles de todos los componentes de la aplicación, así como las especificaciones de las posibles opciones que se ofrecen. 1.2 OBJETIVO DE LA APLICACIÓN El objetivo de la aplicación cliente es ofrecer una aplicación que se conecte a una red P2P en la que se ha mejorado el proceso de búsqueda de los archivos entre los usuarios. Se entiende por mejora la eliminación de la dependencia del proceso de búsqueda al servidor al que el usuario se encuentre conectado. Además la aplicación ofrece la posibilidad de gestión de archivos, en lo que respecta la búsqueda y transferencia de estos así como de la gestión de los recursos locales que se ponen a disposición de la red P2P. 2. ENTORNO DE LA APLICACIÓN 2.1 REQUISITOS HARDWARE Para una correcta ejecución de la aplicación, los requisitos hardware son los especificados por Sun Microsystems para el entorno de ejecución de Java 5.0 JRE (Java Runtime Environment). Los requisitos para sistemas Solaris son los que se describen a continuación. PLATAFORMA VERSIÓN Sistema operativo Sistema operativo Solaris AMD64/EM64T Solaris 10 MEMORIA ESPACIO EN DISCO 64 MB Instalación de 32 bits en 53 MB Instalación de 64 bits en 23 MB Figura 1. Requisitos para sistemas Solaris 101 Diseño e implementación de un protocolo peer-to-peer Los requisitos para sistemas Windows son los que se describen a continuación. PLATAFORMA Intel de 32 bits VERSIÓN Windows XP Professional SP1 Windows XP Home Windows 2000 Professional SP3 o posterior Windows 98 2ª edición Windows ME Windows Server 2003 Web Edition MEMORIA ESPACIO EN DISCO 64 MB 64 MB 64 MB 64 MB 64 MB 128 MB 98 MB Windows Server 2003 Standard Edition 128 MB Windows Server 2003 Enterprise Edition 128 MB Windows Server 2003 DataCenter Edition 128 MB AMD Opteron de 32 bits Windows Server 2003 AMD Opteron de 32 bits 128 MB 98 MB AMD Opteron de 64 bits Windows Server 2003 AMD Opteron de 32 bits 128 MB 110 MB Figura 2. Requisitos para sistemas Windows Los requisitos para sistemas Linux son los que se describen a continuación. PLATAFORMA VERSIÓN MEMORIA Red Hat 9.0 Red Hat Enterprise Linux AS 3.0 64 MB ESPACIO EN DISCO 64 MB Red Hat Enterprise Linux WS 2.1 64 MB Red Hat Enterprise Linux ES 2.1 64 MB Arquitectura Intel de 32 bits Red Hat Enterprise Linux AS 2.1 64 MB SuSE 8.2 SLEC 8 SLES 8 TurboLinux 8.0 64 MB 64 MB 64 MB 64 MB Sun Java Desktop System versión 1 64 MB 58 MB 102 Diseño e implementación de un protocolo peer-to-peer Sun Java Desktop System versión 2 Arquitectura Intel de 32 bits 64 MB 58 MB AMD Opteron de 32 bits Red Hat Enterprise Linux AS 3.0 58 MB AMD Opteron de 64 bits SLES 8 Red Hat Enterprise Linux AS 3.0 56 MB SLES 8 Figura 3. 3 Requisitos para sistemas Linux 2.2 REQUISITOS SOFTWARE Para una correcta ejecución de la aplicación, el requisito software es la instalación del el entorno de ejecución de Java 5.0 JRE (Java (Java Runtime Environment). Environment El archivo ejecutable contiene las referencias a librerías externas para la ejecución de la interfaz gráfica de usuario Java Swing Look and Feel of Mosfet Liquid KDE 3.x. Para más información acerca de esta librería, visitar la página web https://liquidlnf.dev.java.net/ 3. INSTALACIÓN DE LA APLICACIÓN El archivo dee instalación se distribuye con la extensión jar.. Si el sistema operativo instalado reconoce esta extensión, pinchar repetidamente sobre el icono del archivo para su ejecución. En caso de que el sistema operativo no reconozca este tipo de extensión, será necesario asociar la extensión jar con el programa java.. 4. EJECUCIÓN DE LA APLICACIÓN 4.1 CONEXIÓN A LA RED P2P Para conectar el cliente a la red P2P, pulsar el botón con con el icono localizado en la barra de herramientas de la aplicación. Una vez conectado el cliente aparecerá el icono , pulsar sobre él para la desconexión de la aplicación. 103 Diseño e implementación de un protocolo peer-to-peer 4.2 BÚSQUEDAS DE ARCHIVOS Para comenzar las búsquedas de archivos, pulsar sobre el icono localizado en la barra de herramientas de la aplicación. A continuación aparecerá una ventana en la que en la parte superior izquierda se encuentran los parámetros a introducir para comenzar la búsqueda. Figura 4. 4 Parámetros de búsqueda de archivos Para comenzar la búsqueda, introducir la cadena de búsqueda y presionar la tecla Enter o pinchar sobre el botón Search.. Con el fin de limitar los resultados de las búsquedas, se puede introducir el tipo de archivo a buscar, seleccionándolo del componente desplegable. Los resultados de la búsqueda se mostrarán en una tabla de la parte derecha de la ventana. Una vez se muestren muestren los resultados obtenidos, los botones Comments y Download se activarán. Figura 5. 5 Tabla de resultados de una búsqueda 104 Diseño e implementación de un protocolo peer-to-peer Cuando algún resultado de la búsqueda contenga el valor , se podrá iniciar una búsqueda de una búsqueda de comentarios de un archivo. Para iniciar una búsqueda de comentarios de un archivo, seleccionar el archivo de la tabla de resultados y pinchar sobre el botón Comments.. Cuando se obtengan los comentarios del archivo seleccionado, se mostrará una ventana con los resultados. La evaluación que puede recibir un archivo es good,, indicada por el icono bad, indicada por el icono o . Figura 6. 6 Ventana de comentarios de un archivo 4.3 TRANSFERENCIAS Para acceder a la ventana que muestra las actuales descargas del cliente, pulsar sobre el icono localizado en la barra de herramientas de la aplicación. A continuación aparecerá una ventana en la que en la parte derecha se encuentran las actuales descargas. Figura 7. 7 Tabla de descargas actuales del cliente En la parte superior rior izquierda se encuentran las acciones que se pueden realizar sobre los archivos que se encuentran descargando. 105 Diseño e implementación de un protocolo peer-to-peer Figura 8. Acciones sobre los archivos en estado de descarga Seleccionando la acción Add comment,, aparecerá una ventana en la que se podrá añadir un nuevo comentario al archivo. Para añadir un nuevo comentario, escribir la descripción del comentario y elegir la evaluación del archivo entre los distintos valores, Not evaluated, Good o Bad. Bad Una vez introducidos roducidos estos valores pinchar sobre el botón Accept. Figura 9.. Ventana de registro de un nuevo comentario Seleccionando la acción See comments,, aparecerá una ventana en la que se mostrarán los comentarios del archivo. La evaluación que puede recibir un archivo es good,, indicada por el icono o bad, indicada por el icono . Figura 10. 10 Ventana de comentarios de un archivo Seleccionando la acción Preview download,, el archivo seleccionado se previsualizará utilizando en programa asociado a la extensión del archivo. La previsualización del un archivo ofrece al usuario una forma de comprobar si el archivo que se está descargando o es de la calidad esperada. Para los archivos multimedia de video o sonido, se recomienda la instalación del reproductor VideoLAN – VLC media player, disponible en la página web http://www.videolan.org/ 106 Diseño e implementación de un protocolo peer-to-peer La previsualización ualización del un archivo es un proceso complejo, ya que hay que unir las partes descargadas del archivo, por lo que el tiempo que transcurre desde la selección de esta opción hasta la reproducción del archivo puede ser considerable. Figura 11. 11 Previsualización de un archivo de vídeo Seleccionando la acción Cancel download,, la descarga del archivo seleccionado se anulará y todos los archivos e información relativa a está serán eliminados. 4.4 ARCHIVOS LOCALES Para gestionar los archivos locales que se ponen a disposición de la red P2P, pinchar sobre el icono localizado en la barra de herramientas de la aplicación. A continuación aparecerá una ventana en la que en la parte derecha se encuentran una tabla que contiene ontiene los archivos que se ponen a disposición de otros clientes de la red y que se encuentran localizados en el directorio Incoming. 107 Diseño e implementación de un protocolo peer-to-peer Figura 12. Ventana de recursos locales En la parte superior izquierda se encuentran las acciones que se pueden realizar sobre los archivos locales. Figura 13. Acciones sobre los archivos locales Seleccionando la acción Add comment, aparecerá una ventana en la que se podrá añadir un nuevo comentario al archivo. Para añadir un nuevo comentario, escribir la descripción del comentario y elegir la evaluación del archivo entre los distintos valores. Ver figura 8. Seleccionando la acción See comments, aparecerá una ventana en la que se mostrarán los comentarios del archivo. Ver figura 9 Seleccionando la opción Reload shares, se recarga en la aplicación los archivos del directorio incoming, por si han ocurrido eliminaciones o altas de nuevos archivos. 5. ESTRUCTURA DE DIRECTORIOS Y ARCHIVOS 5.1 DIRECTORIOS DE LA APLICACIÓN Cuando se instala la aplicación, se crea una estructura de directorios para el almacenamiento y gestión de archivos, tanto los transferidos a la red P2P, como los necesarios para la ejecución de la aplicación. A continuación se detalla cada uno de estos directorios. 108 Diseño e implementación de un protocolo peer-to-peer Config. Directorio que contiene archivos necesarios para la ejecución de la aplicación. Incoming. Directorio donde se alojan los archivos descargados por el cliente y los que se ponen a disposición de la red P2P. Dentro de este directorio se puede realizar cualquier tipo de distribución de otros directorios, ya que la aplicación tomará este como raíz y mostrará todos los archivos que contenga, aun en el caso de existir subdirectorios dentro de él. Previews. Directorio donde se almacenan los archivos que contienen la previsualización de los archivos que se están descargando. Por motivos de gestión del espacio de almacenamiento del disco, al cerrar la aplicación, todo el contenido de este directorio es eliminado. Temp. Directorio donde se albergan los archivos que contienen los datos de las descargas actuales. Una vez el archivo se ha descargado completamente, su correspondiente archivo temporal es eliminado. 5.2 ARCHIVOS DE LA APLICACIÓN Los archivos que maneja la aplicación son lo que se detallan a continuación. Comments.dat. Archivo que contiene la evaluación y los comentarios que el usuario realiza sobre la calificación de un determinado archivo. Downloads.dat. Archivo que contiene información relativa de los archivos que se están descargando, como el fichero temporal asociado a la descarga, el nombre, la extensión, el tamaño y el valor de la función hash. Hashes.dat. Ya que el cálculo del valor de la función hash de un archivo, tiene un coste computacional bastante alto, en este archivo se almacenan estos valores. Servers.dat. Archivo que contiene direcciones IP y puertos de los servidores que se conectan a la red P2P. N.temp. Archivo que contienen los datos de una de las descargas actuales. El nombre del archivo, N, es un valor entero asignado por el gestor de transferencias. 109 Diseño e implementación de un protocolo peer-to-peer 6. INCIDENCIAS MÁS FRECUENTES La resolución adecuada para la ejecución del cliente es 1152 por 864 píxeles. Si al ejecutar la aplicación no se ven todos los componentes o se ve partes de éstos, es que la resolución actual no es la indicada anteriormente. Para solucionar el problema, cambiar la resolución de la pantalla a 1152 por 864 píxeles o en su defecto a la más aproximada. El proceso de conexión del cliente al servidor de la red P2P, es un proceso largo, por lo que tiempo que transcurre desde que se inicia la conexión hasta que el cliente se conecta, puede ser considerable. Si después de unos minutos el cliente no se ha conectado a la red, comprobar la conexión a Internet, ya que el problema es de la conexión y no del cliente. En caso de tener instalado en el sistema un firewall, aplicar las políticas de seguridad adecuadas para permitir la ejecución de la aplicación cliente. La previsualización de los archivos que se encuentran en estado de descarga, dependen del reproductor multimedia que se tenga instalado en el sistema. Si al previsualizar un archivo de video o música, no se ve la imagen o no se escucha sonido alguno, es por la falta de instalación de algún códec en el sistema. Se recomienda la instalación del reproductor VideoLAN – VLC media player, disponible en la página web http://www.videolan.org/ 7. MENSAJES DE AVISO La aplicación maneja diversos tipos de mensajes de aviso para advertir al usuario de las distintas incidencias que ocurren en tiempo de ejecución por la acción que se ha realizado. A continuación se describe cada unos de estos mensajes de aviso. 7.1 AVISO DE NO CONEXIÓN Este aviso aparece cuando el cliente no se encuentra conectado a la red P2P. Mientras el cliente no se encuentre conectado, no se podrán realizar búsquedas en la red, ni tampoco transferencia alguna. Tampoco se iniciarán las descargas pendientes en el sistema. 110 Diseño e implementación de un protocolo peer-to-peer Para solucionar el problema, pulsar el botón con el icono localizado en la barra de herramientas de la aplicación. Figura 14. 14 Aviso de desconexión del cliente 7.2 AVISO DE NO SELECCIÓN DE ARCHIVO Este aviso aparece cuando el usuario ha ejecutado una acción y no hay ningún archivo seleccionado. Para solucionar el problema, pinchar pinchar el archivo sobre el que se desea ejecutar la acción. Figura 15. 15 Aviso de archivo no seleccionado 7.3 CONFIRMACIÓN DE CIERRE Este aviso aparece cuando el usuario pincha sobre el icono de cierre de la aplicación cliente. Pulsar Yes para cerrar la aplicación o No para continuar con la ejecución. Figura 16. 16 Confirmación de cierre de la aplicación 111 Diseño e implementación de un protocolo peer-to-peer 8. MENSAJES DE ERROR La aplicación maneja diversos tipos de mensajes de error para advertir al usuario de las distintas istintas incidencias que ocurren en tiempo de ejecución por la acción que se ha realizado. A continuación se describe cada unos de estos mensajes de aviso. 8.1 ERROR EN LA CONEXIÓN Este aviso aparece cuando por algún motivo ajeno al cliente, no se ha podido realizar la conexión con el servidor de la red. red Para solucionar el problema, vuelva a intentar la conexión del cliente, pulsando el botón con el icono . Figura 17. 17 Aviso de error en la conexión 8.2 ERROR EN LA BÚSQUEDA DE ARCHIVOS Este aviso aparece cuando por algún motivo ajeno al cliente, no se ha podido obtener las direcciones IP de los clientes disponen de un determinado fichero. fichero Figura 18. 18 Error en la búsqueda de archivos 8.3 ERROR EN LA OBTENCIÓN DE DIRECCIONES IP Este aviso aparece cuando por algún motivo ajeno al cliente, no se ha podido obtener las direcciones IP de los clientes disponen de un determinado fichero. fichero 112 Diseño e implementación de un protocolo peer-to-peer Figura 19. Error en la obtención de direcciones IP 8.4 ERROR DE OBTENCIÓN DE ARCHIVOS LOCALES Este aviso aparece cuando ocurre un error en el cálculo del identificador del archivo, al aplicar el algoritmo SHA1. Figura 20. Aviso de error en la obtención de archivos locales 8.5 ERROR EN LA DESCONEXIÓN Este aviso aparece cuando ocurre algún error por algún motivo ajeno al cliente no se ha podido registrar la desconexión en el servidor. Figura 21. Aviso de error en la obtención de archivos locales 9. GLOSARIO DE TÉRMINOS Red P2P. Conjunto de equipos conectados por medio de un método de transporte de datos en el que se comparten recursos y en el que no están definidos ni clientes ni servidores fijos. 113 Diseño e implementación de un protocolo peer-to-peer JRE. (Java Runtime Environment). Conjunto de utilidades que permiten la ejecución de aplicaciones realizadas bajo el lenguaje de programación Java sobre todas las plataformas soportadas. VideoLAN – VLC media player. Reproductor desarrollado por estudiantes de la escuela École Centrale Paris, distribuido bajo licencia GPL que soporta gran multitud de formatos de audio y video, así como diferentes tipos de archivos. Directorio. Modo de organizar los archivos del disco duro. El directorio más alto se denomina raíz y los que se encuentran dentro de éste, subdirectorios. Función hash. Método de generación de claves que identifican de manera unívoca un archivo. Un hash es el valor obtenido después de haber aplicado la función. Dirección IP. Número binario de 32 bits que identifica de manera inequívoca a una máquina conectada a una red con el objetivo de comunicarse intercambiando paquetes de información. Puerto. Forma genérica de denominar una interfaz por la cual diferentes tipos de datos pueden ser enviados o recibidos. Esta interfaz puede ser física o lógica. Firewall. Sistema que está configurado para controlar el flujo de tráfico entre dos redes, permitiendo o denegando servicios dentro de una red. SHA1. (Secure Hash Algorithm). Algoritmo de función hash diseñado por NIST (National Institute of Standards and Technology) y NSA (National Security Agency) para el uso en comprobaciones de integridad de mensajes que produce un identificador de un archivo de 160 bits. 114 Anexo II Manual de Usuario de la Aplicación Servidor ÍNDICE 1. INTRODUCCIÓN ................................................................................................ 118 1.1. OBJETIVO DEL MANUAL DE USUARIO ........................................................................... 118 1.2. OBJETIVO DE LA APLICACIÓN ........................................................................................ 118 2. ENTORNO DE LA APLICACIÓN ............................................................................ 118 2.1. REQUISITOS HARDWARE ............................................................................................... 118 2.2. REQUISITOS SOFTWARE ................................................................................................ 120 3. BASE DE DATOS ................................................................................................ 120 3.1. DRIVER MYSQL CONNECTOR/J ...................................................................................... 120 3.2. DEFINICIÓN DE TABLAS ................................................................................................. 121 4. INSTALACIÓN DE LA APLICACIÓN ...................................................................... 123 5. ARCHIVO DE REGISTRO DE ERRORES ................................................................. 123 6. ARCHIVOS DE LA APLICACIÓN ........................................................................... 124 7. GLOSARIO DE TÉRMINOS .................................................................................. 124 TABLA DE FIGURAS IDENTIFICADOR Figura 1 Figura 2 Figura 3 Figura 4 DESCRIPCIÓN Requisitos para sistemas Solaris Requisitos para sistemas Windows Requisitos para sistemas Linux Fichero de registro de errores PÁGINA 118 118 119 123 Diseño e implementación de un protocolo peer-to-peer 1. INTRODUCCIÓN 1.1 OBJETIVO DEL MANUAL DE USUARIO El objetivo del presente manual es facilitar al usuario el aprendizaje y uso de la de la aplicación servidor que se ha desarrollado. Contiene descripciones y detalles de todos los componentes de la aplicación, así como las especificaciones de las posibles opciones que se ofrecen. 1.2 OBJETIVO DE LA APLICACIÓN El objetivo de la aplicación servidor es ofrecer una aplicación que gestione las búsquedas que demandan los clientes que se encuentran conectados a él. 2. ENTORNO DE LA APLICACIÓN 2.1 REQUISITOS HARDWARE Para una correcta ejecución de la aplicación, los requisitos hardware son los especificados por Sun Microsystems para el entorno de ejecución de Java 5.0 JRE (Java Runtime Environment). Los requisitos para sistemas Solaris son los que se describen a continuación. PLATAFORMA VERSIÓN Sistema operativo Sistema operativo Solaris AMD64/EM64T Solaris 10 MEMORIA ESPACIO EN DISCO 64 MB Instalación de 32 bits en 53 MB Instalación de 64 bits en 23 MB Figura 1. Requisitos para sistemas Solaris Los requisitos para sistemas Windows son los que se describen a continuación. PLATAFORMA VERSIÓN Intel de 32 bits Windows XP Professional SP1 Windows XP Home Windows 2000 Professional SP3 o posterior Windows 98 2ª edición Windows ME MEMORIA ESPACIO EN DISCO 64 MB 64 MB 64 MB 98 MB 64 MB 64 MB 118 Diseño e implementación de un protocolo peer-to-peer Windows Server 2003 Web 128 MB Edition Windows Server 2003 Standard Edition 128 MB Windows Server 2003 Enterprise Edition 128 MB Windows Server 2003 DataCenter Edition 128 MB AMD Opteron de 32 bits Windows Server 2003, AMD Opteron de 32 bits 128 MB 98 MB AMD Opteron de 64 bits Windows Server 2003 AMD Opteron de 32 bits 128 MB 110 MB Intel de 32 bits 98 MB Figura 2. Requisitos para sistemas Windows Los requisitos para sistemas Linux son los que se describen a continuación. PLATAFORMA VERSIÓN MEMORIA Red Hat 9.0 Red Hat Enterprise Linux AS 3.0 64 MB Arquitectura Intel de 32 bits 64 MB Red Hat Enterprise Linux WS 2.1 64 MB Red Hat Enterprise Linux ES 2.1 64 MB Arquitectura Intel de 32 bits Red Hat Enterprise Linux AS 2.1 SuSE 8.2 SLEC 8 SLES 8 TurboLinux 8.0 ESPACIO EN DISCO 64 MB 58 MB 64 MB 64 MB 64 MB 64 MB Sun Java Desktop System versión 1 64 MB Sun Java Desktop System versión 2 64 MB 58 MB AMD Opteron de 32 bits Red Hat Enterprise Linux AS 3.0 58 MB AMD Opteron de 64 bits SLES 8 Red Hat Enterprise Linux AS 3.0 56 MB SLES 8 Figura 3. Requisitos para sistemas Linux 119 Diseño e implementación de un protocolo peer-to-peer 2.2 REQUISITOS SOFTWARE Para una correcta ejecución de la aplicación, los requisitos software son la instalación del entorno de ejecución de Java 5.0 JRE (Java Runtime Environment) y del gestor de bases de datos relacionales MySQL. 3. BASE DE DATOS 3.1 DRIVER MYSQL CONNECTOR/J A través del driver Connector/J, MySQL proporciona conectividad para aplicaciones cliente desarrolladas en el lenguaje de programación Java. Este driver es del tipo JDBC (Java Database Connectivity) 4, lo que convierte las llamadas JDBC directamente en el protocolo usado por el sistema gestor de bases de datos. Este hecho permite llamadas directas desde la máquina del cliente al servidor del gestor de bases de datos. El uso de este tipo de driver aporta una serie de ventajas como las que se describen a continuación Independencia de la plataforma. Al utilizar un driver 100% Java, se consigue una independencia de la plataforma utilizada. Rapidez. Ya que no es necesario ningún tipo de traducción al lenguaje soportado por el sistema gestor de bases de datos, la ejecución de las sentencias es más rápida. Facilidad de despliegue. Ya que no se utilizan librerías adicionales ni se requiere la instalación de software intermediario, el despliegue es mucho más sencillo. El driver tipo 4, también denominado native-protocol all-Java, no requiere instalación en los clientes y es suministrado por la aplicación en el archivo mysqlconnector-java-5.1.7-bin.jar. Para más información visitar la página web http://dev.mysql.com/downloads /connector/j/5.1.html 120 Diseño e implementación de un protocolo peer-to-peer 3.2 DEFINICIÓN DE TABLAS A continuación se detallan las tablas y relaciones que componen la base de datos de la aplicación. TABLA EXTENSIONS. - Descripción: contiene las extensiones de los archivos. - Relación con: ninguna tabla. - Sentencia de creación: CREATE TABLE DELPHIC.EXTENSIONS( EXTENSION VARCHAR(6) NOT NULL, TYPE VARCHAR(8) NOT NULL, PRIMARY KEY(EXTENSION) )ENGINE=INNODB DEFAULT CHARSET=latin1; EXTENSIONS PK EXTENSION: varchar(6) TYPE: varchar(8) TABLA SHARES. - Descripción: contiene los archivos de los usuarios conectados a la red. - Relación con: ninguna tabla. - Sentencia de creación: CREATE TABLE DELPHIC.SHARES( NAME VARCHAR(256) NOT NULL, SIZE BIGINT NOT NULL, HASH CHAR(40) NOT NULL, EXTENSION VARCHAR(6) NOT NULL, COUNTER INT NOT NULL DEFAULT 0, PRIMARY KEY(NAME,HASH) )ENGINE=INNODB DEFAULT CHARSET=latin1; 121 Diseño e implementación de un protocolo peer-to-peer TABLA CLIENTS. - Descripción: contiene la información de los clientes conectados a la red. - Relación con: COMMENTS. - Sentencia de creación: CREATE TABLE DELPHIC.CLIENTS( IP VARCHAR(15) NOT NULL, HASH CHAR(40) NOT NULL, NAME VARCHAR(256) NOT NULL, PRIMARY KEY(IP,HASH) )ENGINE=INNODB DEFAULT CHARSET=latin1; TABLA COMMENTS. - Descripción: contiene los comentarios de los usuarios conectados a la red. - Relación con: CLIENTS. - Sentencia de creación: CREATE TABLE DELPHIC.COMMENTS( NCOMMENT INT NOT NULL AUTO_INCREMENT, CLIENTIP VARCHAR(15) NOT NULL, HASH CHAR(40) NOT NULL, COMMENT VARCHAR(120), EVALUATION TINYINT, PRIMARY KEY(NCOMMENT), INDEX (CLIENTIP,HASH), FOREIGN KEY(CLIENTIP,HASH) REFERENCES DELPHIC.CLIENTS(IP,HASH) ON DELETE CASCADE)ENGINE=INNODB DEFAULT CHARSET=latin1; COMMENTS PK NCOMMENT: int FK1,I1 FK1,I1 CLIENTIP: varchar(15) HASH: char(40) COMMENT: varchar(120) EVALUATION: tinyint 122 Diseño e implementación de un protocolo peer-to-peer 4. INSTALACIÓN DE LA APLICACIÓN El archivo de instalación se distribuye con la extensión jar. Si el sistema operativo instalado reconoce esta extensión, pinchar repetidamente sobre el icono del archivo para su ejecución. En caso de que el sistema operativo no reconozca este tipo de extensión, será necesario asociar la extensión jar con el programa java. 5. ARCHIVO DE REGISTRO DE ERRORES Para la gestión y el control de errores por parte de los administradores del servidor, la aplicación dispone de un archivo de registro en el que se almacenan los errores que se producen durante el proceso de registro de los clientes que se conectan a él y durante el proceso de las búsquedas, tanto en la base de datos local como en la red IP multicast. La estructura de cada uno de los registros de error es la que se muestra a continuación. <DÍA_DE_LA_SEMANA,MES,DÍA,HORA,AÑO> Descripción del error <DIRECCIÓN_IP_CLIENTE>. Figura 4. Fichero de registro de errores 123 Diseño e implementación de un protocolo peer-to-peer 6. ARCHIVOS DE LA APLICACIÓN Los diferentes archivos que maneja la aplicación son lo que se detallan a continuación. Delphic.sql. Archivo que contiene las sentencias DDL (Data Definition Language) para la creación de las base de datos y las sentencias DML (Data Manipulation Language) para la inserción de los datos. Mysql-connector-java-5.1.7-bin.jar. Archivo que contiene el driver del sistema gestor de bases de datos, suministrado por MysqL AB. Log.log. Archivo que contiene los errores que se producen durante el proceso de registro de los clientes y durante el proceso de las búsquedas. 7. GLOSARIO DE TÉRMINOS JRE. (Java Runtime Environment). Conjunto de utilidades que permiten la ejecución de aplicaciones realizadas bajo el lenguaje de programación Java sobre todas las plataformas soportadas. Sistema gestor de bases de datos. Conjunto de utilidades que sirven de interfaz entre la base de datos y las aplicaciones y el usuario y que sirven para definir, construir y manipular los datos almacenados. Driver. Conjunto de utilidades que permiten la comunicación entre la aplicación y el sistema gestor de base de datos. Connector/J. Driver implementado por MySQL AB que proporciona conectividad a aplicaciones desarrolladas en el lenguaje de programación Java y el sistema gestor de bases de datos MySQL. JDBC. (Java Database Connectivity). Conjunto de clases e interfaces que utilizadas para desarrollar aplicaciones Java de acceso a bases de datos que permiten que la aplicación sea independiente del sistema gestor de base de datos. JDBC está basado en X/Open SQL CLI. 124 Diseño e implementación de un protocolo peer-to-peer DDL. (Data Definition Language). Lenguaje suministrado por el sistema gestor de bases de datos que permite realizar tareas de definición de estructuras y objetos en la base de datos. DML. (Data Manipulation Language). Lenguaje suministrado por el sistema gestor de bases de datos que permite realizar tareas de consulta y manipulación de datos. 125