Socket per TCP: Fondamenti

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Socket per TCP: Fondamenti"

Transcript

1 Socket per TCP: Fondamenti

2 Network Applications Molte applicazioni di rete sono formate da due programmi distinti (che lavorano su due diversi host) uno detto server ed uno detto client. Il server si mette in attesa di una richiesta da servire, il client effettua tale richiesta. Tipicamente il client comunica con un solo server, mentre un server usualmente comunica con più client contemporaneamente (su connessioni diverse nel caso tcp). Inoltre spesso client e server sono processi utente, mentre i protocolli della suite TCP/IP fanno solitamente parte del sistema operativo. Nel seguito faremo riferimento al termine IP nel senso di IPv4. Unix Standards Posix = Portable Operating System Interface è una famiglia di standard (vedi sviluppata da IEEE e adottata da ISO. Posix comprende IEEE Std (1996) (una raccolta di alcune specifiche precedenti) che contiene al suo interno una parte detta Part1: System Application Program Interface (API) che specifica l interfaccia C per le chiamate di sistema del kernel Unix, relative a processi (fork, exec, signal, timer, user ID, gruppi), files e directory (I/O function), I/O da terminale, password, le estensioni per il realtime, execution scheduling, semaphores, shared memory, clock, message queues. In particolare comprende IEEE Std g: Protocol Independent Interface (PII) che è lo standard per l interfaccia di programmazione delle reti, e definisce due standard chiamati DNI (Detailed Network Interfaces): 1) DNI/Socket basato sulle API socket del 4.4BSD, di cui ci occuperemo 2) DNI/XTI, basato sulle specifiche XPG4 del consorzio X/Open 86

3 Setup delle ConnessioniTCP Una connessione TCP viene instaurata con le seguenti fasi, che formano il Three-Way Handshake (perchè formato da almeno 3 pacchetti trasmessi): 1) il server si predispone ad accettare una richiesta di connessione, mediante le chiamate a socket, bind, listen e infine accept che realizza una apertura passiva (passive open) cioè senza trasmissione di dati. J+... J+3 J+2 J+1 K+1 K+2 K+3 K+... 2) il client effettua le chiamate a socket, bind ed infine alla connect che realizza una apertura attiva (active open) mediante la spedizione di un segmento TCP detto SYN segment (synchronize) in cui è settato ad 1 il flag syn, a zero il flag ack, e che trasporta un numero di sequenza iniziale (J) che è il numero di sequenza iniziale dei dati che il client vuole mandare al server. Il segmento contiene un header TCP con i numeri di porta ed eventuali opzioni su cui accordarsi, e di solito non contiene dati. Il segmento viene incapsulato in un datagram IP. 3) Il server deve rispondere al segmento SYN del client spedendogli un segmento SYN (flag syn settato ad 1) con il numero di sequenza iniziale (K) dei dati che il server vuole mandare al client in quella connessione. Il segmento presenta inoltre nel campo Ack number il valore J+1 che indica che si aspetta di ricevere J+1, e presenta il flag ack settato ad 1, per validare il campo Ack number. 4) il client, ricevendo il SYN del server con l Ack numer J+1 sa che la sua richiesta di connessione è stata accettata, e dal sequence number ricevuto K capisce che i dati del server inizieranno da K+1, quindi risponde con un segmento ACK (flag syn settato a zero e flag ack settato a 1) con Ack number K+1, e termina la connect. 5) al ricevimento dell ACK K+1 il server termina la accept. 87

4 Opzioni TCP nel Setup Ogni segmento di tipo SYN può contenere delle opzioni, che servono a stabilire alcune caratteristiche della connessione che si sta instaurando. Tra le più importanti ricordiamo: 1) MSS options: con questa opzione il TCP che manda il proprio SYN annuncia il maximum segment size, la più grande dimensione di segmento che è in grado di ricevere. L opzione TCP_MAXSEG resa disponibile dall interfaccia socket, consente di settare questa opzione. 2) Windows scale options: la finestra scorrevole più grande che due TCP possono concordare è 65535, perchè il campo Window Size occupa 16 bit. Per situazioni in cui il collegamento è a larghissima banda ma con grande ritardo di trasmissione (es. via satellite) una dimensione di finestra più grande rende più veloce la trasmissione di grandi quantità di dati. Per identificare finestre più grandi nell header TCP, si setta questa opzione che indica di considerare il campo Window Size dopo averlo shiftato a sinistra di un numero di posizione compreso tra 0 e 14, in modo da moltiplicare la Window Size di un fattore fino a 2 elevato alla 14, ovvero in modo da raggiungere valori dell ordine del GigaByte. L opzione SO_RECVBUF resa disponibile dall interfaccia socket, consente di settare questa opzione. 88

5 end-system attivo (1) Terminazione delle (1) ConnessioniTCP end-system passivo (2.1) (2.2) (3) Una connessione TCP viene chiusa mediante un protocollo composto da quattro messaggi trasmessi: 1) una delle applicazioni su un end-system (chiamiamola attiva) effettua la chiusura attiva (active close) chiamando la funzione close() che spedisce un segmento FIN (flag FIN settato a 1), con un numero di sequenza M pari all ultimo dei byte trasmessi in precedenza più uno. Con ciò si indica che viene trasmesso un ulteriore dato, che è il FIN stesso. Per convenzione il FIN è pensato avere dimensione pari ad 1 byte, quindi l end-system attivo si aspetta di ricevere per il FIN un ACK con Ack Number pari a M+1. 2) l end system che riceve il FIN (chiamiamolo passivo) effettua la chiusura passiva (passive close) all insaputa dell applicazione. 2.1) Per prima cosa il modulo TCP del passivo spedisce all end-system attivo un segmento ACK con Ack number pari a M+1, come riscontro per il FIN ricevuto. 2.2) Poi il TCP passivo trasmette all applicazione padrona di quella connessione il segnale FIN, sotto forma di end-of-file che viene accodato ai dati non ancora letti dall applicazione. Poiche la ricezione del FIN significa che non si riceverà nessun altro dato, con l end-of-file il TCP comunica all applicazione che lo stream di input è chiuso. 89 (4)

