Inf 1400 redes de computadores
This presentation is the property of its rightful owner.
Sponsored Links
1 / 35

INF 1400: Redes de Computadores PowerPoint PPT Presentation


  • 80 Views
  • Uploaded on
  • Presentation posted in: General

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

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


Inf 1400 redes de computadores

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


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


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


Inf 1400 redes de computadores

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)


Inf 1400 redes de computadores

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


Inf 1400 redes de computadores

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


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 ?


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

(6) write (send) data:

write (socket_id, buffer, buffer_len);

(7) close socket:

close(socket_id);


Inf 1400 redes de computadores

socket

socket 1

socket

socket

socket 2

Listen/Connect

Servidor

Cliente 1

Cliente 2


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


Inf 1400 redes de computadores

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


Inf 1400 redes de computadores

  • Prepara la estructura de

  • datos para manejar el socket

  • OS es el responsable

Server

Socket: Creación

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


Inf 1400 redes de computadores

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


Inf 1400 redes de computadores

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


Inf 1400 redes de computadores

accept ( )es una

función bloqueadora

Cliente

Sockets: Accept

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

del cliente

6500

Servidor


Inf 1400 redes de computadores

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


Inf 1400 redes de computadores

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


Inf 1400 redes de computadores

Client

Server

Sockets: Nuevas Connecciones

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

la función accept()

6500


Inf 1400 redes de computadores

Server

Sockets: Close

Paso 6: close (_)

6500

Client

7100

El segundo socket es cerrado por el cliente


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


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


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

  • ServerStub : reemplaza la llamada al procedimiento

Host 2

Host 1

Proceso A

Stub delservidor

Stub del cliente

ProcedimientoB


Inf 1400 redes de computadores

Llamada a Procedimientos


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


Inf 1400 redes de computadores

RPC: Stubs


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


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


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 rational2float(st_rational) = 2;

} = 1;

} = 0x20000001;

struct st_rational {

int num;

int den;

};

struct st_pair {

st_rational A;

st_rational B;

};


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;


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

}

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

}


Inf 1400 redes de computadores

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

}


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;

}


  • Login