Este proyecto es el Trabajo Práctico N°1 de la materia Introducción a los Sistemas Distribuidos (75.43) en la Facultad de Ingeniería, Universidad de Buenos Aires. Su objetivo principal es la implementación de una aplicación cliente-servidor para la transferencia de archivos utilizando conceptos avanzados de comunicación en red.
Nombre | Legajo |
---|---|
GALIÁN, Tomás Ezequiel | 104354 |
SAEZ, Edgardo Francisco | 104896 |
PUJATO, Iñaki | 109131 |
LARDIEZ, Mateo | 107992 |
ZACARIAS, Victor | 107080 |
El propósito de esta aplicación es implementar un protocolo de Transferencia Confiable de Datos (RDT) utilizando UDP como protocolo de transporte. Se desarrollaron dos versiones del protocolo:
- Stop & Wait
- TCP con SACK (Selective ACKnowledgments)
Además, la aplicación permite forzar condiciones de error para validar la confiabilidad en la transferencia.
- Transferencia de archivos binarios de hasta 5 MB.
- Operaciones soportadas:
UPLOAD
: Envío de archivos del cliente al servidor.DOWNLOAD
: Descarga de archivos del servidor al cliente.
- Garantiza la entrega de paquetes con una pérdida de hasta 10% en los enlaces.
- Manejo concurrente de múltiples clientes.
- Desarrollo en Python siguiendo las especificaciones de PEP8.
- Python 3.x instalado.
- Librería estándar de sockets de Python.
- Herramienta Mininet para simular condiciones de red.
pip install flake8
NOTA: el flag -s no se encuentra implementado, usar por defecto el flag -n con alguno de los nombres de archivos contenidos dentro de del directorio archivos_de_prueba. Lo mismo aplica para el caso de especificar del destino de la descarga (operación download), no hay que especificar la ruta de descarga.
python upload [-h] [-v|-q] [-H ADDR ] [-p PORT] [-s FILEPATH] [-n FILENAME] [-a ALGORITHM]
Opciones:
Opción | Descripción |
---|---|
-h , --help |
Muestra el mensaje de ayuda y sale. |
-v , --verbose |
Incrementa la verbosidad de la salida. |
-q , --quiet |
Disminuye la verbosidad de la salida. |
-H , --host |
Dirección IP del servidor. |
-P , --port |
Puerto del servidor. |
-s , --src |
Ruta del archivo fuente que se desea subir. |
-n , --name |
Nombre del archivo. |
-a , --algorithm |
Algoritmo elegido (sw or sack) |
python3 upload.py -H 192.168.1.100 -p 8080 -s /ruta/al/archivo.txt -n archivo.txt -a sack
python download [-v|-q] [-H ADDR] [-p PORT] [-d FILEPATH ] [-n FILENAME ] [-a ALGORITHM]
Opciones:
Opción | Descripción |
---|---|
-h , --help |
Muestra el mensaje de ayuda y sale. |
-v , --verbose |
Incrementa la verbosidad de la salida. |
-q , --quiet |
Disminuye la verbosidad de la salida. |
-H , --host |
Dirección IP del servidor. |
-p , --port |
Puerto del servidor. |
-d , --dst |
Ruta de destino del archivo descargado. |
-n , --name |
Nombre del archivo. |
-a , --algorithm |
Algoritmo elegido (sw or sack) |
python3 download.py -H 192.168.1.100 -p 8080 -s /ruta/al/archivo.txt -n archivo.txt -a sack
python start-server [-h] [-v|-q] [-H ADDR] [-p PORT] [-s DIRPATH] [-a ALGORITHM]
Opciones:
Opción | Descripción |
---|---|
-h , --help |
Muestra el mensaje de ayuda y sale. |
-v , --verbose |
Incrementa la verbosidad de la salida. |
-q , --quiet |
Disminuye la verbosidad de la salida. |
-H , --host |
Dirección IP del servidor. |
-p , --port |
Puerto del servidor. |
-s , --storage |
Directorio donde se almacenarán los archivos. |
-a , --algorithm |
Algoritmo elegido (sw or sack). |
python3 start_server.py -H 192.168.1.100 -p 8080 -s /ruta/de/stotage/ -a sack