ELO-330: Programación de Sistemas
Tarea 3: Túnel UDP sobre TCP

Objetivos: En esta tarea usted aplicará: creación de hebras, arquitectura cliente-servidor UDP y TCP, creación de servidor concurrente.

Nombres: UDPoverTCPtunelClient y UDPoverTCPtunelServer: Cliente y servidor para crear un túnel UDP entre puntos donde sólo se pueden establecer comunicaciones TCP.

Sintaxis: UDPoverTCPtunelClient    UDP_Local_Port   TCP_Remote_Server_Host   TCP_Remote_Server_Port  UDP_Remote_Server_Host  UDP_Remote_Port
               UDPoverTCPtunelServer   TCP_Local_Port

Descripción
    En ocasiones es necesario llegar con tráfico UDP a redes cuyos cortafuegos rechazan ese tráfico. El cliente que usted creará refleja en su máquina el servidor UDP que en realidad está ubicado remotamente en una red no acesible directamente vía UDP. El comando supone que usted sí puede establecer conexiones TCP entre su máquina y alguna máquina servidora en al red donde se encuentra el servidor UDP real.
  

   El servidor estaŕa corriendo permanentemente, por ejemplo en aragorn. El único parámetro del servidor del túnel es el puerto en el cual escuchará por conexiones.
   El cliente establece una conexion con el servidor tan pronto es ejecutado.  Luego a través de un protocolo de capa aplicación que usted creará, el cliente transfiere al servidor del túnel la máquina y el puerto donde se encuantra el servidor UDP real a ser contactado. Luego de esta comunicación, todo paquete que reciba su cliente del túnel en su puerto UDP es transferido al servidor del túnel quien lo reenvía al servidor UDP real.
  Los nombres de máquinas en el parámetro del cliente del tunel pueden ser entregados como IP en notación "punto" o entregando el nombre lógico de la máquina. Su solución debe incluir hebras en el servidor o cliente. La creación de procesos para la gestión de alguna conexión en el servidor o cliente es opcional. Se recomienda usar "select"  o "poll" en alguna parte, pero si prefiere puede hacer toda la implementación con hebras.

Evaluación de la Tarea y qué entregar: revisar procedimiento de entrega y criterios usados para evaluar su trabajo.

Ayuda:
   - Puede dar una mirada a una solución hecha en C# de una versión cliente similar al pedido aquí. Clase principal, clase de apoyo.
  -  Para probar su túnel use el servidor UDP de eco visto en clases.
  - Haga su tarea de a poco y con tiempo. Con gusto atenderé todas sus preguntas en especial en clases y horas de atención!
  - Si tras una dificultad no logra avances por más de 30 minutos, espere la próxima clase, visíteme o escríbame. Con gusto procuraré ayudarlo.
  - Si tiene dudas del enunciado, lo aclararé con gusto y documentaré aquí.