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

Slides:



Advertisements
Presentazioni simili
Stack TCP/IP - Socket Douglas E. Comer, "Internetworking con TCP/IP, principi, protocolli, architettura.", Gruppo Editoriale Jackson W. Richard. Stevens,
Advertisements

Socket Java Alberto Ferrari.
Programmazione con socket
I protocolli TCP/UDP prof.: Alfio Lombardo.
Reti di Calcolatori L’interfaccia socket
1 Reti di Calcolatori Esercitazione 4 Implementazione di TFTP in C / XDR Copyright © by D. Romagnoli & C. Salati Alma Mater Studiorum - Universita'
1 System Call per Comunicazione tra Processi Pipe.
Programmazione socket
I modelli di riferimento OSI e TCP/IP
La rete in dettaglio: rete esterna (edge): applicazioni e host
Come programmare servizi di rete?
Calcolatori Elettronici
Programmazione su Reti
Programmazione di rete:
Il modello cliente/servente per l’implementazione di applicazioni
Struttura dei sistemi operativi (panoramica)
TCP Transmission Control Protocol. Programmazione II: Programmazione su Reti -- Prof. G. Persiano 2 TCP TCP fornisce un servizio di connessione –orientato.
Reti di Calcolatori IL LIVELLO RETE.
Reti di Calcolatori IL LIVELLO RETE.
Reti di Calcolatori IL LIVELLO TRASPORTO Protocolli TCP e UDP.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
ICMP - PING - TRACEROUTE
Reti di Calcolatori1 Il modello Client/Server La comunicazione Sun RPC Possibilità di invocare una procedura non locale operazione che interessa.
Reti di Calcolatori Reti di Calcolatori2 Il modello Client/Server I Sistemi di Rete Dal punto di vista del programmatore.
Reti di Calcolatori1 Il modello Client/Server Lo Standard OSI OSI (open system interconnection) è soprattutto uno standard di interconnessione.
Interventi sul sistema informativo aziendale
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
DEIS Università di Bologna
Distributed File System Service Dario Agostinone.
Corso di Informatica per Giurisprudenza Lezione 7
Guida IIS 6 A cura di Nicola Del Re.
I protocolli TCP/UDP prof.: Alfio Lombardo.
Il modello di riferimento OSI
File system distribuito transazionale con replicazione
Introduzione al controllo derrore. Introduzione Quando dei dati vengono scambiati tra due host, può accadere che il segnale venga alterato. Il controllo.
Modulo 3 – U.D. 3 – Lez. 1 Ernesto Damiani - Sistemi di elaborazione dell'informazione.
Modulo 4 – U.D. 1 – Lez. 6 Ernesto Damiani - Sistemi di elaborazione dell'informazione.
Reti di calcolatori LS Manni Tiziano  IT e nuovi scenari applicativi …  … portabilità dei dati …  … condivisione dati …  … disponibilità.
Reti di Calcolatori ed Internet Fabio Massimo Zanzotto.
L’architettura a strati
Distributed System ( )7 TCP/IP four-layer model.
FTP File Transfer Protocol
Questo modello può essere utilizzato come file iniziale per la presentazione di materiale didattico per la formazione in gruppo. Sezioni Fare clic con.
Come comunicano i processi ?
Creato da Riccardo Nuzzone
Livello di trasporto Protocolli TCP e UDP.
1 Sistemi e Tecnologie della Comunicazione Lezione 22: transport layer: introduzione, funzionalita’
Reti di computer Condivisione di risorse e
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 - Socket library Ernesto Damiani Lezione 3.
1 Windows Socket Programming Corso di Sistemi di Elaborazione delle Informazioni a.a 2006/2007 Autori: Alberto Colombo Fulvio Frati.
Sistemi di elaborazione dell’informazione Modulo 4 -Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 1.
Servizi Internet Claudia Raibulet
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 2.
1.1 Corso di Sistemi Operativi: Programmazione di Sistema Corso di Laurea in Informatica, Università di Firenze Anno accademico 2010/2011 Prof. Luca Ferrari.
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 4.
Progetto e Realizzazione di un servizio di Chat Progetto di: Nicoli Leonardo Corso di: Reti di Calcolatori L-S.
Controllo di flusso TCP. Elementi base del flusso TCP (1) Comunicazione punto-punto Un mittente, un destinatario. Flusso di byte affidabile Flusso suddiviso.
Sistemi di elaborazione dell’informazione Modulo 2 -Protocolli di rete TCP/IP Unità didattica 6 -User Datagram Protocol Ernesto Damiani Lezione 2 – UDP.
Sistemi e Tecnologie della Comunicazione Lezione 2: architettura delle reti e modello OSI.
GESTIONE RETI TCP/IP l troubleshooting è necessario per risolvere molti problemi che si possono verificare all'interno di una rete, una delle aspirazioni.
Corso di Reti di Calcolatori Interfaccia socket. [2] Introduzione La programmazione di rete è ciò che permette a due o più computer collegati da una rete.
ARCHITETTURA DI RETE Protocollo: insieme di regole che governano le comunicazioni tra i nodi di una rete. La condivisione di queste regole tra tutte gli.
Applicazione Presentazione Sessione Trasporto Rete Data link Fisico OSI Processo / Applicazione Trasporto Rete- Internet Interfaccia di.
INTERNET PROTOCOL SUITE FACOLTA’ DI INGEGNERIA Corso di Laurea Specialistica in Ingegneria delle Telecomunicazioni Docente: Prof. Pasquale Daponte Tutor:
1 Il livello transport. Concetti fondamentali - Canale logico e canale fisico 2 Quando un segnale deve essere trasmesso, viene inviato su un Canale, cioè.
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
Raccogliere informazioni ALCUNE DOMANDE FONDAMENTALI È stato modificato qualche componente HW o SW? Il sintomo si presenta regolarmente o ad intermittenza?
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
Come comunicano i processi ?
Il Livello di Trasporto
Transcript della presentazione:

