Publicado el 31 de Julio del 2019
471 visualizaciones desde el 31 de Julio del 2019
391,8 KB
28 paginas
Creado hace 7a (13/10/2016)
El paquete de comunicaciones Lower Layer UDP
Programación de Sistemas de Telecomunicación
Informática II
Departamento de Sistemas Telemáticos y Computación (GSyC)
Octubre de 2016
GSyC - 2016
Lower Layer UDP
1
c2016 Grupo de Sistemas y Comunicaciones.
Algunos derechos reservados.
Este trabajo se distribuye bajo la licencia
Creative Commons Attribution Share-Alike
disponible en http://creativecommons.org/licenses/by-sa/3.0/es
GSyC - 2016
Lower Layer UDP
2
Contenidos
1
Introducción
2 Gestión de direcciones IP y puertos: End Point Type
3 Gestión de mensajes: LLU.Buffer Type
4 Atarse a un End Point para poder recibir mensajes: LLU.Bind
5 Envío y recepción de mensajes: LLU.Send, LLU.Receive
6 Terminación del uso de Lower Layer: LLU.Finalize
GSyC - 2016
Lower Layer UDP
3
Contenidos
Introducción
1
Introducción
2 Gestión de direcciones IP y puertos: End Point Type
3 Gestión de mensajes: LLU.Buffer Type
4 Atarse a un End Point para poder recibir mensajes: LLU.Bind
5 Envío y recepción de mensajes: LLU.Send, LLU.Receive
6 Terminación del uso de Lower Layer: LLU.Finalize
GSyC - 2016
Lower Layer UDP
4
Introducción: Modelo Cliente-Servidor
Introducción
En el modelo cliente-servidor hay dos roles diferenciados para
los procesos que intercambian mensajes a través de la red:
El servidor espera a recibir un mensaje, y entonces contesta
enviando una respuesta
El cliente envía mensajes de petición al servidor, esperando
recibir un mensaje de respuesta.
GSyC - 2016
Lower Layer UDP
5
clienteservidorPETICIÓN a (dirIP1, puerto1)RESPUESTA a (dirIP2, puerto2) Introducción: LLU
Introducción
GSyC - 2016
Lower Layer UDP
6
UDPUDPProtocolo UDPPráctica 1Protocolo Práctica 1Lower_Layer_UDPLower_Layer_UDPPráctica 1 Lower Layer UDP
Introducción
Es un paquete de comunicaciones que ofrece un servicio de
mensajes en el nivel de transporte:
extremo a extremo
no orientado a conexión
no fiable
Ofrece un servicio similar a UDP con una interfaz más fácil de
usar que permite:
Construir End_Points (dirección IP + puerto)
Construir y procesar mensajes
Enviar y recibir mensajes
A partir de ahora utilizaremos LLU para hacer referencia a los
tipos, funciones y procedimientos de este paquete:
package LLU renames Lower_Layer_UDP;
GSyC - 2016
Lower Layer UDP
7
Gestión de direcciones IP y puertos: End Point Type
Contenidos
1
Introducción
2 Gestión de direcciones IP y puertos: End Point Type
3 Gestión de mensajes: LLU.Buffer Type
4 Atarse a un End Point para poder recibir mensajes: LLU.Bind
5 Envío y recepción de mensajes: LLU.Send, LLU.Receive
6 Terminación del uso de Lower Layer: LLU.Finalize
GSyC - 2016
Lower Layer UDP
8
Gestión de direcciones IP y puertos: End Point Type
End Point
Un End_Point es el destino de los datos que envía un proceso
de una máquina a otro proceso de otra máquina.
Se construye a partir de la Dirección IP de la máquina y el
puerto elegido por el proceso al que van dirigidos los datos.
Un End_Point identifica de forma unívoca al proceso al que
van dirigidos los mensajes que transportan datos.
Se construye de la siguiente forma con la función Build:
Server_EP: LLU.End_Point_Type;
...
Server_EP := LLU.Build("212.128.4.1", 6002);
GSyC - 2016
Lower Layer UDP
9
Gestión de direcciones IP y puertos: End Point Type
Funciones auxiliares: Get Host Name
La función Get Host Name devuelve el nombre de la máquina
donde se está ejecutando un programa.
function Get Host Name return String;
Ejemplo de uso:
Maquina : ASU.Unbounded_String;
...
Maquina := ASU.To_Unbounded_String (LLU.Get Host Name);
Ada.Text_IO.Put_Line ("Estoy en: " & ASU.To_String(Maquina));
GSyC - 2016
Lower Layer UDP
10
Gestión de direcciones IP y puertos: End Point Type
Funciones auxiliares: To IP
La función To IP devuelve la direccción IP del nombre de la
máquina que se le pasa como argumento.
function To IP (Name: in String) return String;
Si el argumento que se le pasa a To IP es una dirección IP, la
función devuelve la misma dirección IP.
Ejemplo de uso:
Maquina : ASU.Unbounded_String;
Dir_IP : ASU.Unbounded_String;
...
Maquina := ASU.To_Unbounded_String ("zeta12");
Dir_IP := ASU.To_Unbounded_String (LLU.To IP(ASU.To_String(Maquina));
Ada.Text_IO.Put_Line ("Dirección IP:" & ASU.To_String(Dir_IP));
GSyC - 2016
Lower Layer UDP
11
Gestión de mensajes: LLU.Buffer Type
Contenidos
1
Introducción
2 Gestión de direcciones IP y puertos: End Point Type
3 Gestión de mensajes: LLU.Buffer Type
4 Atarse a un End Point para poder recibir mensajes: LLU.Bind
5 Envío y recepción de mensajes: LLU.Send, LLU.Receive
6 Terminación del uso de Lower Layer: LLU.Finalize
GSyC - 2016
Lower Layer UDP
12
Gestión de mensajes: LLU.Buffer Type
Buffer
Un buffer es un fragmento de posiciones de memoria
contiguas que utilizaremos en:
Envío: para almacenar en el buffer los datos que queremos
enviar. Una vez almacenados, realizaremos el envío.
Recepción: para recibir los datos que nos estén enviando. El
buffer inicialmente estará vacío y después de realizar la
recepción contendrá los datos que nos hayan enviado.
Accederemos al buffer según el modelo FIFO (First In First
Out).
GSyC - 2016
Lower Layer UDP
13
Gestión de mensajes: LLU.Buffer Type
Declaración de un Buffer
Utilizaremos el tipo LLU.Buffer Type.
Para declarar un buffer es necesario proporcionale el tamaño
en bytes que se reservará para almacenar datos en él:
Es necesario que el tamaño del buffer sea suficiente como para
contener todos los datos que vamos a almacenar en él.
Buffer: aliased LLU.Buffer_Type(1024);
Utilizaremos el atributo ’Access del Buffer para meter y
sacar datos en él. Por este motivo, es necesario que lo
declaremos como aliased.
GSyC - 2016
Lower Layer UDP
14
1024 bytes Gestión de mensajes: LLU.Buffer Type
Inicialización de un Buffer
El procedimiento Reset vacía los datos que hay en un buffer.
Buffer: aliased LLU.Buffer_Type(1024);
...
LLU.Reset(Buffer);
Utilizaremos Reset en las siguientes situaciones:
Envío: antes de utilizar un buffer para componer un mensaje y
meter los datos que queremos enviar.
Recepción: antes de utilizar un buffer para recibir un mensaje.
GSyC - 2016
Lower Layer UDP
15
Puntero deinserciónPuntero deextracción11024 Gestión de mensajes: LLU.Buffer Type
Inserción de datos en un Buffer
Se invoca el atributo ’Output del tipo del dato que queremos
introducir en el buffer.
Buffer: aliased LLU.Buffer_Type(1024);
I: Integer;
...
I:=5;
LLU.Reset(Buffer);
Integer’Output(Buffer’Access, I);
...
<Enviar los datos del buffer>
...
Después de introducir un dato en un buffer, el siguiente dato
que se introduzca se almacenará a continuación del anterior.
Si intentamos introducir un dato en un buffer y no hay espacio
suficiente en el buffer se elevará la excepción End_Error.
GSyC - 2016
Lower Layer UDP
16
Gestión de mensajes: LLU.Buffer Type
Ejemplo de inserción de datos en un Buffer
Buffer: aliased LLU.Buffer_Type(1024);
I: Integer;
EP: LLU.End_Point_Type;
N: Natural;
...
LLU.Reset(Buffer);
I := -1;
Integer’Output(Buffer’Access, I);
EP := LLU.Build("212.128.4.1", 6001);
LLU.End Point Type’Output(Buffer’Access, EP);
N := 5;
Natural’Output(Buffer’Access, N);
...
<Enviar los datos del buffer>
...
GSyC - 2016
Lower Layer UDP
17
-1-1212.128.4.16001-1212.128.4.160015IntegerIntegerIntegerEnd_Point_TypeEnd_Point_TypeNatural Gestión de mensajes: LLU.Buffer Type
Extracción de datos de un Buffer
Se invoca el atributo ’Input del tipo del dato que queremos extraer del buffer.
Buffer: aliased LLU.Buffer_Type(1024);
I: Integer;
...
LLU.Reset(Buffer);
...
<Recibir datos en el buffer>
...
I := Integer’Input(Buffer’Access);
Después de extraer un dato de un buffer, el siguiente dato que se extraiga será el
que se encuentre a continuación del anterior.
Si intentamos extraer un dato de un buffer en el que no hay más datos, se elevará la
excepción End Error.
Si el tipo de dato que hay en el buffer no coincide con el tipo de datos que se
está intentando extraer puede ocurrir:
La extracción se realiza y la variable destino toma un valor sin sentido.
Se eleva alguna excepción, ej: Constraint Error
Se produce un fallo de segmentación: Segmentation Fault
GSyC - 2016
Lower Layer UDP
18
Gestión de mensajes: LLU.Buffer Type
Ejemplo de extracción de datos en un Buffer
Buffer: aliased LLU.Buffer_Type(1024);
I: Integer;
EP: LLU.End_Point_Type;
N: Natural;
...
LLU.Reset(Buffer);
...
<Recibir datos en el buffer>
...
I := Integer’Input(Buffer’Access);
EP := LLU.End Point Type’Input(Buffer’Access);
N := Natural’Input(Buffer’Access);
GSyC - 2016
Lower Layer UDP
19
-1212.128.4.160015-1212.128.4.160015-1212.128.4.160015-1212.128.4.160015IntegerEnd_Point_TypeNaturalIntegerEnd_Point_TypeNaturalIntegerEnd_Point_TypeNaturalIntegerEnd_Point_TypeNatural Atarse a un End Point para poder recibir mensajes: LLU.Bind
Contenidos
1
Introducción
2 Gestión de direcciones IP y puertos: End Point Type
3 Gestión de mensajes: LLU.Buffer Type
4 Atarse a un End Point para poder recibir mensajes: LLU.Bind
5 Envío y recepción de mensajes: LLU.Send, LLU.Receive
6 Terminación del uso de Lower Layer: LLU.Finalize
GSyC - 2016
Lower Layer UDP
20
Atarse a un End Point para poder recibir mensajes: LLU.Bind
Atarse a un End Point (I)
Para que un proceso pueda recibir
datos de otros, es necesario que
previamente se ate a un End_Point.
De esta forma ”escucha” los mensajes
dirigidos a ese End_Point.
La operación atarse a un End_Point
tiene sentido en el ámbito local de una
máquina:
Cuando un proceso que se ejecuta en
una máquina se ata a un
End_Point, el proceso queda ligado
a una dirección IP de esa máquina y
a un puerto de esa máquina.
GSyC - 2016
Lower Layer UDP
21
UDP IP Lower_Layer_UDP p1 p2 p3 p4 ETHERNET eth0 lo Puertos Dir. IP 212.128.4.1 127.0.0.1 127.0.1.1 ordenador A puerto1 puerto2 puerto3 pu
Comentarios de: El paquete de comunicaciones Lower Layer UDP (0)
No hay comentarios