Download Trabajo Práctico nro. 2

Document related concepts
no text concepts found
Transcript
Cátedra de Sistemas Distribuidos
Escuela de Ingeniería Electrónica
Departamento de Sistemas e Informática
Trabajo Práctico nro. 2: Comunicación Entre Procesos – Tiempo
Distribuido
Objetivos del Práctico
Aplicar y afirmar los conocimientos teóricos adquiridos mediante la utilización de aplicaciones
distribuidas en un entorno de red, incluyendo:
1. Comunicación entre procesos e interacciones cliente-servidor utilizando distintos transportes
(TCP, UDP e IP Multicast)
2. Secuencias de establecimiento y liberación de conexiones, control de flujo y paquetes de
reconocimiento.
3. Ver un ejemplo práctico de la utilización del API de Sockets TCP y UDP en Java. Análisis de los
programas a utilizar, su estructura y funcionamiento.
4. Ver un ejemplo de servidor multithreaded
5. Ensayar situaciones de falla.
6. Utilización de un software de captura y análisis de paquetes de red.
Evaluación Parcial
El informe de este TP deberá entregarse indefectiblemente antes de rendir el primer parcial. Este
incluye los temas desarrollados en las clases de teoría, en los módulos 2 (Redes y TCP/IP), 3
(Comunicación entre procesos) y 4 (Servicios Distribuidos: Nombres, Tiempo, Archivos)
Sistemas Distribuidos – TP 2
Pág. 1
Programas a utilizar en el práctico
1. Descripción
Estos programas fueron desarrolados por la cátedra y están contenidos en tres paquetes que ilustran
la utilización de la interface de programación (API) de sockets del stack TCP/IP.
Básicamente son implementaciones de un servidor de fecha y hora y el cliente correspondiente, en
lenguaje Java utilizando JDK 1.2 o superior.
Cada uno de los paquetes contiene la implementación sobre distintos transportes:TCP, UDP e IP
Multicast.
2. Paquetes
2.1 TCP
Consiste de tres programas fuente (.java) y sus bytecodes (.class):
Archivo
Propósito
NetRelojTCPServer.java
Servidor de fecha/hora sobre TCP
NetRelojTCP.java
Thread del servidor
NetRelojTCPCliente.java
Cliente sobre TCP
Utilización:
a) Servidor:
java -classpath . NetRelojTCPServer [puerto]
Este comando ejecuta el servidor de fecha/hora. Si se especifica como argumento un entero entre
1024 y 65535, el puerto de conexión será ese. En caso de no especificarse un puerto, el servidor
toma por defecto el 8888.
El servidor arranca y espera conexiones entrantes sobre transporte TCP. Cuando detecta una
conexión la acepta, disparando un thread que envía al cliente una cadena con la fecha y hora
actual, cerrando la conexión a continuación.
b) Cliente:
java -classpath . NetRelojTCPCliente host port
Donde host es el nombre o la dirección IP y port es el puerto del servidor NetRelojTCP.
2.2 UDP
Consiste de tres programas fuente (.java) y sus bytecodes (.class):
Archivo
Propósito
NetRelojUDPServer.java
Servidor de fecha/hora sobre UDP
NetRelojUDP.java
Thread del servidor
NetRelojUDPCliente.java
Cliente sobre UDP
a) Servidor:
Sistemas Distribuidos – TP 2
Pág. 2
java -classpath . NetRelojUDPServer [puerto]
Este comando ejecuta el servidor de fecha/hora. Si se especifica como argumento un entero entre
1024 y 65535, el puerto de conexión será ese. En caso de no especificarse un puerto, el servidor
toma por defecto el 8888. El servidor arranca y espera datagramas entrantes sobre transporte UDP.
Cuando recibe un datagrama lo acepta, disparando un thread que envía al cliente una cadena con la
fecha y hora actual en un datagrama UDP.
b) Cliente:
java -classpath . NetRelojUDPCliente host port
Donde host es el nombre o la dirección IP y port es el puerto del servidor NetRelojUDP.
2.3 Multicast
Consiste de tres programas fuente (.java) y sus bytecodes (.class):
Archivo
Propósito
MulticastServer.java
Servidor de fecha/hora multicast
MulticastServerThread.java
Thread del servidor
MulticastClient.java
Cliente multicast
a) Servidor:
java -classpath . MulticastServer
Este comando ejecuta el servidor multicast de fecha/hora, que envía a intervalos aleatorios una
cadena de caracteres conteniendo fecha y hora a una dirección multicast (230.0.0.1) en el puerto
4446.
b) Cliente:
java -classpath . MulticastClient
El cliente multicast se asocia al grupo de receptores identificados por la dirección IP 230.0.0.1
(clase D), esperando por mensajes destinados a esa dirección.
Sistemas Distribuidos – TP 2
Pág. 3
Metodología de Ejecución del Práctico
El práctico puede llevarse a cabo en cualquier entorno donde se disponga de dos o mas PC's
conectadas a una red LAN, con conexión a Internet, por ejemplo el Laboratorio de Informática del
1er. Piso de Pellegrini, el laboratorio de la EIE en el CUR, el LINCE, un locutorio, una red
hogareña o empresarial, etc.
El sistema operativo de las PC's puede ser Linux o Windows.
Las PC's a utilizar deberán tener instalado el JDK de Java versión 1.2 o superior, y el analizador de
paquetes Ethereal (http://www.ethereal.com) o el Analyzer (http://analyzer.polito.it)
Tareas
1. Determinar la configuración de TCP/IP de las dos PC's a utilizar usando en cada una de ellas los
comandos apropiados. Debe obtenerse:
●
●
●
●
●
●
●
●
2.
Nombre de host y de dominio del equipo
Tipo y número de adaptadores de red presentes en el equipo
Dirección IP y netmask de cada uno de ellos
Ruteador por defecto (Default Gateway)
Servidores DNS configurados
Tabla de rutas
Tabla del protocolo arp
Dirección MAC del equipo
Análisis de paquetes: se deberá hacer una captura de los paquetes enviados y recibidos por las
computadoras utilizadas para hacer el práctico, a fin de hacer un análisis posterior del
intercambio de mensajes entre clientes y servidores.
3. Transporte TCP
1. Abrir en una PC dos ventanas MS-DOS. (si se usa Windows) o ventanas de terminal de
comando (si usa Linux) Ejecutar en una de ellas el cliente NetRelojTCP con el parámetro
host = localhost y port = 8888. Analizar la captura de paquetes y los mensajes en pantalla.
2.
En la otra ventana de la misma PC ejecutar el servidor NetRelojTCP sin parámetros. En la
primera ventana volver a ejecutar el comando del punto 1. Analizar la captura de paquetes y
los mensajes en pantalla de ambas ventanas.
3. En otra PC de la red abrir una ventana de comando y ejecutar el cliente NetRelojTCP usando
como valor del parámetro host la dirección IP de la primera PC y puerto 8888. Analizar
mensajes y la captura de paquetes en ambas PC's.
4. Abortar el servidor del punto 2 con Control-C
4. Transporte UDP
1. Ejecutar en la primera PC el cliente NetRelojUDP con el parámetro host = localhost y port =
8888. Analizar la captura de paquetes y los mensajes en pantalla.
2.
En la otra ventana de la misma PC ejecutar el servidor NetRelojUDP sin parámetros. En la
primera ventana volver a ejecutar el comando del paso 1. Analizar la captura de paquetes y los
mensajes en pantalla de ambas ventanas.
3. En la segunda PC ejecutar el cliente NetRelojUDP usando como valor del parámetro host la
Sistemas Distribuidos – TP 2
Pág. 4
dirección IP de la primera PC y puerto 8888. Analizar mensajes y la captura de paquetes en
ambas PC's.
4. Interrumpir el servidor NetRelojUDPServer tipeando Control-C
5. Transporte Multicast
1. Ejecutar en una PC el cliente Multicast. Analizar captura de paquetes y mensajes en pantalla.
2. Ejecutar en la segunda ventana de la misma PC el servidor Multicast. Analizar captura de
paquetes y mensajes en pantalla.
3. Ejecutar en la otra PC el cliente Multicast. Analizar captura de paquetes y mensajes en
pantalla.
4. Interrumpir el servidor Multicast con Control-C.Analizar captura de paquetes y mensajes en
pantalla.
6. Servicio de Reloj
1. El Departamento de Sistemas cuenta con un servicio de reloj ajustado a milisegundos,
accesible en el puerto TCP 8888 del host dsi.fceia.unr.edu.ar, el cual responde a una
conexión de cliente enviando el tiempo local en milisegundos en un long de acuerdo al
método System.currentTimeMillis(), tal como se describe en la referencia siguiente
(http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis() ):
public static long currentTimeMillis()
Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the
granularity of the value depends on the underlying operating system and may be larger. For example, many
operating systems measure time in units of tens of milliseconds.
See the description of the class Date for a discussion of slight discrepancies that may arise between "computer
time" and coordinated universal time (UTC).
Returns:
the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC.
Java SDK 1.4 API documentation
2. Modificar el código del programa NetRelojTCPCliente.java para que encueste a este
servicio, e indique a continuación el ajuste necesario del reloj local de acuerdo al algoritmo de
Cristian.
3. Determinar el ajuste requerido para distintas PC's, accediendo desde dos locaciones
diferentes, por ejemplo, desde el laboratorio de informática de la FCEIA y desde su casa,
locutorio o cualquier otra PC conectada a Internet.
Sistemas Distribuidos – TP 2
Pág. 5
Conclusiones
Deberán ser volcadas en un informe donde consten el escenario utilizado y los resultados obtenidos,
interpretando en cada caso los mensajes intercambiados entre cliente y servidor, las secuencias de
establecimiento y liberación de conexión, la resolución de nombres y ARP, etc.
El informe se valorará principalmente por las conclusiones a las que se arribe a partir de los
resultados obtenidos en la experiencia.
Sistemas Distribuidos – TP 2
Pág. 6