ELO-330: Programación de Sistemas
Tarea 3: Emunador de variaciones de "Best Effort" en Conexiones TCP
Objetivos:
ejercitar uso de hebras, mecanismos de exclusión mutua y conexiones TCP.
Nombres: ert_tcp :
Emulador de Retardo y Tasa en conexiones TCP.
Sintaxis: ert_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 poca tasa efectiva de transferencia y
posiblemente además latencia. 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 100Mbps de tasas en nivel físico. Surge la pregunta ¿Cómo
podemos
correr un proyecto haciéndolo creer que tiene menos "ancho de banda" o
que tiene mayor retardo? Una
opción para limitar la tasa de transferencia es usar un HUB o switch
antiguo de 10 Mbps y así obligar a uno
de los computadores a correr más lento. El principal problema es que
así sólo se pueden probar enlaces de 10 Mbps (que es mucho para muchas
conexiones en Internet). La opción previa no permite emular
grandes retardos en la red.
A través de esta tarea usted creará una aplicación proxy para
limitar la tasa máxima de transferencia y aumentar el retardo de
conexiones TCP. La idea es poner un proceso intermedio en
la conexión y luego ajustar las tasas en cada sentido y retardo a
valores a elección, ver Figura 1.
Figura 1: Intercepción de tráfico y cambio de parámetros en un sentido
puerto
corresponde al puerto local donde ert_tcp se espera por conexiones
TCP. Tan
pronto llegua un cliente a este puerto, ert_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, ert_tcp maneja hebras en cada sentido destinadas a
controlar el tiempo residencia y tasa de salida. El manejo de cada
sentido del tráfico (subida o bajada) se puede manejar en forma
equivalente. ert_tcp además escucha a un menú de consola para cambiar
el retardo o la tasa. Para ello el programa presenta un menú:
1) Nueva tasa en [Bps] (Bytes por segundo)
2) Nuevo retardo en [ms]
Su opción es:
Las figuras 2 y 3 muestran una forma de manejar el flujo de
datos. La figura 2 permite controlar la tasa de salida mientras que la
figura 3 además incluye el manejo de un retardo adicional. Para la tasa
use, en principio, un tamaño de balde de 20KB (notar que el balde es
sólo un entero, no memoria). Este valor representa la cantidad máxima
de
bytes a enviar en forma consecutiva (ráfaga). Usaremos un retardo
mínimo fijo; es decir, el retardo introducido por ert_tcp debe ser al
menos de ese valor. Si para cumplir la limitación de tasa los paquetes
esperar más tiempo, no es problema. El retardo es fijo.
ert_tcp usa leaky bucket
y un buffer circular para limitar el tráfico de salida.
La limitación de tráfico es de igual valor en ambas direcciones, luego
usted podría usar una misma hebra para incorporar "fichas" o crédito en
el balde de cada sentido de flujo (subida, bajada).
Figura 2: Modelo para controlar tasa una dirección del flujo
|
Figura 3: Modelo para controlar tasa y retardo en una dirección
|
Esta tarea sigue las
normas generales del ramo para evaluación
de tareas y
procedimiento
de entrega.
Ayuda:
- Revise las mejores soluciones para la tarea similar del año 2009.
- Para implementar Leaky Bucket eficientemente estudie el uso de Variables de Condición y el ejemplo: leakyBucket_with_sleep.c. En lugar de sleep puede usar la función usleep para agregar crédito en forma más uniforme (menos discreta).
-
Para probar su tarea, considere usar un navegador configurado para
trabajar con un proxy de salida. En particular considerar el uso de
SOCKS. En lugar de apuntar al servidor SOCKS usted lo
hace apuntar a ert_tcp y éste lo hace apuntar al verdadero
servidor SOCKS. Así todo el tráfico web pasará por su control de
tráfico y retardo. Usted podrá limitar las tasa de accesos y retardo a
youtube entre
otros.
- Otra forma de probar su aplicación es usando la aplicación vlc (videolan), la cual permite enviar y reproducir video.
- Haga su tarea de a poco y con tiempo. Con gusto
atenderé todas sus preguntas en especial en clases y horas de atención!