Sistemas Distribuidos. Sockets

Documentos relacionados
Sistemas Operativos Distribuidos

Introducción de Sockets en C.

Mecanismos IPC: sockets

Estructuras y funciones de programación de sockets.

Arquitecturas Cliente/Servidor

Diseño de aplicaciones distribuidas ÍNDICE

UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA

Ingeniería Técnica de Telecomunicación, esp. Telemática Universidad de Jaén

Introducción a la programación con sockets en C

Estructuras y funciones de programación de sockets.

Migrando aplicaciones a IPv6

Programación con Sockets

Adaptación de aplicaciones a IPv6

DESARROLLO DE APLICACIONES DISTRIBUIDAS. SOCKETS en UNIX

Modem IBM Compatible. IBM Compatible. Ethernet IBM AS/400. Laser printer. Workstation. Mac II. El Interfaz. Socket. versión perliminar

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM)

Qué es un socket? Dominios de comunicación. Tipos de sockets en el dominio AF_INET. Sockets Stream. Sockets Datagram. Sockets Raw

Tema 4: Sockets: Un interfaz con TCP/IP

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

Clase de Sockets en lenguaje C. Prof. Ricardo González

Programación con sockets

Redes de Computadores Nivel de Aplicación: Programación con sockets I

-> Todo socket viene definido por dos características fundamentales:

SOCKET S. Alberto Castro Rojas

COMUNICACIÓN ENTRE PROCESOS SOCKETS

Programación de aplicaciones distribuidas usando sockets

Sockets (UDP) Tema 2.- Nivel de aplicación en Internet

SOCKETS en Linux. Lic. Leonardo de - Matteis. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur 2011

Programación C/S Básica

ARQUITECTURA DE REDES Laboratorio PRÁCTICA 2: MANUAL DE SOCKETS EN C. Grado en Ingeniería Informática Curso 2014/15

Desarrollo de Aplicativos con winsockets

Problemas de Redes de Computadores. Ingeniería Técnica en Informática de Gestión Conjunto de problemas 1

Nivel de Transporte en Internet

Sockets: funcionamiento y programación. Sockets tipo UNIX. MSc. Ivan A. Escobar

Programación en red sobre TCP/IP Interface sockets

Características de un lenguaje ideal para robótica

Programación de sockets

Administración de redes en GNU/Linux

AMPLIACION DE SISTEMAS OPERATIVOS SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA

Problemas de Redes de Computadores. Conjunto de problemas 1

Capítulo 5. Programación de aplicaciones de red

Arquitectura de Redes y Servicios de Telecomunicación

ARQUITECTURA DE REDES Laboratorio

Introducción a Sockets en Linux

Tema 4.1: - TRANSPORTE-

Tema 2. Comunicación entre procesos

GUÍA DE ESTUDIO TEMA 2. MODELO OSI. ESTÁNDARES Y PROTOCOLOS. MODELO TCP/IP.

07 << Acceso en exclusiva al recurso compartido >>

Análisis Experimental de la Transmisión de Datos

Arquitecturas cliente/servidor

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Sistema Cliente Servidor Con Sockets

Bloque III: El nivel de transporte. Tema 6: Conexiones TCP

Guía Beej de Programación en Redes

Mecanismo(s) de intercambio de información entre 2 ó más computadores conectados entre sí o a través de otros.

WSAEADDRNOTAVAIL (10049) Dirección solicitada no se puede asignar.

Sistemas Distribuidos

ARQUITECTURAS CLIENTE/SERVIDOR

Redes de Computadores: Relación de problemas 1. Sockets

PRÁCTICA 2: Cliente-servidor UDP

Práctica 5: Implementación en C++ de sistemas cliente/servidor basados en comunicación

ESCUELA POLITÉCNICA NACIONAL

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

Arquitecturas cliente/servidor

1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

Juan de Dios Murillo Morera Santiago Caamaño Polini INTRODUCCIÓN

Arquitectura de Redes y Servicios de Telecomunicación (ARST) Cuestiones y Problemas Propuestos

TimeOut RTT medido 1 5 seg. 2*5= ,7 3 TimeOut 3 TimeOut 3 0, ,35 5 0,44

Redes de Computadores Más sobre TCP. Área de Ingeniería Telemática Dpto. Automática y Computación