Reti di Calcolatori1 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 SPXNetBIOS Mail Slot RPC TLI Interfacce di comunicazione APPC TCP / UDP IP

Reti di Calcolatori2 Il modello Client/Server La comunicazione Unix - 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 (pipesolo 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

Reti di Calcolatori3 Il modello Client/Server La comunicazione Unix - 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

Reti di Calcolatori4 Il modello Client/Server Unix – Socket Trasparenza della comunicazione 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

Reti di Calcolatori5 Il modello Client/Server Unix – Socket Naming 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}

Reti di Calcolatori6 Il modello Client/Server Unix – Socket Le 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;

Reti di Calcolatori7 Il modello Client/Server Unix – Socket Le 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)

Reti di Calcolatori8 Il modello Client/Server Unix – Socket Il Flusso dei Dati ClientServer Dichiarazione argomenti delle chiamate Creazione socket socket() Identificazione socket bind() Invio dati sendto() o write() Ricezione dati Chiusura socket (opzionale) close() o shutdown() Dichiarazione argomenti delle chiamate 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()

Reti di Calcolatori9 Il modello Client/Server Unix – Socket Esempio di uso #include 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 descriptor buf== puntatore al messaggio da spedire len== sua lunghezza flags == flags (es. MSG_PEEK) to/from== puntatore all'indirizzo della socket partner tolen/fromlen== sua lunghezza nbytes==lunghezza del messaggio inviato/ricevuto

Reti di Calcolatori10 Il modello Client/Server Unix – Socket Datagrammi 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);

Reti di Calcolatori11 Il modello Client/Server Unix – Socket Datagrammi

Reti di Calcolatori12 Il modello Client/Server Unix – Socket Datagrammi 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

Reti di Calcolatori13 Il modello Client/Server Unix – Socket Stream

Reti di Calcolatori14 Il modello Client/Server Unix – Socket Stream ClientServer Dichiarazione argomenti delle chiamate Creazione socket socket() Identificazione socket (opzionale) bind() Richiesta di connessione connect() Invio dati send() o write() Ricezione dati recv() o read() Chiusura connessione (opzionale) close() o shutdown() Dichiarazione argomenti delle chiamate Creazione socket socket() Identificazione socket bind() Attesa richieste listen() Accettazione della connessione accept() Ricezione dati recv() o read() Invio dati send() o write() Chiusura connessione (opzionale) close() o shutdown()

Reti di Calcolatori15 Il modello Client/Server Unix – Socket Bind alla porta di ricezione #include int bind ( s, addr, addrlen) int s; struct sockaddr_in *addr; int addrlen; s == socket descriptor che identifica la socket addr== struttura con indirizzo di porta e indirizzo internet del nodo stesso addrlen== la lunghezza di addr struct sockaddr_in myaddr; > bind (ls,&myaddr,sizeof(struct sockaddr_in));

Reti di Calcolatori16 Il modello Client/Server Unix – Socket Client: Richiesta di una connessione int connect (s, addr, addrlen) int s, addrlen; struct sockaddr_in *addr; s == socket descriptor addr== puntatore al socket address remoto addrlen== 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));

Reti di Calcolatori17 Il modello Client/Server Unix – Socket Server: 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 descriptor backlog == 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);

Reti di Calcolatori18 Il modello Client/Server Unix – Socket Server: 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 descriptor altri parametri passsati per indirizzo addr== indirizzo del socket address connesso addrlen== la lunghezza espressa in byte La accept() non offre la possibilità di filtrare le richieste devono essere accettate tutte oppure nessuna

Reti di Calcolatori19 Il modello Client/Server Unix – Socket Invio 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 descriptor buf /msg==puntatore al messaggio len==lunghezza del messaggio flags==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

Reti di Calcolatori20 Il modello Client/Server Unix – Socket Chiusura 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

Reti di Calcolatori21 Il modello Client/Server Unix – Socket Principali Primitive ChiamataSignificato 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)

Reti di Calcolatori22 Il modello Client/Server Unix – Socket Il concetto di server parallelo