Paradigma client-server



Похожие документы
Cenni di programmazione distribuita in C++ Mauro Piccolo

Introduzione alle applicazioni di rete

I Socket. Laboratorio Software M. Grotto R. Farina

Esercitazione [6] Client/Server con Socket

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

Interprocess Communications - II. Franco Maria Nardini

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Socket TCP. seconda parte

IPC Inter Process Communication

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

Controllo Winsock di Visual Basic

HTTP adaptation layer per generico protocollo di scambio dati

Inizializzazione degli Host. BOOTP e DHCP

L interfaccia socket

Esercizio 2. Client e server comunicano attraverso socket TCP

Transmission Control Protocol

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Creare una applicazione Winsock di base

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

rsystem Maximiliano Marchesi

Altri tipi di connessione

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Reti di Telecomunicazione Lezione 6

Una semplice applicazione client/server 1

I/O su Socket TCP: read()

Socket TCP. prima parte

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Protocolli di Comunicazione

Socket & RMI Ingegneria del Software - San Pietro

Reti di Telecomunicazione Lezione 8

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Reti (già Reti di Calcolatori )

Approfondimento di Marco Mulas

Interazione (TCP) Client-Server con le socket

P2-11: BOOTP e DHCP (Capitolo 23)

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Opzioni del Socket. Socket Options. Opzioni di Livello Socket. Livello delle Opzioni

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Sistemi Operativi (modulo di Informatica II)

ARP (Address Resolution Protocol)

Esempio 1: stampa locale di file remoto

Uso di sniffer ed intercettazione del traffico IP

Indirizzi IP. Indirizzi IP

appunti delle lezioni Architetture client/server: applicazioni client

Esercitazione [7] Client/Server con Socket

Introduzione. Livello applicativo Principi delle applicazioni di rete. Stack protocollare Gerarchia di protocolli Servizi e primitive di servizio 2-1

Gestione degli indirizzi

IP Internet Protocol

Impostazione dell'indirizzo IP del dispositivo di autenticazione di Xerox Secure Access Unified ID System Carta bianca

Protocolli applicativi: FTP

Elementi di Informatica e Programmazione

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Laboratorio di Programmazione in Rete

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Parte II Lezione 5

Telematica II 12. Esercitazione/Laboratorio 4

Una prima applicazione in C per l utilizzo delle socket

Reti di Calcolatori. Il software

Lezione 1 Introduzione

CORSO DI RETI SSIS. Lezione n.2. 2 Novembre 2005 Laura Ricci

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Socket API per il Multicast

Università degli Studi di Pisa Dipartimento di Informatica. NAT & Firewalls

Applicazioni distribuite

Gestione degli indirizzi

Programmazione dei socket con TCP #2

Esercitazione [5] Input/Output su Socket


Standard di comunicazione

Elementi di Informatica e Programmazione

Reti. Reti. IPv4: concetti fondamentali. arp (address resolution protocol) Architettura a livelli (modello OSI)

FTP. Appunti a cura del prof. ing. Mario Catalano

Modulo 1: Posta elettronica

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Do-Dots Protocollo di comunicazione

Introduzione al TCP/IP Indirizzi IP Subnet Mask Frame IP Meccanismi di comunicazione tra reti diverse Classi di indirizzi IP Indirizzi IP privati e

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_ Stefano Millozzi

Siti web centrati sui dati (Data-centric web applications)

Транскрипт:

Interazione Client Server (socket) Vittorio Maniezzo Università di Bologna Vittorio Maniezzo Università di Bologna 15 CliSer - 1/31 Paradigma client-server Le applicazioni utente devono interagire con il SW di rete per attivare connessioni Le applicazioni Server attendono connessioni: aspettano messaggi in ingresso eseguono un servizio (una applicazione) restituiscono i risultati Le applicazioni Client stabiliscono la connessione: mandano un messaggio al server aspettano la risposta Vittorio Maniezzo Università di Bologna 15 CliSer - 2/31 1