Práctica 1: sockets en Python

Bibliografía [COM00] Internetworking with TCP/IP, vol. 3, Cap. 2 y del 7 al 15.

Aspectos Básicos de Networking

Tema 5 Comunicación con sockets

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

Comunicación entre Procesos y Sockets

Tema 5 El Modelo Cliente-Servidor

SERVICIOS EN RED. UT2 Servicios DHCP

QUE SON Y PARA QUE SIRVEN LAS DIRECCIONES IP, LA MASCARA DE SUBRED, LA PUERTA DE ENLACE Y LAS DNS.


FUNDAMENTOS DE REDES CONCEPTOS DE LA CAPA DE RED

Alumno: Grupo: Ejercicio 1. Responda a las siguientes preguntas cortas justificando brevemente su respuesta (3 puntos).

Redes de Comunicaciones. Ejercicios de clase Tema 3

Comunicación entre procesos mediante Sockets Preparado por Gabriel Astudillo Muñoz Escuela de Ingeniería Civil Informática Universidad de Valparaíso

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Curso de Redes I CI-4815 Trimestre Septiembre Diciembre 2013

PROTOCOLO IP. Vicente Sánchez Patón. I.E.S Gregorio Prieto. Tema 1 SRI

Introducción a las redes de ordenadores y protocolos de comunicación. Ordenador que no depende de otro para su funcionamiento.

Definiciones preliminares

Transcripción:

Sistemas Distribuidos Sockets

Sockets Aparecieron en 1981 en UNIX BSD 4.2 Intento de incluir TCP/IP en UNIX. Diseño independiente del protocolo de comunicación. Un socket es punto final de comunicación (dir. IP y puerto). Abstracción que: Ofrece interfaz de acceso a servicios de red en nivel de transporte Representa extremo de comunicación bidireccional. Actualmente: Disponibles en casi todos UNIX y prácticamente todos los SSOO WinSock: API de sockets de Windows. En Java como clase nativa. 2

Conceptos básicos sobre sockets Dominios de comunicación. Tipos de sockets. Creación de un socket. Direcciones de sockets. Asignación de direcciones. Solicitud de conexión. Preparar para aceptar conexiones. Aceptar una conexión. Transferencia de datos. 1.- Creación del socket 3.- Aceptación de conexión 913367377 2.- Asignación de dirección 3

Dominios de comunicación Un dominio representa una familia de protocolos. Un socket está asociado a un dominio desde su creación. Sólo se pueden comunicar sockets del mismo dominio. Los servicios de sockets son independientes del dominio. Algunos ejemplos: PF_UNIX (o PF_LOCAL): comunicación dentro de una máquina. PF_INET: comunicación usando protocolos TCP/IP. 4

Tipos de sockets Stream (SOCK_STREAM): Orientado a conexión. Fiable, se asegura el orden de entrega de mensajes. No mantiene separación entre mensajes (stream). Si PF_INET se corresponde con el protocolo TCP. Datagrama (SOCK_DGRAM): Sin conexión. No fiable, no se asegura el orden en la entrega. Mantiene la separación entre mensajes. Si PF_INET se corresponde con el protocolo UDP. Raw (SOCK_RAW): Permite el acceso a los protocolos internos como IP. 5

Creación de un socket La función socket crea uno nuevo: int socket(int dom,int tipo,int proto) Devuelve un descriptor de fichero (igual que un open de fichero). Dominio (dom): PF_XXX Tipo de socket (tipo): SOCK_XXX Protocolo (proto): Dependiente del dominio y del tipo: 0 elige el más adecuado. Especificados en /etc/protocols. El socket creado no tiene dirección asignada. 6

Direcciones de sockets Cada socket debe tener asignada una dirección única. Dependientes del dominio. Las direcciones se usan al: Asignar una dirección local a un socket (bind). Especificar una dirección remota (connect o sendto). Se utiliza la estructura genérica de dirección: struct sockaddr mi_dir; Cada dominio usa una estructura específica. Uso de cast en las llamadas. Direcciones en PF_INET (struct sockaddr_in). Direcciones en PF_UNIX (struct sockaddr_un). 7