6 Terminazione delle (2) ConnessioniTCP 3) Quando l applicazione del passivo finalmente legge dal buffer l end-of-file (con una read() che restituisce 0), deve effettuare per quel socket la chiamata alla funzione close(). La close() ordina al modulo TCP di inviare a sua volta all end-system attivo un segmento FIN, col numero di sequenza (N) del FIN, cioè l ultimo byte trasmesso più 1. 4) il modulo TCP dell attivo, quando riceve il FIN spedisce un ACK con Ack number N+1, cioè il numero di sequenza del successivo al FIN, cioè il FIN più uno, poichè 1 è per convenzione la dimensione del FIN. Terminato questo passo viene conclusa anche la funzione close() dell attivo. Chiusura attiva o passiva non dipendono dall essere client o server, ma solo da chi per primo effettua la chiamata alla funzione close(). Notare che i due segmenti dal passivo all attivo degli step 2.1 e 2.2 (ACK M+1 e FIN N rispettivamente) potrebbero essere combinati in un solo messaggio a seconda del comportamento del passivo. Un ulteriore variazione, di carattere opposta alla precedente, è che tra gli step 2.1 e 2.2 il passivo ha ancora la possibilità di inviare dei dati verso l attivo, perchè al momento dello step 2.1 è stata effettuata, mediante il FIN, una chiusura del flusso solo nella direzione dall attivo al passivo, chiusura che viene detta half-close. 90

7 TCP State Transition Diagram (1) 91

8 TCP State Transition Diagram (2) Le operazioni di instaurazione e terminazione di una connessione TCP sono specificate dal precedente diagramma di transizione degli stati. Da ogni stato una o più frecce uscenti individuano una condizione che fa uscire da quello stato e passare in un altro stato. Tale condizione può essere la ricezione di un segmento, un operazione effettuata dall applicazione proprietaria del socket oppure lo scadere di un timeout. In corrispondenza di una transizione di stato può essere effettuata un operazione come ad es. la trasmissione di un segmento. Ad es. se ci troviamo nello stato ESTABLISHED, in cui una connessione è stata instaurata tra i due end system, se l applicazione effettua una chiusura attiva chiamando la close(), il TCP spedisce un segmento di FIN e passa nello stato FIN_WAIT aspettando una risposta. Se invece sempre dallo stato ESTABLISHED il TCP riceve un segmento FIN dall altro endsystem allora parte con la chiusura passiva, risponde con un ACK e si porta nello stato CLOSE_WAIT. Gli stati qui illustrati sono utilizzati dall applicazione netstat per identificare la situazione corrente di ciascun socket TCP. 92

9 Esempio di connessione TCP (1) Vediamo i segmenti scambiati e gli stati assunti da client e server in una connessione TCP in cui il client chiede un servizio ed il server risponde. Il client inizia e specifica l opzione Maximum Segment Size di 1460 byte, il server risponde e specifica una diversa richiesta di MSS di La MSS può essere diversa nelle due direzioni. Stabilita la connessione il client spedisce una richiesta al server nei dati di un solo segmento. Il server risponde spedendo la risposta nei dati di un solo segmento. Notare che, per diminuire il numero di segmenti scambiati, assieme alla risposta il server spedisce nel segmento anche l ACK per il segmento ricevuto. Tale tecnica, detta piggybacking, viene utilizzata quando il ritardo nella risposta è inferiore ai 200 msec. Infine vengono utilizzati 93 quattro segmenti per effettuare la terminazione della connessione.

10 TIME_WAIT state (1) Durante la fase di chiusura della connessione, l end system che effettua la chiusura attiva passa nello stato detto TIME_WAIT. Il periodo di tempo durante il quale l end system rimane nello stato TIME_WAIT è il doppio del MSL (Maximum Segment Lifetime = massimo tempo di vita di un segmento) e viene detto 2MSL. La durata dell MSL è una scelta dell implementazione del TCP. Il valore raccomandato in RFC 1122 è di 2 minuti, ma alcune implementazioni preferiscono 30 secondi. Quindi la durata del TIME_WAIT state varierà da 1 a 4 minuti. Il MSL approssima il massimo tempo che un datagram IP (contenente un segmento TCP) può rimanere in vita in internet a causa del TTL inizialmente settato a 255. Lo stato TIME_WAIT serve a due scopi: 1) Il primo scopo è riuscire a terminare correttamente la connessione TCP anche se il segmento finale ACK N+1 inviato dal terminatore attivo (che è nello stato TIME_WAIT) al passivo viene perso. Infatti se tale ACK viene perso il passivo ripete la trasmissione del segmento FIN N fino ad ottenere risposta. Il terminatore attivo quindi attende nello stato TIME_WAIT di rispondere al FIN del terminatore passivo. 94

11 TIME_WAIT state (2) 2) Il secondo scopo del TIME_WAIT è di impedire che segmenti duplicati dalla rete danneggino l instaurazione di nuove connessioni con stessi indirizzi IP e di porta locali e remoti. Una causa della duplicazione dei segmenti TCP è data dalla possibilità di avere anomalie nel routing. In particolare, se un router va in crash o se il link tra due router diventa down, è necessario un certo tempo affinche i router si organizzino e mediante gli algoritmi di routing stabiliscano percorsi alternativi. Durante questo periodo di transizione i pacchetti IP possono ritrovarsi ad essere instradati su dei loop, da A a B e di nuovo ad A, perchè i router non si sono ancora coordinati. Se durante questo periodo scade un timeout per il riscontro, il TCP assume che il segmento non sia stato ricevuto e lo ritrasmette, e il segmento ritrasmesso può seguire il nuovo giusto percorso, se i router si sono già coordinati. Se i router si coordinano prima che scada il TTL dei datagram IP che erano nel loop, anche i segmenti dispersi riusciranno ad arrivare a destinazione, generando così un duplicato per quel segmento. Il segmento originale, che si era perso, viene detto lost duplicate o wandering duplicate. Ora, se una connessione è terminata, e se ne instaura una nuova esattamente tra gli stessi hosts e le stesse porte, gli eventuali segmenti duplicati della vecchia connessione possono essere interpretati come segmenti della nuova connessione, e falsare le comunicazioni. Per ovviare a questo problema il TCP non instaura una connessione (una nuova connessione con stessi IP e stesse porte) che attualmente si trova nello stato di TIME_WAIT, e la durata del TIME_WAIT (doppia del tempo di vita di ogni segmento) impedisce che segmenti duplicati della vecchia connessione sopravvivano fino ad interessare una nuova 95 connessione instaurata dopo la fine del TIME_WAIT.