Caratteristiche del client E' un'applicazione qualsiasi diventa un client quando serve un servizio di rete esegue anche altre elaborazioni Invocata direttamente dall'utente Gira sul computer locale dell'utente Attiva il contatto col server Può accedere a più servizi di rete (uno alla volta) Non richiede HW specializzato Vittorio Maniezzo Università di Bologna 15 CliSer - 3/31 Caratteristiche del server Applicazione specializzata dedicata a fornire servizi di rete Parte con l'inizializzazione del sistema Gira su un computer remoto Aspetta richieste da client, cicla in attesa di richieste Accetta richieste da qualsiasi client, fornisce il servizio ad ogni client Vittorio Maniezzo Università di Bologna 15 CliSer - 4/31 2

Scambi di messaggi Scambi di messaggi: Il client invia una richiesta, possibilmente con dei dati Il server invia una risposta, possibilmente con dei dati Il client può spedire richieste multiple, un server invia risposte multiple Il server può inviare risposte multiple a fronte di richieste semplici (es. video feed) Client e server si scambiano messaggi attraverso il protocollo di trasporto, TCP o UDP Sia client che server devono avere lo stesso stack Vittorio Maniezzo Università di Bologna 15 CliSer - 5/31 Servizi multipli Macchine sufficientemente potenti possono contenere più server Ogni server é un processo indipendente, vengono gestiti simultaneamente più client Ogni servizio riceve un identificatore unico, sia i client che il server usano quell'identificatore Il server si registra mediante l'identificatore sullo strato di trasporto locale Il client richiede una sessione con quell'identificatore TCP usa i numeri di porta del protocollo (protocol port numbers) come identificatori Vittorio Maniezzo Università di Bologna 15 CliSer - 6/31 3

TCP - orientato alla connessione TCP o UDP 1. Il client stabilisce la connessione col server 2. Il client e il server si scambiano messaggi (anche multipli) di dimensione qualsiasi 3. Il client chiude la connessione UDP - senza connessione 1. Il client costruisce un messaggio 2. Il client invia il messaggio al server 3. Il server risponde Il messaggio deve essere contenuto in un unico datagramma UDP Alcuni servizi usano entrambi i protocolli DNS, chargen, motd Vittorio Maniezzo Università di Bologna 15 CliSer - 7/31 Le socket Una socket é una modalità di interfacciamento fra programmi applicativi e SW di protocollo Utilizzate sia da client che da server, molto comuni Estensioni dirette del paradigma UNIX di I/O su file Vittorio Maniezzo Università di Bologna 15 CliSer - 8/31 4

Socket API Una applicazione interagisce col protocollo specificando: se effettuare un listen (passivo) o un open (attivo). il protocollo da utilizzare. un indirizzo IP e un numero di porta. L'interfaccia al protocollo é implementata da specifiche Application Program Interface (API) I protocolli non arrivano a specificare le API, che sono definite dallo stack utilizzato Le Socket API sono delle specifiche API di protocollo Originate con Berkeley BSD UNIX Disponibili su Windows 95/98/NT/..., Solaris, etc. Non sono definite nello standard TCP/IP, ma sono uno standard de facto Vittorio Maniezzo Università di Bologna 15 CliSer - 9/31 Socket e I/O su UNIX Socket sviluppate come estensione dell I/O di UNIX Basate sulla sequenza open-read-write-close open - permette di accedere a un file read/write - accedono ai contenuti del file close - terminazione "graceful" dell'utilizzo del file Le socket complicano leggermente questa struttura: richiedono più parametri Indirizzi Protocollo e numero di porta Tipo del protocollo Due possibilità; aggiungere nuovi parametri alle system call di I/O creare system call nuove Le socket creano nuove chiamate Vittorio Maniezzo Università di Bologna 15 CliSer - 10/31 5

Le primitive delle socket socket - crea una nuova socket close - bind - termina l'utilizzo di una socket collega un indirizzo di rete a una socket listen - aspetta messaggi in ingresso accept - comincia ad utilizzare una connessione in ingresso connect - crea una connessione con un host remoto send - trasmette dati su una connessione attiva recv - riceve dati da una connessione attiva Vittorio Maniezzo Università di Bologna 15 CliSer - 11/31 socket descrittore = socket(protofamily,type,protocol) Ritorna un descrittore di socket da utilizzare nelle chiamate successive protofamily specifica la famiglia di protocolli. Ad es.: PF_INET - Protocolli Internet PF_APPLETALK - Protocolli AppleTalk type specifica il tipo di comunicazione SOCK_DGRAM - connectionless SOCK_STREAM - connection-oriented protocol specifica il protocollo all'interno della famiglia IPPROTO_TCP - sceglie TCP IPPROTO_UDP - sceglie UDP Vittorio Maniezzo Università di Bologna 15 CliSer - 12/31 6

