Come comunicano i processi ?

Slides:



Advertisements
Presentazioni simili
1 LABORATORIO DI INFORMATICA Network Management 8. Transport Mapping Claudio Salati Copyright © 2001 by Claudio Salati ALMA MATER STUDIORUM - UNIVERSITA'
Advertisements

Socket Java Alberto Ferrari.
PUNTATORI Introduzione
Programmazione con socket
File System Cos’è un File System File e Directory
Reti di Calcolatori L’interfaccia socket
1 System Call per Comunicazione tra Processi Pipe.
Mappare file in memoria
SC che operano su file (1)
Programmazione socket
I modelli di riferimento OSI e TCP/IP
La rete in dettaglio: rete esterna (edge): applicazioni e host
2-1 Trasferimento di file: ftp Crediti Parte delle slide seguenti sono adattate dalla versione originale di J.F Kurose and K.W. Ross (© All Rights.
Silberschatz and Galvin Operating System Concepts Gestione della memoria Nella fase iniziale dello sviluppo di UNIX, gli schemi di gestione della.
Come programmare servizi di rete?
Calcolatori Elettronici
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Programmazione su Reti
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Programmazione di rete:
Architettura del World Wide Web
Il modello cliente/servente per l’implementazione di applicazioni
Corso di Informatica Corso di Laurea in Conservazione e Restauro dei Beni Culturali Gianluca Torta Dipartimento di Informatica Tel: Mail:
1 Protocollo di comunicazione. 2 Reti eterogenee.
RETI E INTERNET.
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Reti di Calcolatori IL LIVELLO TRASPORTO Protocolli TCP e UDP.
1 File System ed Input/Output UNIX Implementazione del File System Caratteristiche del File System Unix/Linux System Call relative al File System Linput/output.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
ICMP - PING - TRACEROUTE
Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.
Corso di Informatica per Giurisprudenza Lezione 7
La sicurezza può essere fornita in ciascuno degli strati: applicazione, trasporto, rete. Quando la sicurezza è fornita per uno specifico protocollo dello.
File ad accesso casuale o random
POSTA ELETTRONICA PER GLI STUDENTI DI ECONOMIA POSTA SU HOST b Host e terminali La base dati dei messaggi risiede sul mainframeLa base dati dei messaggi.
Cosa è una applicazione distribuita?
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Elaborazioni server-side: dalle CGI al PHP
1 Ripassino Reti di Computer Carasco 19/02/ Che cosa è una rete informatica? Una rete informatica è un insieme di computer connessi tra di loro.
File system distribuito transazionale con replicazione
Corso di Laurea in Conservazione e Restauro dei Beni Culturali
ASP – Active Server Pages Introduzione Pagine Web Statiche & Dinamiche(ASP)
Reti di Calcolatori ed Internet Fabio Massimo Zanzotto.
1 Il Buffer Cache Unix (Bach: the Design of the Unix Operating System (cap: 3)
prof.ssa Giulia Quaglino
Distributed System ( )7 TCP/IP four-layer model.
Creato da Riccardo Nuzzone
Greco Rodolfo 2002 Application Trasport Network Phisic HTTP IP UDPTCP DNS SNAP MAC ARP L’utente fa una richiesta di pagina.
Livello di trasporto Protocolli TCP e UDP.
Politecnico di Milano © Domenico Barretta Processi concorrenti in Unix Docente Domenico Barretta Politecnico di Milano
1 Chiamate di sistema Introduzione Errori : perror() Chiamate che lavorano su file.
1 Gestione della Memoria Capitolo Introduzione alla gestione della memoria 4.2 Swapping 4.3 Memoria virtuale 4.4 Implementazione 4.5 Algoritmi di.
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.
Servizi Internet Claudia Raibulet
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 2.
Sistemi di elaborazione dell’informazione Modulo 4 - Tecniche di programmazione distribuita Unità didattica 1 -Socket library Ernesto Damiani Lezione 4.
Strato di accesso alla rete (network access layer); comprende le funzioni che nel modello OSI sono comprese negli strati fisico, di collegamento e parte.
Sistemi e Tecnologie della Comunicazione
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.
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:
INTERNET E INTRANET Classe VA SIA. La Storia di INTERNET ’ – ARPANET 1969 – anno di nascita università Michigan - Wayne 1970 – – INTERNET.
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.
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:

Come comunicano i processi ? Sulla stessa macchina Signal Pipe Memoria Condivisa Code di Messaggi Su macchine diverse ( stessa LAN ) File condivisi Su macchine diverse NON stessa rete Socket

Perché i socket Tecniche di programmazione che rendano la rete "trasparente" ai processi stessi e quindi ai programmatori. Libreria, nata per Unix, oggi usata per la realizzazione delle applicazioni Internet per quasi tutti i sistemi operativi.

Dalle pipe ai socket Un socket è una struttura dati i cui elementi possono essere utilizzati come argomenti delle usuali chiamate di sistema read() e write() che consentono di scrivere e leggere i file ordinari. E’ possibile comunicare anche con altre macchine univocamente identificate da un indirizzo IP Il protocollo utilizzato è TCP/IP o UDP/IP pipe unidirezionale

Cos’è un Socket? Nei sistemi operativi moderni, con il termine socket si indica un'astrazione software progettata per poter utilizzare delle API standard e condivise per la trasmissione e la ricezione di dati attraverso una rete oppure come meccanismo di IPC (Inter-Process Communication) È il punto in cui il codice applicativo di un processo accede al canale di comunicazione per mezzo di una porta, ottenendo una comunicazione tra processi che lavorano su due macchine fisicamente separate. Dal punto di vista di un programmatore un socket è una particolare struttura dati nella quale leggere e scrivere i dati da trasmettere o ricevere.

Socket Application A socket is a connection between two hosts (endpoints). A socket can perform 7 basic operations. Connect to a remote machine Send data Receive data Close a connection Bind to a port Listen for incoming data Accept connections from remote machines on the bound port

Internet Socket Ci sono due tipi principali di Socket: Stream Socket (SOCK_STREAM) Reliable Two way connected Utilizzano il TCP-Transmission Control Protocol (RFC.793) Datagram Socket (SOCK_DGRAM) Not reliable Connectionless Utilizzano lo UDP-User Datagram Protocol (RFC. 768)

Comunicazione Browser/Server Web GET / HTTP\1.1 HTTP\1.1 200 OK <HTML> ….. </HTML>

Come avviene la comunicazione? Browser TCP IP UDP TSAP Server Web API fornite dal S.O. Il Transport Service Access Point è individuato da un indirizzo di livello 3 (indirizzo IP) ed un indirizzo di livello 4 (port TCP) composto da 16 bit.

TCP Client-Server Client Server socket() “well-known” bind() port listen() Client accept() socket() (Block until connection) “Handshake” connect() Data (request) send() recv() Data (reply) send() recv() End-of-File close() recv() close()

funzione socket() int socket (int family, int type, int protocol); family specifica la famiglia di protocolli da utilizzare. PF_INET IPv4 protocol PF_INET6 IPv6 protocol PF_LOCAL Unix domain protocols (ex PF_UNIX) type specifica quale tipo di protocollo vogliamo utilizzare all’interno della famiglia di protocolli specificata da family. SOCK_STREAM socket di tipo stream (connesso affidabile) SOCK_DGRAM socket di tipo datagram SOCK_RAW socket di tipo raw (livello network) protocol di solito è settato a 0, tranne che nel caso dei socket raw.

funzione connect() #include <sys/socket.h> La funzione connect() è usata per stabilire una connessione con un server TCP. #include <sys/socket.h> int connect (int socketfd, const struct sockaddr *servaddr, int addrlen); restituisce 0 se la connessione viene stabilita, -1 in caso di errore.

funzione connect() int connect (int socketfd, const struct sockaddr *servaddr, int addrlen); socketfd è un descrittore socket ottenuto da una chiamata alla funzione socket(). servaddr è un puntatore alla struttura sockaddr_in, e deve specificare l’indirizzo IP e il numero di porta del server al quale connettersi. addrlen specifica la dimensione della struttura dati che contiene l’indirizzo del server servaddr, viene di solito assegnata mediante la sizeof(servaddr). Il client può non specificare il proprio indirizzo IP e la propria porta, chiedendo al sistema operativo di assegnargli una porta TCP qualsiasi e come indirizzo IP l’indirizzo della sua interfaccia di rete. Quindi non è necessaria la chiamata alla bind() prima della connect().

funzione bind() La funzione bind() collega al socket un indirizzo locale. Per TCP e UDP ciò significa assegnare un indirizzo IP ed una porta a 16-bit. #include <sys/socket.h> int bind (int sockfd, const struct sockaddr *myaddr, int addrlen); restituisce 0 se tutto OK, -1 in caso di errore.

funzione bind() int bind (int sockfd, const struct sockaddr *myaddr, int addrlen); sockfd è un descrittore ottenuto da una chiamata socket(). myaddr è un puntatore alla struttura sockaddr_in, e specifica l’eventuale indirizzo IP locale e l’eventuale numero di porta locale a cui il sistema operativo deve collegare il socket. addrlen specifica la dimensione della struttura myaddr.

funzione bind() Chiamando la bind() si può specificare o no l’indirizzp IP e la porta, assegnando valori ai due campi sin_addr e sin_port della struttura sockaddr_in L’assegnazione viene fatta con le istruzioni: struct sockaddr_in localaddr; localaddr.sin_addr.s_addr = htonl(INADDR_ANY); localaddr.sin_port = htons(port_number);

funzione listen() La funzione listen è utilizzata solo per implementare un server TCP e esegue due azioni: 1) ordina al kernel di far passare il socket dallo stato iniziale CLOSED allo stato LISTEN, e di accettare richieste di inizio connessione per quel socket, mettendole in una coda del kernel. 2) specifica al kernel quante richieste di inizio connessione può accodare al massimo per quel socket. #include <sys/socket.h> int listen (int socketfd, int backlog ); restituisce 0 se tutto OK, -1 in caso di errore.

