Salta ai contenuti. | Salta alla navigazione

Strumenti personali

ARCHITETTURA DI RETI

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2022/2023
Docente
MAURO TORTONESI
Crediti formativi
8
Periodo didattico
Primo Semestre
SSD
INF/01

Obiettivi formativi

L’obiettivo del corso è quello di fornire agli studenti una chiara visione dell'architettura della rete Internet e dei modelli e tecnologie per lo sviluppo di servizi Web. Al termine del corso gli studenti dovranno essere in grado di sviluppare applicazioni distribuite secondo il modello Client/Server, utilizzando gli strumenti Unix e Java per la programmazione di rete.

Le principali conoscenze acquisite saranno:

- modello Client/Server;
- architettura dei principali protocolli e servizi Internet;
- modelli di programmazione di rete (socket, RPC, ecc.);
- principali problematiche di sicurezza nelle reti di calcolatori.

Le principali abilità (ossia la capacità di applicare le conoscenze acquisite) saranno:

- identificare i vincoli di progetto per protocolli e sistemi Internet;
- saper realizzare applicazioni distribuite Client/Server utilizzando le Socket in ambienti Unix/C e Java.

Prerequisiti

Il corso richiede la conoscenza approfondita dei linguaggi C e Java e del sistema operativo Unix. Quindi si assume (ma non è «formalmente» obbligatorio) che siano stati superati gli esami di Fondamenti di Informatica (entrambi i moduli) e Sistemi Operativi

Contenuti del corso

Il corso prevede 60 ore di didattica tra lezioni ed esercitazioni. In particolare sono previste 45 ore di lezione in aula e 15 ore di esercitazioni guidate in laboratorio.

Gli argomenti affrontati durante il corso sono:

- Introduzione alle reti di calcolatori e ai sistemi distribuiti
- Inter Process Communication per applicazioni distribuite
- Il modello Client/Server
- Naming e binding
- Le Socket in Java e in Unix - sviluppo di sistemi Client/Server
- Strumenti per il testing e il debug di applicazioni distribuite
- Gestione dell’eterogeneità nei sistemi distribuiti
- Modelli architetturali per la realizzazione di Server
- Remote Procedure Call (RPC)
- I servizi Internet e loro realizzazione (telnet, FTP, e-mail, etc.)
- Sistemi Web, servizi, linguaggi e protocolli
- Il problema della sicurezza in Internet
- Oltre il modello Client/Server

Metodi didattici

Il corso è organizzato nel seguente modo:
-lezioni frontali in aula su tutti gli argomenti del corso;
-esercitazioni nel Laboratorio di Informatica Grande del Dipartimento di Ingegneria per il progetto e lo sviluppo di semplici applicazioni distribuite Client/Server utilizzando le Socket in ambienti Unix/C e Java.

Al termine delle esercitazioni guidate gli studenti avranno libero accesso al laboratorio per ulteriori esercitazioni individuali.

Modalità di verifica dell'apprendimento

L'esame è costituito da una prova scritta e da una prova orale, che possono essere sostenute anche in appelli differenti. Il superamento dell'esame è prova di aver acquisito le conoscenze e le abilità specificate negli obiettivi formativi dell'insegnamento.

Nella prova scritta sarà richiesto di progettare un'applicazione distribuita Client/Server utilizzando sia le Socket Unix che le Socket Java. La prova scritta sarà svolta all'elaboratore, nel Laboratorio di Informatica Grande del Dipartimento di Ingegneria. Se non si è soddisfatti del risultato di una prova scritta, si può partecipare a un qualunque appello successivo, svolgere la prova e decidere se consegnare o meno l'elaborato. Ovviamente, nel caso di consegna si cancella il risultato conseguito nello scritto precedente.

Dopo il superamento della prova scritta si deve sostenere la prova orale, per verificare la preparazione anche sulle parti del corso non interessate dalla prova scritta. La prova orale porterà ad arrotondare il voto preso nella prova scritta di circa 3 punti al massimo. Se non si è soddisfatti della prova orale, si può decidere di sostenerla nuovamente senza perdere il voto conseguito allo scritto.

Il docente fisserà 6 appelli scritti ogni anno (solare), che si terranno nei mesi di gennaio, febbraio, giugno, luglio, settembre e dicembre. Si prevedono appelli orali con frequenza circa bisettimanale. Per non interferire con le lezioni, durante i periodi di lezione saranno disponibili appelli orali riservati ai soli studenti fuori corso

Testi di riferimento

Non esiste un unico libro di testo che contenga tutto il materiale presentato a lezione. Il docente propone quindi un elenco di libri, suddivisi tra libri di carattere più introduttivo/generale e libri che coprono con maggiore dettaglio alcuni specifici argomenti del corso.

Il testo che fornisce la più ampia copertura della maggior parte degli argomenti del corso, seguendo la stessa impostazione, è il Kurose-Ross:
J. Kurose, K. Ross, "Reti di Calcolatori - Un approccio top-down a Internet ", Pearson Education Italia, 7a edizione, 2017.
Il Kurose-Ross è da molti considerato il testo di riferimento del settore e fornisce una trattazione un po' più teorica e sicuramente più ampia degli argomenti rispetto ad altri testi.

Il Forouzan-Mosharraf rappresenta una valida alternativa al Kurose-Ross:
B. Forouzan, F. Mosharraf, "Reti di Calcolatori - Un approccio top-down", McGraw Hill Education, 2013.
Il Forouzan-Mosharraf adotta un approccio più "hands on", con numerosi diagrammi che facilitano notevolmente la comprensione del funzionamento di protocolli e algoritmi, e fornisce inoltre una parziale copertura delle socket in C/Unix e in Java.

Un altro testo con ampia copertura degli argomenti del corso, ma con una diversa impostazione è:
A.S. Tanenbaum, D. Wetherall, "Reti di calcolatori", 5a edizione, Pearson Education Italia, 2011.
Il Tanenbaum-Wetherall rappresenta un ottimo riferimento per approfondire alcuni argomenti specifici, ma l'approccio bottom-up adottato lo rende decisamente meno adatto ai fini di questo corso rispetto al Kurose-Ross e al Forouzan-Mosharraf.

Altri testi con trattazione più approfondita di alcuni argomenti (indicati tra parentesi):

E. Harold, "Java Network Programming", 4th Edition, O'Reilly, 2013 (Socket Java)
M. Kerrisk, "The Linux Programming Interface", No Starch Press, 2010 (Unix)
W.R. Stevens et al., "Advanced Programming in the UNIX Environment", 3rd Edition, Addison-Wesley, 2013 (Unix)
W.R. Stevens et al., "Unix Network Programming - Vol.1", 3rd Edition, Addison-Wesley, 2003 (Socket Unix)
W.R. Stevens et al., "TCP/IP Illustrated: the protocols - Vol.1", 2nd Edition, Addison-Wesley, 2012 (TCP/IP)
W. Stallings, L. Brown, "Computer Security: Principles and Practice", 2nd Edition, Prentice Hall, 2011 (Security)
J. Forshaw, "Attacking Network Protocols", No Starch Press, 2017 (Security and protocol analysis)
C. Sanders, "Practical Packet Analysis", 3rd Edition, No Starch Press, 2017 (Protocol analysis and debugging)
R. Seacord, "Effective C", No Starch Press, 2020 (Modern C)

Si ricorda che una copia dei lucidi presentati a lezione è disponibile nella sezione Materiale didattico del sito web del corso.