inf 1400 redes de computadores
Download
Skip this Video
Download Presentation
INF 1400: Redes de Computadores

Loading in 2 Seconds...

play fullscreen
1 / 35

INF 1400: Redes de Computadores - PowerPoint PPT Presentation


  • 137 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' INF 1400: Redes de Computadores' - auryon


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
inf 1400 redes de computadores
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

conceptos b sicos
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
conceptos b sicos1
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
slide4

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
slide5

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
slide6

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
slide7

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)

slide8

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

slide9

“*” 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()

slide10

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 ?
slide11

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

slide12

socket

socket 1

socket

socket

socket 2

Listen/Connect

Servidor

Cliente 1

Cliente 2

slide13

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

slide14

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

slide15

Prepara la estructura de

  • datos para manejar el socket
  • OS es el responsable

Server

Socket: Creación

Paso 1socket(_): crea el identificador del socket

slide16

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

slide17

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

slide18

accept ( )es una

función bloqueadora

Cliente

Sockets: Accept

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

del cliente

6500

Servidor

slide19

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

slide20

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

slide21

Client

Server

Sockets: Nuevas Connecciones

Paso5-Parte 2: el socket original vuelve al paso 4, i.e.,

la función accept()

6500

slide22

Server

Sockets: Close

Paso 6: close (_)

6500

Client

7100

El segundo socket es cerrado por el cliente

slide23

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
slide24

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
slide25

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

slide27

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
slide29

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
slide30

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
slide31

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;

};

slide32

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;

slide33

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

}

slide34

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

}

slide35

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;

}

ad