Direcciones de sockets en PF_INET Una dirección destino viene determinada por: Dirección del host: 32 bits. Puerto de servicio: 16 bits (Reservados: 0..1023) Espacio de puertos TCP y UDP independientes Estructura struct sockaddr_in: Debe iniciarse a 0 (bzero). sin_family: dominio (AF_INET). sin_port: puerto. sin_addr: dirección del host. Una transmisión está caracterizada por cinco parámetros únicos: Dirección host y puerto origen. Dirección host y puerto destino. Protocolo de transporte (UDP o TCP). 8

Obtención de la dirección del host Usuarios manejan direcciones en forma de texto: decimal-punto: 138.100.8.100 dominio-punto: laurel.datsi.fi.upm.es Conversión a binario desde decimal-punto: int inet_aton(char *str,struct in_addr *dir) str: contiene la cadena a convertir. dir: resultado de la conversión en formato de red. Conversión a binario desde dominio-punto: struct hostent *gethostbyname(char *str) str: cadena a convertir. Devuelve la estructura que describe al host. 9

Asignación de direcciones La asignación de una dirección a un socket ya creado: int bind(int s,struct sockaddr* dir,int tam) Socket (s): Ya debe estar creado. Dirección a asignar (dir): Estructura dependiendo del dominio. Tamaño de la dirección (tam): sizeof(). Direcciones en dominio PF_INET Si se le indica puerto 0, el sistema elige uno (puerto efímero). Host: una dirección IP de la máquina local. INADDR_ANY: elige cualquiera de la máquina. Si no se asigna dirección (típico en clientes) automáticamente en primer uso (connect o sendto). 10

Solicitud de conexión Realizada en el cliente por medio de la función: int connect(int s,struct sockaddr* d,int tam) Socket creado (s). Dirección del servidor (d). Tamaño de la dirección (tam). Un socket stream sólo permite un único connect durante su vida Para conectarse con el mismo u otro hay que crear un nuevo socket Normalmente se usa con streams pero también con datagramas Más adelante se analiza uso con datagrama 11

Preparar para aceptar conexiones Realizada en servidor stream después de socket y bind int listen(int sd, int backlog) Socket (sd): Descriptor de uso del socket. Tamaño del buffer (backlog): Nº máximo de peticiones pendientes de aceptar que se encolarán Hace que el socket quede preparado para aceptar conexiones Con un socket se pueden aceptar nº ilimitado de conexiones 12

Aceptar una conexión Realizada en el servidor stream después de listen: int accept(int s,struct sockaddr *d,int *tam) Socket (sd): Descriptor de uso del socket. Dirección del cliente (d): Dirección del socket del cliente devuelta. Tamaño de la dirección (tam): Parámetro valor-resultado Antes de la llamada: tamaño de dir Después de la llamada: tamaño de dirección del cliente devuelta 13

Aceptar una conexión Cuando se produce la conexión, el servidor obtiene: La dirección del socket del cliente. Un nuevo descriptor (socket) conectado al socket del cliente. Después de conexión quedan activos 2 sockets en el servidor: El original para aceptar nuevas conexiones El nuevo para enviar/recibir datos por la conexión establecida. Facilita construcción de servidores concurrentes En servidores multithread, cuidado con condición de carrera en: while (true) { n=accept(s, ); pthread_create(, &n);} Solución: pasar n por valor o usar memoria dinámica flujo principal realiza malloc y thread el free 14

Múltiples clientes con streams Con servidor iterativo no concurrente Si 1 conexión por petición Se intercalan peticiones de los clientes (1 por iteración) Si varias peticiones de cliente usan misma conexión No se trata a otro cliente hasta que no termine el actual o bien select: espera simultánea de más peticiones de conexión o datos Con servidor concurrente Si 1 conexión por petición Cada thr./proc. sirve una petición y termina su labor Si varias peticiones de cliente usan misma conexión Cada thr./proc. sirve peticiones hasta que cliente cierra el socket En ambos casos también puede usarse conjunto de thr/proc o híbrido 15

Otras funcionalidades Obtener la dirección a partir de un descriptor: Dirección local: getsockname(). Dirección del socket en el otro extremo: getpeername(). Transformación de valores: De formato host a red: Enteros largos: htonl(). Enteros cortos: htons(). De formato de red a host: Enteros largos: ntohl(). Enteros cortos: ntohs(). Cerrar la conexión: Para cerrar ambos tipos de sockets: close(). Si el socket es de tipo stream cierra la conexión en ambos sentidos. Para cerrar un único extremo: shutdown(). 16

