Sunteți pe pagina 1din 160

RESUMEN

Las redes de pares comparten recursos como ancho de banda,

memoria y procesamiento para intercambiar archivos, estas redes forman

gran parte del trfico de Internet, en especial el protocolo BitTorrent que

se caracteriza por su gran escalabilidad y robustez. La distribucin de

video es un servicio desafiante, debido a las limitaciones de ancho de

banda y recursos, aunque BitTorrent en su origen no fue pensado para la

distribucin de contenido audiovisual es posible adaptarlo a los

requerimientos presentes en el video. Este proyecto consiste en el diseo

e implementacin de una aplicacin P2P basado en el protocolo

BitTorrent para la descarga progresiva de videos, utilizando una

infraestructura de red para dar apoyo al intercambio de material

audiovisual en salas de clases con un elevado nmero de participantes.

Primero se hace una introduccin a las redes P2P, con nfasis en

el protocolo BitTorrent, se presenta la motivacin, los objetivos y la

motivacin del trabajo. Despus se expone los protocolos relevantes para

el trabajo, se realiza una clasificacin de las redes P2P, libreras,

escenarios y decisiones. Luego el diseo e implementacin de la

aplicacin y pruebas. Por ltimo conclusiones y trabajo futuro.

Palabras claves: Redes de pares (P2P); BitTorrent; Descarga progresiva

de video; Enjambre.

4
CONTENIDO

NDICE DE FIGURAS..................................................................................7
NDICE DE TABLAS....................................................................................8
I. INTRODUCCIN......................................................................................9
1.1 ASPECTOS TERICOS..........................................................................9
1.2 MOTIVACIN......................................................................................19
1.3 OBJETIVOS DE LA MEMORIA...............................................................21
1.4 CONTRIBUCIN..................................................................................22
1.5 ORGANIZACIN..................................................................................23
1.6 COMENTARIOS FINALES.....................................................................24
II. MARCO TERICO................................................................................26
2.1 INTRODUCCIN..................................................................................26
2.2 PROTOCOLOS DE RELEVANCIA...........................................................35
2.2.1 PROTOCOLOS TCP/IP...................................................................35
2.3 ALTERNATIVAS...................................................................................60
2.4 RESUMEN DE LO SELECCIONADO........................................................67
2.5 ESCENARIO.......................................................................................68
2.6 IDEA................................................................................................. 69
2.7 DECISIONES......................................................................................68
2.8 CONCLUSIN.....................................................................................71
III. ANLISIS Y DISEO...........................................................................73
3.1 ARQUITECTURA DEL SISTEMA.............................................................74
3.2 CASOS DE USO..................................................................................78
3.3 DIAGRAMA DE SECUENCIA.................................................................84
3.4 DISEO DINMICO...........................................................................109
3.5 RESUMEN.......................................................................................112
3.6 COMENTARIOS FINALES....................................................................113
IV. IMPLEMENTACIN Y PRUEBAS......................................................114
4.1 INTRODUCCIN................................................................................114
4.2 ESCENARIO DE APLICACIN..............................................................115
4.3 PRUEBAS DE EFECTIVIDAD...............................................................118
4.4 ANLISIS DE LA PRUEBAS.................................................................136
4.5 COMENTARIOS FINALES....................................................................136
V. CONCLUSIONES Y TRABAJOS FUTUROS.....................................148
5.1. CONCLUSIONES..............................................................................148
5.2. TRABAJO FUTURO..........................................................................148
VI. BIBLIOGRAFA Y REFERENCIAS....................................................148
ANEXOS.................................................................................................155
ACRNIMOS..........................................................................................155
LISTA DE TRMINOS...............................................................................156
INSTALACIN APLICACIN.......................................................................157
INSTALACIN TRACKER LOCAL................................................................160
ENLACES FUNCIONAMIENTO BTS:..........................................................163
Cdigo fuente aplicacin:.....................................................................163
NDICE DE FIGURAS

FIGURA 1.1: DISTRIBUCIN VS TIEMPO EN LA UTILIZACIN DE SISTEMAS P2P Y CLIENTE


SERVIDOR ....................................................................................................................... 12
FIGURA 1.2: DISTRIBUCIN DE ARCHIVOS CON BITTORRENT ............................................. 12
FIGURA 1.3: ARQUITECTURA DE LA RED BITTORRENT ....................................................... 15
FIGURA 2.1: CAPA P2P SOBRE LA RED FSICA................................................................... 32
FIGURA 2.2: ENJAMBRE DE PARES UTILIZANDO UN TRACKER ............................................ 38
FIGURA 2.3: TRACKER EN SUS 2 PARTES (SERVIDOR W EB Y ANUNCIADOR) ....................... 46
FIGURA 2.4: ENVO DEL MENSAJE HANDSHAKE ................................................................ 47
FIGURA 2.5: ENVO DE MENSAJE CHOKE .......................................................................... 49
FIGURA 2.6: ENVO DEL MENSAJE HAVE ........................................................................... 50
FIGURA 2.7: ENVO DE MENSAJE BITFIELD ....................................................................... 51
FIGURA 2.8: ENVO DE MENSAJE REQUEST ...................................................................... 52
FIGURA 2.9: ENVO DE MENSAJE PIECE ........................................................................... 52
FIGURA 3.1: DIAGRAMA DE LA ARQUITECTURA DEL SISTEMA ............................................. 74
FIGURA 3.2: DIAGRAMA DE HARDWARE DEL SISTEMA ........................................................ 75
FIGURA 3.3: CASOS DE USO DEL SISTEMA ........................................................................ 78
FIGURA 3.4: DIAGRAMA DE SECUENCIA SUBIR ARCHIVO TORRENT ..................................... 84
FIGURA 3.5: DIAGRAMA DE SECUENCIA GENERAR ARCHIVO TORRENT ................................ 86
FIGURA 3.6: DIAGRAMA DE SECUENCIA VER METADATOS TORRENT ................................... 87
FIGURA 3.7: DIAGRAMA DE SECUENCIA COMPARTIR PIEZAS .............................................. 89
FIGURA 3.8: DIAGRAMA DE UNA COMUNICACIN ENTRE SEED Y UN LEECHER ..................... 91
FIGURA 3.9: DIAGRAMA DE LA COMUNICACIN ENTRE LOS PARES ..................................... 93
FIGURA 3.10: DIAGRAMA DE CLASES ............................................................................... 94
FIGURA 3.11: ARCHIVO BTSTREAMINI.H .......................................................................... 99
FIGURA 3.12: CDIGO DE VERMETADATA.CPP ............................................................... 101
FIGURA 3.13: CDIGO DE GENERARTORRENT.CPP ........................................................ 103
FIGURA 3.14: CDIGO ARCHIVO COMPARTIRPIEZAS.CPP ............................................... 108
FIGURA 3.15: DIAGRAMA SISTEMA BT STREAMING ......................................................... 109
FIGURA 3.16: DIAGRAMA DE COMUNICACIN SUBSISTEMA BTSTREAM ............................ 110
FIGURA 3.17: DIAGRAMA DE COMUNICACIN GENERAR TORRENT ................................... 111
FIGURA 3.18: DIAGRAMA DE COMUNICACIN VER METADATA .......................................... 111
FIGURA 3.19: DIAGRAMA COMUNICACIN COMPARTIR PIEZAS ......................................... 112
FIGURA 4.1: GRFICO DE DEPENDENCIA DE BTS ........................................................... 115
FIGURA 4.2: ROUTER Y SWITCH DE LA RED P2P - BTS ................................................... 115
FIGURA 4.3: INICIO DE LA APLICACIN BTSTREAM .......................................................... 118
FIGURA 4.4: OPCIN GENERAR TORRENT A PARTIR DE UN ARCHIVO ................................ 121
FIGURA 4.5: CAMPOS DEL ARCHIVO TORRENT A GENERAR .............................................. 121
FIGURA 4.6: RESULTADO DE GENERAR EL ARCHIVO TORRENT ......................................... 122
FIGURA 4.7: DECODIFICACIN DEL ARCHIVO TORRENT LIBTORRENT-VIDEO1.TORRENT ..... 123
FIGURA 4.8: PARTE 2 DE LA DECODIFICACIN DEL ARCHIVO DE VIDEO ............................. 123
FIGURA 4.9: INTERFAZ DEL SERVIDOR TRACKER LOCAL RIVETTRACKER .......................... 124
FIGURA 4.10: LOGIN DE USUARIO EN EL TRACKER LOCAL ................................................ 125
FIGURA 4.11: AADIR TORRENT A LA BASE DE DATOS DEL TRACKER ................................ 126
FIGURA 4.12: INFORMACIN DE ESTADO EN LA COMPARTICIN DE ARCHIVOS ................... 127
FIGURA 4.13: OPCIONES DE BTSTREAM ........................................................................ 128
FIGURA 4.14: DESCARGA DE VIDEO AL 9.97% Y EJECUCIN DE NLOAD ........................... 130
FIGURA 4.15: DESCARGA DE VIDEO AL 24.98% ............................................................. 130
FIGURA 4.16: DESCARGA DE VIDEO AL 74.13% ............................................................. 131
FIGURA 4.17: DESCARGA COMPLETA DE VIDEO EVOLUTIONOFLIBTORRENT.MP4 .............. 131
FIGURA 4.18: REPRODUCCIN DE VIDEO EVOLUTIONOFLIBTORRENT.MP4 ....................... 132
FIGURA 4.19: ESTADSTICAS DEL TRACKER Y LISTA DE TORRENTS ................................... 133

7
FIGURA 4.20: HOST CONECTADOS A LA RED LOCAL LABORATORIO AZUFRE ..................... 133
FIGURA 4.21: RESULTADO DESCARGA DE UN CLIENTE FTP ............................................ 143
FIGURA 6.1: OPCIN CREAR CUENTA Y BASE DE DATOS EN RIVETTRACKER ..................... 161
FIGURA 6.2: CREACIN DEL ARCHIVO DE CONFIGURACIN DE RIVETTRACKER ................. 162
FIGURA 6.3: MENSAJE DE RIVETTRACKER TRAS COMPLETAR LA CONFIGURACIN ............ 163

NDICE DE TABLAS

TABLA 2.1: TABLA DE LIBRERAS PARA EL PROTOCOLO BITTORRENT ................................. 60


TABLA 3.1: CASO DE USO REPRODUCIR VIDEO ................................................................. 79
TABLA 3.2: CASO DE USO GENERAR ARCHIVO TORRENT ................................................... 80
TABLA 3.3: CASO DE USO COMPARTIR PIEZAS .................................................................. 80
TABLA 3.4: CASO DE USO CONEXIN TRACKER ................................................................ 81
TABLA 3.5: CASO DE USO SUBIR TORRENT ...................................................................... 82
TABLA 3.6: CASO DE USO DESCARGAR ARCHIVO TORRENT ............................................... 83
TABLA 3.7: CASO DE USO VER METADATA ........................................................................ 83
TABLA 4.1: RESULTADOS PRUEBA 1 VIDEO EVOLUTIONOFLIBTORRENT.MP4 ..................... 136
TABLA 4.2: RESULTADOS PRUEBA 1 VIDEO RASPBERRYPIROBOT.MP4 ............................ 136
TABLA 4.3: RESULTADOS PRUEBA 1 VIDEO RASPBERRYPI-RETROPIE .............................. 137
TABLA 4.4: RESULTADOS PRUEBA 1 VIDEO THE.W ALKING.DEAD.S07E08 ....................... 137
TABLA 4.5: RESULTADOS PRUEBA 2 VIDEO EVOLUTIONOFLIBTORRENT.MP4 ..................... 138
TABLA 4.6: RESULTADOS PRUEBA 2 VIDEO RASPBERRYPIROBOT.MP4 ............................ 138
TABLA 4.7: RESULTADOS PRUEBA 2 VIDEO RASPBERRYPI-RETROPIE .............................. 138
TABLA 4.8: RESULTADOS PRUEBA 2 VIDEO THE.W ALKING.DEAD.S07E08 ....................... 139
TABLA 4.9: RESULTADOS PRUEBA 3 VIDEO EVOLUTIONOFLIBTORRENT.MP4 ..................... 139
TABLA 4.10: RESULTADOS PRUEBA 3 VIDEO RASPBERRYPIROBOT.MP4 .......................... 140
TABLA 4.11: RESULTADOS PRUEBA 3 VIDEO RASPBERRYPI-RETROPIE ............................ 140
TABLA 4.12: RESULTADOS PRUEBA 3 VIDEO THE.W ALKING.DEAD.S07E08 ..................... 140
TABLA 4.13: RESULTADOS PRUEBA 4 VIDEO EVOLUTIONOFLIBTORRENT.MP4 ................... 141
TABLA 4.14: RESULTADOS PRUEBA 4 VIDEO RASPBERRYPIROBOT.MP4 .......................... 142
TABLA 4.15: RESULTADOS PRUEBA 4 VIDEO RASPBERRYPI-RETROPIE ............................ 142
TABLA 4.16: RESULTADOS PRUEBA 4 VIDEO GAME.OF.THRONES.S06E09 ...................... 142
TABLA 4.17: RESULTADOS PRUEBA 4 VIDEO THE.W ALKING.DEAD.S07E08 ..................... 143
TABLA 4.18: RESULTADOS PRUEBA 4 CON 1 SERVIDOR Y 4 CLIENTES FTP ...................... 144
TABLA 4.19: RESULTADOS PRUEBA 4 CON 2 SEED Y 3 LEECHERS ................................... 144
TABLA 4.20: RESULTADOS PRUEBA 4 CON 2 SEED Y 4 LEECHERS ................................... 145

8
I. INTRODUCCIN

Este captulo trata sobre los aspectos tericos de las redes de

pares, se explica la idea principal de este modelo, se aborda el protocolo

BitTorrent mostrando sus caractersticas, componentes y terminologa. Se

relaciona una descarga BitTorrent con la capa OSI, se expone la

motivacin del trabajo, los objetivos a cumplir, las contribuciones que se

obtiene al realizarlo. Finalmente la organizacin de la memoria y

comentarios finales.

1.1 Aspectos tericos

Introduccin a las redes P2P

Los sistemas P2P al contrario del modelo Cliente-Servidor,

construye arquitecturas en las que todos los usuarios de la red

denominados pares implementan funciones de cliente y servidor, es decir

los pares ofrecen recursos disponibles a otros pares. Esta definicin

corresponde a la concepcin tradicional, donde los computadores de

usuario final en un ambiente de rea local, forman un grupo de trabajo y

cada usuario permite que otros usuarios accedan a sus archivos o

impresoras locales.

9
La idea bsica es que los pares ofrecen sus recursos disponibles a

otros pares, a cambio de esto obtienen recursos. Este hecho hace que los

recursos disponibles en la red aumenten con los pares, convirtindolos en

un sistema escalable y dado que no existen elementos centrales como un

servidor se mitiga el problema del nico punto de fallo, sin embargo,

algunas redes tienen caractersticas de tipo hbrido, por lo que cuentan

con un elemento central llamado tracker.

La red de pares es heterognea, ya que la conforman nodos con

diferentes caractersticas de hardware y software, adems de un lapso de

tiempo distinto de conectividad. Todo computador tiene la capacidad de

correr una aplicacin P2P en Internet.

Debido a que en este modelo no existe la administracin central,

los pares en la red pueden conectarse y desconectarse de manera

variable, a esta particularidad se denomina churn (ver Lista de trminos),

sin embargo, las redes de pares poseen la habilidad de adaptarse a estos

cambios en la conectividad. En cuanto a la seguridad es una

caracterstica poco implementada en las redes P2P. Aunque existen

redes con comunicaciones seguras mediante el cifrado de los datos. Por

otra parte existen los problemas de infeccin con virus, gusanos y

10
spywares que las aplicaciones controlan evitando almacenar las partes

descargadas en el disco.

Una desventaja en este modelo es la saturacin de un par al estar

conectado con una cantidad elevada de otros pares a la vez. Por ello se

limita la velocidad de descarga, velocidad de subida y el nmero de pares

con los que establecer conexin. En este caso las redes P2P

implementan algoritmos que limitan la cantidad de pares a la que un par

est conectado.

Sistemas Cliente/Servidor frente a sistemas P2P

En los sistemas C/S al existir un servidor dedicado, en este recae

todo el peso de la comunicacin, en el caso de aumentar la cantidad de

clientes es posible llegar a la saturacin. Los sistemas P2P descentralizan

la carga del servidor hacia los pares de la red, de esta manera la carga

se reparte entre cada uno de los nodos de la red. Por otro lado los

sistemas C/S ofrecen una mayor capacidad de trabajo en comparacin

con una estacin de trabajo. La Figura 1.1, da cuenta de la ganancia en

tiempo al distribuir un archivo va P2P vs Cliente-Servidor, donde la

manera tradicional a medida que aumentan los clientes al servidor su

respuesta es lineal, en tanto al no existir un servidor nico a medida que

11
aumentan los clientes, estos se convierten en pares, por lo que aumentan

los proveedores de servicios y disminuye el tiempo de distribucin.

Figura 1.1: Distribucin vs tiempo en la utilizacin de sistemas P2P y cliente


servidor [Kurose et al. 2012]

Figura 1.2: Distribucin de archivos con BitTorrent [Kurose et al 2012]

En la Figura 1.2 se observa como operar el sistema en el estado

estacionario, en donde al ingresar un nuevo par, este obtiene del servidor

las direcciones de los otros pares que tienen el archivo que solicita, de los

12
cuales recibir pedazos de archivos hasta que logre visualizarlo completo,

posteriormente este ingresa a la lista de tracker y pasar a ser parte de la

distribucin, por lo que estar incluido en la respuesta del tracker hacia

los nuevos pares que soliciten ser parte del enjambre para descargar el

archivo.

Introduccin al protocolo BitTorrent

El protocolo BitTorrent fue desarrollado por el programador Bram

Cohen. Tiene un fuerte sustento con la teora de juegos y de la

informacin. La clave de su escalabilidad es la cooperacin basada en

incentivos. Consiste bsicamente en instalar un software que implementa

el protocolo BitTorrent, a la mquina que corre este programa se le

denomina par, luego el usuario se encarga de encontrar el contenido que

desea descargar, generalmente en un tracker, desde ah descarga los

metadatos del archivo en un archivo con extensin torrent. Este archivo

se aade a la aplicacin y automticamente comienza su descarga.

En el proceso de descarga el par luego de aadir el archivo torrent

se conecta con el tracker para obtener una lista de otros pares, que se

encuentra descargando el mismo contenido. Obteniendo la primera pieza

ya es posible comenzar a compartir con otros pares hasta completar el

archivo. Para esto el protocolo utiliza distintas estrategias, entre ellas se

13
encuentra tit-for-tat, algoritmo de bloqueo y algoritmo de desbloqueo

optimista.

La estrategia tit-for-tat utilizada por BitTorrent cumple la eficiencia

de pareto, cuya definicin tcnica es la siguiente: sea P un problema de

optimizacin multiobjetivo. Se dice entonces que una solucin S1 es

Pareto-optima cuando no exista otra solucin S2 tal que mejore en un

objetivo sin empeorar al menos uno de los otros, que aplicado al caso de

las redes de pares, tiene como objetivo que todos los pares obtengan el

elemento ms o menos de igual forma y no se aprovechen unos pares

ms que otros (free riders). Para alcanzar este objetivo se usa una

