2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno...

22
2003-2004 Reti di Calcolatori 1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce di comun icazione: Interfaccia di comunizaione: insieme delle API necessarie alla gestione di un determinato protocollo di comunicazione 7 Applicazione Livelli 1 Fisico 2 Dati 3 Rete 4 Trasporto 5 Sessione 6 Presentazione Named Pipe IPX NetIPC Sockets SPX NetBIOS Mail Slot RPC TLI Interfacce di comunicazione APPC TCP / UDP IP

Transcript of 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno...

Page 1: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 1

Il modello Client/ServerLa comunicazione

Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce di comun icazione:

• Interfaccia di comunizaione: insieme delle API necessarie alla gestione di un determinato protocollo di comunicazione

7 Applicazione

Livelli

1 Fisico

2 Dati

3 Rete

4 Trasporto

5 Sessione

6 Presentazione

Named Pipe

IPX

NetIPCSocketsSPXNetBIOS

Mail Slot RPCTLI

Interfacce di comunicazione

APPC

TCP / UDP

IP

Page 2: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 2

Il modello Client/ServerLa comunicazioneUnix - Socket

• Necessità di definire e di diffondere Standard di comunicazione a livello software

• Socket come endpoint per comunicare in modo flessibile, differenziato ed efficiente:

• È uno strumento per la comunicazione locale o remota• È un meccanismo, in grado di implementare politiche differenziate (a

livello utente)•Alternativa anche locale superando i problemi degli strumenti concentrati (pipe solo tra processi in gerarchia)

• Requisiti della Socket:• eterogeneità: la comunicazione fra processi su architetture diverse• trasparenza: la comunicazione fra processi deve potere avvenire

indipendentemente dalla localizzazione fisica• efficienza: l'applicabilità di questi strumenti limitata dalla sola

performance• compatibilità: i naive process (leggono dallo standard input e scrivono

sullo standard output e standard error) devono potere lavorare in ambienti distribuiti senza subire alcuna modifica

• protocolli di comunicazione diversi con convenzioni differenziate

Page 3: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 3

Il modello Client/ServerLa comunicazioneUnix - Socket

• Concetto di communication domain: definizione di più semantiche di comunicazione e di naming organizzati in DOMINI di COMUNICAZIONE

• Semantica di comunicazione include• affidabilità di una trasmissione• possibilità di lavorare in multicast

• Naming è il meccanismo usato per indicare i punti terminali di una comunicazione

• Si sceglie il dominio più appropriato mediante un'interfaccia standard• Astrazione unificante SOCKET• comunicazione in modo omogeneo• semantica uniforme• scelta connection-oriented e connectionless consistente nei domini

• Proprietà differenziate della Socket:• trasferimento di dati in modo sequenziale• trasferimento dei dati senza duplicazioni• trasferimento dei dati in modo affidabile• mancanza di limiti alla lunghezza del messaggio• invio di messaggi out-of-band• comunicazione connection-oriented o connection-less

Page 4: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 4

Il modello Client/ServerUnix – SocketTrasparenza della comunicazione

Processo utente

Gestore di data link(es. Ethernet)

Protocolli di trasporto e di rete(es. TCP/IP)

Socket system call interface

Kernel

Le socket come interfaccia omogenea per i servizi

• Socket: terminale della comunicazione • Socket descriptor: integrato con i file

descriptor (gestione delle socket in modo unificato ai file)

• USO di protocolli di trasporto diversi anche altri protocolli, diversi da quello che si considera uso di suite TCP/IP (sia UDP sia TCP)

• Le socket sono viste quindi in modo simile ai file, posso aprire, chiudere, leggere o scrivere con le stesse chiamate di accesso al file. Sotto, in modo trasparente viene gestita la comunicazione di rete

Page 5: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 5

Il modello Client/ServerUnix – SocketNaming

Una socket deve essere identificata affinché possa essere contattata.

Ci sono due scope di visibilità:

• Nomi logici delle socket validità locale

• un indirizzo di socket dipende dal dominio

• Nomi fisici da associare end-point validi globalmente

• una socket deve essere collegata al sistema fisico è necessario il binding, cioè legare la socket ad una porta del nodo

• si realizza una entità detta half-association• dominio Internet: {famiglia indirizzo, indirizzo Internet, numero di porta} socket collegata ad un numero di porta •dominio UNIX: {famiglia indirizzo, path nel filesystem, file associato}

