INF 1400 Redes de Computadores INF 1400 Redes

  • Slides: 35
Download presentation
INF 1400 Redes de Computadores INF 1400: Redes de Computadores Modelo Cliente Servidor Sockets

INF 1400 Redes de Computadores INF 1400: Redes de Computadores Modelo Cliente Servidor Sockets y RPC Jorge Baier Alvaro Soto Departamento de Ciencias de la Computación P. Universidad Católica de Chile

INF 1400 Redes de Computadores Conceptos Básicos Modelo Cliente servidor • Grupo de procesos

INF 1400 Redes de Computadores Conceptos Básicos Modelo Cliente servidor • Grupo de procesos que cooperan • Existen procesos que proveen servicios: servidores • Existen procesos que requieren servicios: clientes • Clientes y Servidores son procesos de usuario • Los clientes efectúan requerimientos al servidor y reciben una respuesta de éste • Ejemplos de servicios típicos: impresión, email, www 2

INF 1400 Redes de Computadores Conceptos Básicos Procesos • Servidores manejan recursos y proveen

INF 1400 Redes de Computadores Conceptos Básicos Procesos • Servidores manejan recursos y proveen servicios a clientes que desean utilizar este recurso. Ej. - ftp, web server, email. . . • Clientes usan servicios para lograr objetivos • Clientes son activos, piden servicios • Servidores son pasivos, esperan solicitudes Procesadores • Sólo un proceso • Múltiples servidores • Múltiples clientes • Mezcla de clientes y servidores 3

INF 1400 Redes de Computadores Protocolo La operación fundamental es la Transacción • Cliente

INF 1400 Redes de Computadores Protocolo La operación fundamental es la Transacción • Cliente necesita un servicio y envía mensaje de solicitud • Servidor recibe solicitud, lo interpreta, y manipula su recurso en la forma apropiada • Servidor envía resultado o código de error • Cliente procesa respuesta 1. Cliente envia requerimiento Cliente 4. Cliente procesa respuesta Servidor 3. Servidor envia respuesta Recurso 2. Servidor procesa requerimiento Ej. Web browser y web server Protocolo es simple y eficiente • Respuesta sirve como confirmación (ACK) para la solicitud • Basta con dos rutinas de comunicación: • send(destino, mensaje) • receive(dirección, mensaje) • muchas variaciones posibles 4

INF 1400 Redes de Computadores Equivalencia con Modelo OSI Sólo tres niveles son necesario

INF 1400 Redes de Computadores Equivalencia con Modelo OSI Sólo tres niveles son necesario Niveles 1 y 2 transmiten los mensajes Nivel 5 es el protocolo de solicitud-respuesta • Define solicitudes válidas • Define respuestas válidas 5

INF 1400 Redes de Computadores Sockets Que es un socket ? • Un socket

INF 1400 Redes de Computadores Sockets Que es un socket ? • Un socket es una connección virtual que permite comunicar dos procesos • Sockets proveen una transmisión bi-direccional (full duplex) • Como conecciones virtuales, los sockets pueden ser creados en forma dinámica • La interface de sockets fue desarrollada a principios de los 80´ en la universidad de Berkeley • Sockets son la herramienta de comunicación más utilizada en aplicaciones de internet. TCP/IP usa sockets 6

INF 1400 Redes de Computadores Connección Virtual Entre 2 Procesos Host A Proceso 1

INF 1400 Redes de Computadores Connección Virtual Entre 2 Procesos Host A Proceso 1 Host B Socket (connección virtual) Proceso 2 Información Tarjetas de red Red (connección física) 7

INF 1400 Redes de Computadores Sockets Como Modelo Cliente Servidor El servidor debe estar

INF 1400 Redes de Computadores Sockets Como Modelo Cliente Servidor El servidor debe estar siempre esperando requerimientos. El cliente hace el requerimiento y el servidor responde. Host C Cliente 2 socket Host A Servidor Cliente 3 Host B Requerimiento Respuesta Socket Cliente 1 8