versin del mtodo tit-for-tat usado en la teora de juego (Dilema de los

Prisioneros). Este mtodo consiste en si uno enva datos, el otro enva; y

si no enva, l tampoco enva. Los algoritmos de bloqueo (choking)

realizan esta funcin de una forma muy correcta, ya que un par permite

descarga a los pares que ms informacin le estn enviando a l cada

cierto tiempo buscar nuevos posibles pares a los que enviar datos

mediante el algoritmo de desbloqueo optimista (optimi unchoking).

14
Figura 1.3: Arquitectura de la red BitTorrent
[Elaboracin propia].

Terminologa BitTorrent

Bloque: En el protocolo BitTorrent las piezas estn divididas en sub-

piezas tambin de tamao prefijado, estas sub-piezas recibirn el nombre

de bloques. En el envi de una pieza desde un peer a otro, esta se

realizar bloque a bloque.

Torrent: Archivo con metadatos que indican al cliente de dnde bajar los

archivos.

Aplicacin BitTorrent: Se trata de un software que toma el archivo

.torrent, lee la informacin en ella y comienza la descarga.

15
Par: Es cualquier equipo que participa en la subida y descarga de un

archivo .torrent.

Seed: Es el par que tiene una copia completa del archivo que se

comparte a travs de la red BitTorrent.

Leecher: Es el par que no tiene el archivo completo, pero se ha unido a la

red para descargarlo. Un leecher se convierte en un seed cuando se

descarga el archivo completo y, a continuacin lo comparte a travs de la

red.

Share ratio: Es la relacin de la cantidad de datos que un peer ha subido

dividido por la cantidad de datos que se han descargado para un torrent

en particular (datos subidos/datos descargados). Compartir una

proporcin de 1+ tiene un efecto positivo en la reputacin del par, porque

significa que el peer ha enviado ms datos a otros pares de la que se ha

recibido. Por el contrario, share ratio bajo 1 tiene un efecto negativo.

Swarm: El enjambre es la suma total de todos los leechers y seeders (es

decir, todos los equipos participantes en el proceso de descarga un

torrent determinado.

16
Tracker: Es un servidor que aloja los metadatos, conoce dnde se

encuentran todos los pares relacionados a un torrent determinado y

dnde todos los pares se conectarn para poder encontrar al resto de

usuarios y conocer cuando se conectan nuevos usuarios. En el caso de

que el tracker deje de funcionar, si alguien intenta comenzar una

descarga, no podr conectarse con el enjambre de usuarios. Algunos

trackers que requieren un registro son privados, la mayora son pblicos.

Index: Es una lista para buscar los archivos .torrent, alojados en un sitio

web.

Hit n' Run: Denominacin al par que descarga el archivo y no deja

seedeando al final.

Free riders: Aquellos pares que consumen ms que una parte equitativa

de un recurso, o no afrontan una parte justa del costo de su produccin.

Es posible que un par no est conectado a ningn seed, incluso podra

ocurrir que no hubiera seeds a excepcin del inicio. Se debe tener en

cuenta que cuanto ms ancho de banda se comparte, ms ancho de

banda se recibe lo que es parte de la filosofa de las redes P2P.

17
Capa OSI y BitTorrent

La capa de aplicacin corresponde al programa que utiliza el

protocolo BitTorrent, el cual gestiona los archivos con metadatos para

crear, eliminar y compartir archivos. Esta capa permite interactuar con el

usuario para llevar a cabo distintas actividades.

En la capa de presentacin corresponde a las extensiones de los

archivos que se comparten (mkv, jpg, mp3) en esta capa se comprueba la

coincidencia de las extensiones.

En la capa de sesin corresponde al establecimiento de la

conexin entre el tracker y los pares, para que de esta forma el tracker le

comunique a cada par que lo solicita, la lista de pares que poseen piezas

del archivo que se est descargando.

En la capa de transporte se realiza la comprobacin de errores, lo

que en BitTorrent corresponde a la verificacin de errores de cada una de

las piezas descargadas de otros pares, a cada pieza del archivo se le

aplica el algoritmo de hash seguro SHA-1 para de esta manera comprobar

la integridad de cada pieza descargada, en el caso de coincidir se borra

la pieza y se procede a reiniciar la descarga de la pieza. Algunas

aplicaciones BT utilizan como transporte tanto el protocolo TCP como el

18
UDP, mientras otras aplicaciones utilizan como transporte solo a webrtc,

por ltimo tambin existen las aplicaciones hbridas que usan ambas

alternativas.

En la capa de red se planifica el camino que tomara el paquete por

la red, este camino debe ser el ms eficiente para que el paquete llegue al

nodo destino que realizo la peticin.

En la capa de enlace de datos, los datos provenientes de la capa

de red se le asignan el protocolo BitTorrent, se establece el tipo de red y

la secuencia de paquetes utilizada.

En la capa fsica corresponde al cableado y el hardware para el

envo de los bits de datos entre los nodos de la red.

1.2 Motivacin

Hoy en da la distribucin de video tiene un rol protagnico dentro

del mundo tecnolgico, lo que implica varios problemas, entre los que se

destacan: los problemas de escalabilidad, los problemas de costos y los

problemas de cuello de botella.

19
Las debilidades del modelo C/S son visibles en la distribucin de

contenidos multimedia, este modelo presenta una respuesta

insatisfactoria debido a la congestin del trfico, es decir cuando existe

una gran cantidad de clientes que envan peticiones simultneas al mismo

servidor, lo que provoca que ste se sature creando un cuello de botella.

Por lo que al aumentar el nmero de clientes, ms problemas presenta,

por lo que carece de robustez, escalabilidad y un bajo desempeo con un

nmero de clientes simultneos elevado.

Para hacer frente a estas debilidades nacen las redes P2P, entre

estas redes se destaca BitTorrent que tiene como objetivo optimizar la

propagacin de contenido, debido a este enfoque ha tenido un gran xito

en Internet, por la eficiencia de sus algoritmos.

La motivacin principal es utilizar el protocolo BitTorrent para la

distribucin de contenidos multimedia y observar su comportamiento,

dado su buen desempeo en el intercambio de archivos, es el candidato

ideal para la distribucin de videos, sin embargo, ya que este protocolo no

se pens originalmente para descargar y reproducir un video a la vez, es

necesario adaptarlo para disminuir la latencia en la reproduccin del

video.

20
1.3 Objetivos de la memoria

Objetivo General

Desarrollar un Sistema basado en P2P con el protocolo BitTorrent para el

intercambio de archivos y reproduccin de videos en las salas de clases

de manera asincrnica.

A continuacin se detallan los objetivos especficos del trabajo propuesto.

1. Estudio de aplicaciones P2P, en especial del ambiente

generado por el protocolo BitTorrent.

2. Estudio de la tecnologa Streaming (descarga progresiva).

3. Establecer una Arquitectura de sistema para su

implementacin.

4. Indagar informacin sobre la API de BitTorrent adecuada

para la implementacin del ambiente.

5. Establecer un escenario de uso del ambiente a desarrollar.

6. Caracterizar e implementar Servidores y sistema de

seguimiento del ambiente.

7. Caracterizar e implementar el ambiente de interaccin entre

pares

21
8. Realizar las pruebas necesarias en un escenario de accin.

9. Medir el grado de efectividad de la aplicacin desarrollada.

1.4 Contribucin

En la actualidad no existe una plataforma de intercambio de

archivos para los estudiantes en las sala de clases, por lo que se

pretende responder y aportar a la comunidad estudiantil. Los beneficios

esperados del presente trabajo son proporcionar un modelo que reduzca

los cuellos de botella presentado en otros modelos, as como permitir una

mejora en la utilizacin de los recursos de la red, principalmente por la

omisin de un nico servidor para un nmero elevado de clientes. Otro

beneficio a la vez esperado es tener una plataforma de intercambio de

archivos y videos alternativa a las existentes en la actualidad, de tal forma

que exista una va de comunicacin para que los alumnos compartan

material que no se encuentran en otras plataformas.

Otra contribucin del trabajo es crear una red descentralizada de

material audiovisual acadmico entre los estudiantes, de tal forma que

solo dependa de los propios estudiantes. La red supondr una base para

desarrollar otros proyectos relacionados con BT y P2P.

22
El valor agregado es que al tratarse de una red P2P la informacin

se obtiene de varias fuentes, por lo que se descarga la informacin al

mismo tiempo de las diferentes fuentes, lo que acelera el proceso de

descarga, adems la informacin se divide en pequeas partes en los

diferentes lugares de origen, lo que hace que la informacin pueda ser

transferida a tasas mucho ms altas.

1.5 Organizacin

En el primer captulo se hace una introduccin a las redes p2p,

conceptos y sus aplicaciones con nfasis en el protocolo BitTorrent. Se

presenta la motivacin, los objetivos, contribucin del trabajo y

comentarios finales.

En el segundo captulo trata del marco terico, los protocolos de

relevancia, las especificaciones del protocolo BitTorrent, alternativas

existentes, se describen las libreras seleccionadas, se presenta el

escenario de aplicacin, ideas principales, decisiones y comentarios

finales.

En el tercer captulo, se presenta el anlisis y diseo de la

aplicacin, la arquitectura del sistema, los casos de uso, se muestra el

23
diagrama de comunicacin entre pares, diagrama de secuencia,

colaboracin y finalmente comentarios finales.

A continuacin, en el cuarto captulo, se expone la implementacin

de la aplicacin, el escenario de aplicacin, el anlisis y efectividad de las

pruebas para terminar con comentarios finales.

En el quinto captulo se exponen las conclusiones extradas de la

realizacin del trabajo y se ve los posibles trabajos futuros a implementar.

Finalmente en el sexto captulo se presenta las referencias

bibliogrficas y anexos.

1.6 Comentarios Finales

Las redes de pares cambiaron la forma compartir archivos entre los

usuarios de Internet, las cuales fueron masificando debido a su uso para

intercambiar msica y videos. Esto llevo a las redes P2P a tener

problemas legales, aunque estos protocolos de red sean para compartir

no necesariamente material con copyright. La red BitTorrent es

fundamentalmente toda clase de contenidos audiovisuales, software y

videojuegos, esto ha implicado amenazas de bloqueo y la detencin de

los responsables encargados de mantener el tracker pblico.

24
En la actualidad servicios de streaming como Netflix o Spotify han

revolucionado el contenido multimedia de pies a cabeza, como lo hicieron

en su poca con los archivos las redes p2p. La comodidad de estos

servicios ha llevado a que los usuarios dejen de utilizar en cierta parte las

redes p2p, ya que estos servicios permite tambin descargar contenidos

para su reproduccin offline. Por lo que existen diferencias en este punto,

ya que por un lado los servicios streaming dan la comodidad de pagar la

suscripcin, mientras que las redes P2P lo hacen sin ningn costo, lo que

s implica buscar el contenido en varios sitios para descargar lo que se

desea ver.

Este trabajo se enfoca en una red P2P para el video bajo

demanda, dado que es posible adaptar una red para que el contenido

multimedia sea reproducido sin cortes y de forma secuencial, de manera

que tambin se obtenga el contenido de forma offline para su posterior

reproduccin, todo esto a un bajo costo y mientras ms cantidad de

usuario existan viendo el video mejor funciona la red.

25
II. MARCO TERICO

2.1 Introduccin

En este captulo se describen los temas para poder profundizar e

identificar la razn del porqu realizar una red P2P y cambiar a un modelo

semi-descentralizado en las redes. Se presenta la forma en cmo trabaja

el protocolo BitTorrent, la distribucin digital multimedia y finalmente

aplicar el protocolo P2P a la distribucin de video bajo demanda.

El foco de este trabajo ser en la implementacin de una red P2P a

nivel de aplicacin sobre una infraestructura, profundizando en su

desempeo frente a otros modelos. El trabajo se delimitar al despliegue

de la aplicacin en una red P2P en un laboratorio de forma local como

tambin conectado a Internet, dejando para realizaciones futuras su

implementacin en otros contextos.

Modelo Peer to Peer

Una red Par-a-Par, es un conjunto de nodos llamados pares, los

cuales poseen el rol de cliente como de servidor dependiendo de la

situacin, de ah el nombre Par-a-Par. Su principal misin es el beneficio

de los recursos compartidos distribuidos (espacio de almacenamiento,

26
ancho de banda) entre los diferentes pares que conforman la red para

llegar a obtener los datos.

Las redes P2P se suelen asociar al intercambio ilegal de archivos

entre particulares. No obstante, su topologa y funcionamiento las hace

ideales para otros usos, como el libre acceso a la informacin en pases

con censura [1] la creacin de aulas virtuales en e-Learning, la

computacin distribuida, y la gestin de contenidos [2] sobretodo en

determinados ambientes colaborativos en el mbito corporativo.

Una ventaja del entorno P2P es que est orientado al equipamiento

de bajo costo. No necesita software especficos para su implementacin;

solo requiere un S.O. que soporte TCP/IP. Adems, permite que los

recursos de cada nodo trabajen en forma conjunta para mejorar el

procesamiento de datos y almacenamiento [3].

Los campos de aplicacin de la tecnologa P2P son variados. Entre

ellos se pueden nombrar la educacin a distancia. Permite una interaccin

entre los participantes permitiendo el intercambio de sonido y video [4].

Segn Jorge Cortell [5]: "Su uso en un entorno corporativo puede

dar como resultado un significativo ahorro y un importante aumento de la

eficiencia se puede observar que la redes P2P tienen una serie de

27
ventajas, [], como son: menor vulnerabilidad, mayor escalabilidad,

menores recursos necesarios para su instalacin y mantenimiento.

Clasificacin de redes P2P

La clasificacin se basa segn la igualdad del roles de los nodos o

grado de descentralizacin, si ninguno cumple tareas administrativas se lo

considera P2P puro o completamente descentralizado correspondiente a

la 2 generacin de redes P2P, en otro caso si algn nodo posee

caractersticas diferentes se le considera hbrido o modelo centralizado

que corresponde a la 1 generacin. Otro modelo existente es el

jerrquico o semi-centralizado que mezcla el modelo puro con el modelo

hbrido que corresponde a la 3 generacin.

De acuerdo al tipo de auto-organizacin de la capa P2P se

clasifican en estructurados y no estructurados. Por ltimo otra clasificacin

establecida es por el tipo de aplicacin.

28
Clasificacin por grado de Descentralizacin

Modelo Centralizado o Hbrido

En este modelo, las solicitudes de bsqueda y control se realizan a

travs 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 informacin de los archivos que tiene cada cliente,

actualizndola cada vez que un cliente se conecta o desconecta. Cada

solicitud de bsqueda es comparada en servidor central con la

informacin 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 administracin dinmica,

una disposicin ms permanente de los recursos y un elevado

rendimiento en la localizacin de recursos, sin embargo, est muy limitado

en lo referente a la escalabilidad y a la robustez, ya que nicamente tiene

un punto de fallo.

29
Modelo Descentralizado o Puro

Este modelo se caracteriza porque no existe un servidor central, cada

nodo acta como cliente y como servidor, tratando de mantener un cierto

nmero 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 ms

verstiles y robustas al no depender de un servidor central, no obstante,

el elevado tiempo y la sobrecarga de ancho de banda que suponen las

bsquedas de informacin son las principales desventajas de esta

arquitectura.

Modelo Semi-descentralizado o Mixto

Este modelo es el ms extendido entre las arquitecturas de redes

P2P. En este modelo, se seleccionan ciertos nodos para que cumplan la

funcin de super-pares y as ayudar a encaminar el trfico hacia otros

pares. Los super-pares cambian dinmicamente a medida que otros

clientes se conectan a la red. Cada par mantiene un nmero limitado de

conexiones abiertas a un super-par y cada super-par est conectado con

el resto de super-pares de la red. Este modelo se caracteriza por

presentar un alto grado de escalabilidad, al reducir el nmero de nodos

30
implicados en el proceso de encaminamiento, y disminuir el volumen de

trfico entre estos. [6]

Clasificacin por Auto-organizacin

A grandes rasgos, una red P2P puede implementar funcionalidades

referidas al descubrimiento y/o a la distribucin. Las funcionalidades de

descubrimiento se refieren a bsquedas de informacin en la red. Por

ejemplo en una red de comparticin de contenido, los usuarios podran

realizar bsquedas de contenidos, o en una red de colaboracin

(supongamos una red de mensajera instantnea), los usuarios podran

buscar otros contactos en la red, o en una red de computacin distribuida,

los pares podran consultar la siguiente informacin a procesar.

Las funcionalidades de distribucin, se refieren a la propia

distribucin de la informacin en la red. Por ejemplo en una red de

comparticin de contenido, los usuarios podran realizar descargas

mediante esta red, o en el caso de una red de colaboracin, los usuarios

podran enviarse mensajes entre s, o en el caso de una red de

computacin distribuida, los pares podran distribuir sus resultados. No

todas las redes implementan ambas funcionalidades, por ejemplo

31
BitTorrent [7]. En la figura 2.1 se aprecia la capa de red P2P sobre la red

de routers.

Figura 2.1: Capa P2P sobre la red fsica (Fuente: elaboracin propia)

La auto-organizacin de la capa P2P puede ser: estructurado o no

estructurado. Lo que las diferencia es cmo los pares descubren los

recursos en la capa.

No estructurado

Se forman cuando los enlaces de la red se establecen de forma

arbitraria. Estas redes se construyen fcilmente. Son redes resistentes a

la constante entrada y salida de pares ya que no necesitan mecanismos

32
para reestructurar y mantener la topologa y adems soportan ataques

DoS. Este tipo de redes tambin soportan consultas complejas.

El servicio de bsqueda de recursos en estas redes se basa en

que cada peticin tiene que recorrer todo o parte del sistema con la

finalidad de encontrar uno o ms pares que compartan estos recursos. La

desventaja principal de este tipo de redes consiste en que las peticiones

no siempre pueden ser resueltas. Un contenido popular es muy probable

que est disponible en varios pares del sistema, por tanto, cualquier

bsqueda de este tipo de contenidos resultara exitosa. Por otro lado, si

un peer realiza una bsqueda de algn recurso o dato poco popular, es

decir, que pocos pares albergan dicho contenido, e muy probable que la

bsqueda no tenga xito o que requiera un elevado tiempo de bsqueda.

El rendimiento de estas redes depende del mecanismo de bsqueda

empleado. Si la bsqueda es a ciegas, entonces tardara ms en encontrar

resultados y por lo general la red ser poco escalable. Las bsquedas a

ciegas normalmente ocasionan flooding, definido como inundacin de la

red debido a la gran cantidad de trfico que circula por ella. Sin embargo,

si la bsqueda se basa en una heurstica, ser ms rpida y la red podr

albergar ms nodos.

33
Estructurada

Las redes estructuradas son sistemas P2P donde los nodos guardan

informacin til de encaminamiento (routing) para dirigir las bsquedas.

Gestionan una Tabla Hash Distribuida (DHT) y permiten que cada peer

sea responsable de una parte especfica del contenido de la red. Estas

redes utilizan funciones Hash distribuidas y asignan valores a cada

contenido compartido y a cada peer de la red.

Cada nodo sigue un protocolo de actuacin que relaciona

contenidos con pares responsables de estos contenidos. De esta forma,

siempre que un peer desee buscar ciertos contenidos, utiliza este

protocolo para determinar el/los responsable(s) de los datos y despus

dirige la bsqueda hacia el/los par(es) responsable(s). [8]

Clasificacin por Tipo de Aplicacin

La primera clasificacin de las redes P2P que se utiliza en la

literatura, es en base al tipo de aplicacin de la red. [9].

Comparticin de contenido: redes de archivos compartidos, distribucin

multimedia, almacenamiento distribuido, manejo de informacin

(descubrimiento, agregacin, filtrado, organizacin, etc.).

34
Colaboracin: comunicacin (chat, mensajera instantnea), redes de

juegos, redes sociales, etc.

Computacin distribuida: computacin distribuida en Internet/Intranet.

Algunos ejemplos de este tipo de aplicacin son: la bsqueda de vida

extraterrestre, el proyecto genoma, anlisis de mercado, anlisis de

riesgos financieros, etc. [7]

2.2 Protocolos de relevancia

2.2.1 Protocolos TCP/IP

En Internet, existen dos protocolos de transporte, TCP y UDP,

pudiendo cada uno de ellos transportar los mensajes de la capa de

aplicacin. TCP frece a sus aplicaciones un servicio orientado a la

conexin. Este servicio proporciona un suministro garantizado de los

mensajes de la capa de aplicacin al destino y un mecanismo de control

del flujo (es decir, adaptacin de las velocidades del emisor y el receptor).

TCP tambin divide los mensajes largos en segmentos ms cortos y

proporciona un mecanismo de control de congestin, de manera que un

emisor regula su velocidad de transmisin cuando la red est

congestionada. El protocolo UDP proporciona a sus aplicaciones un

35
servicio sin conexin. Es un servicio bsico que no ofrece ninguna

fiabilidad, ni control de flujo, ni control de congestin.

La capa de red de Internet incluye el conocido protocolo IP, que

define los campos del datagrama, as como la forma en que actan los

sistemas terminales y los routers sobre estos campos. Existe un nico

protocolo IP y todos los componentes de Internet que tienen una capa de

red deben ejecutar el protocolo IP. La capa de red de Internet tambin

contiene los protocolos de enrutamiento que determinan las rutas que los

datagramas siguen entre los orgenes y los destinos. Internet dispone de

muchos protocolos de enrutamiento. Internet es una red de redes y,

dentro de una red, el administrador de la red puede ejecutar cualquier

protocolo de enrutamiento que desee. Aunque la capa de red contiene

tanto el protocolo IP como numerosos protocolos de enrutamiento, suele

hacerse referencia a ella simplemente como la capa IP, lo que refleja el

hecho de que IP es el pegamento que une todo Internet. [10]

Estos protocolos son la base de todas las redes de computadoras,

debido que proporcionan los mecanismos necesarios para el envo y

recepcin desde un origen a un destino a travs de redes

interconectadas, tanto orientada como no orientada a conexin. Esta

base de protocolos es utilizada por BitTorrent para identificar pares y

transmitir mensajes en el enjambre.

36
BITTORRENT

El protocolo BitTorrent tiene un fuerte sustento con la teora de juegos

y de la informacin. La clave de su escalabilidad es la cooperacin

basada en incentivos tit-for-tat (represalia equivalente). En la figura 2.2 se

observa la arquitectura tradicional de BitTorrent.

Una estrategia utilizada por el protocolo BitTorrent es el tit-for-tat para

cumplir la eficiencia de pareto, que aplicado al caso de las redes peer-to-

peer, tiene como objetivo que todos los pares obtengan el elemento ms

o menos de igual forma y no se aprovechen unos pares ms que otros

(free riders). Para alcanzar este objetivo se usa una versin del mtodo

tit-for-tat usado en la teora de juego (Dilema de los Prisioneros). Este

mtodo consiste en si uno enva datos, el otro enva; y si no enva, l

tampoco enva.

Los algoritmos de Congestin realizan esta funcin de una forma muy

correcta, ya que un par permite descarga a los pares que ms informacin

le estn enviando a l cada cierto tiempo buscar nuevos posibles pares

a los que enviar datos mediante el algoritmo Descongestin Optimista.

37
Figura 2.2: Enjambre de pares utilizando un Tracker (Fuente: elaboracin propia)

Archivo Torrent

El archivo torrent contiene metadatos que proporcionan al cliente

informacin sobre la ubicacin del tracker, as como el torrent a ser

descargado. Adems del listado de los archivos que sern el resultado de

la descarga del torrent, tambin muestra cmo el cliente debe dividir y

verificar cada una de las piezas que componen el torrent completo. Para

que un cliente a reconozca el archivo torrent debe tener la extensin

.torrent y el asociado a los tipo media "application/x-bittorrent". La mayor

parte de los usuarios que utilizan cliente usan la web para encontrar los

contenidos a descargar, hacen clic en l para iniciar inmediatamente la

descarga. De esta manera, la aparente complejidad de BTP en

38
contraposicin a FTP o HTTP de transferencia es transparente para el

usuario. [11]

Bencoding

Bencoding es una forma de especificar y organizar los datos en un

formato conciso. Es compatible con los siguientes tipos: cadenas de

bytes, enteros, las listas y los diccionarios.

Bencoded string

Bencoded string de caracteres estn codificados de la siguiente

manera:

<longitud de la cadena codificada en ASCII base 10>:<cadena>, o

clave:valor

Ejemplo: 4:spam representa el string "spam"

Ejemplo: 0: representa el string vaco " "

Enteros

Los nmeros enteros estn codificados de la siguiente manera:

i<entero codificado en base diez ASCII>e

39
La inicial i y el final e delimitadores de inicio y finalizacin. Se puede tener

nmeros negativos, tales como i-3e. Slo los dgitos significativos debe

ser utilizados, no se puede rellenar el Entero con ceros. como i04e. Sin

embargo, i0e es vlido.

Ejemplo: i3e representa el entero "3"

Listas

Las listas estn codificados de la siguiente manera: l<bencoded

valores>e

Las iniciales l y el final e delimitadores de inicio y finalizacin. Las listas

pueden contener cualquier tipo de bencoded, incluyendo los nmeros

enteros, cadenas de texto, diccionarios, e incluso listas dentro de otras

listas.

Ejemplo: l4:spam4:eggse representa la lista de dos cadenas: [ "spam",

"eggs" ]

Ejemplo: le representa con una lista vaca: [ ]

Diccionarios

Los diccionarios estn codificados de la siguiente manera:

40
d<bencoded string><bencoded elemento>e

La inicial d y el final e son los delimitadores de principio y final. Tenga

en cuenta que las llaves deben ser cadenas bencodeadas. Los valores

pueden ser de cualquier tipo bencodeado, incluyendo los nmeros

enteros, cadenas, listas y diccionarios. Las cadenas deben ser

comparadas mediante una comparacin binaria.

Ejemplo: d3:cow3:moo4:spam4:eggse representa el diccionario { "cow"=>

"moo", "spam" => "eggs" }

Ejemplo: d4:spaml1:a1:bee' representa el diccionario { "spam" => [ "a", "b"

]}

