Endpoint practica de redes

4
Pr´ actica de Redes I: Pr´ actica introductoria El paquete de comunicaciones Lower Layer Grupo de Sistemas y Comunicaciones Octubre de 2006 Resumen En las pr´ acticas de Redes I se utilizar´ a el paquete de comunicaciones Lower Layer, que ofrece un servicio extremo a extremo de env´ ıo de mensajes no orientado a conexi´ on y no fiable. El objetivo de esta pr´ actica es familiarizarse con este paquete de comunicaciones y realizar un cliente y un servidor sencillos que lo utilicen. 1. Introducci´ on El paquete Lower Layer UDP 1 es el que ofrece las primitivas de comunicaciones que utilizar´ an los programas a realizar en las pr´ acticas. Cons ´ ultese su especificaci ´ on 2 adjunta. 2. Direcciones y puertos: los End Point Un End Point es el destino que tienen los datos que un proceso de una m´ aquina le env´ ıa a otro proceso en otra m´ aquina. Un End Point se construye a partir de la direcci´ on IP y de un puerto de la m´ aquina del proceso al que van dirigidos los datos. Los End Point son puntos de destino y origen de los mensajes que transportan los datos. 2.1. Construir un End Point Para construir un End Point se usa el procedimiento Build: Server_EP := Lower_Layer_UDP.Build("212.128.4.155", 6001); Un proceso puede construir tantos End Point como desee, sean de la m´ aquina que sean (en la que reside u otra cualquiera). 2.2. Atarse a un End Point Para que un proceso pueda recibir datos de otros, es necesario que anteriormente se ate a un End Point. De esta forma indica su intenci´ on de escuchar mensajes dirigidos a ese End Point. Esto se puede hacer de dos formas: At´ andose a un puerto concreto: Se hace llamando primero a Build para construir un End Point, y luego a Bind para atarse a ´ el. otese que la direcci´ on IP que se usa en el Build ha de ser necesariamente de la m´ aquina en la que se ejecuta el c ´ odigo: Server_EP := Lower_Layer_UDP.Build ("212.128.4.155", 6001); Lower_Layer_UDP.Bind (Server_EP); 1 Lower Layer UDP es un sencillo recubrimiento de la biblioteca Lower Layer para utilizar solamente la parte de UDP. No es necesario entender toda la complejidad de Lower Layer para realizar las pr´ acticas, sino solamente el subconjunto que aparece en Lower Layer UDP 2 ./lower_layer_udp.ads 1

description

Practica de Redes introductoria. El paquete de comunicaciones Lower Layer y Grupo de Sistemas y Comunicaciones Herbert Patzan Carrillo Guatemala UG

Transcript of Endpoint practica de redes

Page 1: Endpoint practica de redes

Practica de Redes I: Practica introductoriaEl paquete de comunicaciones Lower Layer

Grupo de Sistemas y Comunicaciones

Octubre de 2006

Resumen

En las practicas de Redes I se utilizara el paquete de comunicaciones Lower Layer, que ofrece unservicio extremo a extremo de envıo de mensajes no orientado a conexion y no fiable. El objetivo deesta practica es familiarizarse con este paquete de comunicaciones y realizar un cliente y un servidorsencillos que lo utilicen.

1. IntroduccionEl paquete Lower Layer UDP 1 es el que ofrece las primitivas de comunicaciones que utilizaran los

programas a realizar en las practicas. Consultese su especificacion2 adjunta.

2. Direcciones y puertos: los End PointUn End Point es el destino que tienen los datos que un proceso de una maquina le envıa a otro proceso

en otra maquina. Un End Point se construye a partir de la direccion IP y de un puerto de la maquina delproceso al que van dirigidos los datos. Los End Point son puntos de destino y origen de los mensajes quetransportan los datos.

2.1. Construir un End PointPara construir un End Point se usa el procedimiento Build:

Server_EP := Lower_Layer_UDP.Build("212.128.4.155", 6001);

Un proceso puede construir tantos End Point como desee, sean de la maquina que sean (en la quereside u otra cualquiera).

