En este ejemplo veremos dos implementaciones distintas de un sistema de intercambio de archivos, utilizando los protocolos TCP y UDP. El objetivo de este ejercicio es entender el ciclo de vida de un socket para ambos protocolos, tanto para el cliente como para el servidor.
Los archivos template-client.py y template-server.py proveen un esqueleto del sistema de intercambio de archivos. Vamos a estar usando estos archivos como base durante la clase para implementar la comunicación utilizando TCP y UDP.
Los archivos tcp-client.py y tcp-server.py proveen una implementación de ejemplo del sistema de intercambio de archivos, utilizando el protocolo TCP para la comunicación entre el cliente y el servidor.
Para correr el servidor debemos ejecutar el siguiente comando:
python3 tcp-server.py -H <own-host> -P <own-port>
Los parámetros default son own-host: 127.0.0.1
y own-port: 8080
, por lo que directamente podemos correr:
python3 tcp-server.py
Para correr el cliente debemos ejecutar el siguiente comando:
python3 tcp-client.py -H <server-host> -P <server-port> -f <file>
Los parámetros default son server-host: 127.0.0.1
y server-port: 8080
, por lo que solo debemos especificar el archivo a enviar.
En el repo esta incluido un archivo de ejemplo, por lo que, para utilizar ese archivo corremos:
python3 tcp-client.py -f ./example.txt
Los archivos udp-client.py y udp-server.py proveen una implementación de ejemplo del sistema de intercambio de archivos, utilizando el protocolo UDP para la comunicación entre el cliente y el servidor.
Para correr el servidor debemos ejecutar el siguiente comando:
python3 udp-server.py -H <own-host> -P <own-port>
Los parámetros default son own-host: 127.0.0.1
y own-port: 8080
, por lo que directamente podemos correr:
python3 udp-server.py
Para correr el cliente debemos ejecutar el siguiente comando:
python3 udp-client.py -H <server-host> -P <server-port> -O <own-host> -p <own-port> -f <file>
Los parámetros default son server-host: 127.0.0.1
, server-port: 8080
, own-host: 127.0.0.1
y own-port: 8081
, por lo que solo debemos especificar el archivo a enviar.
En el repo esta incluido un archivo de ejemplo, por lo que, para utilizar ese archivo corremos:
python3 udp-client.py -f ./example.txt
Para poder simular distintas condiciones de red vamos a utilizar la herramienta comcast. En el repo van a encontrar las instrucciones de instalación. La herramienta esta escrita en Go, por lo que van a tener que instalar Go primero.
En nuestro caso, vamos a simular una tasa de perdida de paquetes del 10% para poder ver como se comportan las distintas soluciones. Para hacer esto, corremos:
comcast --device=lo0 --packet-loss=10%
Una vez que terminamos con la simulación, debemos correr el siguiente comando para desactivar las reglas setteadas:
comcast --stop