Ejemplo:

9:publisher3:bob17:publisherwebpage15:www.example.com18:publiser.

location4:homee representa { "publisher" => "bob","publisher-webpage" =>

"www.example.com", "publisher.location" => "home" } [11]

Estructura del archivo Torrent

Todos los datos en un archivo metainfo es bencodeado. La

especificacin para bencoding se defini anteriormente. El contenido del

archivo metainfo (".torrent") es un diccionario bencodeado, que contiene

41
las claves enumeradas a continuacin. Todos los caracteres de la cadena

son los valores codificados en UTF-8.

Info: Un diccionario que describe el archivo(s) de los torrent. Existen dos

formas posibles: uno para el caso de 'un solo archivo' torrent con ninguna

estructura de directorios, y uno para el caso de una 'multi-archivo' torrent

announce: Anuncia la URL del tracker (string)

announce-list: (opcional) esta es una extensin de la especificacin oficial,

que ofrece compatibilidad. (lista de listas de string).

creation date: (opcional) el tiempo de la creacin de un torrent, en el

formato estndar de UNIX (nmero entero, en segundos desde el 1-Ene-

1970 00:00:00 UTC)

comment: (opcional) comentarios de texto del autor (string)

created by:(opcional) nombre y versin del programa utilizado para crear

el .torrent (string)

encoding: (opcional) string codificado usado para generar las piezas de la

parte del diccionario info en el .torrent metarchivo (string)

Diccionario Info

Esta seccin contiene el campo que son comunes tanto para el

modo archivo nico y varios archivos.

42
piece length: nmero de bytes en cada pieza (integer)

pieces: string formada por la concatenacin de todos los 20-bytes valores

de hash SHA1 , uno por cada pieza (byte string, es decir, no urlencoded)

private: (opcional) este campo es un nmero entero. Si se establece en

"1", el cliente debe publicar su presencia para obtener a otros pares. Si

este campo se establece en "0" o no est presente, el cliente puede

obtener de pares de otros medios, es decir, PEX, DHT. Aqu, "private"

puede ser ledo como "no external peer source".

Info en Modo de Archivo nico

Para el caso del modo de archivo nico, la informacin del

diccionario contiene la siguiente estructura:

name: el nombre de archivo. (string)

length: la longitud del archivo en bytes (integer)

md5sum: (opcional) string de 32 caracteres hexadecimales

correspondiente a la suma MD5 del archivo. Esto no es utilizado en todos

los BitTorrent, pero se incluye en algunos programas para una mayor

compatibilidad.

43
Info en Modo Archivo Mltiple

Para el caso del modo multi-archivo, la informacin del diccionario

contiene la siguiente estructura:

name: la ruta de acceso al directorio en el que se almacenaran todos los

archivos. (string)

Files: lista de diccionarios, uno para cada archivo. Cada diccionario en

esta lista contiene las siguientes claves:

length: la longitud del archivo en bytes (integer)

md5sum: (opcional) string de 32 caracteres hexadecimales

correspondiente a la suma MD5 del archivo.

path: una lista que contiene uno o ms elementos string que en su

conjunto representan la ruta de acceso y nombre de archivo. Cada

elemento de la lista corresponde a un nombre de directorio o (en el caso

del elemento final) el nombre del archivo. Por ejemplo, elarchivo

"dir1/dir2/archivo.ext" constara de tres elementos de la cadena: "dir1",

"dir2", y "archivo.ext". Este es codificado como una lista bencoded de

string como l4:dir14:dir28:archivo.exte

44
Tracker

El tracker se compone de dos partes: la primera parte muestra los

archivos .torrent subidos al servidor y que los usuarios pueden descargar

va http. La segunda parte es el rastreador (o announcer) que es la parte

que se comunica con los clientes, recibe peticiones de estos y enva

respuestas con la lista de pares conectados a un torrent determinado.

El tracker es un servicio HTTP/HTTPS que responde a las solicitudes

HTTP GET. Las solicitudes incluyen las mtricas de los clientes que

ayuda a que el tracker mantenga estadsticas generales acerca del

torrent. La respuesta incluye una lista de pares que ayuda al cliente a

participar en el torrent. La direccin URL bsica consiste en "announce

URL", como se define en el archivo torrent.

Los parmetros se agregan a esta URL, utilizando mtodos estndar

de CGI (es decir, un '?' despus de anunciar la URL, seguido por

'param=value' secuencias separadas por '&').[13]

En la figura 2.3 se puede observar los 2 partes que componen a un

tracker.

45
Figura 2.3: Tracker en sus 2 partes (Servidor Web y Anunciador) (Fuente:
elaboracin propia)

Par

Los pares son los encargados de compartir, informar qu comparten

y enviar y recibir datos sobre los torrents. Los pares crearn el archivo de

extensin .torrent, lo subirn al servidor y lo empezarn a compartir con

otros usuarios. A su vez los usuarios se encargarn de descargar del

tracker archivos .torrent y empezar a descargarlos y compartirlos. En

definitiva son la parte ms importante del protocolo BitTorrent y de

cualquier protocolo P2P, ya que sin ellos la red P2P no existira. [12]

46
Mensajes entre los pares

Cada cliente utiliza una conexin TCP con un handshake inicial

como se ve en la figura 2.4.

Handshake: <pstrlen><pstr><reserved><info_hash><peer_id> donde:

pstrlen: largo del string pstr como un nico byte.

pstr: string identificador del protocolo.

reserved: 8 bytes reservados. Todas las implementaciones actuales usan

ceros.

info_hash: hash SHA-1 de 20 bytes provisto por el archivo .torrent. Este

es el mismo info_hash que es transmitido en la solicitud al tracker.

peer_id: cadena de 20 bytes usada como nico identificador ID para el

cliente.

Figura 2.4: Envo del mensaje Handshake (Fuente: elaboracin propia)

47
Por ejemplo una cadena handshake puede ser la siguiente:

<19><BitTorrent protocol><00000000><f5s4fc10#.df48(r6sd8>TR7973

215487654846>

Una vez establecida la conexin los clientes se envan datos de

control que tienen la siguiente estructura:

<length prefix><message ID><payload>.

Donde leng prefix es un valor de cuatro bytes big-endian, el

message ID es un byte decimal mientras que payload depende del tipo de

mensaje.

Los posibles mensajes a enviar son los siguientes:

keep-alive: <len=0000> Este mensaje tiene el nico propsito de

mantener la conexin abierta si no se han enviado mensajes en una cierta

cantidad de tiempo, generalmente dos minutos.

choke: <len=0001><id=0> Este mensaje indica si el cliente ha sido

bloqueado como se ve en la figura 2.5.

unchoke: <len=0001><id=1> Indica si se ha desbloqueado al cliente.

interested: <len=0001><id=2> Para indicar que l se est interesado en

alguna parte del archivo que el cliente posee.

48
Figura 2.5: Envo de mensaje choke (Fuente: elaboracin propia)

cancel: <len=0013><id<=8><index><begin><length> Este mensaje se usa

para cancelar un pedido por alguna seccin de datos en especfico, los

campos de payload son equivalentes a los del mensaje request.

port: <len=0003><id=9><listen-port> Este mensaje es enviado por

clientes bittorrent que implementan DHT para indicar en que puerto del

cliente se est escuchando.

not interested: <len=0001><id=3> Para indicar que el cliente no posee

partes del archivo en la cuales se est interesado.

have: <len=0005><id=4><piece index> Es un ndice indicando que partes

del archivo ya se posee, de este modo los clientes pueden hacer una

mejor eleccin sobre que parte ofrecer. Como se observa en la figura 2.6.

49
Figura 2.6: Envo del mensaje Have (Fuente: elaboracin propia)

bitfield: <len=0001+X><id=5><bitfield> Este mensaje se enva

inmediatamente despus del handshaking e indica las piezas del archivo

que se posee actualmente, cada bit del campo payload representa una

pieza, si est ya se posee el bit es configurado a uno o en caso contrario

el bit es cero. X indica el largo del campo bitfield, si este est mal

calculado, el cliente debera ignorarlo y cerrar la conexin. En la siguiente

figura se captura un mensaje bitfield con Wireshark.

50
Figura 2.7: Envo de mensaje Bitfield (Fuente: elaboracin propia)

request: <len=0013><id=6><index><begin><length> Este campo se usa

para pedir una pieza del archivo, index indica el ndice de la pieza, begin

es para indicar un offset a partir del comienzo de la pieza en caso de que

ya se posea una parte de esta y length indica cuantos bytes se estn

solicitando. En la figura 2.8 se muestra un mensaje request mediante la

herramienta Wireshark.

51
Figura 2.8: Envo de mensaje Request (Fuente: elaboracin propia)

piece: <len=0009+X><id=7><index><begin><block> Este mensaje se

utiliza para enviar el contenido en s, index indica el nmero de la pieza

enviada, begin indica el offset desde el comienzo de la pieza mientras que

block son los datos enviados.

Figura 2.9: Envo de mensaje Piece (Fuente: elaboracin propia)

52
Estrategias para la seleccin de piezas

Prioridad Estricta

Las piezas son divididas en sub-piezas (bloques) para habilitar las

descargas en paralelo. Esta estrategia fuerza la solicitud de todas las sub-

piezas de una pieza antes de comenzar a descargar otra pieza desde el

mismo par.

Las piezas ms raras primero

Este algoritmo define la estrategia para seleccionar la siguiente pieza

a descargar. Cada par mantiene una lista del nmero de copias de cada

pieza en su conjunto de pares y usa esta informacin para definir su

conjunto de las piezas ms raras. Sea n el nmero de copias de la pieza

ms rara, entonces la posicin de cada pieza con n-copias en el conjunto

de pares es aadida al conjunto de las piezas ms raras. Se procede a

descargar las piezas ms raras de todas las piezas disponibles en el

conjunto de pares conectados.

Esta estrategia ayuda a que los clientes no se estanquen en las

descarga de piezas, provocando que las piezas puedan transmitirse ms

fcilmente por la red, de esta forma sin concentrarse en las piezas ms

53
comunes todas las piezas del torrent estarn disponibles ms rpido para

el enjambre.

Cada par selecciona aleatoriamente la siguiente pieza para bajar de

su conjunto de las piezas ms raras. El comportamiento de este algoritmo

puede ser modificado por 3 causas:

1. Si un par ha bajado menos de 4 piezas, ste elige

aleatoriamente la prxima pieza para bajar. Una vez que se han

descargado estas 4 piezas, el algoritmo funciona de la manera descrita

anteriormente. La razn de este comportamiento inicial es permitir que un

par baje sus primeras piezas muy rpidamente, ya que es importante

tener algunas piezas para empezar a intercambiar en el Algoritmo de

Bloqueo. De hecho, una pieza elegida aleatoriamente tiene muchas ms

copias que las piezas ms raras, as que probablemente el tiempo de

bajada ser menor seleccionndola aleatoriamente.

2. Cuando uno de los bloques de una pieza se ha pedido, los otros

bloques de la misma pieza se piden con la prioridad ms alta. La razn de

este comportamiento es completar la descarga de una pieza completa lo

antes posible, dado que slo las piezas completas pueden ser enviadas.

54
3. Modo Final de Juego, este modo empieza al final de la descarga,

cuando el par pide todos los bloques que todava no han sido recibidos a

todos los pares de su conjunto de pares que poseen esos bloques. Cada

vez que se recibe un bloque, el par cancela la peticin para el bloque

recibido a todos los pares en su conjunto de pares que tienen la peticin

activa para que no le enven de nuevo el bloque descargado. Aunque esto

parece suponer un gran ancho de banda, el modo final de juego suele ser

muy corto, ya que ocurre al final de la descarga y consigue que esta se

complete mucho antes.

Primera pieza aleatoria

Es difcil para un par nuevo comenzar la descarga sin nada que subir.

Seleccionando aleatoriamente una pieza a descargar le da al par la

oportunidad para compartir ms rpidamente con los otros pares, ya con

todos los bloques de una pieza puede utilizar el algoritmo de la pieza ms

rara primero.

Algoritmo de Congestin

Este algoritmo define la estrategia usada por el protocolo BitTorrent

para seleccionar el siguiente par con el que va a interactuar. Se usa para

garantizar una buena relacin subida/bajada entre los pares. Por ejemplo

los free riders, pares que nunca suben o que no suben lo suficiente,

55
deben penalizarse. Congestionado significa que se rechaza

temporalmente la subida a otro par.

En el estado Congestionado no se intercambian piezas.

Descongestionados son los pares con mejores tasa de subida del

conjunto de pares, como mximo 4 pares remotos pueden estar en estado

descongestionado y en estado interesado a la vez. Se envan piezas slo

a los nodos en estado descongestionado. Estos nodos son elegidos como

