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!