Transferencia de datos con streams Modo de operación asíncrono Envío: int send(int s,char *mem,int tam,int flags) Devuelve el nº de bytes enviados. Puede usarse write (o writev) sobre el descriptor de socket. Recepción: int recv(int s,char *mem,int tam,int flags) Devuelve el nº de bytes recibidos (0 si cliente ha cerrado socket) Puede usarse read (o readv) sobre el descriptor de socket. Lectura puede devolver menos bytes de los pedidos Si se requiere leer N bytes hay que usar un bucle No requiere correspondencia entre nº de send y de recv Los flags implican aspectos avanzados como enviar o recibir datos urgentes (out-of-band). 17

Escenario de uso de sockets streams Proceso servidor socket() Proceso cliente bind() socket() listen() connect() Abrir conexión accept() accept() Posible Ejecución en Paralelo send()/write() Petición recv()/read() recv()/read() Respuesta send()/write() close() close() 18

Transferencia de datos con datagramas Envío: int sendto(int s,char *mem,int tam, int flags,struct sockaddr *dir, int *tam) Recepción: int recvfrom(int s,char *mem,int tam, int flags,struct sockaddr *dir, int *tam) recv (read) si no necesita conocer dir. de envío (cliente) No se establece una conexión (connect/accept) previa. Para usar socket basta con crear socket y reservar dirección En el cliente no sería necesario bind 19

Más sobre datagramas Mismo socket puede usarse para enviar a diferentes sockets Por un socket puede llegar información de distintos clientes En stream por socket conectado llega información de un solo cliente Se mantiene separación entre mensajes: Una lectura consume un mensaje Si el tamaño leído es menor que mensaje, el resto se pierde Correspondencia entre nº de sendto y de recv/recvfrom Se permite connect en socket datagrama: No realiza conexión física: sólo especifica destino para send/write No afecta al servidor pero permite que cliente pueda ser idéntico usando stream o datagrama 20

Múltiples clientes con datagramas Con servidor iterativo no concurrente Las peticiones de clientes ya llegan intercaladas Con servidor concurrente Después de recibir mensaje, se crea thr/proc que lo trata y responde Puede usarse modelo dinámico, de bolsa de thr/proc o híbrido 21

Escenario de uso de sockets datagrama Proceso socket() Proceso socket() bind() bind() sendto() recvfrom() Petición Respuesta recvfrom() sendto() close() close() 22

Uso de datagramas con conexión Proceso cliente socket() Proceso socket() connect() bind() send()/write() recv()/read() Petición Respuesta recvfrom() sendto() close() close() 23

Datagramas vs streams Uso mayoritario de streams Datagramas si no tolera sobrecarga y admiten pérdida de info. p.ej. transmisión de voz En cliente/servidor más conveniente stream excepto si: Los mensajes de petición y respuesta son pequeños No se puede tolerar la sobrecarga de la conexión Además, si son grandes hay que fragmentar y compactar Las operaciones son idempotentes Evita sobrecarga de gestionar caché de respuestas en servidor Se quiere dar servicio a un nº muy elevado de clientes Datagramas no requieren tanta información en S.O. como streams 24

Configuración de opciones Consultar opciones asociadas a un socket: getsockopt() Modificar opciones asociadas a un socket: setsockopt() Varios niveles dependiendo de protocolo afectado: SOL_SOCKET: opciones independientes del protocolo. IPPROTO_TCP: nivel de protocolo TCP. IPPTOTO_IP: nivel de protocolo IP. Ejemplos NivelSOL_SOCKET. Para reutilizar direcciones:so_reuseaddr Nivel IPPTOTO_IP. Para usar multicast IP: IP_MULTICAST_TTL, IP_MULTICAST_IF, IP_MULTICAST_LOOP, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP 25

Multidifusión IP Implementación de comunicación de grupo sobre IP Emisor envía datagrama a dirección IP de multidifusión Empieza por 1110. De 239.0.0.0 a 239.255.255.255 para temporales. Emisor puede formar parte del grupo o no Procesos se incorporan y abandonan el grupo Control del ámbito de propagación mediante time-to-live: el host (0), la subred (1), el site (32),... No atomicidad. No garantiza ningún orden de entrega 26