close close(descriptor) Termina l'utilizzo di un descrittore di socket. Vittorio Maniezzo Università di Bologna 15 CliSer - 13/31 bind bind(socket, localaddr, address) bind collega un indirizzo (locale o remoto) ad una socket un server collega una porta locale per i messaggi in ingresso. un client collega un indirizzo e una porta remoti per poter contattare il server. Vittorio Maniezzo Università di Bologna 15 CliSer - 14/31 7

Formato delle socket Formato indipendente dal protocollo: struct sockaddr { u_char sa_len; /* lunghezza dell'indirizzo */ u_char sa_family; /* famiglia dell'indirizzo */ char sa_data[14]; /* indirizzo */ } Per protocolli IP, sa_data contiene indirizzo IP e porta: struct sockaddr_in { u_char sin_len; /* lunghezza dell'indirizzo */ u_char sin_family; /* famiglia dell'indirizzo */ u_short sin_port; /* porta */ struct in_addr sin_addr; /* Indirizzo IP */ char sin_zero[8] /* non utilizzato */ } I primi due campi coincidono con quelli di un sockaddr generico, il resto é specifico di IP INADDR_ANY viene interpretato come "qualsiasi" indirizzo IP Vittorio Maniezzo Università di Bologna 15 CliSer - 15/31 listen listen(socket, queuesize) Un server usa listen per aspettare connessioni in ingresso socket specifica attraverso quale socket arriverà la connessione Possono essere accettate nuove richieste mentre il server sta servendo richieste precedenti Il sistema operativo può mantenere le richieste in una coda, fino al limite specificato in queuesize Vittorio Maniezzo Università di Bologna 15 CliSer - 16/31 8

accept accept(socket, caddress, caddresslen) Un server usa accept per accettare la richiesta di connessione in cima alla pila accept é bloccante, fino a che non viene gestita una richiesta di connessione Ritorna una nuova socket collegata al terminale del server della nuova connessione Le vecchie socket rimangono inalterate e continuano a servire le connessioni attive caddress ritorna in struct sockaddr l'indirizzo del client caddresslen ritorno la lunghezza dell'indirizzo Vittorio Maniezzo Università di Bologna 15 CliSer - 17/31 connect connect(socket, saddress, saddresslen) Un client usa connect per attivare una connessione con un server Bloccante finché la connessione non é accettata (con una accept) socket contiene il descrittore di socket da utilizzare saddress é una struct sockaddr che identifica il server saddresslen é la lunghezza di saddress Normalmente utilizzata con protocolli orientati alla connessione Può essere utilizzata con protocolli connectionless specifica nella socket locale l'indirizzo del server identifica implicitamente il server nei messaggi seguenti Vittorio Maniezzo Università di Bologna 15 CliSer - 18/31 9

Send (o write) send(socket,data,length,flags) Usata per inviare dati su una socket collegata socket identifica la socket data puntatore ai dati da spedire length lunghezza dei dati (in byte) flags opzioni Vittorio Maniezzo Università di Bologna 15 CliSer - 19/31 sendto, sendmsg sendto(socket,data,length,flags,destaddress,addresslen) sendmsg(socket, msgstruct, flags) Usate per socket non connesse specificando esplicitamente la destinazione sendto parametri adizionali: destaddress -struct sockaddr indirizzo destinazione addresslen - lunghezza di destaddress sendmsg mette tutti i parametri in un'unica struttura: struct msgstruct { struct sockaddr *m_addr; /* ptr to destination address */ struct datavec *m_vec; /* pointer to message vector */ int m_dvlength; /* num. of items in vector */ struct access *m_rights; /* ptr to access rights list */ int m_alength; /* num. of items in list */ } Vittorio Maniezzo Università di Bologna 15 CliSer - 20/31 10

