El objetivo de esta prctica es implementar un Pinger utilizando el UDP (User Datagram Protocol) y as aprender a usar su API.
Un Pinger es una aplicacin de red que enva uno o varios paquetes de datos desde el host que ejecuta la parte cliente hasta el host que ejecuta la parte servidora. Esta los devuelve y permite al cliente calcular el RTT (Round-Trip Time) entre ambos hosts.
Un Pinger es una aplicacin bsica de chequeo del estado de la red. Por este motivo, en la mayora de los sistemas operativos encontramos una utilidad llamada ping. Vemos un ejemplo:
Como podemos ver, por defecto se envan paquetes cuyo payload contiene 56 bytes, que sumados a los 8 bytes de cabecera del IGMP dan 64 bytes, el tamao de los paquetes transmitidos (sin contar la cabecera del IP). Ntese que no se utiliza ningn protocolo de la capa de transporte.
El cliente calcula el tiempo que transcurre desde que cada paquete es enviado hasta que la correspondiente contestacin es recibida. Para finalizar, calcula el tiempo mnimo, medio y el mximo.
La utilidad ping utiliza el protocolo de control de mensajes de Internet o ICMP. Dicho protocolo pertenece a la pila de protocolos TCP/IP y contempla un mensaje llamado Echo Request (Peticin de Eco). Cuando un host funciona adecuadamente, est conectado a Internet y no ha sido expresamente configurado para denegar las contestaciones Echo Response enva un mensaje ICMP del tipo Echo Response al host que le ha hecho la peticin.
Los mensajes de peticin y de respuesta son generalmente muy cortos. Esto significa que los tiempos de transmisin (no as los de propagacin) son prcticamente nulos y por tanto, ping se utiliza normalmente para medir el RTT entre nuestro host y el host remoto.
El Pinger presentado en esta prctica es una aplicacin que utiliza el UDP. El cliente enva paquetes UDP y el servidor los recibe y los retorna. Para describir ambas partes se ha utilizado el lenguaje de programacin Java.
El servidor es bsicamente un bucle infinito que espera a recibir paquetes UDP. Para ello escucha en el puerto que se le indica por la lnea de comandos cuando es ejecutado.
Como la mayora de las ocasiones tendremos que ejecutar el cliente y el servidor en el mismo host, el servidor puede configurarse para:
Sin embargo, dentro del mismo host o incluso en la red de laboratorio, es prcticamente imposible que se pierdan paquetes. Para simular dicho comportamiento el servidor deja de enviar un eco al cliente con una cierta probabilidad controlada por el parmetro que llamado LOSS_RATE.
A continuacin se presenta el cdigo que implementa el servidor (http://www.ace.ual.es/\~vruiz/redes/practicas/PingServer.java):
Compile el servidor usando el comando:
Evidntemente, deber tener instalado un compilador de Java para realizar la anterior accin. Existen versiones tanto para Linux como para Windows. Se recomienda el compilador y la mquina virtual de Sun para realizar esta parte de la prctica (http://java.sun.com) o el que se instala mediante el paquete openjdk-?-jdk.
Ejecute el servidor con el comando:
El cliente enva 10 peticiones de ping al servidor especificado. Cada mensaje contiene un payload de datos donde figura la cadena PING, un nmero de secuencia y una estampa de tiempo.
Tras enviar un paquete, el cliente espera hasta un segundo para recibir una respuesta. Si transcurrido este tiempo sta no llega, el cliente supone que su paquete de peticin o el paquete de respuesta (o ambos) se ha(n) perdido.
A continuacin se muestra el cdigo del cliente (http://www.ace.ual.es/\~vruiz/redes/practicas/PingClient.java):
Compile el cliente con el comando:
Ejecute el cliente con el comando:
Ejercicio 1: Escriba una versin del cliente y del servidor Pinger usando el lenguaje de programacin C. Compruebe que sus versiones funcionan entre s y que pueden ser intercambiadas por sus correspondientes versiones escritas en Java.
Ejercicio 2: Puede su servidor (el que usted ha escrito) atender a ms de un cliente a la vez?, es decir, podemos ejecutar ms de un cliente simultneos que usen el mismo servidor? Y el servidor que se adjunta a esta prctica, puede?
Ejercicio 3: Compruebe si el cliente y el servidor pueden correr en hosts diferentes. Qu condiciones deben darse para que la comunicacin sea posible? En otras palabras, si existe una conexin fsica entre un cliente y un servidor, y la red funciona correctamente (sin errores de transmisin), cundo no podran comunicarse entre s?