Page 6: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 6

Il modello Client/ServerUnix – SocketLe Primitive

creazione socket in ogni processo Nome logico LOCALE

s = socket (dominio, tipo, protocollo)int s, /* file descriptor associato alla socket */dominio, /* UNIX, Internet, etc. */tipo, /* datagram, stream, etc. */protocollo; /* quale protocollo */

Client e Server in stato di pre-connessione aggancio al sistema 'fisico': nodi e porte GLOBALI:

rok = bind (s, nome, lungnome)int rok, s;struct sockaddr *nome; /* porta locale per la socket */int lungnome;

Page 7: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 7

Il modello Client/ServerUnix – SocketLe Primitive

• Le socket con le porte formano half-association (interne ad un solo processo)• Sufficiente per scambio messaggi (scambio datagrammi)• Processo Client:

• dichiarazione delle variabili di riferimento a socket• conoscenza dell'indirizzo Internet del nodo remoto• conoscenza della porta del servizio da usare

• processo Server:• dichiarazione delle variabili di riferimento a socket• conoscenza della porta per il servizio da offrire• assegnazione di wildcard address per l'indirizzo Internet locale (server multiporta)

Socket A Socket B (bound)

- il client ha creato la socket - il server ha creato la socket

- il server ha collegato la socket adun indirizzo

- il client ha collegato la socket adun indirizzo

(bound)

Page 8: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 8

Il modello Client/ServerUnix – SocketIl Flusso dei Dati

Client Server

Dichiarazione argomenti dellechiamate

Creazione socket

socket()

Identificazione socket

bind()

Invio dati

sendto() o write()

Ricezione dati

Chiusura socket(opzionale)

close() o shutdown()

Dichiarazione argomenti dellechiamate

Creazione socket

socket()

Identificazione socket

bind()

Ricezione dati

recvfrom() o read()

Invio dati

Chiusura socket (opzionale)

close() o shutdown()

sendto() o write()recvfrom() o read()

Page 9: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 9

Il modello Client/ServerUnix – SocketEsempio di uso

#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>s = socket (AF_INET,SOCK_DGRAM,0);int s;

nbytes = sendto (s, msg, len, flags, to, tolen)int s, nbytes; char *msg;int len, flags;struct sockaddr_in *to; int tolen;

nbytes = recvfrom (s, buf, len, flags, from, fromlen)int s, nbytes; char *buf;int len,flags;struct sockaddr_in *from; int *fromlen;

s == socket descriptorbuf == puntatore al messaggio da spedire len == sua lunghezzaflags == flags (es. MSG_PEEK)to/from == puntatore all'indirizzo della socket partnertolen/fromlen == sua lunghezza nbytes == lunghezza del messaggio inviato/ricevuto

Page 10: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 10

Il modello Client/ServerUnix – SocketDatagrammi

• Lunghezza massima del messaggio (ad esempio 9K byte o 16K byte)• Uso del protocollo UDP e IP:non affidabile intrinsecamente• A livello utente si può ottenere maggiore affidabilità prevedendo una

ritrasmissione dei messaggi• recvfrom ritorna solo un messaggio per volta per prevenire situazioni di

perdita di byte di un messaggio len più alto possibile• Sintassi:

CLIENTE (MITTENTE)struct sockaddr_in *servaddr;char msg[2000];int count;...count= sendto (s, msg, strlen(msg), 0, servaddr, sizeof(struct sockaddr_in));

SERVITORE (RICEVENTE)struct sockaddr_in *clientaddr;char buffer[BUFFERSIZE];int count;...addrlen=sizeof(sockaddr_in);count= recvfrom (s, buffer, BUFFERSIZE, 0, clientaddr,&addrlen);

Page 11: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 11

Il modello Client/ServerUnix – SocketDatagrammi

socket()

bind()

recvfrom()

<attesa richiesta>

<elaborazione>

sendto()

close()

Client Process

Server Process

1

2

socket()

sendto()

recvfrom()<attesa risp>

close()

Page 12: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 12

Il modello Client/ServerUnix – SocketDatagrammi

Implementazione di una comunicazione via datagrammi deve tenere conto delle peculiarità del canale:

• UDP non è affidabile• in caso di perdita del messaggio del Client o della risposta del Server, il

Client si blocca in attesa indefinita della risposta (utilizzo di timeout?)