se mencion anteriormente basado en sus tasas de subidas actuales.

Cada 10 segundos, los pares remotos interesados se ordenan de acuerdo

a su velocidad de bajada hacia el par local y los 3 ms rpidos son

desbloqueados.

Algoritmo Descongestin Optimista

Un par aleatorio en el conjunto de pares es descongestionado cada

30 segundos, independiente de la tasa de bajada. La descongestin

optimista tiene dos propsitos: permite evaluar la capacidad de bajada de

nuevos pares en el conjunto de pares y tambin posibilita que los pares

que no tienen ninguna pieza que compartir puedan obtener su primera

pieza.

56
DHT

Un DHT (Distributed Hash Table) es un mecanismo para almacenar

y recuperar valores indexados mediante claves. Esta tarea se distribuye

entre todas las entidades participantes en l. Cada participante en el DHT

(llamado nodo) es responsable del almacenamiento de un conjunto de

valores cuya clave est dentro de un rango dado. El DHT proporciona el

mecanismo para encontrar al nodo o conjunto de nodos responsables del

almacenamiento del valor mediante su clave asociada.

La metodologa utilizada para gestionar el almacenamiento de los

pares (clave, valor) es lo que define el diseo de un DHT. Entre los

posibles diseos de DHTs destacan: Chord, Pastry y Kademlia. Existen

dos DHTs en BitTorrent: Mainline DHT y Azureus DHT. Ambos son

implementaciones de Kademlia.

Kademlia es el diseo de un DHT. Cada valor tiene como clave

asociada un identificador de 160 bits. Adems, cada nodo elige un

identificador de 160 bits cuando se une al DHT. Un valor se almacena en

el conjunto de los nodos ms cercanos a su clave. [13]

Antes del uso de DHT, los trackers eran el nica manera de realizar

una conexin con otros pares, dado que DHT funciona mediante la

57
distribucin de listas de pares identificados por el hash SHA-1 del torrent,

lo cual dio al protocolo BitTorrent un enfoque an ms descentralizado.

Distribucin digital de video

El streaming es la distribucin digital de multimedia a travs de una

red de computadoras, de manera que el usuario consume el producto

(generalmente archivo de vdeo o audio) en paralelo mientras que se lo

descarga. Este tipo de tecnologa funciona mediante un bfer de datos

que va almacenando el flujo de descarga en la estacin del usuario, para

luego mostrarle el material descargado. Esto se contrapone al mecanismo

de descarga de archivos, que requiere que el usuario descargue los

archivos por completo para poder acceder al contenido. [20]

Tipos de streaming

La alternativa ms trivial a la hora de transmitir la informacin

multimedia es tratarla como el resto de informacin, usando as

aplicaciones y servicios estndar de Internet como por ejemplo ftp y http.

Este tipo de servicios nos permiten visualizar el medio una vez lo

hayamos descargado completamente.

58
Una segunda alternativa, es realizar una descarga progresiva de la

informacin, de manera que cuando se empiece a disponer de

informacin, se pueda empezar a reproducir. En esta segunda alternativa

la informacin se descarga usando el mximo ancho de banda que

disponen cliente y servidor, y no hay ningn control para evitar cortes en

la reproduccin: el medio se va almacenando en disco conforme se

descarga, pero si el ancho de banda es ms reducido que el necesario

para la reproduccin, la informacin se reproduce a saltos, ya que se va

reproduciendo conforme llega. La tercera alternativa es en la que se

utilizan protocolos para la transmisin de informacin multimedia en

tiempo real con un control de sesin dinmico. Con esta alternativa no se

usa el mximo ancho de banda disponible por el cliente para descargar y

visualizar el medio, sino que tan slo se usa el ancho de banda necesario

para ir reproduciendo el medio en tiempo real. Adems no se produce una

descarga completa del medio, sino que conforme se descarga se va

descartando una vez ha sido utilizado para la reproduccin. Eso s, para

paliar los posibles efectos perniciosos causados por la variacin del

retardo, se aplica una etapa inicial de buffering en la que se almacena una

parte inicial del medio, para disponer de informacin a reproducir en el

caso en el que el retardo aumente, evitando as cortes en la reproduccin.

[21]

59
2.3 Alternativas

Para BitTorrent existen un conjunto de libreras con diferentes

caractersticas como se observa en la tabla 1 que proveen las

funcionalidades que se necesitan para llevar a cabo este proyecto:

Librera Sistema Lenguaje Tracker UPnp DHT Magnet

BitTorrent Operativo URI

Libtorrent- GNU/Linux

rasterbar Windows C++ Si Si Si Si

OS X

Monotorrent GNU/Linux

Windows C# Si Si Si Si

OS X

rTorrent GNU/Linux

OS X C++ Si No Si Si

WebTorrent GNU/Linux

Windows Javascript Si No Si Si

OS X

Tabla 2.1: Tabla de Libreras para el protocolo BitTorrent (Fuente: Wikipedia [14])

60
Libtorrent Rasterbar

Libtorrent Rasterbar es una implementacin completa de BitTorrent

en C++ centrndose en la eficiencia y escalabilidad. Se ejecuta en

dispositivos embebidos como en equipos de escritorio. Cuenta con una

interfaz de librera muy bien documentada y fcil de utilizar, incluyendo la

gestin de la sesin, acceso de DHT, el intercambio de metadatos y la

gestin de complementos, posee licencia BSD desarrollada por Arvid

Norberg . Viene con un cliente de BT simple que demuestra el uso de la

librera.

Objetivos

Sus principales objetivos son:

ser eficiente en el uso de cpu.

ser eficiente en el uso de memoria.

ser muy fcil de utilizar.

Sus caractersticas ms notables son el soporte para el Mainline

DHT, IPv6, HTTP seeders y permite externamente definir las extensiones

del protocolo a travs de su API.

61
Selector de piezas

El selector de piezas es un componente central en una

implementacin de bittorrent. El selector de piezas de libtorrent est

optimizado para encontrar rpidamente las piezas ms raras. Se

mantiene una lista de todas las piezas disponibles ordenadas por la

rareza, y piezas con la misma rareza. El modo de la pieza ms rara

primero es el modo dominante del selector de piezas. Otros modos

tambin son compatibles en situaciones especficas. El selector de piezas

tambin puede ser configurado para descargar las piezas en orden

secuencial.

Portabilidad

Libtorrent se ejecuta en la mayora de los principales sistemas

operativos, como Windows, Mac OS X, Linux, BSD y Solaris. Utiliza

Boost.Thread, Boost.Filesystem, Boost.Date_time y varias otras libreras

de boost. Se requiere al menos la versin 1.46.1 de Boost..

Libtorrent toma el mximo provecho de las API de red de alto rendimiento

en las plataformas ms populares. Puertos I/O de terminacin en

Windows, epoll en GNU/Linux y kqueue en Mac OSX y BSD. [15]

62
Monotorrent

MonoTorrent es el producto de Googles Summer of Code 2006. Es

un conjunto completo de libreras de BitTorrent que se pueden incrustar

en una aplicacin. La suite contiene:

1. Client Library - Permite la carga / descarga de torrents.

2. Tracker Library - Permite el alojamiento de .torrents.

3. Torrent Creator - Permite la creacin y edicin de archivos .torrent.

Todas estas bibliotecas fueron escritas con Mono (una

implementacin de .NET Framework) en mente. Como resultado, estas

libreras funcionarn en cualquier sistema operativo compatible con

Microsoft .NET Framework o Mono Framework, ya sea Windows, Linux,

MacOs u otros.

Todos los mdulos de MonoTorrent estn autorizados bajo la

licencia MIT/X11, por lo que cualquiera puede usarlos como desee.

La librera cliente contiene toda la funcionalidad para crear un

cliente BitTorrent o incorporar la funcionalidad de BitTorrent en una

aplicacin (por ejemplo, un mdulo de actualizacin automtica).

63
Caractersticas:

1. Compatibilidad con respuestas de seguimiento compacto y no

compacto

2. Soporte Multi-Tracker

3. Soporte de Scrape y Multi-Scrape

4. Soporta extensiones de Fast Peers

5. Soporta la limitacin de velocidad de subida y descarga en cada

torrent y una base global

6. Varias descargas simultneas

7. Resumen rpido

8. Descarga selectiva de archivos

9. Priorizacin de archivos

10. Anuncio manual

11. Slo usa un puerto para todas las comunicaciones

12. Puede establecer el directorio de descarga predeterminado

13. Soporta cifrado de conexin. [16]

WebTorrent

WebTorrent es un cliente torrent de streaming para Node.js y la

web. WebTorrent proporciona la misma API en ambos entornos. Est

escrito completamente en JavaScript por lo que el mismo cdigo funciona

64
en ambos tiempos de ejecucin. En node.js, este mdulo es un simple

cliente de torrent, usando TCP y UDP para hablar con otros clientes

torrent tradicionales.

En el navegador, WebTorrent utiliza WebRTC para el transporte

par-a-par. Se puede utilizar sin complementos, extensiones o

instalaciones de navegador. Es simplemente JavaScript.

Caractersticas

- Cliente Torrent para node.js y el navegador (el mismo paquete

npm)

- Rpido

- Descargar mltiples torrents simultneamente, de manera eficiente

- Javascript puro (sin dependencias nativas)

- Expone los archivos como flujos

- Recupera piezas de la red bajo demanda para que se apoye

(incluso antes de finalizar el torrent)

- Cambia sin problemas entre la estrategia de seleccin secuencial y

la ms rara-primera pieza

- Soporta funciones avanzadas de torrent client

- soporta magnet URI a travs de ut_metadata

- Descubrimiento de pares mediante dht, tracker y ut_pex

65
- Api de extensin de protocolo para agregar nuevas extensiones

- Completa suite de pruebas (se ejecuta completamente fuera de

lnea, por lo que es fiable y rpido)

Caractersticas del entorno del navegador / WebRTC

- Canales de datos WebRTC para una comunicacin par-a-par ligera

sin complementos

- WebTorrent es una red P2P para toda la web. Los clientes

- WebTorrent que se ejecutan en un dominio pueden conectarse a

clientes en cualquier otro dominio.

- Transmitir torrents de vdeo dentro de <video> (webm (vp8, vp9) o

mp4 (h.264))

- Soporta Chrome, Firefox y Opera. [17]

Para leer la documentacin completa de la API de Webtorrent, ver

[18].

RTorrent (libtorrent-rakshasa)

LibTorrent es una libreraa de BitTorrent escrita en C ++ para *nix,

con un enfoque en alto rendimiento y buen cdigo. La librera se

66
diferencia de otras implementaciones al transferir directamente de las

pginas de archivos a la pila de red. [19]

2.4 Resumen de lo seleccionado

Se seleccion el protocolo BitTorrent por su eficiencia en la

transmisin de archivos de tamao considerable, se observ el enfoque

de videos por su importancia y consumo en la actualidad. La utilizacin de

los lenguajes de programacin C/C++ fue por considerarlos los ms

apropiada para esta tarea.

Webtorrent posee una documentacin detallada de su API,

ejemplos claros para su uso, con las principales clases para la

construccin de una aplicacin streaming de torrents para Node.js y la

web. Si bien es una librera reciente en comparacin a las otras, sus

caractersticas no son del todo adecuadas para este proyecto, por lo que

no se opt por ella.

Monotorrent cuenta con una documentacin aceptable, contiene

ejemplos simples para el manejo de los torrents, la creacin de tracker

pblicos y privados, habilitacin de DHT. Aunque sus caractersticas son

adecuadas, se necesitan caractersticas adicionales como

67
descubrimientos de pares locales, y un enfoque en la eficiencia en el uso

de CPU y memoria. Por tanto no se opt por el uso de esta librera.

La librera seleccionada fue Libtorrent-rasterbar que est bajo

desarrollo activo. Cuenta con una abundante documentacin, posee todas

las caractersticas necesarias para este trabajo, tiene una excelente

explicacin mediante ejemplos, se enfoca sobretodo en el uso eficiente de

la memoria y CPU. Tiene variadas extensiones del protocolo BT, como

DHT, uTP, multitracker, Tracker UDP y HTTP Seed. Tambin cuenta con

binding para python, java, go y node. Finalmente es una API potente y

fcil de utilizacin.

2.5 Escenario

Los usuarios que interactan con la aplicacin son alumnos en una

clase. Primero se debe tener un video almacenado en el disco duro de

una mquina. El usuario ingresa a la carpeta donde se encuentra el

ejecutable del programa, abre una terminal y ejecuta ./BTStream iniciando

la aplicacin, luego mediante la aplicacin el usuario genera un archivo

con metadatos, el cual se sube a un servidor central que contiene todos

los metadatos de los archivos a compartir, desde ste los dems alumnos

pueden descargar los metadatos asociados a un archivo de video y

comenzar la descarga, esta descarga no se har desde el servidor

central, sino de las otras mquinas que tambin se encuentren

68
descargando el mismo archivo de video, de esta manera las mquinas

compartirn las piezas que componen el video, y entre ellas se

transmitirn las piezas que cada una necesite para luego reproducir el

video. Por tratarse de una sala de clases, el contenido abarcara tutoriales,

clases grabadas, videos generados por los propios usuarios, como

tambin videos de entretenimiento.

2.6 Idea

La idea principal es construir una aplicacin P2P basado en el

protocolo BitTorrent mediante una librera, utilizando una infraestructura

de red para dar apoyo al intercambio de material audiovisual en las salas

de clases. La aplicacin est pensada para funcionar tanto de forma local

como conectada a Internet, comunicndose de esta forma con el resto de

aplicaciones que trabajen bajo el mismo protocolo. De esta manera se

permite al alumno utilizar tecnologas orientadas especficamente al

intercambio de archivos sin la necesidad de tener una cuenta en alguna

plataforma.

El contenido estara distribuido en los distintos computadores de

los alumnos, de modo que los estudiantes van obteniendo las piezas

faltantes del archivo a descargar hasta obtener por completo el archivo, lo

que le entrega la posibilidad contribuir con la descarga de los que an no

69
obtienen totalmente el archivo. Para la realizacin de la descarga de un

contenido se necesitar por lo menos una fuente (seed) de la informacin.

La descarga ser mejor cuando el nmero de pares es elevado. Por otro

lado el modelo a implementar tiene la idea de ser una red independiente

donde el contenido sea proporcionado por los propios alumnos. Se

aplicar en un laboratorio para observar su comportamiento con un

nmero de mquinas reducido.

2.7 Decisiones

Se tom la decisin de trabajar con la librera libtorrent-rastebar por

su enfoque y excelente documentacin, por tener todas las caractersticas

necesarias para llevar a cabo este trabajo. La aplicacin se decidi

implementar para la plataforma Debian y Windows, aunque en esta ltima

ser necesario realizar la instalacin de forma manual de las

dependencias de la librera y la instalacin del reproductor mplayer. Otra

decisin tomada fue utilizar el protocolo BitTorrent para distribuir videos,

usando la descarga progresiva como el tipo de streaming. De esta forma

se descarga y reproduce el video simultneamente.

Como bien es sabido BitTorrent no fue diseado inicialmente para la

distribucin de video, al intentar hacer descarga de las piezas de forma

secuencial la estrategia tit-for-tat falla como se afirma en [22] por lo que

70
algunos de sus mecanismos no son del todo adecuados para el

streaming. Por lo que se decidi hacer unos ajustes para adaptarlo en

esta rea, se opt por descargar las primera piezas del video, que son las

que necesitan mayor prioridad que las dems piezas para la

reproduccin, una vez descargado las el 20% de las primeras piezas se

pone en funcionamiento el algoritmo de la pieza ms rara primero,

logrando de esta forma conservar la filosofa de BitTorrent que consiste

en tener la disponibilidad de las piezas menos comunes para el beneficio

del enjambre.

2.8 Conclusin

Dado las caractersticas de las redes par-a-par se evita depender

del funcionamiento de un servidor central, al otorgar el rol de cliente y

servidor a todos los nodos de la red, reduciendo los costos de mantencin

de un servidor nico, a su vez se evitan los cuellos de botella al aumentar

nmero de solicitudes de los participantes de la red.

Debido al xito del protocolo BiTorrent dentro de las redes par-a-

par, existen variadas libreras que lo implementan, entre todas estas se

seleccion libtorrent-rastebar al abarcar todas las funcionalidades

requeridas para este trabajo. La cual se utilizar para construir una

aplicacin que ofrezca material audiovisual en una sala de clases con un

71
elevado nmero de mquinas utilizadas por los alumnos. Por tanto la idea

principal consiste en distribuir videos de tamao considerable de forma

eficiente entre alumnos en una sala de clases, mediante el protocolo

BitTorrent sobre una red local.

72
III. ANLISIS Y DISEO

En este captulo se realiza el diseo y la arquitectura del sistema.

El desarrollo de la aplicacin carece de especificacin de requisitos, ya

que el protocolo est especificado y definido. Para llevar a cabo el diseo

de la aplicacin se han hecho diversas observaciones. Se han analizado

otras aplicaciones BitTorrent implementados en Python, para de esta

forma obtener algn tipo de ayuda en la implementacin. Las aplicaciones

analizadas han sido BTClient y Touchandgo. BTClient es una simple

aplicacin de BitTorrent en lnea de comandos, que tiene habilitada la

descarga secuencial para realizar streaming va un reproductor. Tras

realizar la instalacin, lectura de cdigo y prueba, esta no realizaba la

descarga del archivo, por lo que se abandon su anlisis. En el caso de

Touchandgo, una aplicacin y librera para ver series y pelculas

mgicamente, tras realizar la instalacin, al ejecutar la aplicacin se

obtuvieron errores, lo que no hizo posible la descarga y visualizacin de

un video. Aunque estas dos aplicaciones no lograron ser ejecutadas con

xito, su cdigo sirvi de ayuda para tener una idea como est construida

una aplicacin BT para la reproduccin de videos. Dado esto, se

abandon el anlisis de las aplicaciones y se dise en base a la API

Libtorrent-Rasterbar.

73
3.1 Arquitectura del sistema

El objetivo de la aplicacin desarrollada es, dado un video

almacenado en una mquina, generar un archivo de metadatos, el cual es

subido a un servidor tracker para ser descargado por otras mquinas, y

de esta manera distribuir el video por toda la red. Para lo anterior se

recurri a una arquitectura par-a-par donde el usuario descarga y sube el

contenido.

Figura 3.1: Diagrama de la arquitectura del sistema


(Fuente: elaboracin propia)

En la figura 3.1 se observa que el tracker contiene la lista de pares

y una base de datos de archivos torrents, que es subido por un usuario

que posee el archivo de video completo, lo cual le otorga el rol de seed.

74
Dicho archivo torrent contiene toda la metadata del video a descargar

como nombre del archivo, URL del tracker, nmero de piezas, tamao de

las piezas, tamao del archivo en bytes, fecha de creacin, etc. El tracker

se comunica a travs del protocolo HTTP para las transferencias de

archivos torrents. El par implementa el protocolo BT, aqu se ejecuta la

aplicacin para cargar y descargar archivos con otros pares, adems

permite la interaccin con el usuario final, desplegando informacin de

estado de comparticin y desplegando la reproduccin.

Figura 3.2: Diagrama de hardware del sistema


(Fuente: elaboracin propia)

En la figura 3.2 las mquinas utilizadas poseen una arquitectura de

32 bits bajo un sistema operativo GNU/Linux Ubuntu 11.10, utilizando un

