Comunicación entre procesos: sockets tcp Jorge Iván Meza Martínez jimezam@gmail.com Especialización en Gestión de Redes de Datos Universidad Nacional de Colombia Sede Manizales 1/30
Sockets con Transmission Control Protocol (TCP) 2/30
Contenidos Conceptos generales de los sockets TCP. Ventajas y desventajas de los sockets TCP. Usos mas frecuentes para los sockets TCP. Flujo de eventos durante una comunicación utilizando sockets TCP. Ejemplos de servicios de red en Internet orientados a conexión. Implementación de una conexión con sockets TCP en Java. 3/30
Evaluación pre-contenido 1. Cuáles es las principales características de los sockets TCP? 2. Cuáles son las ventajas y desventajas de utilizar sockets TCP? 3. Qué características implementan los sockets TCP para garantizar su confiabilidad? 4. Para qué tipo de aplicaciones o servicios es idóneo el uso de sockets TCP y para cuales no? 4/30
Características de los sockets TCP RFC 793. Son orientados a conexión. La información es enviada bajo la abstracción de un flujo de datos. Verifica la presencia de un destino al momento de establecer la conexión. Garantiza la entrega de los paquetes (mediante acknowledge) confiable. 5/30
Características de los sockets TCP Establece una ruta virtual (end-to-end) entre orígen y destino. Provee control de flujo para ser coherente con la velocidad de lectura y escritura del contexto. Los mensajes se ordenan y se eliminan los duplicados. Sus características mejoradas frente a UDP generar una costo extra de esfuerzo y tiempo (overhead). Envía la información en segmentos TCP: datos + cabecera TCP 6/30
Segmento TCP 7/30
Tamaño de la información A diferencia de UDP, TCP no restringe el tamaño de la información ya que esta se envía en un flujo de bytes. El cliente debe leer la información con el mismo protocolo que utilizó el servidor para enviarla (codificación). 8/30
Sockets TCP Lentos y congestionan pero fiables. Analogía: una llamada telefónica. 9/30
Modelo de fallos de TCP Métodos para garantizar la comunicación confiable Checksums de verificación detectar paquetes corruptos. Números de secuencia ordenar los paquetes y eliminar duplicados. ACK, timeouts y retransmisiones solventar los paquetes perdidos. 10/30
Usos de sockets TCP Servicios que requieran de transmisión confiable a pesar de su sobrecosto: HTTP FTP Telnet SSH SMTP 11/30
Sockets TCP 12/30
Actividad Utilizar el cliente telnet para establecer una conexión TCP con un servidor web. Mediante las primitivas del protocolo HTTP solicitar la consulta de una página web específica. $ telnet www.unal.edu.co 80 GET /index.html HTTP/1.1 Host: www.unal.edu.co User Agent: mi cliente telnet [Línea en blanco] 13/30
Actividad Realizar variaciones a la solicitud y observar la respuesta obtenida. Qué sucede si se solicita una página inexistente? Qué sucede si se omite la línea HOST del mensaje? Realizar las siguientes lecturas para complementar la actividad. Verbos del protocolo HTTP. Códigos de estado HTTP. 14/30
$ telnet whois.internic.net 43 Trying 199.7.50.74... Connected to whois.internic.net. Escape character is '^]'. jorgeivanmeza.com Whois Whois Server Version 2.0 Domain names in the.com and.net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: JORGEIVANMEZA.COM Registrar: NEW DREAM NETWORK, LLC Whois Server: whois.dreamhost.com Referral URL: http://www.dreamhost.com Name Server: NS1.RHISSHOST.COM Name Server: NS2.RHISSHOST.COM Status: clienttransferprohibited Updated Date: 30 may 2011 Creation Date: 20 mar 2008 Expiration Date: 20 mar 2013 >>> Last update of whois database: Fri, 21 Sep 2012 08:01:36 UTC <<<... 15/30
$ telnet servidor.correo.com 25 Trying servidor.correo.com... Connected to servidor.correo.com. Escape character is '^]'. SMTP 220 servidor.correo.com Sendmail 4.1/SMI 4.1 ready at Fri, 5 Jul 93 13:13:01 MDT HELO servidor.correo.com 250 servidor.correo.com Hello localhost [127.0.0.1], pleased to meet you MAIL FROM: impostor 250 impostor... Sender ok RCPT TO: engañado@correo.com 250 engañado@correo.com... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Acabas de recibir una herencia en nigeria.... 250 Mail accepted QUIT 221 servidor.correo.com delivering mail Connection closed by foreign host. 16/30
Actividad Crear en el servidor una conexión servidor TCP utilizando la herramienta netcat. $ nc l 7777 Realizar la conexión desde el cliente utilizando la herramienta telnet. $ telnet localhost 7777 17/30
Actividad Utilizar nmap para realizar los siguientes escaneos de puertos. $ nmap su SERVIDOR $ nmap st SERVIDOR $ sudo nmap ss SERVIDOR $ sudo nmap O SERVIDOR $ nmap A SERVIDOR 18/30
Actividad Utilizar un sniffer de red como Wireshark que permita auditar el contenido del tráfico en la red. Identificar la traza de los eventos generados entre el cliente y el servidor junto con sus correspondientes mensajes de reconocimiento. Cuál es el problema de seguridad a nivel de transporte de este tipo de aplicaciones? 19/30
Implementación Java de sockets TCP ServerSocket establece conexiones del lado del servidor, se asocia a un puerto y recibe conexiones de los clientes. Socket establece una conexión desde el cliente hacia el servidor identificado por su dirección IP y el puerto específico del servicio. DataInputStream flujo de lectura sobre el socket. DataOutputStream flujo de escritura sobre el socket. 20/30
Servidor TCP Java (general) ServerSocket listensocket = new ServerSocket(8989); Socket clientsocket = listensocket.accept(); in = new DataInputStream(clientSocket.getInputStream()); out = new DataOutputStream(clientSocket.getOutputStream()); XXX info = in.readxxx(); out.writexxx(data); clientsocket.close(); 21/30
Lectura/escritura de tipos simples DataInputStream read(byte[]) readboolean() readbyte() readchar() readdouble() readfloat() readint() readlong() readshort() readutf() DataOutputStream write(byte[], int, int) writeboolean(boolean) writebyte(int) writebytes(string) writechar(char) writedouble(double) writefloat(float) writeint(int) writelong(long) writeshort(short) writeutf(string) 22/30
Cliente TCP Java (general) Socket socket = new Socket( 127.0.0.1, 8989); in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); out.writexxx(data); XXX info = in.readxxx(); socket.close(); 23/30
Como ejecutar el ejemplo: HashServer Compilar las clases (manualmente o utilizar Netbeans) $ javac MD5HashLogic.java $ javac TCPHashServer.java $ javac TCPHashClient.java Ejecutar el servidor $ java TCPHashServer Verificar que los nombres y la extensión de los archivos coincidan. Incluyendo las mayúsculas y minúsculas. Ejecutar el cliente (en otra consola) $ java TCPHashClient 127.0.0.1 24/30
25/30
Evaluación pre-contenido 1. Cuáles es las principales características de los sockets TCP? 2. Cuáles son las ventajas y desventajas de utilizar sockets TCP? 3. Qué características implementan los sockets TCP para garantizar su confiabilidad? 4. Para qué tipo de aplicaciones o servicios es idóneo el uso de sockets TCP y para cuales no? 26/30
Actividad Se desea implementar un sistema orientado a objetos de administración remoto para la planta de Springfield que cuenta con tres reactores nucleares. 27/30
Actividad Cada reactor puede ser encendido y apagado de manera independiente. Así mismo podrá asignársele una carga de trabajo desde 0% hasta 100%, si se excede este límite el reactor fallará dañándose. Los reactores dañados podrán ser reparados remotamente. El operario podrá en todo momento consultar el estado de cada uno de los reactores obteniendo la información de si está encendido o apagado, cual es su carga actual y si se encuentra funcional o no. 28/30
Actividad Debido a la naturaleza del sistema, el cliente deberá recibir siempre una confirmación de que se realizó exitosamente o no la operación solicitada. Por ejemplo: No podrá encenderse (ni apagarse) un reactor previamente encendido (apagado). No podrá cargarse un reactor con un porcentaje negativo. No se podrá realizar ninguna operación sobre un reactor dañado. Sólo los reactores dañados podrán ser reparados. 29/30
Actividad Realice análisis y diseño antes de implementar. Identifique las entidades del problema. Básese en el ejemplo del módulo. Establezca los estados de los reactores y las acciones que se pueden realizar sobre esos estados. Diseñe un protocolo para los mensajes transmitidos entre cliente servidor y servidor cliente. Finalmente realice la implementación de lo diseñado. 30/30