• Blocco del Client • anche nel caso di invio di una richiesta a un Server non attivo (errori nel

collegamento al server notificati solo sulle socket connesse)

• UDP non ha flow control• se il Server riceve troppi datagrammi per le sue capacità di elaborazione,

questi vengono scartati, senza nessuna notifica ai Client • una coda per ogni socket modificabile in lunghezza con l'uso di opzione

SO_RCVBUF

Page 13: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 13

Il modello Client/ServerUnix – SocketStream

Socket A (bound) Socket B (bound)

- il client ha fatto una richiesta - il server ha ricevuto una richiesta

coda d'ascolto

in ascolto

nella coda d'ascoltodi connessione

Socket A (bound)

Socket B

- il server ha accettato la richiesta

coda d'ascolto

di connessione

(bound)

Socket C(bound)

Connessione - il server ha stabilito una connessionecon il client mediante una nuova socketcon le stesse caratteristiche della originale

- la socket originale continua ad ascoltare leeventuali richieste di connessione

Page 14: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 14

Il modello Client/ServerUnix – SocketStream

Client Server

Dichiarazione argomenti dellechiamate

Creazione socketsocket()

Identificazione socket(opzionale)

bind()

Richiesta di connessioneconnect()

Invio datisend() o write()

Ricezione datirecv() o read()

Chiusura connessione(opzionale)

close() o shutdown()

Dichiarazione argomenti dellechiamate

Creazione socketsocket()

Identificazione socket

bind()

Attesa richieste

listen()

Accettazione della connessione

accept()

Ricezione datirecv() o read()

Invio datisend() o write()

Chiusura connessione (opzionale)

close() o shutdown()

Page 15: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 15

Il modello Client/ServerUnix – SocketBind alla porta di ricezione

#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>

int bind ( s, addr, addrlen)int s;struct sockaddr_in *addr;int addrlen;

s == socket descriptor che identifica la socketaddr == struttura con indirizzo di porta e indirizzo internet del nodo stessoaddrlen == la lunghezza di addr

struct sockaddr_in myaddr;<<assegnazione del socket address>>bind (ls,&myaddr,sizeof(struct sockaddr_in));

Page 16: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 16

Il modello Client/ServerUnix – SocketClient: Richiesta di una connessione

int connect (s, addr, addrlen)int s, addrlen;struct sockaddr_in *addr;

s == socket descriptoraddr == puntatore al socket address remotoaddrlen == lunghezza di questa struttura

Casi di errore possono essere: • EISCONN: connessione già presente una socket non può essere connessa più

volte per non duplicare association• ETIMEDOUT: errore per timeout la coda d'ascolto del server è piena o non creata• ECONNREFUSED: impossibilità di connessione

• La connect() è sincrona se non modalità asincrona nonblocking I/O• Connect() può anche fare il bind() automaticamente• Il client al successo della connect() usa la connessione sperando che il tutto sia andato a

buon fine (?)

struct sockaddr_in *peeraddr;/* assegnazione del socket address remoto */s=socket(AF_INET,SOCK_STREAM,0);connect(s,&peeraddr,sizeof(struct sockaddr_in));

Page 17: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 17

Il modello Client/ServerUnix – SocketServer: Attesa di una Richiesta

Dopo il bind, il server deve preparare una coda di accettazione per le richieste di connessione dei client

• primitiva listen(): si crea la coda per il socket descriptor • la connessione viene stabilita solo dopo l'accodamento di una richiesta di un client • la socket deve essere collegata alla porta dal sistema

int listen (s,backlog) int s,backlog;

S == socket descriptorbacklog == intero fra 1 e 20 massimo numero di richieste in coda (consigliato <=5)

• Evento richiesta non accodata viene segnalato solo al processo client (ETIMEDOUT)non rimane alcuna traccia al server

• EINVAL: possibile stato di errore in ingresso

• Il codice è quindi:

s = socket (AF_INET,SOCK_STREAM,0);listen (s,5);

Page 18: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 18

Il modello Client/ServerUnix – SocketServer: Accettazione di una richiesta

• Il server accetta le richieste di connessione • primitiva accept(): si crea una nuova socket per la connessione e si fornisce il socket

descriptor relativo

• La nuova socket:• ha una semantica di comunicazione come la vecchia• ha lo stesso port address della vecchia socket• è connessa alla socket del client

• La primitiva accept() è sincrona (a meno di una specifica configurazione nonblocking I/O)

