La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

INF 1400: Redes de Computadores

Presentaciones similares


Presentación del tema: "INF 1400: Redes de Computadores"— Transcripción de la presentación:

1 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

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, , www

3 Conceptos Básicos Procesos
Servidores manejan recursos y proveen servicios a clientes que desean utilizar este recurso. Ej.- ftp, web server, ... 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 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 Servidor Recurso 2. Servidor procesa requerimiento 4. Cliente procesa respuesta 3. Servidor envia 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 Connección Virtual Entre 2 Procesos
Host A Host B Socket (connección virtual) Proceso 1 Proceso 2 Información Tarjetas de red Red (connección física)

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

9 Interface Usada Por Sockets
Servidor “*” indica llamada a función bloqueadora * socket() Cliente socket() bind() 1: Requerimiento de Connección listen() connect() Ack del requerimiento accept() write() 2. Envia comando read() write() read() 3. Recibe resultado 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 Listen/Connect Servidor Cliente 1 Cliente 2 socket 1 socket socket 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 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 * write() read() 3. Recibe resultado close() 4. FIN

15 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

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

17 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

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

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

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

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

22 Sockets: Close Paso 6: close (_) 6500 7100
Client Server 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 Server Stub : reemplaza la llamada al procedimiento Host 1 Host 2 Proceso A Stub del servidor 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; } = 0x ; 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_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;


Descargar ppt "INF 1400: Redes de Computadores"

Presentaciones similares


Anuncios Google