recv recv(socket, buffer, length, flags) Usato per ricevere dati da una socket connessa socket identifica la socket Dati ricevuti in buffer length max lunghezza in byte dei dati ricevuti flags opzioni Ritorna il numero di byte ricevuti 0 indica connessione chiusa -1 indica un errore Vittorio Maniezzo Università di Bologna 15 CliSer - 21/31 recvfrom, recvmsg recvfrom(socket, buffer, length, flags, sndraddress, addresslen) recvmsg(socket, msgstruct, flags) Come sendto e sendmsg sndraddress indirizzo del mittente addresslen lunghezza dell'indirizzo recvmsg usa msgstruct per i parametri Vittorio Maniezzo Università di Bologna 15 CliSer - 22/31 11

Altre primitive getpeername - indirizzo dell'altro terminale della conessione getsockname - indirizzo correntemente collegato alla socket setsockopt - imposta le opzioni Vittorio Maniezzo Università di Bologna 15 CliSer - 23/31 Socket e processi Come i descrittori dei file, le socket sono ereditate dai processi figli Una socket scompare quando tutti i processi l'hanno chiusa I server utilizzano l'ereditabilità delle socket per passare le connessioni entranti a processi server slave Vittorio Maniezzo Università di Bologna 15 CliSer - 24/31 12

Esempio di un servizio Server Memorizza quante volte é stato contattato Ritorna il contatore come stringa ASCII Client Stabilisce la connessione Aspetta il messaggio dal server (stringa ASCII) Stampa il messaggio Protocollo applicazione: Sintassi: Nessun header Il client invia un messaggio vuoto Il server invia un messaggio contenente la stringa Semantica: Il client stabilisce la connessione; il server ritorna la stringa ASCII Vittorio Maniezzo Università di Bologna 15 CliSer - 25/31 Codice: esempi Server: server.c Gira in background Gestisce un solo parametro nella linea di comando (opzionale): il numero di porta su cui ascoltare (default 5193) Client: client.c E' un programma utente Ha due parametri (opzionali) nella linea di comando: il nome dell'host da contattare (default localhost) e il numero di porta da contattare (default 5193) Vittorio Maniezzo Università di Bologna 15 CliSer - 26/31 13

Architettura dell'applicazione Sequenze delle chiamate a socket in client e server SERVER getprotobyname socket bind listen accept CLIENT gethostbyname getprotobyname socket connect recv send close close Vittorio Maniezzo Università di Bologna 15 CliSer - 27/31 Server Inizializzazione: getprotobyname - cerca il numero di protocollo per il TCP socket - crea una socket listen - associa la socket alle richieste in ingresso Loop: accept - accetta una connessione in ingresso send - invia un messaggio al client close - chiude la socket della connessione Vittorio Maniezzo Università di Bologna 15 CliSer - 28/31 14

Client Inizializzazione: gethostbyname - cerca il server getprotobyname - cerca il numero di porta di protocollo per il TCP socket - crea una socket connect - si connette alla porta del server Loop: recv - riceve messaggi dal server Terminazione: close - chiude la socket Vittorio Maniezzo Università di Bologna 15 CliSer - 29/31 Utilizzo di recv nel client La chiamata a recv nel client é in un loop anche se il server invia un messaggio solo. I protocolli non assicurano di consegnare i dati negli stessi blocchi in cui erano stati inseriti dal server I dati possono essere inviati in segmenti diversi La recv non ritorna necessariamente tutti i dati Il client deve ripetere la chiamata a recv finché non ritorna 0 Vittorio Maniezzo Università di Bologna 15 CliSer - 30/31 15

Socket bloccanti Spesso le chiamate alle socket sono bloccanti (blocking) Il processo chiamante é bloccato (tolto dalla coda ready) finché non viene completata l'operazione della socket Blocchi del server: accept: finché non arriva una nuova connessione send: finché i dati non sono consegnati allo strato inferiore Blocchi del client: gethostbyname: finché il DNS non risolve il nome del server recv: finché il messaggio non viene consegnato dal server Vittorio Maniezzo Università di Bologna 15 CliSer - 31/31 16