compilador gcc versin 4.9.2. Los pares se implementaron utilizando la

75
librera libtorrent-rasterbar en C/C++ para manejar la descarga y

comunicacin entre los nodos de la red. La comunicacin entre el servidor

Tracker y los pares se realiza por HTTP mediante el software

RivetTracker. Finalmente para la reproduccin del video se utiliz el

reproductor multimedia Mplayer.

Los componentes bsicos del sistema son:

- Par: La mquina conectado a la red, que ejecuta la aplicacin

BitTorrent, que realiza la comparticin y reproduccin del archivo

de video.

- Tracker: Servidor que realiza la conexin entre las mquinas que

tienen partes del archivo de video que se encuentra

distribuyndose en la red. El servidor no contiene el archivo, solo

su metadatos.

- Archivo Torrent: Diccionario que contiene todos los datos

necesarios para compartir un archivo.

El usuario posee un video almacenado en su disco duro, mediante

la aplicacin genera un archivo torrent. Acto seguido el usuario sube este

archivo al tracker para comenzar a ser un seed. Una vez subido, los

76
usuarios que deseen descargar el video, primero descargan el torrent y lo

agregan a la aplicacin, una vez agregado el torrent, el tracker le

comunica la lista de todos los pares asociados a ese archivo, desde ah

comienza el proceso de descargar y compartir el archivo con otros

usuarios. En primer lugar se descargan las primeras piezas del video,

luego se descargan aleatoriamente las piezas menos comunes. El usuario

al tener un porcentaje considerable del video, selecciona reproducirlo, la

aplicacin reproduce el video a travs de un reproductor.

Finalmente, una vez reproducido el video la aplicacin continua la

descarga hasta completar todas las piezas del video.

Restricciones del sistema

El sistema fue diseado considerando las siguientes restricciones

para su correcto funcionamiento:

- Debido a que el reproductor requiere metadatos para reproducir el

video, y algunos videos tienen esto al final del archivo, se tiene que

utilizar videos en formato flv, mkv.

- El nmero de pares tiene que ser alto (ideal).

77
- Al comienzo de la descarga, tiene que existir al menos un seeder

hasta que los dems pares obtengan el archivo completo de forma

distribuida.

3.2 Casos de uso

Los casos de uso son tiles para especificar la comunicacin y el

comportamiento del sistema mediante su interaccin con los actores. Los

casos de uso que se dan en la aplicacin se detallan ms adelante en

tablas. A continuacin se muestran un diagrama del conjunto los casos

de uso.

Figura 3.3: Casos de uso del sistema


(Fuente: elaboracin propia)

78
Caso de uso Reproducir video

Versin 1.0 (10/07/2016)

Descripcin Reproduccin de un video

Actores Usuario que desea ver un video

Objetivo Reproducir un archivo de video disponible en el enjambre

Pre-Condicin Tener descargadas las primeras partes del video

Post-Condicin El archivo queda almacenado en el disco

Escenario El usuario introduce la opcin r de reproduccin en la

aplicacin. El archivo de video se reproduce va el

reproductor.

Tabla 3.1: Caso de uso Reproducir video

Caso de uso Generar archivo torrent

Versin 1.0 (10/07/2016)

Descripcin Generacin de un archivo torrent a partir de un video

Actores Usuario que desea compartir un video

Objetivo Crear un archivo torrent con los datos apropiadas para la

descarga de un video

Pre-Condicin El archivo de video completo

79
Post-Condicin El archivo torrent asociado al archivo video queda creado

Escenario El usuario inicia la aplicacin, selecciona la opcin 2 generar

torrent a partir de archivo/s. El torrent se crea con el nombre

dado por el usuario, este archivo lleva la fecha de creacin,

autor, comentarios, nmero de piezas del archivo y la URL

del tracker donde es anunciado.

Tabla 3.2: Caso de uso Generar archivo torrent

Caso de uso Compartir piezas

Versin 1.0 (10/07/2016)

Descripcin Compartir piezas a los pares con quien est conectado

Actores Usuario que desea compartir un archivo

Objetivo Compartir piezas del archivo de video

Pre-Condiciones Descargar el archivo torrent y una lista de pares (dada por el

tracker) con quienes compartir las piezas

Post-Condiciones El archivo queda descargado y se suben piezas del archivo

Escenario El usuario ingresa la opcin 1 de descarga de archivo en la

aplicacin, ingresa el archivo torrent o enlace magntico. El

archivo de video es descargado en la carpeta

/home/usuario/Descargas. El usuario con el video completo o

incompleto comparte las piezas de video.

Tabla 3.3: Caso de uso Compartir piezas

80
Caso de uso Conexin tracker

Versin 1.0 (10/07/2016)

Descripcin Conectar al servidor tracker

Actores Usuario que desea conectar con otros pares

Objetivo Que un par se conecte a otros pares asociados al archivo

torrent

Pre-Condicin El servidor tracker estar escuchando conexiones

Post-Condicin El servidor actualiza la lista de pares que se encuentran

descargando el video

Escenario El usuario carga el archivo torrent en la aplicacin, se

conecta al tracker, y recibe la lista de pares donde puede

descargar y compartir las partes del video

Tabla 3.4: Caso de uso Conexin tracker

Caso de uso Subir archivo torrent

Versin 1.0 (10/07/2016)

Descripcin Publicacin del archivo torrent en el servidor tracker

Actores Usuario que desee compartir un torrent

81
Objetivo Compartir un archivo torrent que contiene la informacin del

video a descargar

Pre-Condicin La creacin de un archivo torrent y una cuenta en el servidor

tracker

Post-Condicin El archivo torrent queda publicado en el servidor tracker

Escenario El usuario que posee una cuenta en el tracker sube el

archivo torrent. El archivo torrent queda publicado en el

servidor.

Tabla 3.5: Caso de uso Subir torrent

Casos de uso Descargar archivo torrent

Versin 1.0 (10/07/2016)

Descripcin Descargar el archivo torrent desde el servidor tracker

Actores Usuario que desee ver un video

Objetivo Descargar un archivo de video

Pre-Condicin Conexin a la Web del tracker

Post-Condicin El archivo torrent queda descargado en la mquina del

usuario

Escenario El usuario se conecta a la web del tracker para descargar el

archivo torrent. El torrent queda descargado en la mquina

82
del usuario

Tabla 3.6: Caso de uso Descargar archivo torrent

Casos de uso Ver metadata

Versin 1.0 (10/07/2016)

Descripcin Ver la informacin contenida en el torrent

Actores Usuario que desee ver el contenido de un torrent

Objetivo Ver campos de un archivo torrent

Pre-Condicin Generacin de un archivo torrent

Post-Condicin El archivo torrent queda decodificado y se ve su contenido

Escenario El usuario inicia la aplicacin, selecciona la opcin 3 ver

metadatos de un torrent. El torrent se lee con el nombre dado

por el usuario, este archivo contiene el info-hash, la fecha de

creacin, autor, comentarios, nmero de piezas del archivo y

la URL del tracker donde es anunciado.

Tabla 3.7: Caso de uso Ver metadata.

83
3.3 Diagrama de Secuencia

La figura 3.4, detalla cmo el usuario sube un archivo torrent al

servidor web del tracker. Este paso es necesario para comenzar a

compartir el archivo con el enjambre de pares. Primero el usuario inicia la

aplicacin BT, luego selecciona la opcin de generar un archivo torrent a

partir de un archivo de video, en la generacin del torrent el usuario

ingresa campos como nombre del torrent, fecha de creacin, como opcin

el tamao de la pieza, URL del tracker, nombre del creador del torrent y

comentarios; una vez generado el torrent el usuario lo sube a la web del

tracker. Una vez publicado en el tracker, este lo guarda en su base de

datos, para despus ser compartido por otros usuarios.

El tracker posee estadsticas sobre el nmero de transferencias del

archivo, el nmero de pares con una copia completa del archivo

(seeders), el nmero de pares con partes del archivo (leechers) para un

momento determinado.

84
Figura 3.4: Diagrama de secuencia subir archivo torrent

En la figura 3.4, se muestra como se genera un archivo torrent a

partir de un archivo determinado, el usuario inicia la aplicacin BitTorrent,

la aplicacin se inicia y muestra el men principal del programa, el usuario

selecciona la opcin de generar un archivo torrent, ingresa el nombre del

archivo a compartir, la aplicacin lee el archivo y despliega los campos

del torrent, el usuario rellena los campos (nombre torrent, tracker, tamao

pieza, nombre creador, fecha de creacin, hash SHA-1 y comentarios ),

mediante la funcin codificar archivo se crea finalmente el archivo torrent.

La figura 3.5, es generalizada, se pueden crear torrents a partir de

un archivo nico, como de directorios que contienen varios archivos.

85
Figura 3.5: Diagrama de secuencia generar archivo torrent.

En la figura 3.6, se muestra el proceso de ver los metadatos de un

archivo torrent, el usuario inicia la aplicacin, esta se inicia escuchando en

los puertos asignados al protocolo y muestra la opciones principales, el

usuario selecciona la opcin de ver metadatos, luego ingresa el archivo

torrent o el enlace magntico, una vez ingresado la aplicacin despliega

los campos del enlace magntico o mediante la funcin decodificar torrent

despliega al usuario la informacin contenida en el torrent.

86
Figura 3.6: Diagrama de secuencia ver metadatos torrent.

En la figura 3.7, se observa el proceso de comparticin de piezas,

se asume que el tracker contiene los torrents a descargar, de manera que

el usuario inicia una conexin con el servidor tracker y realiza la bsqueda

del torrent que desea descargar, una vez encontrado lo descarga a su

mquina, luego inicia la aplicacin BT, que se inicia escuchando en los

puertos oficiales del protocolo, el usuario selecciona la opcin de agregar

un torrent y carga el torrent.

Una vez cargado el torrent, la aplicacin inicia la sesin principal y

se conecta con el tracker que se encuentra aadido en el archivo torrent,

87
para conocer los dems pares que posee piezas del archivo, la aplicacin

solicita al tracker una lista de IP's de los pares que estn conectados, el

tracker le enva una lista de los pares (IP y puerto) al par que la solicito,

luego de esto el par se une al enjambre de pares, entre los pares se

envan mensaje de estado, comenzado con el handshake para establecer

la conexin, el mensaje bitfield sirve para conocer que piezas posee cada

par (1 cuando tiene la pieza y 0 cuando no), si el par contiene una pieza

que el otro no, ste ltimo le enviar un mensaje interested, por defecto

el par iniciara bloqueado y no podr compartir piezas, hasta que el otro

par lo desbloquee con el mensaje unchoke, de esta manera el par podr

solicitar los bloques de las piezas que an no tiene, as intercambia

bloques de piezas con otros pares.

En este paso el par puede enviar informacin al tracker de su rol en

el enjambre asociado al torrent, al tener las primeras piezas de un

archivo de video inicia un reproductor y continua intercambiado bloques

de las piezas con otros pares. Tras completar el archivo, es decir todos

los bloques de todas las piezas, este enva el mensaje de estado not

interested, en el caso donde le enven bloques de una pieza que ya tiene,

dado que fue solicitada anteriormente en un momento donde no la tena.

En el momento que completa el archivo le informa al tracker de su nuevo

rol (seed). Finalmente el reproductor inicia la reproduccin del video al

88
tener descargadas las primeras piezas, todo esto antes de finalizar la

descarga.

Figura 3.7: Diagrama de secuencia compartir piezas

89
En la figura 3.8, se aprecia la comunicacin entre roles de los

pares. La comunicacin se inicia enviando el mensaje Handshake por

ambas partes, de tal manera de establecer la comunicacin, luego se

enva el mensaje Bitfield para conocer que pieza tiene cada par, en el

caso del seed tendr todas las piezas en 1, dado esto el lecheer al estar

interesado por las piezas le enva el mensaje de estado interested al

seed,el leecher no podr pedir ninguna pieza mientras se encuentre en el

estado bloqueado (choked), que es el estado inicial de un par. Cada 10

segundos, el algoritmo seleccionar nuevos pares como desbloqueados,

en la seleccin de los pares se considera a los pares con mejores tasas

de subida, otro mtodo para desbloquear a un par consiste en el algoritmo

de desbloqueo optimista, que permite desbloquear a pares que fueron

bloqueados por el algoritmo anterior. Cada 30 segundos, el algoritmo

selecciona a pares para desbloquearlos, esto es til para los pares que

tienen bajas tasas de subida o pares que no tienen piezas que compartir.

Una vez desbloqueado, el leecher puede solicitar bloques de la

pieza que desea obtener, ya que se encuentra desbloqueado es posible

enviarle bloques de la pieza que solicit, mediante el mensaje pieza el

seed enva el bloque correspondiente a una pieza, luego el leecher puede

solicitar bloques de otra pieza, sin embargo, tiene la prioridad completar

los bloques de la primera pieza solicitada antes de la segunda pieza, por

90
lo que al completar los bloques de la primera pieza, el leecher enva el

mensaje tener para comunicar a otros pares que tiene la pieza completa,

de esta manera evita recibir bloques de esa pieza que anteriormente

haba solicitado, despus de esto recibe bloques de otra pieza, al

completar esa otra pieza vuelve a enviar el mensaje tener, y en el caso de

que no existan piezas que desee el leecher enva finalmente el mensaje

not interested.

Figura 3.8: Diagrama de una comunicacin entre seed y un leecher

91
En la figura 3.9, se muestra una comunicacin entre pares, en este

caso ninguno de los pares tiene el rol de seed, comienza la comunicacin

de la misma forma que el la figura 3.3.5. En cambio en este diagrama se

observa el mensaje cancel que es enviado cuando el par 2 solicito

bloques de una pieza a par 1 y par 3, par 1 le enva ese bloque solicitado,

por lo que par 2 enva el mensaje cancelar al par 3, para que de esta

forma evitar mensajes de bloques ya completados.

92
Figura 3.9: Diagrama de la comunicacin entre los pares

93
Como se explic anteriormente la aplicacin implementa el

protocolo BitTorrent utilizando la librera Libtorrent-rasterbar. En la Figura

3.10 se muestra el diagrama de clases, en el cual se pueden observar la

participacin de las distintas clases de la librera, donde cada una de

estas clases son utilizadas para cumplir las funciones principales del

sistema.

Figura 3.10: Diagrama de clases

94
La clase principal es Session, una vez creado el objeto de session, este

genera el hilo principal que gestiona todos los torrents. Mediante los

mtodos de esta clase se puede pausar, reanudar, aadir y eliminar un

torrent de la sesin, definir los puertos en el que escucha conexiones,

obtener el estado de los torrents, iniciar y detener servicios upnp, lsd, dht

y natpmp.

La clase torrent_handle, como su nombre lo indica es el manejador

de torrent, con esta clase se recupera informacin del torrent. Mediante

los mtodos de esta clase es posible definir los lmites de subida y

descarga del torrent, aadir, leer y ver si la pieza se encuentra

completamente descargada, habilitar la descarga secuencial de las

piezas, la configuracin de la prioridad que posee cada pieza y la

configuracin del plazo lmite de cada pieza, estos 2 ltimos mtodos

permiten descargar las primeras piezas del video antes que cualquier otra

pieza, existen 8 prioridades, desde 0 a 7, la prioridad 0 indica que la pieza

no est totalmente descargada, la prioridad 1 es la normal por defecto,

que significa que el algoritmo de la pieza aleatoria ms rara est activo

para todas las piezas, la prioridad 2 indica que tiene una prioridad ms

alta que la prioridad normal, las piezas se prefieren sobre las piezas que

poseen la misma disponibilidad, pero no sobre las piezas con baja

disponibilidad, la prioridad 3 indica que se seleccionan las piezas como

95
piezas parciales, la prioridad 4 indica se prefieren sobre las piezas

parciales, pero no sobre las piezas con baja disponibilidad, la prioridad 5

es la misma que la prioridad 4, la prioridad 6 indica que las piezas se

seleccionan como cualquier pieza con disponibilidad 1, por ltimo la

prioridad 7 indica la prioridad mxima, la pieza se prefiere sobre cualquier

otra pieza con una prioridad menor.

La configuracin del plazo lmite de pieza se refiere a que adems

de que una pieza posea una prioridad, la pieza tiene un plazo lmite para

ser descargada, es decir, libtorrent descarga esta pieza completa antes

de que el plazo lmite expire.

La clase create_torrent mantiene el estado para crear un torrent,

luego de haber agregado toda la informacin se llama

create_torrent::generate() para generar el torrent. Las clases bencode y

lazy_entry permiten codificar/decodificar datos respectivamente, los

mtodos de esta funcin se utilizan principalmente para generar y ver el

contenido de un torrent.

Utilizando las clases explicadas anteriormente se escribieron 2

archivos de cabecera que incluyen las libreras libtorrent y Boost, 3

mdulos con los mtodos de las clases y las funciones principales de la

96
aplicacin, todo esto incluido en el archivo principal como el men del

programa.

El enlace al cdigo fuente del programa se encuentra en Anexo.

BTStream.h: Es el archivo de cabecera principal, donde se

incluyen las libreras de C/C++, Libtorrent y Boost.

BTStreamini.h: Es el archivo de cabecera secundario, este incluye

a su vez al archivo de cabecera principal junto a libreras de red. En este

archivo se implementan las funciones principales del programa que se

explican a continuacin:

La funcin lector_archivo recibe el nombre del archivo como

argumento, un vector tipo char, el cdigo de error de libtorrent, y una

variable tipo entero para el lmite del archivo. Se abre el archivo, luego se

activa la posicin al final del archivo, si no hubo problemas la funcin

fseek retorna cero, luego con ftell se devuelve la posicin actual del

archivo que se encuentra al final, el resultado se almacena en la variable

s tipo long, si es menor a cero cierra el archivo, s es comparada con el

lmite del archivo, si supera el lmite se cierra el archivo. En la siguiente

instruccin saltamos al inicio del archivo con la funcin fseek, se

redimensiona el vector con la posicin final del archivo, y finalmente se

97
leen los datos del archivo con la funcin fread, que devuelve el nmero de

datos ledos.

La funcin sleep_and_input se utiliza en el bucle principal del

programa, para pausar la salida en pantalla al ingresar una opcin, es

decir cuando el usuario presiona una tecla, mediante la funcion _kbhit()

que es verdadera en el caso de que el usuario presione una tecla, esta

tecla se captura con la funcin _getch() que almacena en la variable

entera tipo puntero c la tecla presionada, para despus llamar a la funcn

sleep que retrasa por un nmero de segundos las siguientes

instrucciones.

La funcin reproductorbtstream tiene como argumento el nombre del

video, esta funcin crea un proceso hijo mediante la llamada al sistema

fork, se declara un arreglo tipo char que almacena el nombre del

reproductor y video. Si no hubo error en la creacin del hijo, la ejecucin

de la llamada al sistema fork devuelve un cero al proceso hijo, si este es

cero entonces ejecuta execvp que tiene como primer argumento el

nombre del reproductor y como segundo argumento el nombre del video a

reproducir. Con esto el proceso hijo ejecuta el reproductor mientras el

proceso padre continua descargando el archivo.

98
La funcin print_app_bt utiliza la estructura de libtorrent para

obtener informacin de los pares, primero se recorre a los pares desde el

inicio hasta el final, si cumple que se envi el mensaje handshake o

conectando o cola de espera, se llama a la funcin print_endpoint que

imprime la IP y puerto de los pares conectados, se imprime la IP remota

