Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea...

14
Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati [email protected] 1 Laboratorio di Reti Informatiche – A.A. 2018/2019

Transcript of Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea...

Page 1: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Laboratorio di

Reti InformaticheCorso di Laurea Triennale in Ingegneria Informatica

A.A. 2018/2019

Ing. Carlo Vallati

[email protected]

1Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 2: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Consegna Progetto

2Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 3: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Rappresentazione messaggi

• I messaggi da inviare in un socket possono esserestrutturati in due modi:• I Text protocol rappresentano il messaggio direttamente

sotto forma di stringa, create al mittente, interpretata al ricevente

• I Binary protocols rappresentano il messaggio con campi simili alle strutture dati usate all’interno del programma

3Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 4: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Esempio – Binary protocol

• Prendiamo ad esempio un protocollo fittizio per accendere le luci delle stanze di una casa

• Il campo Message Type indica il tipo di messaggio, a seconda del campo cambia il resto del messaggio

4Laboratorio di Reti Informatiche – A.A. 2018/2019

Message Type

16 bytes2 octets

Messaggio (lunghezza variabile)

Page 5: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Esempio – Binary protocol

• Il messaggio REQUEST e’ identificato con il campo Message Type a 0. Il messaggio ha al suo interno i campi Operation Type che indica l’operazione da svolgere e il campo Roomche indica la stanza dove svolgere l’operazione

• Il campo Operation Type puo’ essere 0 -> spegnere le luci o 1 -> accendere le luci, il campo Room e’ una stringa a lunghezza variabile che indica il nome della stanza

5Laboratorio di Reti Informatiche – A.A. 2018/2019

0

16 bytes2 octets

Operation Type

16 bytes2 octets

Room (string) 0

1 Byte1 octet

Page 6: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Come serializzare il messaggio

6Laboratorio di Reti Informatiche – A.A. 2018/2019

#define REQUEST 0

#define LIGHT_ON 1

uint16_t message_type = htons(REQUEST);

uint16_t op_type = htons(LIGHT_ON);

char buffer[MAX_SIZE];

int pos = 0;

memcpy(buffer+pos, &message_type, sizeof(message_type));

pos += sizeof(message_type);

memcpy(buffer+pos, &op_type, sizeof(op_type));

pos += sizeof(message_type);

strcpy(buffer+pos, “bedroom\0”); // La strcpy copia ‘\0’

pos += strlen(“bedroom\0”) + 1; // La strlen non include ‘\0’

Page 7: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Come de-serializzare il messaggio

7Laboratorio di Reti Informatiche – A.A. 2018/2019

uint16_t message_type;

uint16_t op_type;

char room[MAX_ROOM_NAME];

char buffer[MAX_SIZE];

int pos = 0;

memcpy(&message_type, buffer+pos, sizeof(message_type));

pos += sizeof(message_type);

memcpy(&op_type, buffer+pos, sizeof(op_type));

pos += sizeof(message_type);

strcpy(room, buffer+pos);

pos += strlen(room)+1;

Page 8: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Osservazioni

• A seconda del tipo del messaggio, la struttura di questopotrebbe cambiare, in quell caso si usano degli if per gestire la serializzazione e deserializzazione delladiversa struttura del messaggio.

• Come mai non si usano delle strutture dati da inviaredirettamente nel socket? In questo caso abbiamo un campo a lunghezza variabile (il campo stringa) altrimenti avremo potuto rappresentare il messaggiocon delle strutture (con campi appositi a lunghezza fissae conversione del valore da tipo host a tipo network) e inviare la struttura

8Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 9: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Tools di debug e sviluppo

9Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 10: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

NetCut - NC

• NetCut è un tool per effettuare connessioni remote a riga di comando utilizzando i protocolli TCP/UDP

• Programma molto versatile, «il coltellino svizzero delle connessioni TCP/IP»

• Può essere utilizzato dagli amministratori di rete o per effettuare il debug di applicazioni

10Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 11: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

NC - Client

• NC client può essere usato per aprire socket TCP o UDP • Attraverso il socket creato si possono mandare dati

digitati a riga di comando e vedere stampata la risposta• nc <host> <port> [-u]

• Per aprire un socket UDP verso localhost, porta 3000:• nc localhost 3000

• Per aprire un socket TCP verso google.com porta 80:• nc www.google.com 80

• GET /

• <html><head> etc…

11Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 12: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

NC - Server

• NC server può essere usato per aprire un socket. Nel caso di socket TCP questo viene aperto in modalità listen socket TCP

• Attraverso il socket creato si possono ricevere connessioni, ricevere/mandare dati• nc –l –p <porta> [-u]

• Per aprire un socket TCP in listen porta 3000:• nc –l –p 3000

• Per aprire un socket UDP porta 80:• nc –l –p 80 -u

12Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 13: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Autotools

• Gli autotools attraverso il comando make e un file di configurazione ‘Makefile’ possono essere utilizzati per compilare progetti composti da più files.

• Verranno coperti nel corso di Sistemi Operativi

13Laboratorio di Reti Informatiche – A.A. 2018/2019

Page 14: Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Ing. Carlo Vallati carlo.vallati@unipi.it

Makefile - Esempio

all: hello_client hello_server

hello_client: hello_client.o

gcc -Wall hello_client.o -o hello_client

hello_server: hello_server.o

gcc -Wall hello_server.o -o hello_server

clean:

rm *o hello_client hello_server

14Laboratorio di Reti Informatiche – A.A. 2018/2019