INF 1400 Redes de Computadores Interface Usada Por Sockets Servidor socket() “*” indica llamada

INF 1400 Redes de Computadores Interface Usada Por Sockets Servidor socket() “*” indica llamada a función bloqueadora Cliente socket() bind() listen() 1: Requerimiento de Connección connect() to * accept() * read() write() close() del k c A * ien m i r e qu re write() 2. Envia comando 3. Recibe resultado read() * close() 9

INF 1400 Redes de Computadores Direcciones, Puertas y Sockets • Ej. • Uno es

INF 1400 Redes de Computadores Direcciones, Puertas y Sockets • Ej. • Uno es la aplicación y vive en un edificio de departamentos • La dirección esta dada por la ubicación del edificio • El servicio de correo es la red • El socket es la llave que permite dejar correo en la casilla correspondiente del edificio • Además uno puede enviar cartas dejándolas en la casilla • Como elegir la puerta a la que se conecta un socket ? 10

INF 1400 Redes de Computadores Funciones y Parámetros en Servidor (1) create socket: int

INF 1400 Redes de Computadores Funciones y Parámetros en Servidor (1) create socket: int socket(int domain, int type, int protocol); socket_id = socket (AF_INET, SOCK_STREM, DEFAULT_PROTOCOL); (2) bind socket: bind (socket_id, server_addr, server_len); (3) listen to socket: listen (socket_id, number_of_connection); (4) accept a connection: accept (socket_id, &client_addr, &client_len); (5) read (receive) data: read (socket_id, buffer_len); (6) write (send) data: write (socket_id, buffer_len); (7) close socket: close(socket_id); 11

INF 1400 Redes de Computadores Listen/Connect Servidor socket 1 socket 2 socket Cliente 1

INF 1400 Redes de Computadores Listen/Connect Servidor socket 1 socket 2 socket Cliente 1 Cliente 2 12

INF 1400 Redes de Computadores Funciones y Parámetros en Cliente (1) create socket: igual

INF 1400 Redes de Computadores Funciones y Parámetros en Cliente (1) create socket: igual que servidor socket_id = socket (AF_INET, SOCK_STREM, DEFAULT_PROTOCOL); (2) connect socket: connect (socket_id, server. INETaddress, server_len); (3) write (send) data: write (socket_id, buffer_len); (4) read (receive) data: read (socket_id, buffer_len); (5) close socket: igual que servidor close(socket_id); 13

INF 1400 Redes de Computadores Sockets Terminando la Sesión SERVIDOR socket() “*” indica llamada

INF 1400 Redes de Computadores Sockets Terminando la Sesión SERVIDOR socket() “*” indica llamada a función bloqueadora CLIENTE socket() bind() listen() * accept() * read() 1: Requerimiento de connección connect() * write() 2. Envía comando 3. Recibe resultado 4. FIN read() * close() 14

INF 1400 Redes de Computadores Socket: Creación Paso 1 socket(_): crea el identificador del

INF 1400 Redes de Computadores Socket: Creación Paso 1 socket(_): crea el identificador del socket • Prepara la estructura de datos para manejar el socket • OS es el responsable Server 15

INF 1400 Redes de Computadores Sockets: Binding Paso 2 bind(_) : connecta un proceso

INF 1400 Redes de Computadores Sockets: Binding Paso 2 bind(_) : connecta un proceso a una puerta específica Puerta = 6500 Servidor punto de connección para dos procesos usando sockets Números de puerta: 0~1023: Reservados Port 21: FTP Port 23: telnet Port 80: HTTP 1024 - 65535: disponibles a usuario 16

INF 1400 Redes de Computadores Sockets: Listen Paso 3: listen(_) listen( ): prepara buffers

INF 1400 Redes de Computadores Sockets: Listen Paso 3: listen(_) listen( ): prepara buffers de memoria para connecciones con clientes Buffer 6500 listen (socket_id, number_of_connection); Servidor Especifíca máximo número de connecciones antes de rechazar requerimientos de connección 17