funzione listen() int listen (int socketfd, int backlog ); socketfd è un descrittore ottenuto da una chiamata socket(). backlog è un intero che specifica quante richieste di inizio connessione il kernel può mantenere in attesa nelle sue code.

funzione accept() La funzione accept è chiamata solo dal TCP server e restituisce la prima entry nella coda delle connessioni già completate per quel socket. Se la coda è vuota la accept resta in attesa . #include <sys/socket.h> int accept (int socketfd, struct sockaddr *cli_addr, int *ptraddrlen); restituisce un descrittore socket >=0 se tutto OK, -1 in caso di errore.

funzione accept() int accept (int socketfd, struct sockaddr *cli_addr, int *ptraddrlen); socketfd è un descrittore ottenuto da una chiamata a socket() sul quale sono state effettuate le chiamate bind() e listen(). Tale listening socket viene utilizzato per accedere alla coda delle connessioni instaurate come si è visto nella funzione listen(). cli_addr è un puntatore alla struttura sockaddr_in, su cui la funzione accept scrive l’indirizzo IP e il numero di porta del client, con cui è stata instaurata la connessione a cui si riferisce il socket che viene restituito come risultato . ptraddrlen è un puntatore alla dimensione della struttura cli_addr che viene restituita.

funzione close() La funzione close è utilizzata è utilizzata per chiudere un socket e terminare una connessione TCP. int close (int socketfd); restituisce 0 se tutto OK, -1 in caso di errore. socketfd è un descrittore di socket.