12 Socket Address Structures (1) Cominciamo la descrizione delle Socket API (Application program Interface) dalla descrizione delle strutture usate per trasferire indirizzi dall applicazione al kernel (nelle funzioni bind, connect, sendto) e dal kernel alle applicazioni (nelle funzioni accept, recvfrom, getsockname e getpeername). I dati definiti per Posix.1g sono quelli della seguente tabella: int8_t signed 8-bit integer <sys/types.h> uint8_t unsigned 8-bit integer <sys/types.h > int16_t signed 16-bit integer <sys/types.h > uint16_t unsigned 16-bit integer <sys/types.h> int32_t signed 32-bit integer <sys/types.h> uint32_t unsigned 32-bit integer <sys/types.h> sa_family_t famiglia di indirizzi socket <sys/socket.h> AF_INET per IPv4, AF_INET6 per IPv6, AF_LOCAL per indir. locali unix (per pipe ecc..) socklen_t lunghezza della struttura che contiene l indirizzo, di solito è un uint32_t <sys/socket.h> in_addr_t indirizzo IPv4, = uint32 <netinet/in.h> in_port_t porta TCP o UDP, = uint16 <netinet/in.h> Poichè i socket devono fornire un interfaccia per diverse famiglie di protocolli (IPv4, IPv6 e Unix), e poichè tali strutture vengono passate per puntatore, le funzioni di libreria presentano un argomento che è il puntatore alla generica struttura (struct sockaddr*), ma essendo diversa la struttura passata a seconda della famiglia di indirizzi usata, l argomento passato deve essere convertito mediante il cast alla struttura (struct sockaddr*), ad es: struct sockaddr_in server; /* IPv4 socket address structure */ memset ( &server, 0, sizeof(server) ); /* azzero tutta la struttura */... riempimento dei dati della struttura server... bind ( socketfd, (struct sockaddr *)&server, sizeof(server) ); 96

13 Socket Address Structures (2) La generica struttura dell indirizzo è dunque cosi definita: struct sockaddr { uint8_t sa_len; sa_family_t sa_family; char sa_data[14]; }; La famiglia di indirizzi Ipv4 (sa_family=af_inet) usa la struttura: struct sockaddr_in { uint8_t sin_len; /* lunghezza struttura */ sa_family_t sin_family; /* = AF_INET */ in_port_t sin_port; /*16-bit TCP UDP port, network byte ordered */ struct in_addr sin_addr; /* 32-bit IPv4 address, network byte ordered */ char sin_zero[8]; /* unused */ }; con struct in_addr { /* e una struttura per ragioni storiche */ in_addr_t s_addr ; /* 32-bit IPv4 address network byte ordered */ }; sa_len e sa_family si sovrappongono perfettamente a sin_len e sin_family rispettivamente, permettendo di leggere la costante di tipo sa_family_t e di capire che tipo di struttura si sta utilizzando. il campo sin_len non è richiesto espressamente da Posix.1g, e anche quando è presente non è necessario settarlo, se non per applicazioni di routing, in quanto le principali funzioni in cui si passano indirizzi prevedono già un argomento in cui si passa (o riceve) la lunghezza della struttura indirizzo. Il campo sin_zero non è usato, ma va sempre settato tutto a zero prima di passare una struttura che lo contiene. Di più, per convenzione, bisogna sempre settare TUTTA la struttura indirizzo tutta a zero prima di riempire i vari campi, usando la funzione memset(). memset ( &server, 0, sizeof(server) ); 97

14 Socket Address Structure (3) Confrontiamo alcune delle strutture usate per gli indirizzi: 98

15 Funzioni di Ordinamento dei Byte Poichè alcuni campi delle strutture di indirizzo (i numeri di porta o gli indirizzi IPv4 ad esempio) devono essere memorizzati secondo l ordine per i bytes stabilito per la rete (network byte order), prima di assegnare alla struttura un valore di porta (16-bit) o un indirizzo IPv4 (32-bit) è necessario convertirlo dall ordine dei byte per l host all ordine per la rete, utilizzando delle funzioni di conversione, i cui prototipi sono definiti nell include <netinet/in.h>: uint16_t htons (uint16_t host16bitvalue); /* Host TO Network Short */ uint32_t htonl (uint32_t host32bitvalue); /* Host TO Network Long */ Viceversa, per convertire il valore di una porta o di un indirizzo IPv4, preso da una struttura di indirizzo, in un valore intero secondo l ordinamento dell host si devono utilizzare le funzioni: uint16_t ntohs (uint16_t net16bitvalue); /* Network TO Host Short */ uint32_t ntohl (uint32_t net32bitvalue); /* Network TO Host Long */ Se l ordinamento dell host è corrispondente all ordinamento di rete, queste funzioni sono implementate con delle macro nulle, cioè non modificano il dato. Funzioni di Manipolazione dei Byte Vediamo solo le funzioni portabili ovunque perche sono ANSI C. void *memset (void *dest, int c, size_t n_bytes); setta al valore c un numero len di byte a partire da dest void *memcpy (void *dest, const void *src, size_t n_bytes); copia n_bytes byte da src a dest, problemi se c e sovrapposizione, nel caso usare memmove. Resituisce dest. void *memcmp (const void ptr1, const void *ptr2, size_t n_bytes); confronta due vettori di n_bytes ciascuno, restituisce 0 se sono uguali, diverso da zero se diversi. 99

16 Funzioni di Conversione di Indirizzi IP dalla forma dotted-decimal ASCII string alla forma 32-bit network byte ordered Queste funzioni sono definite in <arpa/inet.h> Le funzioni inet_aton e inet_addr convertono gli indirizzi IP da una forma di stringa di caratteri ASCII decimali separati da punti del tipo , nella forma di interi a 32-bit ordinati secondo l ordinamento di rete. int inet_aton (const char *str, struct in_addr *addrptr); scrive nella locazione puntata da addrptr il valore a 32-bit, nell ordine di rete, ottenuto dalla conversione della stringa zeroterminata puntata da str. Restituisce zero in caso di errore, 1 se tutto va bene. in_addr_t inet_addr (const char *str); NON VA USATA restituisce il valore a 32-bit, nell ordine di rete, ottenuto dalla conversione della stringa zero-terminata puntata da str. In caso di errori restituisce INADDR_NONE, e questo è un casino, perchè INADDR_NONE è un intero a 32 bit di tutti 1, che sarebbe ottenuto come risultato della chiamata di inet_addr passandogli la stringa che è l indirizzo valido di broadcast. Per evitare confusione non deve essere usata. Infine c e una funzione che effettua la conversione inversa, da interi a 32-bit network ordered verso stringhe ASCII decimali separate da punti. char *inet_ntoa (struct in_addr addr); scrive in una locazione di memoria statica (di cui restituisce un puntatore) la stringa ASCII null-terminata di caratteri decimali separati da punti corrispondeni all indirizzo IP a 32-bit, nell ordine di rete, contenuto nella struttura addr (che stranamente non è un puntatore). Occhio, questa funzione non è rientrante, perchè 100 memorizza il risultato in una locazione statica.