con el nombre y versin de la aplicacin BT que el par se encuentra

ejecutando, como tambin la IP local con la aplicacin BTS. En la figura

3.11 se muestra la funcin reproductorbtstream y lector_archivo.

Figura 3.11: Archivo BTStreamini.h

Main.cpp: Es el men del programa, que rene a los dems

mdulos, muestra las principales opciones del programa: Descargar

99
archivo, generar torrent, mostrar metadatos del archivo, mostrar puertos

abiertos en el localhost y mostrar informacin asociada al programa.

VerMetadata.cpp: Decodifica y muestra el contenido de un torrent,

o los parmetros de un enlace magntico, se declaran e inicializan las

variables booleanas enlace magntico y archivotorrent, para ser

ingresadas por el usuario, se utilizan contadores para identificar la

extensin de un archivo torrent o enlace magntico.

En el caso de ingresar un archivo torrent se invoca la funcin

lector_archivo implementada en BTStreamini.h, esta funcin retorna 0 en

el caso de que no se hayan producido errores, luego se crea el objeto de

lazy_entry para la estructura del diccionario torrent, mediante la funcin

lazy_bdecode se decodifica el archivo, primeramente se muestra la

informacin en crudo del torrent con la funcin print_entry, luego se crea

el objeto torrent_info para mostrar la informacin contenida recorriendo

nodos y trackers ingresados. Con la funcin to_hex se transforma el info-

hash en hexadecimal para imprimirlo en pantalla, junto con la toda la

informacin en el torrent (largo_pieza, comentario, creador por, enlace

magntico, nombre, nmero de archivos y archivos). Para el caso de ms

de un archivo se crea una instancia de file_storage para recorrer y

mostrar el total de archivos.

100
En el caso de ingresar un enlace magntico se definen variables

tipo string correspondientes a los parmetros de un enlace magntico

como xt, urn, dn, tr. Al conocer la estructura de una enlace, se inicializan

contadores para reconocer cada uno de los parmetros, los contadores

aumentan su valor cada vez que se cumple la igualdad con un carcter

relacionado al parmetro del enlace. Con un bucle se recorre por

completo el enlace magntico asignndole los valores correspondientes a

cada variable que representa un parmetro de un enlace magntico, para

finalmente imprimirlos por pantalla. En la figura 3.12 se muestra un

segmento del cdigo de Vermetadata.cpp.

Figura 3.12: Cdigo de Vermetadata.cpp

101
GenerarTorrent.cpp: Genera el archivo torrent desde un archivo

determinado, se declaran las variables tipo string conel nombre del

archivo, creador, tracker, comentario, webseeding, variables tipo entero

para la opcin y el tamao de la pieza. Se despliegan las opciones del

relleno de los campos del torrent, con un switch para cada opcin, hasta

ingresar la opcin 0 de salida. Se aaden el o los archivos ingresados (en

el caso de aadir una carpeta con varios archivos), se crea una instancia

de file_storage para comprobar el nmero de archivos especificados, en

el caso de ser cero se imprime un mensaje de archivo no especificados.

Se crea el objeto create_torrent con parmetros tamao de pieza, lmite

de archivo, flag y el objeto file_storage, en el objeto create_torrent se

aaden todos los atributos necesarios para la comparticin del archivo

mediante el torrent. Finalmente se utiliza el mtodo generate del objeto

create_torrent para generar el archivo, mediante la funcin bencode se

codifican todos los datos ingresados y se escribe en el disco el archivo

codificado con la extensin .torrent.

En la figura 3.13 se muestra las opciones al incluir en el archivo

torrent del cdigo GenerarTorrent.cpp.

102
Figura 3.13: Cdigo de GenerarTorrent.cpp

Compartirpiezas.cpp: Baja y sube el archivo con otros pares.

Primero se ingresa el nombre del archivo torrent o enlace magntico, se

recorre la variable a la cual se asign el dato ingresado, se identifica si se

trata de un torrent o magnet, en el caso de no se trata de ninguno de los

2 se despliega un mensaje que dice: falta el enlace o torrent, se indica la

forma ingresar los datos y se explica de que en el caso de tratarse de un

torrent este debe estar en la misma carpeta, donde se encuentra la

aplicacin. Se definen variables booleanas para las opciones del

programa: verformato, archivos, pausa, pares, llog, tracker, eliminar,

piezas, piezasnumeradas, reproducir, dht, utp, menu, todas inicializadas

en false. Se construye la sesin, se llama al metodo de session para

103
escuchar en el rango de puertos oficiales de BT (6881- 6889). Se

inicializan los servicios dht, lsd, upnp y natpmp mediante el objeto

session. Se declara cadena como una variable tipo char, esta variable

contendr la ruta donde se descarga el archivo, con la llamada a system

se escribe la ruta hacia la carpeta de Descargas con la variable de

entorno de superusuario, se abre el archivo de la ruta, se lee y asigna a la

variable cadena. Se crea el objeto para el manejo del torrent de la clase

torrent_handle, se crea el objeto add_torrent_params donde se almacena

la ruta para guardar el archivo y su modo de almacenamiento, se aade el

URL del magnet-link o el nombre del torrent en el objeto que aade

parmetros al torrent, luego con el objeto session se aade el torrent a la

sesin utilizando los valores ingresados en el objeto add_torrent_params,

esto se asigna al objeto torrent_handle anteriormente creado.

En la variable de tipo torrent_status se almacena estado del torrent

obtenido con el mtodo del manejador de torrent, luego se inicia el bucle

principal del programa que muestra estado de los elementos del

protocolo. Se llama a la funcin sleep_and_input para ejecutar las

opciones desplegables mientras se descarga el archivo, como mostrar

dht, opciones, trackers, informacin utp, reproduccin de video, eventos

del sistema, archivos del torrent, descarga de piezas, eliminar torrent de la

sesin, pausar la sesin, piezas enumeradas y aplicaciones de BitTorrent

conectadas. Dentro del bucle se imprime los datos del archivo que se

104
est descargando, el porcentaje de descara, el nombre del archivo, la

tasa de descarga y subida en kB/s, el nmero de pares, nmero de pares

por sesin, URL del tracker, el estado del archivo y una barra de progreso

de la descarga, donde se observa que bloques de cada pieza se

encuentra descargado. Luego si se cumple la condicin que el estado del

torrent es distinto a la descarga de metadatos entonces se despliega

informacin del nmero de archivos, tamao de bloque, largo pieza y el

nmero de piezas total del torrent sobre el nmero de piezas

descargadas.

Se asigna el 20% del total de piezas a la variable entera

porcent_vid que se utilizara para reproducir el video ms adelante. Se

utilizan las funciones de la clase que maneja los torrent piece_priority y

set_piece_deadline dentro de un for que recorre desde la pieza cero hasta

la pieza que corresponde a la 20% del total de piezas, de esta manera se

le da prioridad y plazo lmite a las primeras piezas del video por sobre el

resto de las piezas. Los parmetros de la prioridad de pieza corresponde

al ndice de pieza i y al nmero de prioridad de la pieza desde el 0 al 7,

para el plazo lmite los parmetros corresponden al ndice de pieza i y al

tiempo asignado como lmite en milisegundos. Con estas instrucciones es

posible comenzar a reproducir el video desde el inicio al tener al menos el

20% de las piezas.

105
Una de las opciones implementadas es piezas enumeradas que se

activa al presionar la tecla 'n', lo que hace que la variable piezanumeradas

se vuelva de false a true y si adems se cumple la condicin de que el

estado del torrent es distinto a la descarga de metadatos, entonces se

imprimen el total de piezas, colocando en verde las piezas que se han

descargado y en blanco las que todava no, esto se consigue mediante el

objeto torrent_handle se obtienen las piezas totales, luego se recorre (con

un for) desde la pieza cero hasta la ltima pieza, almacenando las piezas

en un vector de tipo entero llamado my_vector[total_piezas+1] , se utiliza

la funcin have_piece del manejador de torrent que devuelve verdadero si

la pieza se encuentra totalmente descargada, en el caso de ser verdadero

imprime el vector con la pieza en color verde mediante la funcin esc, si

se llega a la pieza final imprime un salto de lnea, en el caso de que la

pieza no se encuentre descargada se imprime el vector de piezas con el

color normal en consola, de esta manera se sabe que piezas y cuales no

se encuentran descargadas.

Otra opcin es pausa que se activa cuando el usuario presiona la

tecla 'p', con el objeto session si su estado es descarga, mediante esta

opcin se pausa la sesin, en el caso contrario se reanuda la descarga.

La opcin eliminar remueve el torrent de la sesin de descarga y al mismo

tiempo elimina los archivos de la carpeta de descarga.

106
Por ltimo la opcin ms importante para el objetivo de la

aplicacin es la reproduccin, la cual se activa al presionar la tecla 'r'

mientras el programa descarga el archivo, y si se cumple que el estado

del torrent es distinto a la descarga de metadatos, ya que sin los

metadatos no es posible descargar las piezas, por lo que si se tienen los

metadatos descargados con un porcentaje mayor al 20 por ciento de las

piezas se iniciara la reproduccin del archivo con el reproductor Mplayer.

Para lograr esto, primero se define la variable vector rutafija de tipo char,

se abre el archivo donde se tiene la ruta de descarga, la ruta queda

almacenada en la variable rutafija que luego se asigna a la variable

rutafinal de tipo string, a la cual se le aade un backslash, despus se

obtiene el nombre del archivo general, el cual se recorre carcter por

carcter para identificar que extensin de video o audio posee, en el caso

de coincidir con alguna extensin de video o audio, quiere decir que el

torrent se gener a partir de un archivo nico de audio o video, por lo que

se aade a la ruta final, con esto ya es posible enviar la ruta completa al

reproductor, en cambio si el caso es distinto, se asume que se trata de

una carpeta, por lo que se recorre todos los archivos contenidos en la

carpeta, en cada uno de ellos es recorrido carcter por carcter para

encontrar alguna extensin de video o audio, luego se almacena el

nombre del torrent en la variable carpeta tipo string, tanto la carpeta como

el nombre del video y su extensin se aaden a la ruta final, con esto

invoca a la funcin reproductorbtstream con el parmetro de la ruta final,

107
que reproduce el archivo de video, despus de la llamada a la funcin se

realiza un break para detener el bucle y evitar llamar iterativamente al

reproductor.

En resumen la opcin de reproducir prueba si se trata de un

archivo nico de audio/video o si se trata de una carpeta con archivos

dentro de ella, en los 2 casos aade la ruta hacia el archivo a reproducir y

la enva como parmetro a la funcin que llama al reproductor.

En la figura 3.14 se muestra el cdigo del bucle principal

CompartirPiezas.cpp.

Figura 3.14: Cdigo archivo CompartirPiezas.cpp

108
3.4 Diseo dinmico

La figura 3.15 muestra el sistema BitTorrent Streaming, los agentes

externos, el usuario, el tracker, y la aplicacin BitTorrent denominada

BTStream como subsistema principal.

Figura 3.15: Diagrama Sistema BT Streaming (Fuente: elaboracin propia)

En la figura 3.16 se observa el diagrama de colaboracin

subsistema BTStream, muestra la secuencia de los mensajes generados

para llevar a cabo la descarga y subida de archivos.

109
Figura 3.16: Diagrama de comunicacin subsistema BTStream

(Fuente: elaboracin propia)

En la figura 3.17 se presenta el diagrama de colaboracin Generar

torrent, que muestra la secuencia de los mensajes para llevar a cabo la

creacin de un archivo torrent a partir de un archivo de video.

110
Figura 3.17: Diagrama de comunicacin Generar torrent
(Fuente: elaboracin propia)

En la figura 3.18 se presenta el diagrama de colaboracin Ver

metadata, en el que se observan la secuencia de los mensajes para la

lectura y decodificacin de un torrent.

Figura 3.18: Diagrama de comunicacin Ver metadata


(Fuente: elaboracin propia)

111
En la figura 3.19 se presenta el diagrama de colaboracin

Compartir piezas, que muestra como colaboran los objetos entre ellos

para realizar el procesos de compartir y reproducir las piezas de video.

Figura 3.19: Diagrama comunicacin Compartir piezas


(Fuente: elaboracin propia)

3.5 Resumen

En este captulo se explic el diseo y la arquitectura del sistema,

comprendiendo las principales tareas que debe realizar. Se realiz una

explicacin del propsito del sistema, la plataforma planteada, las partes

que componen el sistema, el escenario de aplicacin, las restricciones del

112
sistema, as como las diversas etapas que desarrolla cada componente

para procesar los datos requeridos.

Se ha expuesto mediante en los diagrama la comunicacin entre el

rol de seeder y leecher, los tipos de mensajes que se intercambian en la

comunicacin, la interaccin del usuario y los mdulos del sistema

mediante el diagrama de casos de uso. Finalmente se presentaron los

casos de uso del sistema, diagrama de secuencia y colaboracin.

3.6 Comentarios Finales

El diseo se ha realizado dividiendo la aplicacin en 4 partes

principales; la comparticin de piezas, generacin de torrent, ver

metadatos y el men principal de opciones que une a las 3 partes

anteriores (main), En el caso de la subida de torrent, es un paso donde el

usuario interacta directamente con el servidor tracker, aqu la aplicacin

solo se encarga de la creacin del torrent.

Se decidi construir la aplicacin en modo consola por su enfoque

primeramente en la funcionalidad de la aplicacin, y se consider

apropiado por tratarse de una aplicacin de red.

113
IV. IMPLEMENTACIN Y PRUEBAS

4.1 Introduccin

En este captulo se explica la implementacin y pruebas de la red

P2P para la distribucin de videos. Primero se describe el escenario de

aplicacin y el armado de la red. Segundo se presentan las pruebas de

efectividad realizadas. Finalmente se muestra el anlisis de las pruebas.

Se adjunta cdigo de la aplicacin anexo a la memoria como recurso

explicativo.

La implementacin de BTStream emplea la librera Libtorrent-

Rastebar [15], la librera Boost [23], el reproductor multimedia Mplayer

[24], y el servidor tracker RivetTracker [25]. Boost es un conjunto de

libreras de software libre que extienden las capacidades del lenguaje de

programacin C++. El licenciamiento de Boost es BSD. Mplayer es un

reproductor multimedia multiplataforma. El licenciamiento de Mplayer es

GPL. RivetTracker es una versin modificada de PHPBTTracker. Escrito

en PHP, este tracker BitTorrent utiliza MySQL como base de datos.

Proporciona feeds RSS, soporte opcional para la seed HTTP, estadsticas

detalladas de conexin y fcil instalacin. El licenciamiento de

RivetTracker es GPLv2. Las libreras estn escritas en C++, el reproductor

en C y el tracker en PHP.

114
Figura 4.1: Grfico de dependencia de BTS
(Fuente: elaboracin propia)

4.2 Escenario de aplicacin

En esta seccin se describe como un usuario acta en el ambiente

P2P BT de este trabajo, se exponen las reglas mnimas bajos las cuales

el usuario interacta con la aplicacin.

Las reglas mnimas para el funcionamiento del sistema son:

- El archivo de video debe tener un formato mp4, flv o mkv.

- Debe existir por lo menos un seeder al inicio de la distribucin de

video.

- Un tracker local instalado (ver anexo).

- El reproductor Mplayer instalado

- Una cuenta de usuario creada en el tracker.

115
Primero el usuario cuenta con un script (ver anexo) de descarga y

compilacin de la aplicacin, con esto obtiene las libreras utilizadas,

cdigo fuente y el ejecutable del programa. La aplicacin se ejecuta en

plataformas basadas en Debian, por lo cual crear automticamente la

carpeta Descargas en la ruta /home/usuario/ dentro de esta carpeta se

almacena el video y otros archivos indicados en el torrent. Una vez

descargada la aplicacin se ingresa a la carpeta BTStreaming-master y se

arranca el ejecutable.

El usuario que posee el video a compartir crea el torrent mediante

la aplicacin BTS seleccionando la opcin 2 del programa, ingresa los

campos requeridos para su creacin, una vez creado se accede a la

interfaz web del tracker local para subir el archivo torrent, ingresa el login

y password de su cuenta previamente creada, selecciona el archivo

torrent a compartir e ingresa el info-hash del torrent para la comprobacin

la integridad de los datos, con esto se publica el torrent finalmente en el

tracker. Una vez publicado otros usuarios de la red pueden descargar los

metadatos a su mquina, para comenzar a descargarlos debe existir un

seed, que normalmente es el usuario que subi el torrent al tracker,

mediante la aplicacin BTS se agrega el torrent a la descarga, de esta

manera la aplicacin reconoce que el archivo ya est completo y

comienza a seedear el video. Desde ese momento los usuarios de la red

116
local podrn acceder a la interfaz web del tracker y bajar el torrent, para

despus iniciar BTS e ingresar la opcin 1 de descargar archivo, de esta

forma comienza a bajar las primeras piezas de video.

En la interfaz de descarga el programa cuenta con una serie de

opciones desplegables, manejadas como eventos que permiten al usuario

pausar la sesin de descarga de torrent (opcin 'p'), mostrar los archivos

asociados al torrent (opcin 'a'), eliminar torrent y archivo de video de la

sesin (opcin 'e'), cuando el porcentaje de descarga llegue a 20%, la

opcin del programa reproducir torrent de video se activa, el usuario al

ingresar la opcin 'r' comienza la reproduccin de video va el reproductor

Mplayer. Al terminar la reproduccin el programa vuelve al men principal

y el video queda almacenado en /home/usuario/Descargas. En el caso de

que se interrumpa la descarga, esta se puede reanudar sin problemas

desde el punto donde se encontraba la descarga, ya que la descarga se

realiza en partes del video.

De esta forma se maneja la aplicacin BTS correctamente en

cualquier mquina de la red, esta aplicacin funciona tanto en una red

local con un tracker local, como tambin funciona conectado Internet con

un tracker remoto.

117
4.3 Pruebas de efectividad

Una vez finalizada toda la implementacin de la aplicacin y

descrito el escenario, se ha realizado diferentes pruebas para comprobar

el correcto funcionamiento de la misma. En las pruebas se utiliz

principalmente la aplicacin BTS desarrollada para esta memoria, tambin

se emplearon aplicaciones BT para la descarga general de archivos

desarrolladas por terceros, para de esta forma comprobar la

comunicacin con otras aplicaciones que implementan el protocolo

BitTorrent. Se incluyeron pruebas como la desconexin del seed y cierre

inesperado de las aplicaciones.

El sistema se llev a cabo en el laboratorio Azufre del

departamento de Computacin e Informtica, donde se mont una

pequea red par-a-par LAN cableada con un router Fujitel FUJ108R, un

switch D-Link Des-1016D y un switch Cisco Catalyst 1900 series, el cable

es de categora 6 ANSI/TIA/EIA-568-B.2-1 como se observa en la figura

4.2, la red cuenta con 8 mquinas con el sistema operativo GNU/Linux

Ubuntu 11.10. En una de ellas se ha instalado un servidor con el tracker

RivetTracker para que los pares se pongan en contacto unos con otros.

En todas las mquinas se ha instalado la aplicacin BTS.

118
Figura 4.2: Router y switch de la red P2P BTS.

Se ha instalado un sniffer Wireshark en algunas mquinas para

capturar el trfico generado y ver los paquetes que circulan por la red. Se

ha utilizado la herramienta de exploracin de redes y sondeo de

seguridad / puertos Nmap/Zenmap para determinar las caractersticas de