funzione send() int send (int socketfd, const void* msg, int len, unsigned int flags); La funzione send cerca di scrivere un numero byte pari a len sul file descriptor socketfd, leggendoli dal buffer puntato da msg.Se len è maggiore di zero viene effettuata la scrittura e viene restituito il numero di byte scritti.

funzione recv() int recv (int socketfd, const void* buf, int len, unsigned int flags); La funzione recv cerca di leggere un numero di byte pari a len dal file descriptor socketfd, scrivendoli nel buffer puntato da buf. Se len è maggiore di zero viene effettuata la lettura e viene restituito il numero di byte letti. Se viene restituito zero significa end-of-file (fine stream). -1 indica che si è verificato un errore.

funzione gethostbyname() struct hostent* gethostbyname( char *name ); Prende una stringa che contiene il nome dell’host e restituisce una struttura hostent che contiene l’indirizzo (gli indirizzi) IP dell’host. Struct hostent { char *h_name; //official host name char **h_aliases; //other aliases int h_length; //address type char **h_addr_list; //list of addresses }

UDP Client-Server Server Client socket() bind() recvfrom() socket() “well-known” port bind() Client recvfrom() socket() (Block until receive datagram) Data (request) sendto() sendto() recvfrom() Data (reply) close() - No “handshake” - No simultaneous close - No fork()/spawn() for concurrent servers!

funzione sendto() int sendto (int socketfd, const void* msg, int len, unsigned int flags, struct sockaddr *to, int *tolen); to è un puntatore a una struct sockaddr che contiene l’indirizzo IP e la porta della destinazione. tolen può essere inizializzato a sizeof(struct sockaddr)

funzione recvfrom() int recvfrom (int socketfd, const void* buf, int len, unsigned int flags, struct sockaddr *from, int * fromlen); from è un puntatore a una struct sockaddr che sarà riempita con l’indirizzo IP e la porta della macchina che si è connessa fromlen va inizializzato a sizeof(struct sockaddr)

Ports Numbers (typical, since vary by OS): 0-1023 “reserved”, must be root 1024 - 5000 “ephemeral” Above 5000 for general use (50,000 is specified max) Well-known, reserved services (see /etc/services in Unix): ftp 21/tcp telnet 23/tcp finger 79/tcp snmp 161/udp

A generic TCP application algorithm for TCP client Find the IP address and port number of server Create a TCP socket Connect the socket to server (Server must be up and listening for new requests) Send/ receive data with server using the socket Close the connection algorithm for TCP server Create a TCP server socket Bind the server socket to server IP and Port number (this is the port to which clients will connect) Accept a new connection from client returns a client socket that represents the client which is connected Send/ receive data with client using the client socket Close the connection with client

A generic UDP application algorithm for UDP client Find the IP address and port number of server Create a UDP socket Send/ receive data with server using the socket Close the connection algorithm for UDP server Create a UDP server socket Bind the server socket to server IP and Port number (this is the port to which clients will send) Send/ receive data with client using the client socket Close the connection with client