31
1/31 Comunicación entre procesos: sockets udp Jorge Iván Meza Martínez [email protected] Especialización en Gestión de Redes de Datos Universidad Nacional de Colombia – Sede Manizales

Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez [email protected]

  • Upload
    others

  • View
    8

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

1/31

Comunicación entre procesos: sockets udp

Jorge Iván Meza Martí[email protected]

Especialización en Gestión de Redes de DatosUniversidad Nacional de Colombia – Sede Manizales

Page 2: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

2/31

Contenidos

● Conceptos generales de sockets● Tipos de envío y recepción

– Síncronos

– Asíncronos

Page 3: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

3/31

Evaluación pre-contenido

1. Qué es un socket ?

2. Qué tipos de socket existen ?

3. Qué información requiere un socket cliente para realizar su conexión con el servidor ?

4. Cuáles son las primitivas principales de los sockets ?

5. Qué significa que estas primitivas sean síncronas o asíncronas ?

Page 4: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

4/31

Soporte a sockets

Page 5: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

5/31

Envío síncrono

Emisor Receptor

Send

Receive

Buffer

● La comunicación está sincronizada.● Las primitivas son bloqueantes.

Msg Buffer

(dirección IP, puerto)(cualquier puerto)

Page 6: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

6/31

Envío asíncrono

Emisor Receptor

Send

Receive

Buffer● La comunicación no está sincronizada.● El envío es no bloqueante.● La recepción puede ser bloqueante o no bloqueante.

Msg Buffer

(dirección IP, puerto)(cualquier puerto)

Page 7: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

7/31

Sockets

● Proveen comunicación entre procesos que pueden estar en la misma o diferentes máquinas.

● Creado inicialmente para BSD Unix.● Se asocian a una dirección IP y un puerto (216)

específicos (cliente / servidor).● Es responsabilidad del desarrollador la

representación del mensaje.● A través del mismo socket se puede leer y escribir.● Están asociados a TCP o UDP.

Page 8: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

8/31

Esquema general de la conexión

Page 9: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

9/31

Primitivas de los Sockets

● Conectarse a un servidor remoto● Enviar información● Recibir información● Cerrar una conexión● Asociarse a un puerto● Escuchar por información entrante● Aceptar conexiones remotas por el puerto asociado

Page 10: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

10/31

Evaluación post-contenido

1. Qué es un socket ?

2. Qué tipos de socket existen ?

3. Qué información requiere un socket cliente para realizar su conexión con el servidor ?

4. Cuáles son las primitivas principales de los sockets ?

5. Qué significa que estas primitivas sean síncronas o asíncronas ?

Page 11: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

11/31

Sockets con User Datagram Protocol (UDP)

Page 12: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

12/31

Contenidos

● Conceptos generales de los sockets UDP.● Ventajas y desventajas de los sockets UDP.● Usos mas frecuentes para los sockets UDP.● Flujo de eventos durante una comunicación

utilizando sockets UDP.● Implementación de una conexión con sockets UDP

en Java.

Page 13: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

13/31

Evaluación pre-contenido

1. Cuáles es la característica principal de los sockets UDP ?

2. Cuáles son las ventajas y desventajas de utilizar sockets UDP ?

3. Para qué tipo de aplicaciones o servicios es idóneo el uso de sockets UDP y para cuales no ?

Page 14: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

14/31

Características de los sockets UDP

● RFC 768.● Son no orientados a conexión.● No se garantiza la presencia del destino ni la

existencia de una ruta.● Los mensajes son enviados en paquetes o

datagramas.● Distintos datagramas de un mismo mensaje pueden

utilizar distintos caminos para llegar a su destino.● Por este motivo pueden llegar en desórden (unos

tardan mas que otros) o inclusive, no llegar.

Page 15: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

15/31

Datagramas UDP

Page 16: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

16/31

Tamaño del Datagrama

● Tamaño máximo: 64KB incluyendo el mensaje (payload) y diversas cabeceras (headers).

● Mejor tamaño ?– rlogin → pequeño (1 letra).

– tftp → grandes

● Criterios– Red poco confiable → pequeños

– Red confiable → grandes

– En general 8KB es una buena opción.

Page 17: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

17/31

Sockets UDP

Rápidos pero no fiables.

Analogía: el modelo del correo postal.

Page 18: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

18/31

Modelo de fallos de UDP

● No incluye mensaje de reconocimiento (acknowledge) o reintentos en caso de problemas → menor sobrecarga (tamaño).