2.2. Atarse a un End PointPara que un proceso pueda recibir datos de otros, es necesario que anteriormente se ate a un End Point.

De esta forma indica su intencion de escuchar mensajes dirigidos a ese End Point. Esto se puede hacerde dos formas:

Atandose a un puerto concreto: Se hace llamando primero a Build para construir un End Point,y luego a Bind para atarse a el. Notese que la direccion IP que se usa en el Build ha de sernecesariamente de la maquina en la que se ejecuta el codigo:

Server_EP := Lower_Layer_UDP.Build ("212.128.4.155", 6001);Lower_Layer_UDP.Bind (Server_EP);

1Lower Layer UDP es un sencillo recubrimiento de la biblioteca Lower Layer para utilizar solamente la parte de UDP. No esnecesario entender toda la complejidad de Lower Layer para realizar las practicas, sino solamente el subconjunto que aparece enLower Layer UDP

2./lower_layer_udp.ads

1

Page 2: Endpoint practica de redes

Atandose a un puerto libre cualquiera: Se hace llamando a Bind_Any, que automaticamenteconstruye un End Point con la direccion IP de la maquina y un puerto libre cualquiera asignado porel sistema operativo, y luego se ata a el. Este End Point es devuelto como parametro en modo outpor Bind_Any3:

LLU.Bind_Any(Client_EP);

2.3. Desatarse de un End PointCuando un proceso ya no quiere recibir mas datos en un End Point, puede desatarse de el. De esta

forma indica que ya no va a escuchara en mensajes dirigidos a ese End Point. Esto se hace utilizando elprocedimiento Unbind:

Lower_Layer_UDP.Unbind (Client_EP);

Hay que tener en cuenta que antes de llamar a Unbind es necesario estar seguro de que no haymensajes pendientes de recibir en ese End Point.

Por otro lado, antes de terminar un programa que utilice Lower Layer UDP, despues de desatarse detodos los End Point que se han utilizado, es necesario llamar al procedimiento Finalize:

Lower_Layer_UDP.Finalize;

3. Composicion de mensajes: BuffersCuando un proceso va a enviar un mensaje a otro es necesario que lo almacene previamente en un

Buffer.

3.1. Declaracion de un BufferPara utilizar un Buffer es necesario declarar una variable del tipo Buffer_Type4. En dicha decla-

racion es necesario proporcionar el tamano en bytes que se reserva para almacenar datos en ella. Comosera necesario utilizar el atributo ’Access de estas variables, es necesario declarar la variable comoaliased:

Buffer: aliased LLU.Buffer_Type(1024);

3.2. Inicializacion de un BufferEl procedimiento Reset permite vaciar el contenido de un Buffer. Es necesario vaciar siempre un

Buffer antes de utilizarlo para componer un nuevo mensaje a enviar, y antes de recibir un nuevo mensajeen el. De esta forma se garantiza que dicho Buffer no tiene datos previos en el:

Lower_Layer_UDP.Reset(Buffer);

3.3. Insercion de datos en un BufferLa forma de introducir un dato en un Buffer es invocando el atributo ’Write del tipo del dato en

cuestion, de la siguiente forma:

Buffer: aliased Buffer_Type (1024);I: Integer;...I := 5;Integer’Write (Buffer’Access, I);

Tras introducir un dato en un Buffer, el siguiente dato que se introduzca en el mismo Buffer se colo-cara a continuacion de aquel.

3Para comprender mejor como se comporta “Bind Any”, puede pensarse que se deberıa llamar mas bien “Build Any And Bind”4Nota: Este tipo deriva del tipo Stream de la biblioteca estandar de Ada.

2

Page 3: Endpoint practica de redes

3.4. Extraccion de datos en un BufferPara extraer un dato de un Buffer se invoca el atributo ’Read del tipo del dato en cuestion, de la

siguiente forma:

Buffer: aliased Buffer_Type(1024);I: Integer;...Integer’Read (Buffer’Access, I);

