1 / 35

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. Conceptos Básicos. Modelo Cliente servidor Grupo de procesos que cooperan

auryon
Download Presentation

INF 1400: Redes de Computadores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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

  4. 1. Cliente envia requerimiento Cliente Servidor Recurso 3. Servidor envia respuesta 2. Servidor procesa requerimiento 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 4. Cliente procesa respuesta • 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

  5. 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

  6. 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

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

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

  9. “*” indica llamada a función bloqueadora 1: Requerimiento de Connección * * Ack del requerimiento * 2. Envia comando * 3. Recibe resultado Interface Usada Por Sockets Servidor socket() Cliente socket() bind() listen() connect() accept() write() read() read() write() close() close()

  10. 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 ?

  11. 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, buffer_len); (6) write (send) data: write (socket_id, buffer, buffer_len); (7) close socket: close(socket_id);

  12. socket socket 1 socket socket socket 2 Listen/Connect Servidor Cliente 1 Cliente 2

  13. 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, serverINETaddress, server_len); (3) write (send) data: write (socket_id, buffer, buffer_len); (4) read (receive) data: read (socket_id, buffer, buffer_len); (5) close socket: igual que servidor close(socket_id);

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

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

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

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

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

  19. Servidor  OS duplica la connección  Una nueva puerta es elegida por el OS Sockets: Accept Paso 4 - Parte1 accept(_) : acepta connección desde el cliente creando un nuevo socket y elegiendo una nueva puerta 6500 Cliente 7100

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

  21. Client Server Sockets: Nuevas Connecciones Paso5-Parte 2: el socket original vuelve al paso 4, i.e., la función accept() 6500

  22. Server Sockets: Close Paso 6: close (_) 6500 Client 7100 El segundo socket es cerrado por el cliente

  23. Llamadas Remotas a Procedimientos: RPC • 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

  24. 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

  25. RPC: Stubs Stubs: procesos adicionales que son agregados para implementar la interface RPC • Client Stub : reemplaza la llamada al procedimiento • ServerStub : reemplaza la llamada al procedimiento Host 2 Host 1 Proceso A Stub delservidor Stub del cliente ProcedimientoB

  26. Llamada a Procedimientos

  27. 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

  28. RPC: Stubs

  29. 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

  30. 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

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

  32. 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 rational2float_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;

  33. RPC: Ejemplo • Programa Cliente result_1 = suma_1(&suma_1_arg, clnt); if (result_1 == (st_rational *) NULL) { clnt_perror (clnt, "call failed"); } rational2float_1_arg.num = 3; rational2float_1_arg.den = 4; result_2 = rational2float_1(&rational2float_1_arg, clnt); if (result_2 == (float *) NULL) { clnt_perror (clnt, "call failed"); } clnt_destroy (clnt); printf("1/4 + 3/4 = %d/%d\n", result_1->num, result_1->den); printf("3/4 = %f\n", *result_2); }

  34. RPC: Ejemplo • Programa Cliente int main (int argc, char *argv[]) { char *host; if (argc < 2) { printf ("usage: %s server_host\n", argv[0]); exit (1); } host = argv[1]; rationalsprog_1 (host); exit (0); }

  35. 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 * rational2float_1_svc(st_rational *argp, struct svc_req *rqstp) { static float result; result = (float)argp->num / (float)argp->den; return &result; }

More Related