INF 1400 Redes de Computadores Sockets: Accept Step 4 - Part 1 accept(_): el

INF 1400 Redes de Computadores Sockets: Accept Step 4 - Part 1 accept(_): el servidor acepta el requerimiento del cliente 6500 Cliente Servidor accept ( ) es una función bloqueadora 18

INF 1400 Redes de Computadores Sockets: Accept Paso 4 - Parte 1 accept(_) :

INF 1400 Redes de Computadores Sockets: Accept Paso 4 - Parte 1 accept(_) : acepta connección desde el cliente creando un nuevo socket y elegiendo una nueva puerta 6500 Servidor Cliente 7100 OS duplica la connección Una nueva puerta es elegida por el OS 19

INF 1400 Redes de Computadores Sockets: Read/Write Paso 5 - Parte 1: read(_) y

INF 1400 Redes de Computadores Sockets: Read/Write Paso 5 - Parte 1: read(_) y write() 6500 Servidor Cliente 7100 Transmissión de datos El servidor y el cliente se comunican usando el segundo socket 20

INF 1400 Redes de Computadores Sockets: Nuevas Connecciones Paso 5 -Parte 2: el socket

INF 1400 Redes de Computadores Sockets: Nuevas Connecciones Paso 5 -Parte 2: el socket original vuelve al paso 4, i. e. , la función accept() 6500 Client Server 21

INF 1400 Redes de Computadores Sockets: Close Paso 6: close (_) 6500 Server Client

INF 1400 Redes de Computadores Sockets: Close Paso 6: close (_) 6500 Server Client 7100 El segundo socket es cerrado por el cliente 22

INF 1400 Redes de Computadores Llamadas Remotas a Procedimientos: RPC: Birrel y Nelson, 1984

INF 1400 Redes de Computadores Llamadas Remotas a Procedimientos: RPC: Birrel y Nelson, 1984 • RPC permite la ejecución de procedimientos en máquinas remotas • Procedimientos ? , lenguaje de programación procedural • Aún cuando es independiente del lenguaje de programación la mayoría de las implementaciones usan C Proceso en A llama a un procedimiento en B • Proceso A es suspendido mientras espera respuesta de B • Ejecución del procedimiento ocurre en B • B envia resultado del procedimiento • Proceso en A continúa 23

INF 1400 Redes de Computadores RPC Programas no distinguen llamadas remotas de locales •

INF 1400 Redes de Computadores RPC Programas no distinguen llamadas remotas de locales • Información se comunica en argumentos y resultados • Paso de mensajes en invisible, RPC se encarga de los detalles Algunos inconvenientes • Dos espacios de direccionamiento • Máquinas con distintas representaciones de datos • Falla de máquinas 24

INF 1400 Redes de Computadores RPC: Stubs: procesos adicionales que son agregados para implementar

INF 1400 Redes de Computadores RPC: Stubs: procesos adicionales que son agregados para implementar la interface RPC Client Stub : reemplaza la llamada al procedimiento – Server Stub : reemplaza la llamada al procedimiento – Host 1 Host 2 Proceso A Stub del servidor Stub del cliente Procedimiento B 25

INF 1400 Redes de Computadores Llamada a Procedimientos 26

INF 1400 Redes de Computadores Llamada a Procedimientos 26

INF 1400 Redes de Computadores RPC: Stubs Llamada remota a procedimiento debe parecer llamada

INF 1400 Redes de Computadores RPC: Stubs Llamada remota a procedimiento debe parecer llamada normal • Tanto a quien llama como a quien es llamado Esquema similar a rutinas que llaman al sistema (ej. - read) • Uso de stub: procedimiento es sólo una interfaz • Cliente hace llamada de la manera usual • Servidor recibe llamada de la manera usual • Stubs esconden detalles • Stubs se generan en forma automática 27

