COMUNICACIÓN Sistemas Distribuidos Alvaro Ospina Sanjuan Universidad Pontificia Bolivariana Medellín 2010
Agenda Comunicación centralizada y distribuida Protocolos con capas Modelo cliente servidor Sockets Comunicación en grupos Middleware RPC CORBA DCOM RMI
Comunicación 1. Un sólo procesador : señales, pipes, archivos, memoria compartida y mensajes. 2. Sistema Distribuido: transferencia de mensajes. Protocolos con capas Modelo Cliente Servidor Sockets Comunicación en Grupo Middleware: RPC, CORBA, DCOM, RMI.
Protocolos con Capas Modelo OSI
Modelo OSI: Modelo de referencia para interconexión de sistemas abiertos
Mensaje en un protocolo con capas
Ventajas y Desventajas VENTAJAS Cada protocolo es independiente DESVENTAJAS Los encabezados son un costo adicional de transmisión, por lo que no siempre se utilizan todas las capas.
Modelo Cliente - Servidor
Modelo Cliente - Servidor Protocolo solicitud / respuesta
Modelo Cliente Servidor Variaciones Direccionamiento: Machine Machine.process Machine.local-id, Process-global-id Bloqueo: Primitivas con bloqueo o síncronas Primitivas sin bloqueo o asíncronas con copia al núcleo Primitivas sin bloqueo o asíncronas con interrupción
Modelo Cliente Servidor Variaciones Almacenamiento de los mensajes (send-receive): Primitivas no almacenadas Almacenadas temporalmente Almacenadas en buffers Confiabilidad: Send no confiable (sin reconocimientos) Con reconocimientos (4 mensajes) La respuesta como reconocimiento (3 mensajes)
Tipos de paquetes Req: Solicitud. De cliente a servidor. El cliente desea servicio. Rep: Respuesta. De servidor a cliente. Respuesta del servidor al cliente. Ack: Reconocimiento. De cualquiera de ellos a algún otro. El paquete anterior que ha llegado. Aya: Estás vivo?. De cliente a servidor. Verifica si el servidor se ha descompuesto. Iaa: Estoy vivo. De servidor a cliente. El servidor no se ha descompuesto. Ta: Intenta de nuevo. De servidor a clientes. El servidor no tiene espacio. Au: Dirección desconocida. De servidor a cliente. Ningún proceso utiliza esta dirección.
Sockets
Sockets Son ficheros creados tanto en el servidor como en el cliente para su comunicación. Dominio: AF_INET: internet AF_UNIX: máquina local Tipo: SOCK_STREAM: modo conectado (TCO) SOCK_DGRAM: modo no conectado (UDP)
Sockets SERVIDOR{ socket( ) // crear socket bind( ) // asociar IP con el puerto listen( ) // escuchar peticiones loop{ accept( ) // aceptar mensajes //crear hijo o hilo } }
Sockets CLIENTE{ socket( ) // crear socket connect( ) // ligar el socket al servidor send( ) //enviar mensaje receive( ) // recibir respuesta }
Estructuras en C struct sockaddr_in { } short int sin_family; // = AF_INET, AF_UNIX unsigned short int sin_port; //puerto struct in_addr sin_addr; //estructura para la ip unisgned char sin_zero[8]; //arreglo de 0 para completar el tamaño de sockaddr struct in_addr { } unisgned long s_addr; //IP como un entero largo sin signo (sin. )
Funciones de traducción en C De host (local) a network (red): <netinet/in.h> htonl(hostlong); convierte IP de format local a network (Hardware TO Network long - Def: big-endian, little endian). htons(hostshort); convierte el Puerto de format local a network ntohl(netlong); convierte IP de formato network a local ntohs(netshort); convierte Puerto de format network a local IP de string a la estructura in_addr: Convierte de un String a la estructura int inet_aton(const char *cp, struct in_addr *inp); Convierte de la estructura a un String char * inet_ntoa(struct in_addr in);
Ejemplo de cómo llenar estructura #define PUERTO 80 #define DIRECCION 192.168.30.101 struct sockaddr_in mi_estructura; mi_estructura.sin_family = AF_INET; mi_estructura.sin_port = htons( PUERTO ); inet_aton( DIRECCION, &(mi_estructura.sin_addr) ); memset( &(mi_estructura.sin_zero),, 8 );
Funciones para clientes int socket(int domain, int type, int protocol); int connect( int sockfd, // entero devuelto por la invocacion a socket const struct sockaddr *serv_addr, // estructura //sockaddr_in del servidor llena socklen_t addrlen // tamaño de la estructura );
Funciones para servidores int socket(int domain, int type, int protocol); int bind(int sockfd, //socket file descriptor struct sockaddr *my_addr, socklen_t addrlen); //tamaño de sockaddr int listen( int sockfd, // socket int backlog // numero maximo de conexiones ); int accept( int mi_socket, (struct sockaddr *)&mi_estructura, &tamaño );
Comunicación en Grupos
Formas de comunicación
Técnicas de envío de mensajes Multicasting: dirección especial a la que escuchan diferentes procesos. Broadcasting: Los paquetes con dirección 0 se entregan a todas las maquinas Unicasting: se hace un envío a cada proceso.
Diseño de los grupos Comunicación con el grupo: responden a la pregunta quién se puede comunicar con el grupo? Grupos cerrados Grupos abiertos 2. Estructura interna del grupo: Grupos de compañeros Grupos jerarquicos. 3. Creación de grupos y membrecía: Utilización de un servidor de grupos Envío de mensajes a todos
Diseño de los grupos Direccionamiento al grupo: Dar a cada grupo una dirección única (multicast o broadcast) Lista de todos los destinos Direccionamiento por predicado (se evalúa un predicado) 2. Primitivas: Send, group-send Receive, group-receive. 3. Transmisión atómica: Multicast atómico Cada receptor retransmite los mensajes al recibirlos la primera vez.
Diseño de los grupos Ordenamiento de mensajes: Por tiempo global Por tiempo consistente Grupos traslapados: un proceso puede pertenecer a varios grupos
Middleware
Middleware Capa de sw que se coloca entre el usuario y el entorno distribuido, abstrayendo al usuario de la complejidad y heterogeneidad de las diferentes arquitecturas, protocolos de comunicación, sistemas operativos y lenguajes de programación. Conjunto de modelos que ofrecen un entorno de programación distribuido
Middlewares RPC CORBA RMI DCOM
Bibliografia Tanenbaum