# Piattaforme Software per la Rete - lesson 1 #### Giacomo Verticale ###### 8 March 2016 ## Modulo 1 - Introduzione __Pila protocollare OSI__ Il modulo 1 da una visione trasversare alla rete dal livello di trasporto in basso (comunicazione tra i nodi) Il modulo 2 invece analizza la comunicazione tra gli strati App-Tra-IP di un singolo oggetto. Per ogni singolo nodo studieremo: - I mattoncini per fornire i servizi in un singolo nodo - Implementazioni diverse a seconda del contesto (router per sensori 10€/terabit router 10K€) - Algoritmi che vengono usati per realizzare il protocollo internet Esercizi: - Valutazione delle prestazioni o esecuzione degli algoritmi visti a lezione - Parte di laboratorio in aula informatica (possibile usare il proprio computer) - Laboratorio su *software defined networking* - Utilizzeremo un emulatore di rete per implementare le funzioni dei nodi interni. - Strumento: macchina virtuale che può eseguire un sottoinsieme di Python ## Prova scritta - 1 Esercizio di laboratorio: eseguire e commentare programma - Esercizi numerici su protocolli e algoritmi ## Materiale di studio - Slides su beep - Articoli che spiegano i concetti visti a lezione - Potrebbe servire un libro di reti (richiesta conoscenza protocollo IP, con. base TCP, con. base Ethernet) - Libro su algoritmi: Varghese - Network Algorithmics - Morgan Kaufmann 2003 - Libro copiato dal precedente: Chao - High Performance Switches and Routers - Wiley 2007 #### Libro Laboratorio In una __Software Defined Network__: Controllore programma il router con il protocollo openflow, l'implementazione scelta è Ryu, Per il laboratorio sarà utile il libro: RYU SDN Framework, scaricabile da internetz. ## Introduzione __Network Algorithmics__: algoritmi da implementare per ottenere le prestazioni richieste da un contesto (bilanciamento costi/prestazioni) Ad esempio per un ambiente in cui è richiesta una banda di 100Kbit/s va bene anche una cpu scarda/algoritmo scarso, se il link da gestire è più veloce servono cpu più veloci e algoritmi più efficienti. ### Piattaforme di Sviluppo (SDN) Difficile fare innovazione su internet perchè serve mantenere la compatibilità con i dispositivi preesistenti, es: IPv6, standardizzato nel 1996, dopo 21 anni sta iniziando ad essere adottato. __SDN__ si sta affermando ultimamente perchè permette di cambiare il comportamento dei dispositivi di rete con dei programmi. Prima della sua introduzione i dispositivi di rete avevano delle funzioni ben definite dalla fabbrica. All'inizio veniva usato su dispositivi low-end mentre ultimamente è supportato da router ad alte prestazioni. ### Gestione di rete è possibile misurare il traffico ed effettuare *ingegneria del traffico* ### Principi di Guida di internet Es: IP, Ethernet, e altri protocolli non sono necessariamente il modo migliore di fare le cose, ma una scelta che è stata fatta in un certo contesto. Può essere necessario superare le limitazioni dei protocolli senza sostituirli. ## Principi guida dello sviluppo di IP L'obiettivo iniziale di internet (1969) era di condividere delle risorse, in particolare i Mainframe costavano tanto e comprarne uno per ogni Università, ecc era costoso e portava a dei doppioni. __Obiettivi di internet:__ (in priorità decrescente) - Condivisione e Interconnessione di risorse e reti esistenti - Resistenza ai guasti - Eterogeneità - Gestione Distribuita - Facilità di interconnessione - Accountability Questo porta a *eterogeneità* e *decentralizzazione* ### Condivisione delle risorse di comunicazione Condivisione è analogo a __Multiplazione__ che implica __Commutazione__ Commutazione: - *di circuito* esisteva dalla fine dell '800 - pro: garantisce delle prestazioni - *di pacchetto* era un concetto recente, non ancora provato a lunga distanza - pro: possibilità di fare *multiplazione statistica* -> condivisione efficiente - con: non ho garanzia di prestazioni Comunicazioni informatiche, a differenza di quelle telefoniche non richiedono una banda costante, e quindi si adattano bene alla multiplazione statistica/comm. di pacchetto. Nella commutazione di pacchetto utilizzo i *datagrammi* che sono una forma di comunicazione autocontenuta (info destinatario incluse). L'eterogeneità del progetto, ad esempio per le prestazioni delle varie reti da interconnettere ha portato ad un modello __best effort__ __Best effort__: la rete si impegna ad offrire il miglior servizio possibile. In particolare la gestione della comunicazione e dei suoi problemi deve essere gestita dai *nodi finali*. Servizio richiesto alla rete è semplice: consegnare i datagrammi in ingresso all'uscita. Per questi motivi è stato adottato il __Datagramma__. __Clessidra di still dearing__ Rappresentazione dello stack di internet in cui la vita (sottile) della clessidra rappresenta IP, La parte sotto rappresenta i protocolli data-link (WiFi, Ethernet, 4G...) e sotto ancora i vari mezzi fisici (Rame, Fibra, Radio...) Sopra IP abbiamo lo strato di trasporto (TCP, UDP, SCTP) Sopra il trasporto abbiamo i vari livelli applicativi (HTTP, SMTP, FTP...) Le parti sotto e sopra la vita sono eterogenee. Internet è un esempio di rete multiservizio. ### Resistenza ai guasti è impossibile evitare i guasti, ma si può rimediare: - Replicando lo stato della rete - Facendo in modo che uno stato non sia essenziale per la rete A questo proposito è stato implementato il __fate-sharing__ invece della __replication__(veniva usata nelle reti telefoniche) __fate-sharing__: è accettabile perdere informazioni di stato se le informazioni perse con il nodo sono relative al nodo. Questo porta ad evitare di distribuire nella rete informazioni di stato relative ad altri nodi, in modo che lo stato legato ad un nodo è sacrificabile. Il sistema risultante è più semplice ma risulta più lenta la procedura di ripristino dei guasti (rispetto alla replication) Ma ottenere *alte prestazioni* non era tra gli obiettivi iniziali di internet (oltre alla sicurezza) ### Gestione distribuita Non esiste un nodo centrale in internet, esistono delle autorità centrali per suddividere lo spazio degli indirizzi (riguarda solo configurazione) La cosa più centrale in internet sono i root server DNS che sono comunque 13. Conseguenze: - Internet può funzionare senza alcune parti - Nessuno ha una visione completa della rete ### Facilità di interconnessione ### Accountability Questo obiettivo non è stato pienamente perseguito, a causa della scelta del datagramma. ### Obiettivi non previsti inizialmente: - __sicurezza__ - __prestazioni__ - __mobilità__ (spostamento continuo) - supporto al __nomadismo__ (collegamento in posti diversi)