Desarrollo De Una Aplicación Bittorrent (En Pharo-Smalltalk)
Total Page:16
File Type:pdf, Size:1020Kb
Desarrollo de una aplicación BitTorrent (en Pharo-Smalltalk) Trabajo Final de Grado David Gracia Celemendi Director: Jordi Delgado Pin Departamento de Ciencias de la Computación (CS) Fecha de defensa: octubre de 2015 Titulación: Grado en Ingeniería Informática Especialidad: Computación Facultad de Informática de Barcelona (FIB) página en blanco 1 Resumen Desde principios del 2000, el uso de redes peer-to-peer ha experimentado un gran crecimiento. Gran parte del tráfico de Internet lo generan las apli- caciones BitTorrent. BitTorrent especifica un protocolo para el intercambio de ficheros usando un modelo peer-to-peer que se caracteriza por su gran escalabilidad y robustez. Este proyecto consiste en el desarrollo de una apli- cación BitTorrent desde cero con el sistema Pharo-Smalltalk. Primero se hace un repaso a la historia del intercambio de ficheros desde sus inicios hasta la actualidad. Después se comparan las redes cliente-servidor con las redes peer-to-peer, y se distingue dentro de éstas últimas entre redes estruc- turadas y redes no estructuradas. Se da una explicación del funcionamiento de BitTorrent y, por último, se profundiza en el diseño y la implementación de la aplicación. Abstract Since 2000 peer-to-peer networks use has increased very fast. Most Internet traffic is generated by BitTorrent applications. BitTorrent specify a file sharing protocol over peer-to-peer model whose strength is scalability and robustness. This project is about developing a BitTorrent application from scratch with Pharo-Smalltalk system. First of all, a file sharing history review is done from beginning up to now. Next, client-server and peer- to-peer models are compared, and peer-to-peer networks are classified in unstructured and structured. A brief summary of BitTorrent operation is done and, at the end, report go into detail about design and implementation of the application. Keywords. peer-to-peer, p2p, bittorrent, swarming, smalltalk, pharo. Agradecimientos Gracias a Jordi Delgado por su ayuda durante el desarrollo del proyecto y en la elabora- ción de la memoria. 2 Índice 1. Introducción 7 1.1. Formulación del problema . .7 1.2. Actores implicados . .8 1.3. Objetivos generales . .8 1.4. Objetivos técnicos . .8 1.5. Sobre el proyecto y el formato de la memoria . .9 2. Contexto 10 2.1. Redes peer-to-peer ........................... 10 2.1.1. Descubrimiento de recursos . 12 2.1.2. Aplicaciones . 14 2.2. Historia del intercambio de ficheros . 15 2.3. BitTorrent . 19 2.3.1. Funcionamiento . 19 2.3.2. Implementaciones existentes y últimos avances . 21 3. Metodología 22 3.1. Seguimiento . 22 3.2. Estilo de programación . 23 3.3. Validación del software ......................... 23 4. Visión global de la aplicación 23 5. Diseño e implementación 26 5.1. Bencoding . 26 5.2. Los metadatos . 28 5.3. Acceso físico a los torrents ....................... 29 5.4. Los nodos de la red . 31 5.5. Descubrimiento de peers . 31 5.5.1. Tracker HTTP . 31 5.5.2. Tracker UDP . 34 5.5.3. La clase BtMultitracker ................... 40 5.6. Control de las piezas . 41 5.7. Comunicación peer-to-peer ....................... 42 5.7.1. Mensajes . 42 5.7.2. Sistema de colas . 46 5.7.3. La clase BtRemotePeer ..................... 47 3 5.8. Piezas temporales . 49 5.9. Algoritmo de bloqueo . 50 5.10. Algoritmo de selección de piezas . 51 5.10.1. Rarest first . 51 5.10.2. Random . 51 5.10.3. Most common first . 52 5.10.4. Lower first . 52 5.11. End Game . 52 5.12. Conteo de las piezas en la red . 52 5.13. La clase BtRemotePeerCollection .................. 53 5.14. La clase BtTorrent ........................... 55 5.14.1. Proceso: Validación incial . 56 5.14.2. Proceso: Tracker requesting . 56 5.14.3. Proceso: Choking . 57 5.14.4. Proceso: Optimistic Choking . 58 5.14.5. Proceso: Tratamiento de mensajes entrantes . 59 5.14.6. Proceso: Petición de bloques . 60 5.15. La clase BtLocalPeer ......................... 62 5.15.1. Proceso: Escucha de puerto . 63 5.15.2. Proceso: Gestión de torrents .................. 64 5.15.3. Justificación de la necesidad de BtLocalPeer ......... 65 6. Planificación 66 6.1. Planificación inicial . 66 6.2. Modificaciones a la planificación inicial . 69 7. Presupuesto y sostenibilidad 69 7.1. Identificación de recursos y estimación de costes . 69 7.2. Viabilidad económica . 70 7.3. Impacto social y ambiental . 70 8. Conclusiones 71 9. Posibles ampliaciones 71 Adenda 73 A. Manual de usuario 73 A.1. Instalación de Pharo . 73 A.2. Ejecución de Pharo . 73 4 A.3. Importación de la librería . 74 A.4. Pruebas . 76 A.4.1. Pruebas unitarias . 76 A.4.2. Prueba global . 77 Acrónimos 80 Glosario 81 Referencias 88 5 Índice de figuras 1. BitTorrent. Proceso que siguen las propuestas de ampliación . .9 2. Comparación entre las arquitecturas cliente-servidor y peer-to-peer . 11 3. En Freenet, backtracking usado para encontrar un recurso . 12 4. Comparación topológica. Red peer-to-peer no estructurada. Red peer-to-peer estructurada . 13 5. Amiexpress . 15 6. Jerarquía de warez scene ........................ 16 7. Usenet . 17 8. Funcionamiento de una red BitTorrent . 19 9. Perspectiva del peer local en el enjambre . 20 10. Diagrama de clases simplificado de la aplicación . 24 11. Ejemplo de colección de ficheros de un torrent............. 30 12. Jerarquía de clases de los nodos de la red . 32 13. Jerarquía de clases de los paquetes UDP . 36 14. Diagrama de Gantt del proyecto . 68 15. Selección de imagen en Pharo (Linux Mint) . 74 16. Menú global de Pharo . 75 17. Añadir un repositorio HTTP público a Pharo . 75 18. Exploración del paquete BitTalk en Pharo . 76 19. Captura de imágen de Pharo mostrando cómo ejecutar todas las pruebas unitarias de una vez . 77 20. Ejecución del código de la prueba global . 78 Índice de tablas 1. Características. Redes no estructuradas y estructuradas . 14 2. Planificación de las tareas . 67 3. Presupuesto . 70 6 1. Introducción 1.1. Formulación del problema Este Trabajo de Fin de Grado (TFG) consiste en el desarrollo de una aplicación BitTorrent1 en el sistema Pharo-Smalltalk. BitTorrent es un protocolo diseñado para el intercambio de ficheros sobre una red peer-to-peer (P2P) que se usa para distribuir gran cantidad de información por Internet. Smalltalk es un estándar, públicamente disponible desde 1980[4], que define las especificaciones de un sistema computacional que dispone de una biblioteca (generalmente grande) de objetos que viven dentro del sistema y se comunican mediante mensajes; un fichero llamado «imagen» que contiene el estado del sistema; un lenguaje de programación (también llamado Smalltalk) completamente orientado a objetos, con tipado dinámico y reflexivo; un entorno de desarrollo, compilación y ejecución; y una máquina virtual que se encarga de interpretar todos los mensajes y actualizar el estado del sistema y los objetos. Se puede considerar a un sistema Smalltalk como un mundo virtual donde existen objetos «vivos» que se comunican. Estos objetos pueden ser creados, modificados y eliminados sin necesidad de detener o reiniciar el sistema. Una implementación de Smalltalk es cualquier sistema que cumpla las especi- ficaciones del estándar. La implementación que se va a usar en este proyecto es Pharo (versión 3.0). 1La expresión común para referirse a este tipo de programas es «cliente BitTorrent», pero es incorrecta porque en estas redes no existen los roles exclusivos de cliente y servidor: solo existen peers. En este documento se reserva el uso de «peer» para el concepto abstracto de nodo participante en la red, y el de «aplicación BitTorrent» para el programa que ejecutan los peers 7 1.2. Actores implicados Las siguientes personas están implicadas o se ven afectadas por el desarrollo del proyecto: Autor del proyecto: David Gracia Celemendi. Director del proyecto: Jordi Delgado Pin. Miembro del Consejo de Di- rección del European Smalltalk User Group (ESUG) y Coordinador de l’Associació Smalltalk.cat. Se encargará de supervisar los aspectos técnicos del proyecto. Comunidad de usuarios y desarrolladores de Pharo-Smalltalk. Se beneficiarán de la primera librería que implementa BitTorrent en esta co- munidad. La librería supondrá una base para desarrollar otros proyectos relacionados con BitTorrent y redes P2P. 1.3. Objetivos generales Los objetivos principales del proyecto son: Diseñar e implementar el conjunto de clases que representen la naturaleza y el funcionamiento de las redes BitTorrent. El diseño y la implementación deben ser fácilmente comprensibles y amplia- bles por cualquier desarrollador de Pharo-Smalltalk que conozca el funcio- namiento de BitTorrent. 1.4. Objetivos técnicos BitTorrent está compuesto por una serie de documentos llamados BitTorrent En- hancement Proposal (BEP) que detallan el funcionamiento del protocolo. Un BEP es una propuesta de ampliación de alguna parte de BitTorrent, que especifica una nueva funcionalidad o comportamiento de la red o de los actores implicados. Todos los BEP pueden encontrarse en http://www.bittorrent.org/beps/bep_0000. html. Estas propuestas están sujetas a un proceso de ampliación que establece que una propuesta debe pasar por unas fases antes de ser considerada definitiva por el Benevolent Dictator for Life (BDFL) y creador de BitTorrent, Bram Cohen. 8 Figura 1: Proceso que siguen las propuestas de ampliación Existen varios BEP utilizados por muchas aplicaciones BitTorrent que todavía se encuentran en fase de borrador (Draft) o solo han sido aceptados (Accepted) sin llegar a ser definitivos (Final). Incluso hay otros que, a pesar de no tener siquiera borrador, son utilizados en las aplicaciones BitTorrent más populares. Los objetivos técnicos del proyecto son implementar los siguientes BEP: BEP3 Núcleo de BitTorrent, en fase definitiva. BEP5 Implementa distributed hash table (DHT) para aumentar la descentraliza- ción de BitTorrent, en fase de borrador. 1.5. Sobre el proyecto y el formato de la memoria El desarrollo de la aplicación carece de análisis y especificación de requisitos ya que el protocolo ya está especificado y definido.