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

INF 1400: Redes de Computadores

  • Upload
    auryon

  • View
    33

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: INF 1400: Redes de Computadores

1

INF 1400 Redes de Computadores

INF 1400: Redes de Computadores

Jorge BaierAlvaro Soto

Departamento de Ciencias de la ComputaciónP. Universidad Católica de Chile

Modelo Cliente ServidorSockets y RPC

Page 2: INF 1400: Redes de Computadores

2

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

Page 3: INF 1400: Redes de Computadores

3

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

Page 4: INF 1400: Redes de Computadores

4

INF 1400 Redes de Computadores

ProtocoloLa 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

Cliente Servidor

1. Cliente envia requerimiento

3. Servidor envia respuesta

Recurso

2. Servidor procesarequerimiento

4. Cliente procesa respuesta

Ej. Web browser y web serverProtocolo 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

Page 5: INF 1400: Redes de Computadores

5

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

Page 6: INF 1400: Redes de Computadores

6

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

Page 7: INF 1400: Redes de Computadores

7

INF 1400 Redes de Computadores

Red(connección física)

Host B

Proceso 2

Host A

Proceso 1

Tarjetas de red

Información

Socket

(connección virtual)

Connección Virtual Entre 2 Procesos

Page 8: INF 1400: Redes de Computadores

8

INF 1400 Redes de Computadores

Servidor

Host A

El servidor debe estar siempre esperando requerimientos. El cliente hace el requerimiento y el servidor responde.

Cliente 2

Cliente 3

Host C

socket

socket

Cliente 1

Host BRequerimientoRespuesta

Socket

Sockets Como Modelo Cliente Servidor

Page 9: INF 1400: Redes de Computadores

9

INF 1400 Redes de Computadores

Servidor

bind()

listen()

accept()

read()

write()

close()

Cliente

socket()

connect()

write()

close()

socket()

1: Requerimiento de Connección

2. Envia comando

3. Recibe resultadoread()

“*” indica llamada a función bloqueadora

*

*

*

*Ack del requerimiento

Interface Usada Por Sockets

Page 10: INF 1400: Redes de Computadores

10

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 ?

Page 11: INF 1400: Redes de Computadores

11

INF 1400 Redes de Computadores

(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);

Funciones y Parámetros en Servidor

Page 12: INF 1400: Redes de Computadores

12

INF 1400 Redes de Computadores

Servidor

socket

socket 1 socket 2

Cliente 1

socket

Cliente 2

socket

Listen/Connect

Page 13: INF 1400: Redes de Computadores

13

INF 1400 Redes de Computadores

(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);

Funciones y Parámetros en Cliente

Page 14: INF 1400: Redes de Computadores

14

INF 1400 Redes de Computadores

“*” indica llamada a función bloqueadoraSERVIDOR

bind()

listen()

accept()

read()

CLIENTE

socket()

connect()

write()

close()

socket()

*

*

*

1: Requerimiento de connección

2. Envía comando

3. Recibe resultadoread()write()

*

4. FIN

Sockets Terminando la Sesión

Page 15: INF 1400: Redes de Computadores

15

INF 1400 Redes de Computadores

Server

Paso 1 socket(_): crea el identificador del socket• Prepara la estructura de datos para manejar el socket

• OS es el responsable

Socket: Creación

Page 16: INF 1400: Redes de Computadores

16

INF 1400 Redes de Computadores

Paso 2 bind(_) : connecta un proceso a una puerta específica

6500

ServidorNúmeros de puerta:

0~1023: Reservados Port 21: FTP Port 23: telnet Port 80: HTTP

1024- 65535: disponibles a usuario

Puerta

Puerta =

punto de connección para dosprocesos usando sockets

Sockets: Binding

Page 17: INF 1400: Redes de Computadores

17

INF 1400 Redes de Computadores

Paso 3: listen(_)

6500

Buffer

Especifíca máximo número de connecciones antes de rechazarrequerimientos de connección

listen (socket_id, number_of_connection);

listen( ): prepara buffers de memoriapara connecciones con clientes

Servidor

Sockets: Listen

Page 18: INF 1400: Redes de Computadores

18

INF 1400 Redes de Computadores

Step 4 - Part 1 accept(_): el servidor acepta el requerimiento del cliente

Servidor

Cliente6500

accept ( ) es una función bloqueadora

Sockets: Accept

Page 19: INF 1400: Redes de Computadores

19

INF 1400 Redes de Computadores

Paso 4 - Parte 1 accept(_) : acepta connección desde el clientecreando un nuevo socket y elegiendo una nueva puerta

Cliente

Servidor 7100

6500

Una nueva puerta es elegida por el OS

OS duplica la connección

Sockets: Accept

Page 20: INF 1400: Redes de Computadores

20

INF 1400 Redes de Computadores

Paso 5- Parte 1: read(_) y write()

Cliente

Servidor

7100

El servidor y el cliente se comunican usando el segundo socket

6500

Transmissión de datos

Sockets: Read/Write

Page 21: INF 1400: Redes de Computadores

21

INF 1400 Redes de Computadores

Paso 5-Parte 2: el socket original vuelve al paso 4, i.e., la función accept()

Client

Server

6500

Sockets: Nuevas Connecciones

Page 22: INF 1400: Redes de Computadores

22

INF 1400 Redes de Computadores

Paso 6: close (_)

Client

Server 7100

El segundo socket es cerrado por el cliente

6500

Sockets: Close

Page 23: INF 1400: Redes de Computadores

23

INF 1400 Redes de Computadores

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

Page 24: INF 1400: Redes de Computadores

24

INF 1400 Redes de Computadores

RPCProgramas 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

Page 25: INF 1400: Redes de Computadores

25

INF 1400 Redes de Computadores

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

Proceso A

Stub del cliente

Stub del servidor

ProcedimientoB

Host 1 Host 2

Page 26: INF 1400: Redes de Computadores

26

INF 1400 Redes de Computadores

Llamada a Procedimientos

Page 27: INF 1400: Redes de Computadores

27

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

Page 28: INF 1400: Redes de Computadores

28

INF 1400 Redes de Computadores

RPC: Stubs

Page 29: INF 1400: Redes de Computadores

29

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

Page 30: INF 1400: Redes de Computadores

30

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

Page 31: INF 1400: Redes de Computadores

31

INF 1400 Redes de Computadores

RPC: Ejemplo

/* 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;

};

• Archivo de especificación

Page 32: INF 1400: Redes de Computadores

32

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 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;

Page 33: INF 1400: Redes de Computadores

33

INF 1400 Redes de Computadores

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);

}

RPC: Ejemplo• Programa Cliente

Page 34: INF 1400: Redes de Computadores

34

INF 1400 Redes de Computadores

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);

}

RPC: Ejemplo• Programa Cliente

Page 35: INF 1400: Redes de Computadores

35

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 * rational2float_1_svc(st_rational *argp, struct svc_req *rqstp) {

static float result;

result = (float)argp->num / (float)argp->den;

return &result;

}