17 I/O su Socket TCP (1) I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una socket() o una accept() o una connect(). Con questo descrittore è possibile effettuare letture tramite la funzione read, che restituisce i byte letti dal flusso in entrata, e scritture tramite la funzione write, che spedisce i byte costituendo il flusso in uscita. ssize_t read (int fd, void *buf, size_t count); cerca di leggere count byte dal file descriptor fd, scrivendoli nel buffer puntato da buf. Se count è zero restituisce zero. Se count è 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). Se viene restituito -1 è accaduto un errore e viene settato la variabile globale errno definita in <errno.h>. La funzione read presenta una particolarità quando è applicata ad un socket. Può accadere che la read() restituisca meno byte di quanti richiesti, anche se lo stream è ancora aperto. Ciò accade se il buffer a disposizione del socket nel kernel è stato esaurito. Sarà necessario ripetere la read (richiedendo il numero dei byte mancanti) fino ad ottenerli tutti. Oss.: ssize_t è definito in <unistd.h> ed è un long. ssize_t write (int fd, const void *buf, size_t count); cerca di scrivere fino a count byte sul file descriptor fd, leggendoli dal buffer puntato da buf. Se count è zero restituisce zero. Se count è maggiore di zero viene effettuata la scrittura e viene restituito il numero di byte scritti. Se viene restituito -1 è accaduto un errore e viene settato errno. Analogamente alla read() anche la write presenta una particolarità quando è applicata ad un socket. Può accadere che la write() scriva meno byte di quanto richiesto, anche se lo stream è ancora aperto. Ciò accade se il buffer a disposizione del socket nel kernel è stato esaurito. Sarà necessario ripetere la write (con i soli byte mancanti) fino a 101 scriverli tutti.

18 I/O su Socket TCP: (2) TCP Output Ogni socket TCP possiede un buffer per l output (send buffer) in cui vengono collocati temporaneamente i dati che dovranno essere trasmessi mediante la connessione instaurata. La dimensione di questo buffer può essere configurata mediante un opzione SO_SNDBUF. Quando un applicazione chiama write() per n bite sul socket TCP, il kernel cerca di copiare n byte dal buffer dell appl. al buffer del socket. Se il buffer del socket e più piccolo di n byte, oppure è già parzialmente occupato da dati non ancora trasmessi e non c è spazio sufficiente, verranno copiati solo nc<n byte, e verrà restituito dalla write il numero nc di byte copiati. Se il socket ha le impostazioni di default, cioè è di tipo bloccante, la fne della routine write ci dice che sono stati scritti sul buffer del socket quegli nc byte, e possiamo quindi riutilizzare le prime nc posizioni del buffer dell applicazione. Ciò non significa affatto che già i dati siano stati trasmessi all altro end-system. 102

19 I/O su Socket TCP (3) Per semplificarsi la vita ed usare delle funzioni per l I/O con i socket che si comportano esattamente come le read() e write() su file, si può scrivere due proprie funzioni readn() e writen() che effettuano un loop di letture/scritture fino a leggere/scrivere tutti gli n byte come richiesto, o incontrare l end-of-file o riscontrare un errore. ssize_t readn (int fd, void *buf, size_t n) { size_t nleft; ssize_t nread; char *ptr; ptr = buf; nleft = n; while (nleft > 0) { if ( (nread = read(fd, ptr, nleft)) < 0) { if (errno == EINTR) nread = 0; /* and call read() again */ else return(-1); } else if (nread == 0) break; /* EOF, esce */ nleft -= nread; ptr += nread; } return(n - nleft); /* return >= 0 */ } ssize_t writen (int fd, const void *buf, size_t n) { size_t nleft; ssize_t nwritten; char *ptr; ptr = buf; nleft = n; while (nleft > 0) { if ( (nwritten = write(fd, ptr, nleft)) <= 0) { if (errno == EINTR) nwritten = 0; /* and call write() again*/ else return(-1); /* error */ } nleft -= nwritten; ptr += nwritten; } return(n); } 103

20 Interazioni tra Client e Server TCP Per primo viene fatto partire il server, poi viene fatto partire il client che chiede la connessione al server e la connessione viene instaurata. Nell esempio (ma non è obbligatorio) il client spedisce una richiesta al server, questo risponde trasmettendo alcuni dati. Questa trasmissione bidirezionale continua fino a che uno dei due (il client nell esempio) decide di interrompere la connessione, e tramite la close() chiude la connessione. Infine il server chiude a sua volta la connessione. ephemeral port 104

21 funzione socket() La prima azione per fare dell I/O da rete è la chiamata alla funziona socket() specificando il tipo di protocollo di comunicazione da utilizzare (TCP con IPv4, UDP con IPv6, Unix domain stream protocol per usare le pipe). #include <sys/socket.h> int socket (int family, int type, int protocol); restituisce un descrittore di socket maggiore o uguale a zero, oppure -1 in caso di errore, e setta errno. L argomento family specifica la famiglia di protocolli da utilizzare. family descrizione AF_INET IPv4 protocol AF_INET6 IPv6 protocol AF_LOCAL Unix domain protocols (ex AF_UNIX) AF_ROUTE Routing socket AF_ROUTE Key socket (sicurezza in IPv6) L argomento type specifica quale tipo di protocollo vogliamo utilizzare all interno della famiglia di protocolli specificata da family. type descrizione SOCK_STREAM socket di tipo stream (connesso affidabile) SOCK_DGRAM socket di tipo datagram SOCK_DRAW socket di tipo raw (livello network) L argomento protocol di solito è settato a 0, tranne che nel caso dei socket raw. Non tutte le combinazioni di family e type sono valide. Quelle valide selezionano un protocollo che verrà utilizzato. AF_KEY AF_INET AF_INET6 AF_LOCAL AF_ROUTE SOCK_STREAM TCP TCP esiste SOCK_DGRAM UDP UDP esiste SOCK_DRAW IPv4 IPv6 esiste 105