cada equipo de la red. Se crearon torrents a partir de videos de corta,

mediana y larga duracin, como archivos nicos y formados por carpetas.

Una vez preparado todos los elementos, se ha procedido a realizar varios

tipos de prueba: la prueba con un seed y un leecher, la prueba de varios

seed y un leecher, la prueba de un seed y varios leecher, la prueba de

varios seed y varios leecher. Se ha instalado un servidor FTP en la red

119
local para comparar la velocidad de descarga con BTS. Finalmente una

prueba con un servidor tracker remoto con cientos de seed y leechers.

Para todas las pruebas se realiz el proceso de creacin del torrent

a partir de un archivo de video, este es subido por un usuario cualquiera

de la red al tracker, desde el cual es descargado por cualquiera mquina

de la red. El proceso paso a paso se detalla a continuacin:

Para la prueba realizada, asistieron usuarios al laboratorio Azufre,

los cuales hicieron uso de la aplicacin, para esto lo primero que se hizo

fue iniciar la aplicacin como se observa en la figura 4.3. Aqu se

observan la opciones principales del programa, para crear el torrent a

partir de archivo/s se selecciona la opcin 2, en esta opcin se ingresa el

nombre de la carpeta o directamente el nombre del archivo de video, en

esta oportunidad se trata de un video mp4 de 40,4 MB con una duracin

de 4 minutos y 22 segundos.

Figura 4.3: Inicio de la aplicacin BTStream

120
Se ingresa el nombre completo del archivo que no debe contener

espacio en blanco, incluyendo la extensin del video como se muestra en

la figura 4.4.

Figura 4.4: Opcin generar torrent a partir de un archivo

Tras ingresar el nombre del video, la aplicacin despliega una serie

de campos a incluir en la informacin del torrent como se ve en la figura

4.5, entre estas opciones las obligatorias son incluir la URL del tracker

local, nombre del creador y comentarios, por ltimo se escoge la opcin

generar torrent.

Figura 4.5: Campos del archivo torrent a generar

121
El resultado de ingresar los campos en el torrent se muestra en la

figura 4.6, aqu se ve como se seleccion la opcin 0 (generar torrent),

luego se despliega la ruta, donde se dej el archivo torrent generado, la

informacin siguiente es el nmero de piezas en que est divido el

archivo, en este caso el video est dividido en 1234 piezas, desplegado lo

anterior el programa vuelve a las opciones principales.

Figura 4.6: Resultado de generar el archivo torrent.

Para ver el contenido completo del archivo generado se selecciona

la opcin 3 del programa (Mostrar metainfo), aqu se decodifica el torrent

y se muestras todas las piezas con el hash SHA-1, campos ingresados

por el usuario (URL del tracker local, creador, comentarios) y los que no,

son ingresados por defecto por la aplicacin (tamao de las piezas,

nombre del torrent) como se observa en las figuras 4.7 y 4.8.

122
Figura 4.7: Decodificacin del archivo torrent libtorrent-video1.torrent

En la figura 4.7 se ve la decodificacin del torrent, el primer campo

corresponde a la URL del tracker, donde se anuncia el torrent, en este

caso en la IP privada de la red local, el segundo campo es el comentario

ingresado por el usuario, el tercer campo es el autor del torrent, el cuarto

campo es la fecha de creacin, el quinto campo es el diccionario info el

cual contiene a su vez otros campos, en los que se destacan la longitud

de las piezas en bytes y las piezas del torrent con el hash SHA-1.

Figura 4.8: Parte 2 de la decodificacin del archivo de video.

123
En la figura 4.8 muestra el nmero de piezas totales del archivo

torrent, su info-hash para la comprobacin de datos e identificacin del

archivo, el enlace magntico que se compone de los parmetros: xt

(eXact Topic) que corresponde a URN, esta es de tipo btih (BitTorrent

Info Hash) seguido del info-hash del archivo, el parmetro dn (Display-

Name) con el nombre del video, el parmetro tr (TRacker) seguido de la

direccin URL del tracker, donde se anuncia el torrent. Finalmente se

muestra el nmero de archivos y los archivos asociados, que en este caso

es de un archivo de video.

Una vez creado el torrent y conociendo sus campos es posible

subir este archivo al tracker local, de esta manera los usuarios de la red

pueden descargarlo a sus mquinas e inicar la descarga del video. Para

esto se accede a la direccin del tracker local como se ve en la figura 4.9.

Figura 4.9: Interfaz del servidor tracker local RivetTracker.

124
Se ve en la figura 4.9 no contiene torrents, con una cuenta

previamente creada del usuario, se ingresa a la opcin aadir torrent en la

base de datos del tracker. La direccin del tracker es 192.168.0.11 ya que

en ese momento el servidor dhcp del router le asigno esa IP. Para evitar

este tipo de cambios, se configuro con IP esttica a la mquina donde

arranca el tracker, de esta manera se evitan fallas en la conexin al

tracker al descargar el archivo, adems de tener que cambiar la URL del

tracker a los torrent cada vez que cambie su IP.

Figura 4.10: Login de usuario en el tracker local

125
El usuario ingresa a la cuenta como se observa en la figura 4.10,

una vez ingresado a la cuenta, el usuario puede subir los torrents que

desee compartir, para ello debe conocer el info-hash e ingresarlo al

tracker y por supuesto subir el archivo torrent anteriormente creado, como

se ve claramente en la siguiente figura siguiente.

Figura 4.11: Aadir torrent a la base de datos del tracker

Realizado esto, cualquier usuario que acceda a la web del tracker

puede descargar el torrent para iniciar la descarga del video, un paso

antes de esto, consiste en subir el archivo, para ello el usuario que

contiene el video completo inicia la aplicacin y agrega el torrent, la

aplicacin detecta que el archivo a descargar ya se encuentra en la

126
carpeta Descargas, por lo que ese usuario automticamente comienza a

ser un seed del video, como se muestra en la figura 4.12.

Figura 4.12: Informacin de estado en la comparticin de archivos

En la figura 4.12 se observa que la aplicacin se encuentra en el

estado de seeding, la informacin importante aqu a destacar es que

posee el total de piezas del archivo, es decir 1234 piezas totales

descargadas, todava no existen pares a quienes subir el archivo, por lo

que los KiloBytes estn en cero y la cantidad de pares en la sesin

tambin se encuentra en 0.

Al cumplir los requerimientos mnimos para el funcionamiento del

sistema, el usuario inicia la aplicacin BTS e ingresa el nombre del torrent

127
(libtorrent-video1.torrent), una vez hecho esto se inicia la descarga del

archivo de video. La aplicacin tiene una serie de opciones visibles

mientras se descarga el video, en la que se encuentran mostrar tracker,

pausar torrent, eliminar torrent, mostrar la descarga de piezas

enumeradas, mostrar aplicaciones BitTorrent conectadas, y la opcin

principal reproducir torrent de video como se observa en la figura 4.13.

Figura 4.13: Opciones de BTStream

A continuacin se muestran desde la figura 4.14 hasta la figura

4.16 la descarga del archivo de video Evolutionoflibtorrent.mp4 asociado a

libtorrent-video1.torrent, en estas figuras se observa a la vez la ejecucin

del programa nload en la interfaz ethernet 1, donde est conectado a la

red, en el equipo llamado redes5, por lo que se observa la velocidad de

128
descarga, velocidad de descarga mxima y el promedio de la velocidad

de descarga en cada momento de la descarga (entrante y saliente).

La descarga tuvo un promedio de 1.07 Mbit/s de un video de

tamao 40,4 MB, el tiempo de descarga fue de 40 segundos. Esta

descarga tuvo solo 1 peer como seed y se realiz directamente al switch

principal. La aplicacin est construida para que la opcin reproducir se

active a partir del 20% del total de piezas, este 20% son secuencialmente

las primeras piezas del video, debido a que las primeras piezas se

configuraron con mayor prioridad y un plazo de lmite de tiempo bajo,

luego de tener este porcentaje, el programa descarga las siguientes

piezas utilizando el algoritmo de la pieza ms rara primero, este algoritmo

beneficia al enjambre, ya que reduce la cantidad de piezas menos

comunes, de esta forma el archivo que se comparte se distribuye

rpidamente en todos los pares.

129
Figura 4.14: Descarga de video al 9.97% y ejecucin de nload

Figura 4.15: Descarga de video al 24.98%

130
Figura 4.16: Descarga de video al 74.13%.

Figura 4.17: Descarga completa de video Evolutionoflibtorrent.mp4

131
En esta oportunidad el tiempo de descarga para un video de 40,4

MB fue de 40 segundos con una velocidad de descarga promedio de 1.07

Mbits/s. Finalmente en la figura 4.18 se muestra la reproduccin del video

Evolutionoflibtorrent.mp4.

Figura 4.18: Reproduccin de video Evolutionoflibtorrent.mp4

Para las pruebas se subieron un total 6 torrents al tracker, cada

uno de estos torrents corresponde a videos con distintas duraciones y

tamao, la mayora de estos videos tienen la extensin mp4. La figura

4.19 muestra la lista de torrents en la base de datos del tracker.

132
Figura 4.19: Estadsticas del tracker y lista de torrents

Tras efectuar el proceso de generar, subir, decodificar torrent, y

descargar el archivo de video, se ocup el programa Nmap/Zenmap para

explorar la red y obtener informacin de cada host en ella. La figura 4.20

muestra los host conectados en la red.

Figura 4.20: Host conectados a la red local laboratorio Azufre

133
En la figura localhost es la mquina donde se instal y ejecuto

Nmap, el resultado fue 8 mquinas conectadas, ms el router

(192.168.0.1). Se exploraron los primeros 100 puertos de las mquinas

que resultaron estar cerrados en la mayora de las mquinas excepto en

la que se encontraba con un servidor ftp (pure-ftpd), el servidor tracker

resulto con 99 puertos cerrados y el puerto 80/TCP abierto, en el caso del

router tuvo 98 puertos cerrados, el puerto 80 y 49152/TCP abiertos.

Prueba 1: 1 Seed - 1 Leecher (velocidad mxima 100MB)

Esta prueba consiste en medir el tiempo de descarga de videos de

diferente duracin, los tamaos varan desde 40,4 MB hasta 715,1 MB, el

formato de todos los videos es MP4. La aplicacin utilizada es BTS tanto

para el seed como el leecher, para medir los tiempos de descarga se us

la herramienta nload en la interfaz cableada, con esto se pretende medir

la velocidad de descarga de la aplicacin en una red local.

Prueba 2: 1 Seed - 1 Leecher (velocidad mxima 10MB)

Esta prueba est bajo las mismas condiciones que la prueba

anterior, la diferencia se encuentra en que la mquina leecher se conecta

a travs switch Cisco Catalyst hacia la mquina seed, esto marca una

134
diferencia ya que la velocidad mxima en este caso es de 10 MB,

mientras que en la prueba anterior es de 100 MB.

Prueba 3: 4 Seed - 1 Leecher

Esta prueba trata sobre aumentar el nmero de seed en

comparacin de la prueba anterior, de forma que el usuario que descarga

el video, obtenga piezas de diferentes fuentes, en esta prueba se hace

uso de la aplicacin BTS, en el resto de las mquinas tambin se utiliza

BTS. En esta prueba tambin se hace uso de la herramienta nload. La

idea principal de esta prueba es medir el tiempo de descarga de videos de

distinto tamao y observar la diferencia que existe al variar el nmero de

seed.

Prueba 4: FTP - BTS

Esta prueba consiste en instalar en una de las mquinas de la red

un servidor FTP (Pure-ftpd), y en otra mquina utilizar el cliente FTP (ftp),

realizar la descarga de videos de distinta duracin y tamao, ambas

mquinas conectadas al mismo switch y router. En las mismas

condiciones realizar la descarga de los mismos videos mediante la

aplicacin desarrollada para esta memoria, es decir, utilizar solo una

135
fuente y un usuario que descarga el video tanto para FTP como para

BTS.

Otra prueba es aumentar a 2 el nmero de seed con 3 y 4

leechers. Finalmente descargar videos desde 4 clientes ftp desde el

servidor ftp. Con estas pruebas se busca ver el comportamiento de los 2

protocolos al aumentar el nmero de clientes en FTP y leechers en el

caso de BT

4.4 Anlisis de la pruebas

Resultados obtenidos Prueba 1: 1 Seed - 1 Leecher

Tamao Velocidad de descarga Tiempo de bajada para un video de

archivo promedio estimada de 4min 22seg

40,4 MB 54.11 Mbit/s 8 Segundos

Tabla 4.1: Resultados prueba 1 video Evolutionoflibtorrent.mp4

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio estimada de 10min 44seg

167,5 MB 81.24Mbit/s 18 segundos

Tabla 4.2: Resultados prueba 1 video RaspberryPiRobot.mp4

136
Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio estimada de 19min 18seg

303,1 MB 86.91 Mbit/s 30 segundos

Tabla 4.3: Resultados prueba 1 video RaspberryPi-retropie

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio estimado de 1hora 14seg

715,1 MB 87.15 Mbit/s 1 minuto 10 segundos

Tabla 4.4: Resultados prueba 1 video The.Walking.Dead.S07E08

En esta prueba se midi la velocidad de descarga promedio

mediante el programa nload, y se tom el tiempo utilizando un

temporizador desde que se ingresa el nombre del torrent a la aplicacin.

Para esta prueba la mxima velocidad de descarga a alcanzar fue de

93.89 Mbit/s, se observa que en todas las descargas se realizan en el

3% del tiempo de duracin total del video, por lo que la reproduccin del

video se puede realizar desde los primeros segundos desde iniciar la

descarga.

137
Resultados obtenidos Prueba 2: 1 Seed - 1 Leecher

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio de 4min 22seg

40,4 MB 8.52 Mbit/s 41 segundos

Tabla 4.5: Resultados prueba 2 video Evolutionoflibtorrent.mp4

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio de 10min 44seg

167,5 MB 8.38 Mbit/s 2 minutos 42 segundos

Tabla 4.6: Resultados prueba 2 video RaspberryPiRobot.mp4

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio de 19min 18seg

303,1 MB 6.53 Mbit/s 5 minutos 41 segundos

Tabla 4.7: Resultados prueba 2 video RaspberryPi-retropie

138
Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio de 1hora 14seg

715,1 MB 4.48 Mbit/s 11 minutos 3 segundos

Tabla 4.8: Resultados prueba 2 video The.Walking.Dead.S07E08

Para esta prueba se redujo la velocidad de descarga a 10MB, con

una velocidad de descarga mxima que vario desde 5.49 Mbit/s hasta

9.14 Mbit/s, en los resultados se observa que la velocidad de descarga

promedio van desde 4.48 Mbit/s hasta 8.52 Mbit/s, en comparacin de la

prueba 1 tiempo de bajada de la prueba 2 fue hasta 11 veces mayor,

dado a que tambin la velocidad de descarga promedio disminuyo segn

aumenta el tamao del archivo. Debido a que la reproduccin del video

requiere el 20% de las piezas, en este caso para iniciar la reproduccin es

necesario esperar desde 30 segundos hasta 2 minutos.

Resultados obtenidos Prueba 3: 4 Seed - 1 Leecher

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo Promedio de 4min 22seg

40,4 MB 51.81 Mbit/s 5 segundos

% 8.23 Mbit/s 45 segundos

Tabla 4.9: Resultados prueba 3 video Evolutionoflibtorrent.mp4

139
Tamao Velocidad de descarga Tiempo de bajada para un video

archivo Promedio de 10min 44seg

167,5 MB 93.89 Mbit/s 18 segundos

% 8.75 Mbit/s 160 segundos

Tabla 4.10: Resultados prueba 3 video RaspberryPiRobot.mp4

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo Promedio de 19min 18seg

303,1 MB 93.35 Mbit/s 31 segundos

% 8.86 Mbit/s 279 segundos

Tabla 4.11: Resultados prueba 3 video RaspberryPi-retropie

Tamao Velocidad de descarga Tiempo de bajada para un video

archivo promedio de 1hora 14seg

715,1 MB 93.87 Mbit/s 64 segundos

% 8.86 Mbit/s 653 segundos

Tabla 4.12: Resultados prueba 3 videos The.Walking.Dead.S07E08

140
Para esta prueba se aument el nmero de seed y se mantuvo el

nmero de leecher, se hicieron las pruebas con 10 MB y 100 MB de

conexin, al comparar los resultados con las pruebas 1 y 2 en las que se

emple 1 seed y 1 leecher con 100 MB y 10 MB respectivamente, se

observa que al aumentar el nmero de seed el tiempo de bajada

disminuye ligeramente o se mantiene, la velocidad de descarga promedio

general fue mayor en la prueba 3 excepto por el video 1 en que la

velocidad de descarga promedio fue mayor en las pruebas 1 y 2, a pesar

de esto el tiempo de bajada fue menor en la prueba 3 para los 100 MB,

no asi para los 10 MB donde el tiempo de bajada fue mayor para la

prueba 3.

Resultados obtenidos Prueba 4: FTP - BTS

Tamao archivo Velocidad de descarga Tiempo de bajada

(40,4 MB ) promedio

FTP 1.03 Mbytes/s 37,59 segundos

BTS 8.47 Mbit/s 41 segundos

Tabla 4.13: Resultados prueba 4 video Evolutionoflibtorrent.mp4

141
Tamao archivo Velocidad de descarga Tiempo de bajada

(167,5 MB) promedio

FTP 1.04Mbytes/s 154.20 segundos

BTS 8.28 Mbit/s 165 segundos

Tabla 4.14: Resultados prueba 4 video RaspberryPiRobot.mp4

Tamao archivo Velocidad de descarga Tiempo de bajada

(303,1 MB ) promedio

FTP 1.03 Mbytes/s 280,09 segundos

BTS 8.17 Mbit/s 299 segundos

Tabla 4.15: Resultados prueba 4 video RaspberryPi-retropie

Tamao archivo Velocidad de descarga Tiempo de bajada

( 434,7 MB ) promedio

FTP 1.04Mbytes/s 400.83 segundos

BTS 8.23 Mbit/s 428 segundos

Tabla 4.16: Resultados prueba 4 video Game.of.Thrones.S06E09

142
Tamao archivo Velocidad de descarga Tiempo de bajada

( 715,1 MB ) promedio

FTP 1,03 Mbytes/s 659.83 segundos

BTS 8.20 Mbit/s 690 segundos

Tabla 4.17: Resultados prueba 4 video The.Walking.Dead.S07E08

Figura 4.21: Resultados descarga de un cliente FTP

La velocidad de descarga desde el servidor FTP presento menores

tiempos de bajada en todos los casos que BTS, como se observa el

resultado de la descarga del segundo video en la figura 4.21. La

velocidad de descarga promedio de FTP en los 5 videos vario

143
ligeramente, mientras que en BTS la velocidad de descarga promedio

vario en cada uno de los videos.

Por lo que FTP obtuvo mejor resultados en el caso de 1 servidor

1 Cliente, que BTS con 1 seed 1 leecher, la diferencia entre los tiempo

de bajada aumento en funcin del tamao del archivo, a mayor tamao

mayor era la diferencia entre los tiempos de bajada de FTP y BTS

1 Servidor FTP - 4 Clientes FTP

Tamao = 40.4 MB Tiempo de descarga

Cliente 1 136.5 segundos

Cliente 2 126.52 segundos

Cliente 3 145.23 segundos