INF 1400 Redes de Computadores RPC: Stubs 28

INF 1400 Redes de Computadores RPC: Stubs 28

INF 1400 Redes de Computadores RPC: Paso a Paso • • • Cliente llama

INF 1400 Redes de Computadores RPC: Paso a Paso • • • Cliente llama al stub del cliente de la manera usual Stub del cliente construye un mensaje y se lo pasa al núcleo Núcleo envía el mensaje al núcle remoto Núcleo remoto pasa el mensaje al stub del servidor Stub del servidor saca los argumentos y llama al servidor de la manera usual Servidor realiza el trabajo y retorna al stub del servidor Stub del servidor empaqueta el resultado en un mensaje y se lo pasa al núcleo Núcleo remoto envía el mensaje al núcleo del cliente Núcleo del cliente pasa el mensaje al stub del cliente Stub del cliente saca el resultado y lo retorna al cliente 29

INF 1400 Redes de Computadores RPC: Paso de Parámetros • En máquinas identicas los

INF 1400 Redes de Computadores RPC: Paso de Parámetros • En máquinas identicas los tipos escalares no tienen problemas • Sistemas heterogéneos: • Representación de enteros • Representación de punto flotante • Little vs. Big endian • Tipos de datos conocidos por el cliente y el servidor • Forma canónica para representar información • hton y ntoh • Maquinas idénticas: conversiones inútiles • Paso de punteros y parámetros por referencia 30

INF 1400 Redes de Computadores RPC: Ejemplo • Archivo de especificación /* rational. x

INF 1400 Redes de Computadores RPC: Ejemplo • Archivo de especificación /* rational. x */ #include "defs. h" program RATIONALSPROG { version RATIONALSVERS { st_rational suma(st_pair) = 1; float rational 2 float(st_rational) = 2; } = 1; } = 0 x 20000001; struct st_rational { int num; int den; }; struct st_pair { st_rational A; st_rational B; }; 31

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Cliente /* rational_client. c */

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Cliente /* rational_client. c */ #include "rational. h" void rationalsprog_1(char *host) { CLIENT *clnt; st_rational *result_1; st_pair suma_1_arg; float *result_2; st_rational 2 float_1_arg; clnt = clnt_create (host, RATIONALSPROG, RATIONALSVERS, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } suma_1_arg. A. num = 1; suma_1_arg. A. den = 4; suma_1_arg. B. num = 3; suma_1_arg. B. den = 4; 32

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Cliente result_1 = suma_1(&suma_1_arg, clnt);

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Cliente result_1 = suma_1(&suma_1_arg, clnt); if (result_1 == (st_rational *) NULL) { clnt_perror (clnt, "call failed"); } rational 2 float_1_arg. num = 3; rational 2 float_1_arg. den = 4; result_2 = rational 2 float_1(&rational 2 float_1_arg, clnt); if (result_2 == (float *) NULL) { clnt_perror (clnt, "call failed"); } clnt_destroy (clnt); printf("1/4 + 3/4 = %d/%dn", result_1 ->num, result_1 ->den); printf("3/4 = %fn", *result_2); } 33

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Cliente int main (int argc,

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Cliente int main (int argc, char *argv[]) { char *host; if (argc < 2) { printf ("usage: %s server_hostn", argv[0]); exit (1); } host = argv[1]; rationalsprog_1 (host); exit (0); } 34

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Servidor /* rational_server. c */

INF 1400 Redes de Computadores RPC: Ejemplo • Programa Servidor /* rational_server. c */ #include "rational. h" st_rational *suma_1_svc(st_pair *argp, struct svc_req *rqstp) { static st_rational result; result. num = argp->A. num*argp->B. den + argp->A. den*argp>B. num; result. den = argp->A. den * argp->B. den; return &result; } float * rational 2 float_1_svc(st_rational *argp, struct svc_req *rqstp) { static float result; result = (float)argp->num / (float)argp->den; return &result; } 35