22 funzione connect() La funzione connect() è usata dal client TCP per stabilire la connessione con un server TCP. #include <sys/socket.h> int connect (int socketfd, const struct sockaddr *servaddr, socklen_t addrlen); restituisce 0 se la connessione viene stabilita, -1 in caso di errore. L argomento socketfd è un descrittore socket ottenuto da una chiamata alla funzione socket(). L argomento servaddr come visto in precedenza è in realtà per IPv4 un puntatore alla struttura sockaddr_in, e deve specificare l indirizzo IP e il numero di porta del server da connettere. L argomento addrlen specifica la dimensione della struttura dati che contiene l indirizzo del server servaddr, viene di solito assegnata mediante la sizeof(servaddr). Il client non deve di solito specificare il proprio indirizzo IP e la propria porta, perchè queste informazioni non servono a nessuno. Quindi può chiedere al sistema operativo di assegnargli una porta TCP qualsiasi, e come indirizzo IP l indirizzo della sua interfaccia di rete, o dell interfaccia di rete usata se ne ha più di una. Quindi NON SERVE la chiamata alla bind() prima della connect(). Nel caso di connessione TCP la connect inizia il protocollo three way handshake spedendo un segmento SYN. La funzione termina o quando la connessione è stabilita o in caso di errore. In caso di errore la connect restituisce -1 e la variabile errno è settata a: - ETIMEDOUT nessuna risposta al segmento SYN - ECONNREFUSED il server risponde con un segmento RST (reset) ad indicare che nessun processo server è in attesa (stato LISTEN) su quella porta - EHOSTUNREACH o ENETUNREACH host non raggiungibile - ed altri ancora. 106

23 funzione bind() (1) 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, socklen_t addrlen); restituisce 0 se tutto OK, -1 in caso di errore. L argomento sockfd è un descrittore ottenuto da una socket(). L argomento 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. L argomento addrlen specifica la dimensione della struttura myaddr. L applicazione può collegarsi o no ad una porta. Di solito il server si collega ad una porta nota (well know port). Fa eccezione il meccanismo delle RPC. I client di solito non si collegano ad una porta con la bind. In caso non venga effettuato il collegamento con una porta, il kernel effettua autonomamente il collegamento con una porta qualsiasi (ephemeral port) al momento della connect (per il client) o della listen (per il server). L applicazione può specificare (con la bind) per il socket un indirizzo IP di un interfaccia dell host stesso. Per un TCP client ciò significa assegnare il source IP address che verrà inserito negli IP datagram, spediti dal socket. Per un TCP server ciò significa che verranno accettate solo le connessioni per i client che chiedono di connettersi proprio a quell IP address. Se il TCP client non fa la bind() o non specifica un IP address nella bind(), il kernel sceglie come source IP address, nel momento in cui il socket si connette, quello della interfaccia di rete usata. Se il server non fa il bind con un IP address, il kernel assegna al socket come indirizzo IP locale quello contenuto nell IP destination address del datagram IP che contiene il SYN segment ricevuto. 107

24 funzione bind() (2) 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 passata alla bind come secondo argomento. A seconda del valore otteniamo risultati diversi, che sono qui elencati, nella tabella che si riferisce solo al caso: IP_address port sin_addr sin_port Risultato wildcard 0 il kernel sceglie IP address e porta wildcard nonzero il kernel sceglie IP address, porta fissata Local IP Address 0 IP address fissato, kernel sceglie la porta Local IP Address non zero IP address e porta fissati dal processo Specificando il numero di porta 0 il kernel sceglie collega il socket ad un numero di porta temporaneo nel momento in cui la bind() è chiamata. Specificando la wildcard (mediante la costante INADDR_ANY per IPv4) il kernel non sceglie l indirizzo IP locale fino a che o il socket è connesso (se TCP) o viene inviato il primo datagram per quel socket (se UDP). 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); Se con la bind si lascia al kernel la scelta di IP address locale o port number locale, una volta che il kernel avrà scelto, si potrà sapere quale IP address e quale port number è stato scelto mediante la funzione getsockname(). 108

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

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+... Setup delle ConnessioniTCP Una connessione TCP viene instaurata con le seguenti fasi, che formano il Three-Way Handshake (perchè formato da almeno 3 pacchetti trasmessi): 1) il server si predispone ad

Dettagli

Creare una applicazione Winsock di base

Creare una applicazione Winsock di base Creare una applicazione Winsock di base Usiamo le API Winsock incluse in Creare un progetto per una Socket Windows (in Dev C++) Selezionare la file New Projects Selezionare Empty Project Salvare

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione

Dettagli

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI mumolo@units.it

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI mumolo@units.it Chiamate di sistema per la Inter Process Communication (IPC) in POSIX E.Mumolo, DEEI mumolo@units.it Pipe Cos'è un pipe? E' un canale di comunicazione che unisce due processi Caratteristiche: La più vecchia

Dettagli

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Mercoledì 2 Marzo 2005, ore 14.30

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Mercoledì 2 Marzo 2005, ore 14.30 Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Mercoledì 2 Marzo 2005, ore 14.30 NB: alcune domande hanno risposta multipla: si richiede di identificare TUTTE le risposte corrette.

Dettagli

CREAZIONE DI UN FILE

CREAZIONE DI UN FILE #include #include CREAZIONE DI UN FILE fd = creat(filename, mode); int fd, mode; char *filename; La primitiva creat crea un file, se non ne esiste uno col nome specificato, oppure

Dettagli

12.5 UDP (User Datagram Protocol)

12.5 UDP (User Datagram Protocol) CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP 88 12.5 UDP (User Datagram Protocol) L UDP (User Datagram Protocol) é uno dei due protocolli del livello di trasporto. Come l IP, é un protocollo inaffidabile, che

Dettagli

Modulo 11. Il livello trasporto ed il protocollo TCP Indice

Modulo 11. Il livello trasporto ed il protocollo TCP Indice Pagina 1 di 14 Il livello trasporto ed il protocollo TCP Indice servizi del livello trasporto multiplexing/demultiplexing trasporto senza connesione: UDP principi del trasferimento dati affidabile trasporto

Dettagli

Inizializzazione degli Host. BOOTP e DHCP

Inizializzazione degli Host. BOOTP e DHCP BOOTP e DHCP a.a. 2002/03 Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Inizializzazione degli Host Un

Dettagli

Routing (instradamento) in Internet. Internet globalmente consiste di Sistemi Autonomi (AS) interconnessi:

Routing (instradamento) in Internet. Internet globalmente consiste di Sistemi Autonomi (AS) interconnessi: Routing (instradamento) in Internet Internet globalmente consiste di Sistemi Autonomi (AS) interconnessi: Stub AS: istituzione piccola Multihomed AS: grande istituzione (nessun ( transito Transit AS: provider

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Modello OSI e architettura TCP/IP

Modello OSI e architettura TCP/IP Modello OSI e architettura TCP/IP Differenza tra modello e architettura - Modello: è puramente teorico, definisce relazioni e caratteristiche dei livelli ma non i protocolli effettivi - Architettura: è

Dettagli

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it Introduzione ai Device Drivers in Linux E.Mumolo, DEEI mumolo@units.it 1 Device Drivers Moduli software che gestiscono le periferiche attraverso il file system Tutte le periferiche sono viste come file

Dettagli

Reti di Telecomunicazione Lezione 7

Reti di Telecomunicazione Lezione 7 Reti di Telecomunicazione Lezione 7 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Il protocollo Programma della lezione file transfer protocol descrizione architetturale descrizione

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi II Semestre - Marzo/Giugno 2008 Matricole congr. 0 mod 3 File & Directory #include #include stat,fstat e lstat int stat (const char *pathname, struct stat *buf); int fstat (int

Dettagli

PRESENTAZIONE DI UN SMS AL GATEWAY

PRESENTAZIONE DI UN SMS AL GATEWAY Interfaccia Full Ascii Con questa interfaccia è possibile inviare i dati al Server utilizzando solo caratteri Ascii rappresentabili e solo i valori che cambiano tra un sms e l altro, mantenendo la connessione

Dettagli

ARP (Address Resolution Protocol)

ARP (Address Resolution Protocol) ARP (Address Resolution Protocol) Il routing Indirizzo IP della stazione mittente conosce: - il proprio indirizzo (IP e MAC) - la netmask (cioè la subnet) - l indirizzo IP del default gateway, il router

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Appunti di Sistemi Operativi Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Indice 1 Cenni su alcuni algoritmi del Kernel di Unix 1 1.1 Elementi di Unix Internals.................................

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute DNS: Domain Name System I name DNS Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP ( bit) - usato per instradare i pacchetti nome, per es., massimotto.diiie.unisa.it

Dettagli

Cos è un protocollo? Ciao. Ciao 2:00. tempo. Un protocollo umano e un protocollo di reti di computer:

Cos è un protocollo? Ciao. Ciao 2:00. <file> tempo. Un protocollo umano e un protocollo di reti di computer: Cos è un protocollo? Un protocollo umano e un protocollo di reti di computer: Ciao Ciao Hai l ora? 2:00 tempo TCP connection request TCP connection reply. Get http://www.di.unito.it/index.htm Domanda:

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Il Concetto di Processo

Il Concetto di Processo Processi e Thread Il Concetto di Processo Il processo è un programma in esecuzione. È l unità di esecuzione all interno del S.O. Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono

Dettagli

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client Versione 25.4.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Le Reti di Calcolatori (parte 2) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela

Dettagli

Mod. 4: L architettura TCP/ IP Classe 5 I ITIS G. Ferraris a.s. 2011 / 2012 Marcianise (CE) Prof. M. Simone

Mod. 4: L architettura TCP/ IP Classe 5 I ITIS G. Ferraris a.s. 2011 / 2012 Marcianise (CE) Prof. M. Simone Paragrafo 1 Prerequisiti Definizione di applicazione server Essa è un servizio che è in esecuzione su un server 1 al fine di essere disponibile per tutti gli host che lo richiedono. Esempi sono: il servizio

Dettagli

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo. In una rete di ampie dimensioni, ciascuna sottorete (es. LAN, WAN) è connessa ad altre sottoreti tramite router. Internet è un insieme di reti connesse tra loro. Essenzialmente, in una rete alcune macchine

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

corso di Sistemi Distribuiti 4. IPC (Inter Process Communication) (parte 1): le forme ed i modelli della comunicazione tra processi

corso di Sistemi Distribuiti 4. IPC (Inter Process Communication) (parte 1): le forme ed i modelli della comunicazione tra processi CdL MAGISTRALE in INFORMATICA A.A. 2014-2015 corso di Sistemi Distribuiti 4. IPC (Inter Process Communication) (parte 1): le forme ed i modelli della comunicazione tra processi Prof. S.Pizzutilo Elementi

Dettagli

CARATTERISTICHE DELLE CRYPTO BOX

CARATTERISTICHE DELLE CRYPTO BOX Secure Stream PANORAMICA Il sistema Secure Stream è costituito da due appliance (Crypto BOX) in grado di stabilire tra loro un collegamento sicuro. Le Crypto BOX sono dei veri e propri router in grado

Dettagli

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero ---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero delle variabili a cui possono essere assegnati gli indirizzi

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

Dettagli

Le system call: fork(), wait(), exit()

Le system call: fork(), wait(), exit() Le system call: fork(), wait(), exit() Di seguito viene mostrato un programma che fa uso di puntatori a funzione, nel quale si mette in evidenza il loro utilizzo. Programma A1 #include int add(a,b,c)

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

MODBUS-RTU per. Specifiche protocollo di comunicazione MODBUS-RTU per controllo in rete dispositivi serie. Expert NANO 2ZN

MODBUS-RTU per. Specifiche protocollo di comunicazione MODBUS-RTU per controllo in rete dispositivi serie. Expert NANO 2ZN per Expert NANO 2ZN Specifiche protocollo di comunicazione MODBUS-RTU per controllo in rete dispositivi serie Expert NANO 2ZN Nome documento: MODBUS-RTU_NANO_2ZN_01-12_ITA Software installato: NANO_2ZN.hex

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

Sicurezza delle reti wireless. Alberto Gianoli alberto.gianoli@fe.infn.it

Sicurezza delle reti wireless. Alberto Gianoli alberto.gianoli@fe.infn.it Sicurezza delle reti wireless Alberto Gianoli alberto.gianoli@fe.infn.it Concetti di base IEEE 802.11: famiglia di standard tra cui: 802.11a, b, g: physical e max data rate spec. 802.11e: QoS (traffic

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Il World Wide Web: nozioni introduttive

Il World Wide Web: nozioni introduttive Il World Wide Web: nozioni introduttive Dott. Nicole NOVIELLI novielli@di.uniba.it http://www.di.uniba.it/intint/people/nicole.html Cos è Internet! Acronimo di "interconnected networks" ("reti interconnesse")!

Dettagli

Introduzione ai protocolli di rete Il protocollo NetBEUI Il protocollo AppleTalk Il protocollo DLC Il protocollo NWLink Il protocollo TCP/IP

Introduzione ai protocolli di rete Il protocollo NetBEUI Il protocollo AppleTalk Il protocollo DLC Il protocollo NWLink Il protocollo TCP/IP Protocolli di rete Sommario Introduzione ai protocolli di rete Il protocollo NetBEUI Il protocollo AppleTalk Il protocollo DLC Il protocollo NWLink Il protocollo TCP/IP Configurazione statica e dinamica

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti Dai sistemi concorrenti ai sistemi distribuiti Problemi nei sistemi concorrenti e distribuiti I sistemi concorrenti e distribuiti hanno in comune l ovvio problema di coordinare le varie attività dei differenti

Dettagli

Informatica per la comunicazione" - lezione 9 -

Informatica per la comunicazione - lezione 9 - Informatica per la comunicazione" - lezione 9 - Protocolli di livello intermedio:" TCP/IP" IP: Internet Protocol" E il protocollo che viene seguito per trasmettere un pacchetto da un host a un altro, in

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

MIB PER IL CONTROLLO DELLO STATO DI UN SERVER FTP

MIB PER IL CONTROLLO DELLO STATO DI UN SERVER FTP Università degli Studi di Pisa Facoltà di Scienze Matematiche,Fisiche e Naturali Corso di Laurea in Informatica Michela Chiucini MIB PER IL CONTROLLO DELLO STATO DI UN SERVER

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Linguaggio C: introduzione Il linguaggio C è un linguaggio general purpose sviluppato nel 1972 da Dennis Ritchie per scrivere il sistema operativo UNIX ed alcune applicazioni per un PDP-11. Il linguaggio

Dettagli

GLI ERRORI DI OUTLOOK EXPRESS

GLI ERRORI DI OUTLOOK EXPRESS Page 1 of 6 GLI ERRORI DI OUTLOOK EXPRESS 1) Impossibile inviare il messaggio. Uno dei destinatari non è stato accettato dal server. L'indirizzo di posta elettronica non accettato è "user@dominio altro

Dettagli

La configurazione degli indirizzi IP. Configurazione statica, con DHCP, e stateless

La configurazione degli indirizzi IP. Configurazione statica, con DHCP, e stateless La configurazione degli indirizzi IP Configurazione statica, con DHCP, e stateless 1 Parametri essenziali per una stazione IP Parametri obbligatori Indirizzo IP Netmask Parametri formalmente non obbligatori,

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Firewall. Generalità. Un firewall può essere sia un apparato hardware sia un programma software.

Firewall. Generalità. Un firewall può essere sia un apparato hardware sia un programma software. Generalità Definizione Un firewall è un sistema che protegge i computer connessi in rete da attacchi intenzionali mirati a compromettere il funzionamento del sistema, alterare i dati ivi memorizzati, accedere

Dettagli

SubnetMask: come funzionano e come si calcolano le sottoreti (SpySystem.it)

SubnetMask: come funzionano e come si calcolano le sottoreti (SpySystem.it) SubnetMask: come funzionano e come si calcolano le sottoreti (SpySystem.it) In una rete TCP/IP, se un computer (A) deve inoltrare una richiesta ad un altro computer (B) attraverso la rete locale, lo dovrà

Dettagli

Sistemi a più processori

Sistemi a più processori Università di Udine Facoltà di Scienze MM.FF.NN. A.A. 2007-2008 Copyright c 2000 04 Marino Miculan (miculan@dimi.uniud.it) La copia letterale e la distribuzione di questa presentazione nella sua integrità

Dettagli

File e Directory. M. Guarracino - File e Directory 1

File e Directory. M. Guarracino - File e Directory 1 File e Directory M. Guarracino - File e Directory 1 File e Directory Abbiamo visto come si possono utilizzare funzioni di I/O per i file: open, read, write, lseek e close Vogliamo ora analizzare ulteriori

Dettagli

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Supponiamo sempre di avere un ponte stretto che permette il passaggio delle auto solo in un verso per volta,

Dettagli

IL LINGUAGGIO C++ Configurazione di Dev-C++

IL LINGUAGGIO C++ Configurazione di Dev-C++ IL LINGUAGGIO C++ Note sull'uso di DevC++ Requisiti di sistema per Dev-C++ - Sistema operativo Microsoft Windows 95, 98, Millenium Edition, NT 4, 2000 o XP - RAM: 8 Mb (consigliati almeno 32 Mb) - CPU:

Dettagli

Inidirizzi IP e Nomi di Dominio. Domain Name System. Spazio dei Nomi Piatto. Gestione dello Spazio dei Nomi

Inidirizzi IP e Nomi di Dominio. Domain Name System. Spazio dei Nomi Piatto. Gestione dello Spazio dei Nomi I semestre 03/04 Inidirizzi IP e Nomi di Dominio Domain Name System Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in Informatica

Dettagli

WAN 80.80.80.80 / 24. L obiettivo è quello di mappare due server web interni (porta 80) associandoli agli indirizzi IP Pubblici forniti dall ISP.

WAN 80.80.80.80 / 24. L obiettivo è quello di mappare due server web interni (porta 80) associandoli agli indirizzi IP Pubblici forniti dall ISP. Configurazione di indirizzi IP statici multipli Per mappare gli indirizzi IP pubblici, associandoli a Server interni, è possibile sfruttare due differenti metodi: 1. uso della funzione di Address Translation

Dettagli

Interfaccia Web per customizzare l interfaccia dei terminali e

Interfaccia Web per customizzare l interfaccia dei terminali e SIP - Session Initiation Protocol Il protocollo SIP (RFC 2543) è un protocollo di segnalazione e controllo in architettura peer-to-peer che opera al livello delle applicazioni e quindi sviluppato per stabilire

Dettagli

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine 1999 Pier Luca Montessoro (si veda la nota a pagina 2) 1 Nota di Copyright

Dettagli

Cosa è lo spoofing. Cosa è lo spoofing. Argomenti. Spoofing conosciuti. Introduzione. Corso di Sistemi di Elaborazione: Sicurezza su Reti

Cosa è lo spoofing. Cosa è lo spoofing. Argomenti. Spoofing conosciuti. Introduzione. Corso di Sistemi di Elaborazione: Sicurezza su Reti Introduzione Corso di Sistemi di Elaborazione: Sicurezza su Reti A.A. 2001/2002 Prof. A. De Santis A cura di: Angelo Celentano matr. 53/11544 Raffaele Pisapia matr. 53/10991 Mariangela Verrecchia matr.

Dettagli

Test di comunicazione tra due LOGO! 0BA7: Master - Master

Test di comunicazione tra due LOGO! 0BA7: Master - Master Industry Test di comunicazione tra due LOGO! 0BA7: Master - Master Dispositivi utilizzati: - 2 LOGO! 0BA7 (6ED1 052-1MD00-0AB7) - Scalance X-208 LOGO! 0BA7 Client IP: 192.168.0.1 LOGO! 0BA7 Server IP:

Dettagli

Verifica che una grammatica sia Context Free nel GrammaReader

Verifica che una grammatica sia Context Free nel GrammaReader Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Cos è una stringa (1) Stringhe DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Una stringa è una serie di caratteri trattati come una singola unità. Essa potrà includere lettere, cifre, simboli e caratteri

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

Descrizioni VHDL Behavioral

Descrizioni VHDL Behavioral 1 Descrizioni VHDL Behavioral In questo capitolo vedremo come la struttura di un sistema digitale è descritto in VHDL utilizzando descrizioni di tipo comportamentale. Outline: process wait statements,

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. Generate debugging information FASE DEBUGGING: Prima della compilazione, si devono inserire 1 nel progetto informazioni per il debug cioè si devono visualizzare le opzioni di progetto seguendo il percorso: controllando che la voce Genera

Dettagli

Le Reti Informatiche

Le Reti Informatiche Le Reti Informatiche modulo 10 Prof. Salvatore Rosta www.byteman.it s.rosta@byteman.it 1 Nomenclatura: 1 La rappresentazione di uno schema richiede una serie di abbreviazioni per i vari componenti. Seguiremo

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Progetti reali con ARDUINO

Progetti reali con ARDUINO Progetti reali con ARDUINO Introduzione alla scheda Arduino (parte 2ª) ver. Classe 3BN (elettronica) marzo 22 Giorgio Carpignano I.I.S. Primo LEVI - TORINO Il menù per oggi Lettura dei pulsanti Comunicazione

Dettagli

Interazione, sincronizzazione e comunicazione tra processi

Interazione, sincronizzazione e comunicazione tra processi Interazione, sincronizzazione e comunicazione tra processi Classificazione Processi interagenti processi interagenti/indipendenti due processi sono indipendenti se l esecuzione di ognuno non è in alcun

Dettagli

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO CLSMS SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO Sommario e introduzione CLSMS SOMMARIO INSTALLAZIONE E CONFIGURAZIONE... 3 Parametri di configurazione... 4 Attivazione Software...

Dettagli

Guida alla scansione su FTP

Guida alla scansione su FTP Guida alla scansione su FTP Per ottenere informazioni di base sulla rete e sulle funzionalità di rete avanzate della macchina Brother, consultare la uu Guida dell'utente in rete. Per ottenere informazioni

Dettagli

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

Gestione di File e Directory

Gestione di File e Directory Gestione di File e Directory Duplicazione di file descriptor Un file descriptor puo' essere duplicato utilizzando: int dup (int filedes); int dup2(int filedes, int filedes2); dup restituisce un file descriptor

Dettagli

MIPS Instruction Set 2

MIPS Instruction Set 2 Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Un client su arduino invia i dati acquisiti ad un database

Un client su arduino invia i dati acquisiti ad un database Un client su arduino invia i dati acquisiti ad un database PROBLEMA Si vogliono inviare, periodicamente, i dati acquisiti da alcuni sensori ad un database presente su di un server. Arduino con shield Ethernet

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

SPOSTAMENTO SITEMANAGER DA SERVER DIREL A SERVER PROPRIETARIO

SPOSTAMENTO SITEMANAGER DA SERVER DIREL A SERVER PROPRIETARIO SPOSTAMENTO SITEMANAGER DA SERVER DIREL A SERVER PROPRIETARIO La seguente guida mostra come trasferire un SiteManager presente nel Server Gateanager al Server Proprietario; assumiamo a titolo di esempio,

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

Dettagli

Determinare la grandezza della sottorete

Determinare la grandezza della sottorete Determinare la grandezza della sottorete Ogni rete IP possiede due indirizzi non assegnabili direttamente agli host l indirizzo della rete a cui appartiene e l'indirizzo di broadcast. Quando si creano

Dettagli

Ricerca sequenziale di un elemento in un vettore

Ricerca sequenziale di un elemento in un vettore Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna

Dettagli

Istruzioni operative per la gestione delle Non Conformità e delle Azioni Correttive. https://nonconf.unife.it/

Istruzioni operative per la gestione delle Non Conformità e delle Azioni Correttive. https://nonconf.unife.it/ Istruzioni operative per la gestione delle Non Conformità e delle Azioni Correttive https://nonconf.unife.it/ Registrazione della Non Conformità (NC) Accesso di tipo 1 Addetto Registrazione della Non Conformità

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1 Tutorial Configuration Managment Configurare il servizio EC2 su AWS Pagina 1 Sommario 1. INTRODUZIONE... 3 2. PROGRAMMI NECESSARI... 4 3. PANNELLO DI CONTROLLO... 5 4. CONFIGURARE E LANCIARE UN ISTANZA...

Dettagli

Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project

Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project NB: E necessario: adoperare la sintassi più evoluta per le direttive di precompilazione 1, usando come contenitore

Dettagli

SMS API. Documentazione Tecnica YouSMS SOAP API. YouSMS Evet Limited 2015 http://www.yousms.it

SMS API. Documentazione Tecnica YouSMS SOAP API. YouSMS Evet Limited 2015 http://www.yousms.it SMS API Documentazione Tecnica YouSMS SOAP API YouSMS Evet Limited 2015 http://www.yousms.it INDICE DEI CONTENUTI Introduzione... 2 Autenticazione & Sicurezza... 2 Username e Password... 2 Connessione

Dettagli

La protezione dai memory error exploit

La protezione dai memory error exploit Università degli Studi di Milano Sommario Introduzione 1 Stack Guard Terminator Canaries Random Canaries 2 3 Buffer Overflow Stack Guard Introduzione Buffer Overflow Condizione anomala. Memorizzazione

Dettagli

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1 DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica

Dettagli

Problem solving avanzato

Problem solving avanzato Problem solving avanzato Formulazione del problema Struttura dati e algoritmo Il programma 2 26 Politecnico di Torino 1 Dati in input (1/4) Sono dati due file di testo, contenenti le informazioni sulle

Dettagli