Una vez extraıdo un dato de un Buffer, la siguiente invocacion de Read que se realice sobre el mismoBuffer extraera el dato que se encuentre a continuacion de aquel.

4. Envıo y recepcion de mensajes

4.1. EnvıoCuando un proceso quiere enviar datos a otro proceso, ha de conocer el End Point en el que escucha

el proceso receptor.Una vez que sabe el End Point de destino de su mensaje, un proceso lo envıa utilizando el procedi-

miento Send_From cuya cabecera es:

procedure Send_From (From: in End_Point_Type;To : in End_Point_Type;Data: access Buffer_Type);

Los parametros son:

From: El End Point desde el que se envia el mensaje, y en el que posiblemente se esperan mensajesde respuesta.

To: End Point destino del proceso al que se envıa el mensaje.

Data: acceso a un Buffer vacıo en el que se hayan los datos que se quieren enviar.

Ası, el codigo que llama a Send_From tendra el aspecto:

Lower_Layer_UDP.Send_From (From_EP, To_EP, Buffer’Access);

4.2. RecepcionUn proceso que quiere recibir mensajes previamente debe construir un End Point con la direccion IP

de su maquina y un puerto libre, y atarse en el. Una vez hecho esto, usa el procedimiento Receive_From,cuya cabecera es:

procedure Receive_From (From : out End_Point_Type;To : in End_Point_Type;Data : access Buffer_Type;Timeout: in Duration;Expired: out Boolean);

Los parametros son:

From: El End Point desde el que se envio el mensaje y en el que posiblemente el emisor esperarespuesta.

To: End Point en el que escucha el proceso y al que se envio el mensaje.

Data: acceso a un Buffer vacıo en el que se quedara almacenado el mensaje que llegue. Es muyimportante haber reinicializado dicho Buffer, llamando a Reset, antes de llamar a Receive.

3

Page 4: Endpoint practica de redes

Timeout: plazo (en segundos) durante el cual se esperara la llegada del mensaje de un mensaje.Si no llegara en este plazo, el procedimiento retorna igualmente, quedando el Buffer vacıo. El tipoDuration es compatible con Float.

Expired: parametro de vuelta. Toma el valor True cuando expira el plazo Timeout sin quellegue ningun mensaje (con lo que el Buffer queda vacıo). Toma el valor False cuando llegaalgun mensaje antes de que venza el plazo, mensaje que queda almacenado en el Buffer.

Ası, el codigo que llama a Receive_From tendra el aspecto:

Receive_From (From_EP, To_EP, Buffer’Access, 2.0, Expired);if Expired then

Put_Line ("Expiro el plazo");else

Integer’Read (Buffer’Access, I);end if;

5. Practica a realizar1. Estudiar la especificacion del paquete de comunicaciones Lower Layer UDP (lower layer udp.ads5).

2. Estudiar el codigo del programa cliente (client.adb6) y del programa servidor (server.adb7).

3. Compilar el cliente y el servidor y probarlos. Es necesario que el comando gnatmake encuentrela biblioteca de comunicaciones Lower_Layer. Esto puede hacerse de dos formas:

Teniendo previamente definida la variable de entorno ADA_INCLUDE_PATH en la forma:

export ADA_INCLUDE_PATH=/opt/ll/lib

Utilizando el flag -I al llamar a gnatmake, en la forma:

gnatmake -I/opt/ll/lib client.adb

4. Modifica el cliente y el servidor de forma que:

el servidor reciba como argumento en la lınea de comandos el puerto en en el que se debeatar.

el cliente reciba como argumentos en la lınea de comandos el nombre de la maquina y elpuerto en el que esta atado el servidor.

Utiliza las funciones Get_Host_Name y To_IP que aparecen en la especificacion de Lower_Layer_UDPy consulta la especificacion del paquete Ada.Command_Line en el manual de referencia del len-guaje.

5. Realiza modificaciones sencillas al cliente y al servidor para cerciorarte de que comprendes sufuncionamiento.

5./lower_layer_udp.ads6./client.adb7./server.adb

4