===== Programma ===== Il corso è strutturato in due moduli: il primo modulo presenta i fondamenti delle reti di calcolatori e il secondo modulo di laboratorio mostra un’applicazione concreta dei concetti teorici presentati nel primo modulo. Il primo modulo introduce i principi ed i concetti su cui si basano le reti e analizza la loro realizzazione nei sistemi reali. In particolare, vengono presentate le problematiche di livello applicativo e i protocolli più comuni a questo livello (quali HTTP, FTP, e-mail etc.), il livello di trasporto e i protocolli TCP e UDP, il livello di rete e i protocolli di routing e il livello di collegamento. Infine verranno presentati i principi di di reti wireless e mobili, di sicurezza nelle reti e dei protocolli per la multimedialità. Il secondo modulo introduce gli strumenti per la realizzazione di applicazioni di rete in JAVA. In particolare vengono introdotti sia strumenti a basso livello come i socket TCP ed UDP che strumenti a piu' alto livello, come RMI (Remote Method Invocation) e le callbacks. La prima parte del corso introduce inoltre la programmazione concorrente in JAVA: si discute il concetto di thread, la tecnica del thread pooling e i meccanismi offerti da JAVA per la sincronizzazione dei threads. ==== Programma dettagliato ==== === Modulo di Reti di Calcolatori === Introduzione alle reti di calcolatori * architettura complessiva di Internet * protocolli * Breve storia di Internet Livello applicativo * Web e HTTP * FTP * E-mail: SMTP, POP3, IMAP * DNS * P2P file sharing * Soket Livello di trasporto * Servizi del livello di trasporto * Multiplexing/demultiplexing * Affidabilità * Flusso e congestione * TCP e servizio orientato alla connessione * UDP e servizio senza connessione Livello di rete * Reti a datagramma e a circuito virtuale * Protocollo IP * Protocolli di routing * Link state * Distance Vector * Routing gerarchico * Routing in Internet Livello di collegamento * Correzione di errori di trasmissione * protocolli di accesso multiplo * indirizzamento * Ethernet Principi di reti wireless e mobili, di sicurezza, e dei protocolli per la multimedialità === Modulo di laboratorio di Reti == Richiami di programmazione JAVA: classi, interfacce ereditarieta'. * Nella parte introduttiva del corso verranno proposti semplici esercizi per richiamare la programmazione ad oggetti in JAVA introdotta nel corso di Programmazione 2 Thread Programming in JAVA * Attivazione di threads. La classe Runnable * Pool di threads: politiche per la gestione dei Pool * Thread che restituiscono risultati: la classe Callable * Stati di un thread, metodi join, interrupt * Sincronizzazione, concetto di monitor * Metodi Synchronized, sezioni critiche, wait(), notify(), notifyall() Gestione di indirizzi IP * Classe InetAddress JAVA streams * caratteristiche generali Sockets UDP * DatagramSockets, DatagramPackets * Generazione di pacchetti UDP: Le classi ByteArrayInputStream, ByteArrayOutputStream * Multicast Sockets TCP * Le classi Socket, ServerSocket * Invio di dati strutturati su stream: framing * supporto per la gestione di socket TCP * Implementazione di servers paralleli Remote Method Invocation * Attivazione di registry * Esportazione di oggetti remoti * RMI callbacks ==== Libri di testo ==== Per il modulo di Reti: J. Kurose & K. Ross. Computer Networking: A top-down approach. (fourth edition, Addison Wesley) Per il modulo di Programmazione di Rete: Esmond Pitt, Fundamental Networking in Java , Springer Verlag, 2005