int accept (ls, addr, addrlen)int ls, *addrlen;struct sockaddr_in *addr;

ls == socket descriptoraltri parametri passsati per indirizzoaddr == indirizzo del socket address connessoaddrlen == la lunghezza espressa in byte

• La accept() non offre la possibilità di filtrare le richieste devono essere accettate tutte oppure nessuna

Page 19: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 19

Il modello Client/ServerUnix – SocketInvio e Ricezione di dati sulla connessione

• Uso dei socket descriptor come file descriptor UNIX• read() / write() e send() / recv()

int send (s, msg, len, flags)int s; char *msg;int len,flags;

int recv (s, buf, len, flags)int s; char *buf;int len,flags;

s == socket descriptorbuf /msg == puntatore al messaggiolen == lunghezza del messaggioflags == opzioni di comunicazione

flags send():• 0 per un funzionamento normale,• MSG_OOB per un messaggio out-of-band.• MSG_DONTWAIT nessuna attesa (e errore se non completamento).

flags recv():• 0 per un funzionamento normale,• MSG_OOB per un messaggio out-of-band,• MSG_PEEK per una lettura non distruttiva dallo stream

Page 20: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 20

Il modello Client/ServerUnix – SocketChiusura di una connessione

• Primitiva close() int close (s)int s;

• La chiamata close() decrementa il contatore dei processi referenti al socket descriptor• Il chiamante non lavora più con quel descrittore dopo un intervallo di tempo controllato

da un'opzione avanzata (SO_LINGER)

int sd;sd=socket(AF_INET,SOCK_STREAM,0);.......close(sd);

• Alla chiusura, ogni messaggio nel buffer è spedito, mentre ogni dato non ricevuto viene perduto

• Primitiva shutdown() più elegante per abbattimento della connessioneper una migliore gestione delle risorse

• Le operazioni di chiusura sono garanzie di collegamento con il pari sul canale• Per chiudere una connessione in uno solo dei due versi la trasmissione passa da

full-duplex ad half-duplex non si ricevono più dati, ma si può trasmettere al pari• si possono ricevere i dati dalla socket senza ulteriori trasmissioni di dati

•abbattimento graceful della connessione•Il processo collegato alla connessione alla lettura•riceve end-of-file

Page 21: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 21

Il modello Client/ServerUnix – SocketPrincipali Primitive

Chiamata Significato

socket( ) Crea un descrittore da usare nelle comunicazione di rete

connect( ) Connette la socket a una remota

write( ) Spedisce i dati attraverso la connessione

read( ) Riceve i dati dalla connessione

close( ) Termina la comunicazione e dealloca la socket

bind( ) Lega la socket con l'endpoint locale

listen( ) Socket in modo passivo e predispone la lunghezza della coda per le connessioni

accept( ) Accetta le connessioni in arrivo

recv( ) Riceve i dati in arrivo dalla connessione

recvmes( ) Riceve i messaggi in arrivo dalla connessione

recvfrom( ) Riceve i datagrammi in arrivo da una destinazione specificata

send( ) Spedisce i dati attraverso la connessione

sendmsg( ) Spedisce messaggi attraverso la connessione

sendto( ) Spedisce i datagrammi verso una destinazione specificata

shutdown( ) Termina una connessione TCP in una o in entrambe le direzioni

getsockname( ) Permette di ottenere la socket locale legata dal kernel (vedi parametri socket, sockaddr, length)

getpeername( ) Permette di ottenere l'indirizzo del pari remoto una volta stabilita la connessione (vedi parametri socket, sockaddr, length)

getsockopt( ) Ottiene le opzioni settate per la socket

setsockopt( ) Cambia le opzioni per una socket

perror() Invia un messaggio di errore in base a errno (stringa su stderr)

syslog() Invia un messaggio di errore sul file di log (vedi parametri priority, message, params)

Page 22: 2003-2004Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.

2003-2004 Reti di Calcolatori 22

Il modello Client/ServerUnix – SocketIl concetto di server parallelo

Processo SERVER (padre):accettazione richieste di connessione

Socket d'ascolto collegata allaporta 22375

Processo SERVER (figlio)eco messaggi di 10 byte

Socket connessacollegata allaporta 22375

Processo CLIENT: invio e ricezione messaggi di 10 byte

Socket connessa

Stream

.....messag gio3............

Connessione

coda

NODO CLIENTE

NODO SERVERProcesso SERVER initesce immediatamente

Richiesta