ELO-330: Programación de Sistemas
Tarea 4: Emulador de Retardo en enlaces TCP en Java

Objetivos: Aplicar hebras, mecanismos de sincronización entre hebras, y programación de socket en lenguaje Java.

Nombre: er_tcp: Emulador de retardo en enlaces TCP.

Sintaxis: er_tcp puerto_local [host_remoto] puerto_remoto

Descripción
   En ocasiones nos vemos enfrentados a la necesidad de correr una aplicación que establece conexiones a través de Internet y nos interesaría averiguar cuál sería su comportamiento si la conexión extremo a extremo posee una latencia superior a algún valor. Por ejemplo, cuando deseamos controlar un robot remoto a través de Internet. Generalmente los desarrollos se hacen en un laboratorio donde la red de área local ofrece latencias (o retardos) inferiores a 1 [ms]. Surge la pregunta ¿Cómo podemos probar un proyecto haciéndolo creer que tiene  mayor retardo?. En ese conexto esta tarea cumple una utilidad.
 A través de esta tarea usted creará una aplicación proxy para emunar un retardo en una conexiones TCP. La idea es poner un proceso intermedio en la conexión y luego configurar el retardo mínimo a un valor a elección, ver Figura 1.


Figura 1: relación del emulador con otros programas e interacción con consola

puerto_local
corresponde al puerto local donde er_tcp espera por conexiones TCP. Tan pronto llega un cliente a este puerto, er_tcp abre una conexión hacia el host_remoto en el puerto_remoto. Si se omite el host_remoto se entiende que es la máquina local (localhost).
  En lugar de pasar los paquetes libremente de un lado a otro y en ambas direcciones, er_tcp maneja hebras en cada sentido destinadas a controlar el tiempo de espera en una cola. El manejo de cada sentido del tráfico (subida o bajada) se puede manejar en forma equivalente. Es decir, su grupo puede replicar la arquitectura de un sentido en el otro. er_tcp además  escucha por cambios en el retardo a simular. Para ello el programa presenta la opción:
El retardo agregado actual  es <aqui va lo que sea actualmente> [ms]
Nuevo retardo en [ms]:

Las Figuras 2 muestran una forma de manejar el flujo de datos. Ésta muestra una forma de agregar un retardo a través de una cola FIFO. Usaremos un retardo mínimo fijo; es decir, el retardo introducido por er_tcp resultará de al menos de ese valor. Si por razones externas a su programa los paquetes esperan más tiempo, no es problema.



Figura 2: Sugerencia de hebras para menejar retardo en cola FIFO

Esta tarea sigue las normas generales del ramo para evaluación de tareas y procedimiento de entrega.

Ayuda:
- Puede ser de interés revisar la solución a la tarea 4 del año 2011 y la solución de Luis Fuentes a la tarea 4 dela ño 2010.
- Haga su tarea de a poco y con tiempo. Con gusto atenderé todas sus preguntas en especial en clases y horas de atención!