Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea...
Transcript of Laboratorio di Reti Informatiche - unipi.it...Laboratorio di Reti Informatiche Corso di Laurea...
Laboratorio di
Reti InformaticheCorso di Laurea Triennale in Ingegneria Informatica
A.A. 2018/2019
Ing. Carlo Vallati
1Laboratorio di Reti Informatiche – A.A. 2018/2019
Consegna Progetto
2Laboratorio di Reti Informatiche – A.A. 2018/2019
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
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)
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
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’
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;
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
Tools di debug e sviluppo
9Laboratorio di Reti Informatiche – A.A. 2018/2019
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
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
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
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
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