Alma Mater Studiorum - Universita' di Bologna Sede di Cesena Reti di Calcolatori Introduzione Scopi Programma Modalità d'esame Bibliografia Docente e home page
Copyright © 2006-2014 by Claudio Salati. These tutorials have been produced for the course “Reti di Calcolatori“ (Computer Networks) of the University of Bologna. They may be used for educational purposes, under the condition that their source be explicitly acknowledged. claudio.salati@unibo.it http://dm.unife.it/~salati/cesena/annunci.htm
Scopi del corso Completare la panoramica sulle architetture di rete e in particolare sull'architettura, i servizi e i protocolli Internet. Layer 4, 5, 6, 7 del modello di riferimento OSI. Introdurre i concetti e le tecnologie utilizzati per la programmazione di rete. Introdurre i servizi applicativi necessari per il supporto di un ambiente di programmazione distribuito (Layer 5, 6, 7 del modello di riferimento OSI). Introdurre le problematiche relative alla costruzione di applicazioni Web. Introdurre le problematiche di sicurezza delle reti e le tecniche utilizzate per affrontarle. In sostanza: Come si costruisce una applicazione distribuita? Cosa la rende “intrinsecamente diversa” da una applicazione concentrata?
Propedeuticità Si assume il superamento del corso di Reti di Telecomunicazioni Si assume la conoscenza di elementi di: Sistemi Operativi (Unix / Linux) Linguaggio C Linguaggio Java rilevanti per le esercitazioni e/o per l’esame Durante il corso saranno comunque introdotti/ripresi i concetti rilevanti di questi argomenti
Programma del corso .1 Generalità e nozioni introduttive. Struttura di una rete di calcolatori: End-System vs. Intermediate System. Il modello di riferimento ISO OSI: architettura gerarchica, servizi, service access point (nSAP), protocolli, entità di protocollo, interoperabilità. Descrizione funzionale e dell’interfaccia programmatica (API) di un servizio: la portabilità delle applicazioni di rete. Funzioni dei diversi layer del modello di riferimento. Allocazione delle entità di protocollo sui nodi della rete e funzionalità end-to-end. Indirizzamento di un modulo di programma distribuito. TSAP nell’architettura Internet: UDP e porte. NSAP nell’architettura Internet: indirizzi IP (e campo protocol!). DlSAP: indirizzo Ethernet e EtherType.
Programma del corso .2 Il livello di trasporto: servizio connectionless (CLTS). Caratteristiche funzionali del servizio fornito dal protocollo UDP. Comunicazioni unicast e broadcast. Il livello di trasporto: servizio connection oriented (COTS). Relazioni tra layer di trasporto e layer di rete. Caratteristiche funzionali del servizio fornito dal protocollo TCP. Procedure per la rilevazione e il recupero degli errori. La tecnica della sliding window in TCP ai fini dell’utilizzo ottimo della banda di rete e dell’ "end-to-end flow control". TSAP nell’architettura Internet: TCP, porte e connessioni. Apertura e chiusura di una connessione. Il ruolo del TCP nel controllo della congestione di rete: algoritmi e implementazioni. Problemi di performance.
Programma del corso .3 API per l’accesso al servizio di trasporto. Interfaccia socket Unix/C. Interfaccia socket in Java. Portabilità vs. interoperabilità. La struttura delle applicazioni distribuite secondo il modello OSI. Il livello di presentazione. Rappresentazione delle informazioni in reti eterogenee. Trasferimento di dati (byte) vs. trasferimento di informazioni. L’approccio OSI: sintassi astratta, sintassi concreta (locale), sintassi di trasferimento. ASN.1 e BER (solo cenni e confronti). Il livello di presentazione nel mondo Internet: XDR. Rilevanza funzionale del layer. Altri esempi: Corba, XML schema, Java.
Programma del corso .4 La struttura del livello applicativo secondo il modello OSI. Servizi applicativi generici: chiamata di procedura remota (RPC). Possibili semantiche per RPC. Sun RPC: definizione di una interfaccia remota, sua implementazione, protocollo. Strumenti per la programmazione distribuita. Applicazioni di rete a protocolli applicativi. Name Service (DNS). HTTP. Il web come ambiente di programmazione distribuita.
Programma del corso .5 Sicurezza e integrità delle informazioni nelle reti di calcolatori. Identificazione, autenticazione, autorizzazione, confidenzialità, integrità. Minacce alla sicurezza delle operazioni. Principi di crittografia a chiave segreta. Crittografia a chiave pubblica. Il problema della distribuzione delle chiavi. Protocolli di autenticazione. Firme digitali. Sicurezza su Internet: SSL e HTTPS.
Modalità di esame Valutazione: La valutazione si baserà su ogni elemento possibile: interazioni in aula esercitazioni esami Gli esami consistono di: una prova scritta preliminare (sostituibile con le esercitazioni) una prova orale La prova scritta viene svolta in laboratorio E' costituita da alcune parti di progetto, volte a verificare una adeguata preparazione, anche pratica, dello studente La seconda prova, orale, parte dallo scritto o dalle esercitazioni e si sviluppa su tutti i temi del corso
Esercitazioni di laboratorio .1 Giocano un ruolo fondamentale nell'economia del corso Si dividono in 2 categorie: Aula, illustrate da un docente Aula+casa, svolte in autonomia dagli studenti dopo una presentazione/discussione in aula Le esercitazioni aula+casa consentono, se tutte svolte e consegnate nei modi specificati, di evitare la parte scritta dell'esame finale Modalità di esecuzione delle esercitazioni aula+casa: in gruppi di 2 eccezioni motivate: gruppi di 1 o 3 ogni membro del gruppo deve contribuire allo svolgimento di tutto l'esercizio gruppi dichiarati all'inizio del corso è ammessa la discussione tra diversi gruppi ma è assolutamente proibito copiare e scambiarsi il codice
Esercitazioni di laboratorio .2 Correzione delle esercitazioni aula+casa: Durante il corso a scopo di discussione. Durante l’esame (a campione) per la valutazione. Durante l'esame orale: verifica individuale che lo studente sia effettivamente padrone del contenuto dell'esercitazione. la verifica potrà riguardare sia le esercitazioni aula+casa che quelle aula. Anche se l'esercitazione viene svolta in gruppo, la valutazione rimane individuale! Regole di consegna: tutti e soli i file sorgente prodotti da voi in un file .zip inviato per email con in aggiunta un file di testo (readme.txt) con indicati lo stato di completamento dell’esercitazione ed eventuali note aggiuntive (in particolare il metodo di test utilizzato: importante!)
Significato delle esercitazioni Esercitazione 1: l’infrastruttura di rete Unix, l’interfaccia socket in C, la system call select(). Esercitazione 2 (aula): l’interfaccia socket in Java (+ come fa Java senza select()). Esercitazione 3 (aula): scambio di dati vs. scambio di informazioni: un protocollo applicativo costruito direttamente sull’interfaccia di Trasporto. Esercitazione 4: scambio di dati vs. scambio di informazioni: un protocollo applicativo costruito sul layer di Presentazione. Esercitazione 5: un’applicazione distribuita basata su RPC e che ovviamente utilizza il servizio del layer di Presentazione. Esercitazione 6 (aula): un’applicazione web che utilizza HTTP come un servizio di Trasporto.
Docente Claudio Salati email: claudio.salati@unibo.it claudio.salati@gmail.com telefono: 328-211-7849 051-587018-4 Orario di ricevimento Sostanzialmente on demand, in genere prima dell’inizio (disponibile dalle 8:30) o al termine della lezione, salvo accordi diversi. Home page del corso: http://dm.unife.it/~salati/ riferito anche dalla GuidaWeb
Bibliografia .1 Le dispense del corso sono disponibili in copia elettronica nella home page del corso. Libri e Materiale di Testo: A.S. Tanenbaum, Computer Networks, 4th ed., Prentice Hall (necessario). D. Comer, Internetworking con TCP/IP - Principi, protocolli e architetture, vol. 1, 5th ed., Addison-Wesley (necessario). W.R. Stevens, Unix Network Programming, Prentice Hall (consigliato). SunSoft, Network Interfaces Programmer's Guide (necessario, disponibile in copia elettronica nel sito del corso). RFC 1014, External Data Representation Standard, 1987 (disponibile in copia elettronica nel sito del corso. RFC 1057, RPC: Remote Procedure Call Protocol Specification, 1988 (disponibile in copia elettronica nel sito del corso).
Bibliografia .2 Altri Riferimenti: D. Maggiorini, Introduzione alla programmazione client-server, Pearson/ Addison-Wesley, 2009. M.T. Rose, The open book, Prentice Hall. J. Larmouth, Understanding OSI, University of Salford (disponibile in copia elettronica all'indirizzo http://www.isi.salford.ac.uk/books/osi/osi.html#contents). ISO, IS 8072 - OSI Transport Service Definition. ITU-T, Rec. X.219 - Remote Operations: Model, Notation and Service Definition (a.k.a. ISO IS 9072-1). Burton S. Kaliski Jr., A Layman's Guide to a Subset of ASN.1, BER, DER, RSA Data Security, Inc. Ulteriori riferimenti (e link) si trovano nelle dispense. Link Rilevanti: www.ietf.org www.iana.org
Riconoscimenti Le lezioni sono state preparate utilizzando i testi citati in bibliografia. Le dispense indicano esplicitamente i testi da cui sono state derivate. Diverse figure delle dispense sono tratte dal materiale per il corso messo a disposizione con il libro: A.S. Tanenbaum, Computer Networks, 4th ed.