● Los paquetes pueden no llegar en su totalidad.● Los paquetes pueden llegar desordenados.● Incluye una suma de verificación (checksum).● Los paquetes pueden ser desechados en ciertas

condiciones: exceso de tráfico, buffer lleno, etc.

Page 19: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

19/31

Usos de sockets UDP

● Útil en servicios que puedan tolerar pérdidas ocasionales:

– DNS (búsqueda)

– DHCP

– BOOTP

– SNMP

– VoIP

– Audio y video streaming

Page 20: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

20/31

Sockets UDP

Page 21: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

21/31

Implementación Java de sockets UDP

● DatagramSocket → socket UDP que envía y recibe datagramas.

● DatagramPacket - mensaje a ser enviado a través de una conexión UDP.

● InetAddress – dirección IP (v4 o v6)● SocketException - error sucedido creando o

accediendo a un socket.● IOException - Error genérico de E/S.

Page 22: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

22/31

Servidor UDP Java (general)

DatagramSocket aSocket = new DatagramSocket(8989);

byte[] buffer = new byte[1000];

DatagramPacket request = new DatagramPacket(buffer, buffer.length);

aSocket.receive(request);

DatagramPacket reply = new DatagramPacket (data.getBytes(), data.getBytes().length,  request.getAddress(), request.getPort());

aSocket.send(reply);

Page 23: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

23/31

Cliente UDP Java (general)DatagramSocket aSocket = new DatagramSocket();

byte[] m = new String("Mensaje").getBytes();

InetAddress aHost = InetAddress.getByName("127.0.0.1");int serverPort = 8989;

DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);

aSocket.send(request);

byte[] buffer = new byte[1000];

DatagramPacket reply = new DatagramPacket(buffer, buffer.length);

aSocket.receive(reply);

Page 24: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

24/31

Como ejecutar el ejemplo: GritonUDP

Compilar las clases (manualmente o utilzar Netbeans)

$ javac *.java

Ejecutar el servidor

$ java GritonUDPServer

Ejecutar el cliente (en otra consola)

$ java GritonUDPClient

Verificar que los nombres y la extensión de los archivos coincidan. Incluyendo las mayúsculas y minúsculas.

Page 25: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

25/31

Implementación Java de sockets UDP

“Hola mamá estoy triunfando en programación“

200 OK true 625

101 001 001 110 101 1

Page 26: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

26/31

Implementación Java de sockets UDP

● ByteArrayInputStream → flujo de datos construído a partir de un buffer interno.

● DataInputStream → permite leer tipos primitivos de datos desde un flujo.

Page 27: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

27/31

Cliente UDP Java (payload no es String)

// ...

DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);

aSocket.send(request);

DatagramPacket reply = new DatagramPacket(buffer, buffer.length);

aSocket.receive(reply);

InputStream in = new ByteArrayInputStream(reply.getData(),reply.getOffset(), reply.getLength());

DataInputStream din = new DataInputStream(in);  

// readBoolean(), readByte(), readChar(), readFloat(), ...

Page 28: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

28/31

Ejemplo: escaner de puertos UDP local

import java.net.*;

public class UDPPortScanner {public static void main(String[] args) {

for (int port = 1024; port <= 65535; port++) {try {

DatagramSocket server = new DatagramSocket(port);

server.close( );} catch (SocketException ex) {

System.out.println("There is a server on port " + port + ".");

} // end try} // end for

}}

Page 29: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

29/31

Page 30: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

30/31

Evaluación pre-contenido

1. Cuáles es la característica principal de los sockets UDP ?

2. Cuáles son las ventajas y desventajas de utilizar sockets UDP ?

3. Para qué tipo de aplicaciones o servicios es idóneo el uso de sockets UDP y para cuales no ?

Page 31: Comunicación entre procesos: sockets udpeducacion.esencial.co/wiki/_media/sd:5.1_comunicacion...1/31 Comunicación entre procesos: sockets udpJorge Iván Meza Martínez jimezam@gmail.com

31/31

Actividad

Desarrollar una aplicación Java basada en datagramas con sockets que implemente una calculadora cliente-servidor.

Desde el cliente se le enviarán solicitudes de operaciones como “4 + 9 – 5“ a través de la línea de comando y el servidor enviará de vuelta al cliente el resultado: “8“. Para esto considere las operaciones aritméticas básicas (+, -, *, /) y no tenga en cuenta la precedencia de los operadores.

Investigar como evitar en Java que un receive en el cliente no bloquee infinitamente la aplicación cuando no reciba una respuesta del servidor en un tiempo prudencial.