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 flake8NOTA: 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 sackpython 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 sackpython 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