Cliente 4 135.00 segundos

Tabla 4.18: Resultados prueba 4 con 1 servidor y 4 clientes FTP.

2 Seed - 3 Leechers

Tamao archivo = 40.4 MB Tiempo de descarga

Leecher 1 47 segundos

144
Leecher 2 37 segundos

Leecher 3 37 segundos

Tabla 4.19: Resultados prueba 4 con 2 seed y 3 leechers.

2 Seed - 4 Leechers

Tamao archivo = 40.4 MB Tiempo de descarga

Leecher 1 71 segundos

Leecher 2 72 segundos

Leecher 3 73 segundos

Leecher 4 76 segundos

Tabla 4.20: Resultados prueba 4 con 2 seed y 4 leechers.

Las pruebas realizadas con 1 servidor FTP y 4 clientes FTP fueron

efectuadas en simultneo, de la misma manera ocurri con BTS tanto

para el caso de 3 y 4 leechers. Al aumentar el nmero de clientes FTP el

tiempo de descarga en cada uno de los clientes aumenta

considerablemente en comparacin al tiempo de descarga de un nico

cliente. La velocidad de descarga promedio para 1 cliente fue de 1,03

Mbytes/s, en el caso de 4 clientes la capacidad del enlace se dividi para

145
cada uno de los clientes, para el cliente 1 tuvo una medida de 289

kBytes/s, para el cliente 2 una medida de 311.9 KB/s, para el cliente 3 de

271.7 kB/s, y para el cliente 4 una medida de 292.2979 kB/s.

En BTS la descarga del mismo video, aumentando el nmero de

seed a 2 y nmero de leechers a 3, obtuvo la menor medida de tiempo de

descarga, la velocidad de descarga promedio fue de 8.11 Mbit/s, esto es

debido a que existen 2 fuentes del archivo completo para 3 que lo

solicitan, adems una ventaja es que los leechers una vez que descargan

una pieza pueden inmediatamente compartirla.

Al aumentar el nmero de leechers a 4, el tiempo de descarga

aumento en comparacin a la prueba anterior, mientras que la velocidad

de descarga promedio disminuyo y fue de 5.10 Mbit/s, debido al aumento

de 1 leecher en la red. En comparacin con la prueba de 4 clientes FTP

existe una amplia diferencia en los tiempos de descarga, dado que en la

red P2P es posible aumentar el nmero de fuentes de video y a la vez

cada par puede colaborar en la comparticin del video a otros pares, por

lo que se puede observar la ventaja de la red par-a-par frente al modelo

cliente-servidor.

146
4.5 Comentarios Finales

Para transferir archivos en una red con varios computadores,

existen varias opciones, como utilizar una unidad flash y copiar los

archivos en cada equipo, aunque esto es un proceso poco prctico

cuando se trata de una red con un elevado nmero de mquinas, otra

opcin es mediante un servidor FTP, sin embargo, su rendimiento

menguara si la cantidad de computadoras es alta. Para los casos en que

es necesario transferir archivo de gran tamao a un gran nmero de

equipos, la mejor opcin es utilizar el protocolo P2P BitTorrent.

Otros motivos para descargar torrents son que ofrecen una buena

calidad de imagen y sonido, adems del manejo de archivos en la propia

mquina, para as poder realizar copias y distribuirlas con los dems

usuarios de Internet.

147
V. CONCLUSIONES Y TRABAJOS FUTUROS

5.1. Conclusiones

Tras la implementacin de la aplicacin basada en el protocolo

BitTorrent, se obtuvo un programa denominado BTStream capaz de

distribuir contenidos bajo demanda en una red par-a-par local y remota, la

aplicacin es totalmente funcional, un usuario puede utilizar la aplicacin

para reproducir contenidos multimedia mientras realiza la descarga, tanto

en un red local como una sala de clases, como de forma individual

conectado a una red remota. La aplicacin fue instalada en las mquinas

del laboratorio Azufre, por lo que se puede realizar la distribucin de

grabaciones de clases generadas tanto por los alumnos como por el

profesor.

Los resultados obtenidos de las pruebas comparando BTP con

FTP, en principio la descarga se realiz en menor tiempo en el modelo

Cliente Servidor de FTP, sin embargo, al aumentar el nmero de

clientes FTP el tiempo de descarga aumento considerablemente en este

modelo, mientras que en el protocolo BitTorrent se obtuvieron menores

tiempos de descarga, debido a que en el modelo par-a-par permite la

disponibilidad de las piezas descargadas a los otros pares que la solicitan,

ejecutando la estrategia ms solidaria para el beneficio del enjambre (la

148
pieza ms rara primero), de esta manera varia el nmero de fuentes que

proveen el archivo, lo que crea una amplia diferencia en el tiempo de

descarga de una red P2P comparado con una red C/S, este resultado

demuestra la efectividad del protocolo BitTorrent frente al aumento del

nmero de clientes, en un ambiente en el que todos los pares poseen la

misma velocidad de conexin. Por lo que el protocolo BitTorrent es la

mejor opcin a la hora de transferir archivos en una red con un nmero

elevado de clientes. Finalmente la aplicacin desarrollada tiene la ventaja

adicional de realizar la descarga y visualizacin del video de forma

paralela.

5.2. Trabajo futuro

Como trabajo futuro, al momento de descargar la metadata a

travs del navegador, desplegar la opcin de abrir el archivo mediante el

programa, para esto la aplicacin debe recibir como parmetros el archivo

torrent o enlace magntico, de esta manera se facilita la interaccin del

usuario, debido a que se evita ir hacia la ruta donde se encuentra el

archivo ejecutable, abrir un terminal, ejecutar el programa e ingresar el

nombre del torrent. De esta forma los usuarios no familiarizados con la

lnea de comandos pueden realizar la descarga fcilmente, ya que solo se

encargan de la bsqueda del contenido.

149
VI. BIBLIOGRAFA Y REFERENCIAS

[1] J. Zittrain y B. Edelman Berkman, (2002) Documentation of Internet

Filtering in Saudi Arabia. [En lnea]. Disponible en:

http://goo.gl/lbHp4 [Accedido: 14-sept-2016]

[2] Gartner Consulting, The emergence of distributed Content

Management and Peer-to-Peer Content Networks. Gartner Group,

Report #010022501, 2001

[3] M. Marino, Redes compaero a compaero como soporte de

sistemas de archivos distribuidos, Universidad Nacional de Lujn,

Lujn, Argentina, Manuscrito. [En lnea]. Disponible en:

http://www.tyr.unlu.edu.ar/tyr/TYR-p2p/marino-p2p.pdf [Accedido:

28-sept-2016]

[4] Dr. K. Tutschku. (Julio 2001), Management of Peer-To-Peer

Networks, Universidad de Wrzburg, Alemania.

[En lnea]. Disponible en: http://goo.gl/2lBH6R

[5] J. Cortell (2003) El futuro de la redes P2P en entornos corporativos.

Mundo Internet, [En lnea]. Disponible en http://goo.gl/HjPyHJ

150
[Accedido: 26 de Septiembre 2016].

[6] L. Garca, Diseo e implementacin de un protocolo de redes peer

to peer, proyecto fin de carrera, Univ. Pontificia Comillas, 2009 [En

lnea]. Disponible en: https://goo.gl/NCJZKG. [Accedido: 27-Jun-

2016]

[7] D. De Vera GoalBit: la primera red P2P de distribucin de video en

vivo de cdigo abierto y gratuita, tesis de maestra, Univ. de la

Repblica (Uruguay). Facultad de Ingeniera. Instituto de

Computacin, 2010.

[8] D. Castell, Computacin Distribuida en Entornos Peer-to-Peer con

Calidad de Servicio, Memoria, Univ. De Lleida. Departamento de

Informtica e Ingeniera Industrial, 2011 [En lnea]. Disponible en:

https://goo.gl/ch90mS [Accedido: 16-Oct-2016]

[9] M. Milenkovic, S. H. Robinson, R. C. Knauerhase, D. Barkai, S. Garg,

V. Tewari, T. A. Anderson y M. Bowman, Toward internet distributed

computing. IEEE Computer, J.Computer archive, vol 36 , pp 38 46,

2003. doi: 10.1109/MC.2003.1198235

[10] J. Kurose y K. Ross Computer Networking A Top-Down Approach,

151
6th ed. Pearson Education, Boston, USA, 2012 [En lnea]. Disponible

en: https://goo.gl/yt8puC. [Accedido: 22-jun-2016]

[11] Bittorrent Protocol Specification v1.0 Contents, theory.org, 2006 [En

lnea]. Disponible en: https://wiki.theory.org/BitTorrentSpecification

[Accedido: 20-ago-2016]

[12] M. Velzquez Diseo e implementacin de un cliente peer-to-peer,

Trabajo fin de carrera, Universidad Politcnica de Madrid, Madrid,

Espaa, 2006.

[13] I.S. Garca, Censura en BiTorrent, Proyecto fin de carrera, Univ. de

Zaragoza, 2010 [En lnea]. Disponible en:

http://zaguan.unizar.es/record/5316/files/TAZ-PFC-2010-312.pdf

[Accedido: 23-oct-2016]

[14] Comparison of BitTorrent clients, Wikipedia, 2016. [En lnea].

Disponible en: https://goo.gl/NIFOTd [Accedido: 5-oct-2016]

[15] A. Norberg, Libtorrent Manual, Rasterbar, 2015. [En lnea].

Disponible en: https://goo.gl/JGQPFZ [Accedido: 6-ene-2017].

[16] MonoTorrent, Mono Project, 2009. [En lnea]. Disponible en:

http://www.mono-project.com/archived/monotorrent/ [Accedido: 24-

152
dic-2016].

[17] WebTorrent The streaming torrent client. For node.js and the web,

Github, 2015. [En lnea] Disponible en:

https://github.com/feross/webtorrent [Accedido: 28-dic-2016].

[18] WebTorrent Documentation, Github, 2015. [En lnea] Disponible en:

https://github.com/feross/webtorrent/blob/master/docs/api.md

[Accedido: 7-ene-2017].

[19] libTorrent and rTorrent Project, Libtorrent.rakshasa, 2008. [En lnea]

Disponible en: https://goo.gl/ofSSMD [Accedido: 30-dic-2016].

[20] Streaming, Wikipedia, 2016. [En lnea] Disponible en:

https://es.wikipedia.org/wiki/Streaming [Accedido: 30-Sep-2016].

[21] Transmisin en Internet Streaming de audio y video, Grupo de

Redes de Computadores, 2012 [En lnea] Disponible en:

http://www.grc.upv.es/docencia/tdm/practicas/P3.pdf [Accedido: 7-

Oct-2016]

[22] A. Vlavianos, M. Iliofotou y M. Faloutsos BiToS: Enhancing

BitTorrent for Supporting Streaming Applications Departamento de

Ciencias de la Computacin e Ingeniera, Universidad de California

153
Riverside, California, USA, Abr. 2006. [En lnea] Disponible en:

http://alumni.cs.ucr.edu/~aggelos/papers/BiToS.pdf [Accedido: 2-oct-

2016]

[23] Documentacin Librera BOOST versin 1.60.0, Boost, 2015.

[En lnea] Disponible en: http://www.boost.org/doc/libs/1_60_0/

[Accedido: 20-ene-2017]

[24] Mplayer - El reproductor de Pelculas para Linux, Mplayerhq,

2016 [En lnea] Disponible en: https://goo.gl/OyMxKb [Accedido:

25-dic-2016].

[27] Repositorio de RivetTracker, Sourceforge, 2016 [En lnea]

Disponible en: https://sourceforge.net/projects/rivettracker/

[Accedido: 27-dic-2016].

154
ANEXOS

ACRNIMOS

BT BitTorrent. 18, 22, 61, 68, 73, 75, 84, 87, 99, 115, 118, 136

BTP BitTorrent Protocol. 38, 148

BTS BiTorrent Stream. 99, 115, 116, 117, 118, 119, 120, 127, 134, 135,

136, 141, 142, 143, 144, 145, 146

C/S Cliente/Servidor. 11, 19, 149

DHT Distributed hash table. 34, 43, 49, 57, 60, 61, 65, 67, 68, 95, 103,

104

IP Internet Protocol. 22, 35, 36, 61, 88, 99, 123, 125

P2P Peer-to-Peer. 4, 9, 10, 11, 12, 17, 20, 21, 22, 23, 24, 25, 26, 27, 28,

30, 31, 32, 34, 46, 66, 69, 114, 115, 119, 146, 147, 149

PEX Peer exchange. 43, 65

TCP Transmission Control Protocol. 18, 22, 27, 35, 47, 65, 134

UDP User Datagram Protocol. 18, 35, 65, 68

URI Uniform Resource Identifier. 60, 65

URL Uniform Resource Locator. 42, 43, 45, 75, 80, 83, 84, 104, 105, 121,

122, 123, 124, 125, 161

uTP uTorrent Transport Protocol. 68, 103, 104

155
LISTA DE TRMINOS

Archivo .torrent: Archivo que contiene toda la informacin necesaria

para compartir un elemento en la red, este elemento puede ser un nico

archivo o una carpeta que contenga varios archivos.

Aplicacin BitTorrent: Programa que ejecutan los peers para el

intercambio de archivos.

Bencoding: Codificacin para almacenar y transmitir datos.

BitTorrent: Protocolo de red P2P enfocado en optimizar la propagacin

de contenido.

Bloque: Divisin de un pieza de un archivo compartido a travs del

protocolo BitTorrent.

Churn: Pares que se conectan o desconectan de la red virtual cuando lo

estiman conveniente.

Info: Un diccionario que describe el archivo(s) de los torrent.

Info-hash: Aplicacin del hash SHA-1 al diccionario info

156
Enjambre: Conjunto de pares que comparten un archivo en comn

Pieza: Parte de tamao prefijado de un archivo compartido en la red

BitTorrent.

UPNP: Protocolo de comunicaciones para abrir puertos en el router de

forma automtica.

Instalacin aplicacin

Para la instalacin de la aplicacin y sus dependencias de las

libreras utilizadas se escribi un script en bash, con el cual se automatizo

el proceso de instalacin y compilacin del programa BTStream. En

primer lugar se instalan las dependencias bsicas para el funcionamiento

de las libreras, luego se descarga la libreria boost, se descomprime y se

instala, despus se realiza el mismo proceso con la librera libtorrent,

dependiendo de la arquitectura donde se instalar, luego se descarga el

cdigo fuente del programa desde github y se compila. Por ltimo se

instala una versin anterior de libtorrent para enlazar el programa con las

libreras, luego de enlazarla se desinstala. A continuacin se presenta el

cdigo fuente del script Instalacin.sh

157
#!/bin/bash

apt-get install g++

apt-get install build-essential

apt-get install libboost-filesystem-dev libboost-thread-dev libboost-regex-

dev libboost-dev libbz2-dev libicu-dev autotools-dev checkinstall python-

dev

apt-get install build-essential checkinstall libboost-system-dev libboost-

python-dev libssl-dev libgeoip-dev libboost-all-dev

apt-get source python-libtorrent

apt-get build-dep python-libtorrent

wget

https://ufpr.dl.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.zip

unzip boost_1_60_0.zip

chmod 777 boost_1_60_0

cd boost_1_60_0

./bootstrap.sh with-libraries=system,filesystem,thread,regex,iostreams,

date_time --prefix=/usr/local

./b2

./b2 install

sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf'

ldconfig

158
cd -

wge thttps://github.com/arvidn/libtorrent/releases/download/libtorrent

1_0_8/libtorrent-rasterbar-1.0.8.tar.gz

tar -xzvf libtorrent-rasterbar-1.0.8.tar.gz

chmod 777 libtorrent-rasterbar-1.0.8

cd libtorrent-rasterbar-1.0.8

#32 bits ./configure --with-boost-libdir=/usr/lib/i386-linux-gnu

./configure --enable-examples --enable-tests --disable-debug --disable-

encryption

make

sudo make install

export LD_LIBRARY_PATH=/usr/local/lib/

cd -

wget https://github.com/HCCorvacho/BTStreaming/archive/master.zip

unzip master.zip

chmod 777 BTStreaming-master

cd BTStreaming-master

make

chmod 777 BTStream

apt-get install libtorrent-rasterbar6

apt-get remove libtorrent-rasterbar6

159
Instalacin tracker local

Antes de la instalacin es necesario tener instalado el servidor

apache, la base de datos Mysql y PHP versin 5. Cumpliendo estos 3

requisitos, primero se descarga RivetTracker desde la direccin de

sourceForge (http://sourceforge.net//projects/rivettracker/files/. Una vez

descargado se descomprime en la carpeta /var/www, luego renombramos

la carpeta a tracker, quedando como /var/www/tracker.

La configuracin del tracker es posible realizarla desde cualquier

equipo conectado a la LAN, por lo que abrimos un navegador e

introducimos la direccin de la mquina donde se descarg el tracker con

el archivo de instalacin: http://192.168.0.11/tracker/install.php. Al ingresar

a la mquina 192.168.0.11 se despliega la interfaz de instalacin del

tracker, aqu se ven 2 opciones, la primera opcin es en el caso de tener

un cuenta y base de datos ya creadas en el tracker, por lo que se escoge

la opcin 2 como se ve en la figura 6.1 para crear usuario, contrasea y

nombre de la base de datos.

160
Figura 6.1: Opcin crear cuenta y base de datos RivetTracker

Luego se introducen los campos de usuario administrador, la

contrasea del administrador, nombre del host que aloja la base de datos,

el nombre de usuario para la base de datos, la contrasea del usuario y el

nombre de la base de datos como se observa en la figura 6.2. Una vez

introducidos todos los datos necesarios, se pulsa el botn Install.

Despus de esto introducimos los datos para configurar el servidor,

se ingresa el nombre de usuario que va a tener los permisos para subir

torrents al tracker, la contrasea de este usuario, el nombre y contrasea

de usuario para administrar el tracker, el administrador tiene acceso a un

panel de administracin donde puede modificar la configuracin del

servidor, subir, borrar, editar torrents. En los ltimos campos se ingresa la

URL principal del tracker seguido del nombre del directorio donde se ha

instalado la aplicacin RivetTracker: http://192.168.0.11/tracker,

Finalmente se selecciona la zona horaria en la que se encuentra el

161
servidor, al llenar todos los campos se pulsa el botn "Create Config File"

para crear el fichero de configuracin.

Figura 6.2: Creacin del archivo de configuracin de RivetTracker.

Una vez creado el archivo de configuracin, se muestra un

mensaje donde dice que el archivo config.php no se pudo crear en el

servidor, debido a permisos de escritura, por lo que se tendr que

descargar el archivo y subirlo manualmente. El otro mensaje indica que

se debe borrar el archivo install.php si se ha terminado la configuracin y

revisar los permisos de escritura de la carpeta torrents y rss en el servidor

como se ve en la figura 6.3.

162
Figura 6.3: Mensaje de RivetTracker tras completar la configuracin

Una vez instalado y configurado el servidor tracker, cualquier par

de la red con una cuenta en el tracker puede subir un archivo torrent y a

compartir el video.

Enlaces funcionamiento BTS:

- https://youtu.be/vJSPR5HdcaQ

- https://youtu.be/IBG_c0Otank

- https://youtu.be/3n4N1lfqB08

- https://youtu.be/DD1UC90T32c

Cdigo Fuente Aplicacin:

- https://github.com/HCCorvacho/BTStreaming

163

S-ar putea să vă placă și