Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Protocolli per Reti Mobili Specifiche di uno Switch OpenFlow Anno Accademico 2013-2014 Candidato: Maurizio Cacace matr. N46/000577 Dedicato alla mia famiglia Indice Introduzione………………………………………………………...........................................................4 Capitolo 1. OpenFlow………………………………………………………………………………........5 1.1 Introduzione ad OpenFlow………………………………………………………………….5 1.2 Funzionamento di OpenFlow……………………………….................................................7 1.3 Il Controller POX………………………………………………………………………….10 Capitolo 2. Aspetti Specifici……………………………………………………………………………12 2.1 Software-Defined-Networking (SDN)……… …………… …………………………….12 2.2 Struttura di SDN………………………………………………………………………….14 2.3 NOX……………………………………………………………………………………...15 2.4 Le Reti OpenFlow………………………………………………………………………..18 Capitolo 3. Switch OpenFlow…………………………………………………………………………..21 3.1 Aspetti Generali………………………………………………………………………….21 3.2 Funzioni Base………………………………………........................................................22 3.3 Porte OpenFlow…………………………………………………….................................24 3.4 OpenFlow Table………………………………………………………………………....26 3.5 Istruzioni Azioni………… …………………………………………………………...…30 3.6 OpenFlow Switch Protocol…………………………………………………………...….32 Conclusioni……………………………………………………………………………………………..35 Bibiliografia…………………………………………………………………………………...........................36 Introduzione Il lavoro di tesi presentato si pone l’obiettivo di introdurre le specifiche di uno switch basato sulla tecnologia “OpenFlow”, mettendo in risalto potenzialità e carenze che tale tecnologia presenta nell’ambito delle reti. OpenFlow è una recente tecnologia sviluppata dall’università di Standford. Si basa nello spostare il controllo dei dati in un “controller” centralizzato, in modo da sollevare i singoli impianti di rete dall’incarico di decisione del percorso. Ciò comporta notevoli vantaggi, poiché il controller è programmabile e conosce l’intera topologia della rete. Tutto ciò permette una programmazione della rete che consente un notevolissimo incremento dell’efficienza della stessa. Nel primo capitolo sarà introdotto il concetto di OpenFlow, il suo funzionamento e la logica di base, con cenni al controller POX. Nel secondo capitolo sarà descritto il funzionamento di SDN e il sistema operativo alla base di OpenFlow. Inoltre un breve accenno alle Reti OpenFlow. Nel terzo capitolo si entrerà nel merito delle specifiche di uno switch OpenFlow, descrivendone gli aspetti più importanti. 4 Specifiche di uno Switch OpenFlow Capitolo 1: OpenFlow 1.1 Introduzione ad OpenFlow OpenFlow è un protocollo aperto sviluppato dall’università di Stanford a partire dal 2007, che utilizza il concetto di flusso per la re-direzione dei pacchetti. In questo contesto, per flusso si intende una sequenza unidirezionale di pacchetti aventi caratteristiche comuni, che attraversa il nodo entro un intervallo temporale, avendo sorgente e destinazioni fisse. OpenFlow realizza un “software defined networking” (SDN), cioè un approccio di rete in cui il controllo è disaccoppiato dall’hardware e gestito da un software chiamato controller, rendendo le reti “programmabili”. L’SDN propone quindi di trasformare l’intero network in una piattaforma e gli elementi individuali in entità programmabili. OpenFlow, in particolare, si basa sui normali switch Ethernet con tabelle di flusso interne (flow table) e un’interfaccia standardizzata per aggiungere e rimuovere le voci di flusso (flow entries), che costituiscono appunto la flow table. L’idea di base di OpenFlow è quella di rendere possibili la gestione di più switch attraverso il collegamento al controller, il quale semplifica la gestione dei flussi e quindi, permettere in maniera semplificata e potenzialmente più efficiente, la gestione dell’intera infrastruttura, la definizione delle politiche e la gestione del tipo di traffico. Lo switch classico svolge le sue due funzioni principali sullo stesso dispositivo, il packet forwarding 5 Specifiche di uno Switch OpenFlow (data path) e high level routing decisions (control path). Gli switch OpenFlow, invece, separano le due funzioni. La parte di datapath ( chiamata anche forwarding o switching) è svolta sugli apparati, mentre quella di controllo è spostata su un controller esterno, tipicamente un server. Esso consente inoltre la distribuzione di innovativi protocolli di routing e switching della rete per le diverse applicazioni. I benefici che questa architettura offre ad aziende e gestori di rete sono: - Gestione centralizzata e controllo dei dispositivi di rete da parte di più fornitori. - Migliora l’automazione e la gestione utilizzando API comuni per astrarre i dettagli delle reti sottostanti. - Rapida innovazione attraverso la capacità di fornire nuove funzionalità di rete e servizi senza la necessità di configurare i singoli dispositivi o attendere le release dei fornitori. - Programmabilità da parte degli operatori, imprese, fornitori indipendenti di software e utenti. - Maggiore affidabilità e sicurezza di rete grazie alla gestione automatizzata e centralizzata dei dispositivi, l’applicazione uniforme delle politiche e un minor numero di errori di configurazione. - Una migliore esperienza dell’utente finale su come le applicazioni sfruttano le informazioni sullo stato di rete per adattare perfettamente il comportamento della stessa alle esigenze degli utenti. 6 Specifiche di uno Switch OpenFlow 1.2 Funzionamento di OpenFlow Il principio di funzionamento alla base di OpenFlow è quindi la separazione del software di controllo del traffico dai router e dagli switch fisici, attraverso cui passano i pacchetti dati. Nello specifico OpenFlow è formato da tre parti: - Tabelle di flusso installate sugli Switch - Un Controller - Un protocollo che il Controller usa per comandare gli Switch. Il Controller agisce sugli switch secondo le regole contenute all’interno delle tabelle di flusso, che esso installa in base al comportamento che desidera ottenere. Tali regole, che di fatto costituiscono la flow table, sono dette “flow entries”. Figura 1.1 Attualmente OpenFlow permette di definire un flusso utilizzando caratteristiche dei pacchetti dal livello 2 al livello 4 (compresi) della pila protocollare e supporta Ethernet,IP,TCP e UDP. OpenFlow permette di definire, attraverso l’uso di una maschera, quali siano i campi nell’header del pacchetto in base ai quali esso possa essere considerato parte di uno specifico flusso. 7 Specifiche di uno Switch OpenFlow Il supporto a OpenFlow è già disponibile per diverse apparecchiature di rete, quali switch, router e access point WiFi. Tali dispositivi espongono un’interfaccia standard OpenFlow che permette di interagire con i controller esterni, senza bisogno che i diversi produttori rivelino i dettagli dei loro apparati di rete. OpenFlow è implementato in hardware da una gran parte di essi. Lo switch OpenFlow e il controller comunicano tramite l’OpenFlow protocol. Il datapath di uno switch OpenFlow è quindi costituito dalla flow table; ogni record della tabella di flussi contiene una serie di regole che permettono di filtrare determinati pacchetti, quindi i flussi, e applicare a essi un’azione del tipo send-out-port, modify-field o drop. Quando uno switch OpenFlow riceve un pacchetto che non ha mai visto prima, per il quale non vi siano regole di pattern matching attive nella tabella dei flussi, esso manda il pacchetto al controller, che decide come gestirlo. All’interno della Flow Table, a ogni sua voce è associata una delle azioni previste, le quali sono: - Inoltrare il flusso di pacchetti a una determinata porta (o porte). Ciò consente ai pacchetti di essere instradati attraverso la rete. - Incapsulare e inoltrare il flusso di pacchetti al controller. Il pacchetto viene consegnato nel secure channel, dal quale viene inviato al controller. Tipicamente usato per il primo pacchetto in un nuovo flusso, così un controllore può decidere se il flusso deve essere aggiunto alla tabella di flusso. Oppure, in alcuni esperimenti, potrebbe essere utilizzata per trasmettere tutti i pacchetti a un controllore per l’elaborazione. 8 Specifiche di uno Switch OpenFlow - Scartare i pacchetti del flusso. Può essere usato per la sicurezza o ad esempio per frenare attacchi Denail of Service. - Inoltrare un flusso di pacchetti come classica elaborazione dello switch. Una voce nel Flow Table ha tre campi: Figura 1.2 - RULE, definisce il flusso, cioè i pacchetti che vengono classificati come parte del flusso. - ACTION definisce come i pacchetti devono essere trattati. - STATS, tiene traccia del numero di pacchetti e byte per ciascun flusso e il tempo trascorso dall’ultimo pacchetto abbinato al flusso per aiutare la rimozione dei flussi inattivi. OpenFlow si rivela fin da subito un ottimo strumento per la facilità con cui si possono ideare e anche testare il funzionamento di nuovi protocolli. in tempi brevi si riescono a raccogliere i risultati e le criticità di una determinata rete e si può agire su di essa con modifiche strutturali e di carico che nelle tradizionali reti richiederebbero operazioni molto più laboriose, mentre nel caso di OpenFlow è sufficiente modificare a livello software il controller. 9 Specifiche di uno Switch OpenFlow OpenFlow nasconde la complessità dei dispositivi di rete, ne centralizza il controllo in modo virtualizzato, semplificando notevolmente la gestione del network. 1.3 Il Controller POX POX è un controller open-source che ha come scopo quello di fornire una piattaforma semplificata per la scrittura di software di controllo di rete. I programmi scritti in POX, basati su Pyton, permettono un controllo della rete a livello di flusso. Questo significa che ad esempio si possono determinare quali flussi sono consentiti nella rete e il percorso che devono adottare. Inoltre POX fornisce procedure per l’accesso allo stato di rete tra cui ad esempio per la topologia della rete e per il rilevamento della posizione di tutti gli host. E’ ancora in fase di sviluppo e attualmente è utilizzato in svariate implementazioni. POX è stato progettato per essere fortemente scalabile, permettendone l’utilizzo sia a servizio di grandi reti composte da centinaia di swtich che a reti di tipo domestico. Alcune caratteristiche di POX sono: - Interfaccia OpenFlow scritta in Pyton - Componenti riusabili per path selection, topology discover ecc - Rivolto in particolare a sistemi operativi come Linux,Mac OS e Windows - Supporta la stessa GUI e tool grafici di NOX 10 Specifiche di uno Switch OpenFlow positivi di rete sono gli elementi che nelle reti hanno funzionalità esclusivamente orientate a garantire la connessione, il funzionamento, l’efficienza e l’affidabilità della rete stessa. Vengono classificati in base al livello del modello ISO/OSI in cui operano. Essi si distinguono in: Hub,Switch,Router. 11 Specifiche di uno Switch OpenFlow Capitolo 2: Aspetti Specifici 2.1 Software Defined Networking ( SDN ) Dal 1970 ad oggi non ci sono stati grandi cambiamenti nelle tradizionali tecnologie di rete; ovvero, l’intelligenza risiede maggiormente al punto di confine della rete, ad esempio i computer, mentre le apparecchiature di rete quali router e switch si limitano principalmente alla lettura dell’indirizzo di destinazione e al trasferimento dei pacchetti di dati al componente adiacente. Inoltre, il controllo e l’inoltro dati sono stati sviluppati per essere strettamente accoppiati in modo proprietario e chiuso. In questo modo, la complessità della rete, la sua gestione e il funzionamento hanno un costo sempre più alto ogni volta che nuovi servizi, tecnologie o hardware sono sviluppati e distribuiti. Software-Defined Networking(SDN) è un’architettura di rete emergente in cui l’infrastruttura di controllo della rete è disaccoppiata dall’infrastruttura d’inoltro dei dati ed è direttamente programmabile. Questo nuovo paradigma propone di semplificare i nodi di rete (router o switch) disaccoppiando il piano d’instradamento dal piano di controllo, favorendo l’utilizzo di hardware e software standard e open source. Il primo protocollo SDN sviluppato è OpenFlow. SDN permette di programmare a tutti i livelli della pila protocollare le logiche di funzionamento della rete in base ai requisiti di amministrazione, non facendo più 12 Specifiche di uno Switch OpenFlow unicamente affidamento sui protocolli di uso comune. Un altro vantaggio offerto da tale tecnologia consiste in una gestione semplificata della rete da parte dell’amministratore, grazie a strumenti centralizzati. Le tecnologie SDN come OpenFlow, attraverso la possibilità di programmare a livello software la rete, introducono la gestione della de-materializzazione delle risorse network e di virtualizzazione. Il modello SDN, quindi, può essere visto come un fattore abilitante per la realizzazione di servizi cloud e ridurne i costi di realizzazione. La Figura 2.2 illustra lo schema logico dell’architettura SDN. L’intelligenza della rete è centralizzata in controller software basati su SDN, che mantengono una visione globale della rete. Come risultato, la rete appare alle applicazioni come un unico switch logico. Con SDN, aziende e gestori guadagnano indipendenza di controllo sull’intera rete da un unico punto logico, che semplifica notevolmente la progettazione e il funzionamento della stessa. SDN inoltre semplifica notevolmente i dispositivi di rete, dal momento che non hanno più bisogno di capire ed elaborare migliaia di protocolli standard, ma semplicemente accettare istruzioni dal Controller SDN. Figura 2.2 13 Specifiche di uno Switch OpenFlow Cosa ancora più importante, gli operatori e gli amministratori di rete possono programmare la configurazione di questa astrazione di rete semplificata, piuttosto che dover modificare manualmente decine di migliaia di linee di codice di configurazione sparse tra i dispositivi. Tramite lo stato centralizzato del livello di controllo di rete, SDN consente agli amministratori la flessibilità necessaria per configurare, gestire, proteggere e ottimizzare le risorse tramite programmi SDN dinamici e automatizzati. Inoltre, possono scrivere questi programmi autonomamente senza aspettare che le features siano incorporate in ambienti software, proprietari e chiusi, dai fornitori della rete. 2.2 Struttura di SDN Come detto nel paragrafo precedente tramite SDN l’infrastruttura di controllo e quella di inoltro dei dati sono separate, e lo strato di controllo è direttamente programmabile in modo centralizzato. Questo rende necessario che SDN abbia tre interfacce aperte, una in direzione sud, una in direzione nord ed una in direzione est-ovest, come mostrato in figura 2.3. Figura 2.3 14 Specifiche di uno Switch OpenFlow Interfaccia Sud: è l’interfaccia tra lo strato di controllo programmabile e lo strato di inoltro dati. Gli obiettivi delle interfacce sono: - Programmabilità e riconfigurabilità veloce - Condivisione delle risorse in modo che il controller e/o le applicazioni possano accedere alle funzionalità delle stesse utilizzando questa interfaccia. - Isolamento del traffico - Astrazione di rete Interfaccia Nord: è un’interfaccia tra le applicazioni e le infrastrutture di rete (o controller). I requisiti sono: - Fornire informazioni relative al routing, dalle infrastrutture o dai controller di rete per i servizi/applicazioni( topologia della rete, traffico, ritardi, QoS, ecc) - Fornire informazioni relative alla gestione, dalle infrastrutture o dai controller di rete per i servizi/applicazioni ( risorse, uso di energia, manutenzione) - Fornire informazioni relative alla politica, dalle infrastrutture o dai controller di rete per i servizi/applicazioni( controllo accessi, sicurezza ecc) Interfaccia Est-Ovest: è un’interfaccia tra controller che ha come obbiettivi l’intradominio, l’inter-dominio, scalabilità, interoperabilità ecc. 2.3 NOX Il tipico sistema operativo di rete impiegato nelle reti OpenFlow è NOX che è conforme a tutte le specifiche per il raggiungimento in un controllo totalmente centralizzato della 15 Specifiche di uno Switch OpenFlow rete. NOX utilizza la natura dinamica delle reti di dati: i flussi arrivano e partono, gli utenti vanno e vengono, i link possono bloccarsi; tiene traccia dell’evoluzione di questi stati della rete per una gestione efficace e per le operazioni di controllo. Pertanto NOX fornisce un paradigma di programmazione “guidato da eventi” (event driven). Figura 2.4 La figura 2.4 mostra i principali blocchi logici in cui NOX può essere suddiviso. Nella parte inferiore si possono vedere le funzioni fondamentali di NOX il cui ruolo principale è d interfacciare il sistema con la rete controllata. Questo blocco effettua l’ascolto sulla porta di default, 6633 per rilevare le connessioni degli switch e gestisce direttamente la trasmissione e la ricezione dei messaggi OpenFlow. Il runtime NOX è costituito da componenti in esecuzione che interagiscono per svolgere la funzione di gestione e controllo. Se un componente vuole sfruttare le funzionalità esposte da un altro componente, deve dichiarare questa necessità come una “dipendenza” 16 Specifiche di uno Switch OpenFlow questo meccanismo crea una catena di componenti istanziati. Il paradigma di lavoro NOX è guidato da eventi, il che significa che vi è un insieme di eventi generati nel sistema che si distinguono in due classi principali: Eventi di rete: generati dal blocco centrale NOX dopo la ricezione e al decodifica di messaggi OpenFlow provenienti dalla rete. Eventi di componenti: generati dall’esecuzione dei componenti su un particolare stato interno, che potrebbe essere un sottoinsieme dello stato di rete corrente, o il risultato di una particolare computazione. Ogni componente registra alcuni gestori di evento per implementare una propria logica di controllo. Ad ogni registrazione di un gestore di evento viene associata una priorità, in questo modo gestori con priorità più alta consumeranno per primi l’evento generato. Quando viene attivato un evento, uno scheduler d’evento costruisce una coda di priorità di gestori registrati per quell’evento. A questo punto il controllo su l’evento viene passato al gestore con priorità più alta, che restituisce una “Disposizione” per decidere se l’evento deve essere passato al prossimo gestore a priorità più alta (CONTINUE) o terminare la computazione dell’evento ( STOP ). Questo schema di notifica degli eventi, consente ai componenti di costruire una visione interna della rete a cui possono accedere altri componenti per mezzo di API pubbliche fornite dal componente stesso. Pertanto l’insieme di variabili interne dei componenti e le strutture dati in fase di esecuzione costituiscono una wide-view della rete che non è centralizzata ma si sviluppa su tutti il set di componenti. 17 Specifiche di uno Switch OpenFlow I componenti più importanti offerti da NOX sono: - Stato di rete: insieme di componenti che memorizzano le informazioni sullo stato della rete, come le caratteristiche dei nodi fornite durante le fasi di registrazione. - Stato degli Host: insieme di componenti che offrono una serie completa di funzionalità per il monitoraggio degli host e la gestione della mobilità, consentendo ai servizi di contesto e di posizione di essere supportati. - Routing: Componente chiave che stima i cammini tra ogni coppia sorgentedestinazione nella rete. Fornisce un’API per l’installazione dei flussi sui percorsi stimati. In genere, quando viene rilevato un nuovo flusso in entrata alla rete, siamo in grado di recuperare il percorso più breve dal componente di routing e utilizzando le API fornite, inserire il flusso nella flow-table di ogni nodo lungo il percorso. I percorsi più brevi sono calcolati sulla base del monitoraggio degli host e le informazioni sulla topologia. - Topologia: Aggiorna dinamicamente le strutture dati appropriate, per mantenere una snapshot in tempo reale della topologia della rete. Gli aggiornamenti della topologia sono segnalati sia dagli switch OpenFlow ( quando un nodo viene registrato al controller ) o da altri componenti. 2.4 Le Reti OpenFlow OpenFlow è la prima interfaccia di comunicazione standard definita tra lo strato di controllo e quello di inoltro di una architettura SDN. OpenFlow permette l’accesso diretto e la manipolazione dell’infrastruttura di inoltro nei dispositivi di rete quali switch e router, sia fisici che virtuali. 18 Specifiche di uno Switch OpenFlow Come mostrato in figura 2.5 una rete OpenFlow è composta da tre componenti principali. Una serie di switch OpenFlow gestiti; ogni switch OpenFlow fornisce l’astrazione della flow-table, una struttura di dati semplice ma potente che permette ai controller di gestire i pacchetti che scorrono attraverso i router/switch utilizzando un set di funzioni di base comuni alla maggior parte delle piattaforme dei dispositivi. Tali funzioni sono: inoltrare un pacchetto ad una data porta, incapsulare e trasmettere un pacchetto al controller e diminuire i pacchetti di un flusso. Dal momento che tali funzioni di base sono comuni alla maggior parte dei dispositivi, OpenFlow può essere implementato idealmente in ogni switch/router commerciale. Le flow-table attuate negli switch rappresentano il piano di inoltro dei dati del nodo e sono scritte in remoto attraverso il protocollo OpenFlow. Figura 2.5 Uno o più Controller, ciascuno in esecuzione sul sistema operativo di rete NOX. NOX è responsabile della costruzione di una “Wide-View” della rete, fornendo alle applicazioni 19 Specifiche di uno Switch OpenFlow di controllo un mezzo utile per l’interazione con la rete. Dal lato della rete NOX riceve le notifiche degli eventi utilizzati per costruire la wide-view di rete; nell’altra direzione traduce le istruzioni ad alto livello emesse da processi dell’infrastruttura di controllo in istruzioni specifiche di un determinato protocollo OpenFlow mirato a modificare lo stato attuale dell’infrastruttura dati. Dal lato del controller, NOX offre una visione astratta della rete, un’interfaccia di programmazione per gestire tale astrazione e le funzioni per influenzare lo stato della rete (attraverso il protocollo OpenFlow). Un’istanza del livello di virtualizzazione FlowVisor proprio, trai i controller e la rete. FlowVisor permette alla rete di essere controllata da molti controller contemporaneamente. Questo strato appare invisibile sia ai controller che agli switch OpenFlow (credendo di essere controllati da un unico controller). 20 Specifiche di uno Switch OpenFlow Capitolo 3: Switch OpenFlow Uno switch è un dispositivo di rete che lavora al livello 2 dello stack OSI, simile ad un hub ma è dotato d intelligenza per ottimizzare la comunicazione sulla rete: memorizza in una sua cache l’indirizzo fisico delle interfacce collegate ad ogni connettore, in modo da far diminuire drasticamente le collisioni, in quanto un pacchetto inviato da un’interfaccia verso un’altra interesserà soltanto i connettori del mittente e del destinatario, mentre le altre interfacce non si accorgono neanche della comunicazione. 3.1 Aspetti Generali L’idea alla base del design degli switch OpenFlow è quella di sfruttare il fatto che i più moderni switch e router sono provvisti di flow-table che funzionano a “velocità di linea” per eseguire, più o meno complesse funzionalità dell’infrastruttura di inoltro dati, come ad esempio firewall, NAT, QoS e per raccogliere statistiche. Un’implementazione OpenFlow è basata su: - Una flow-table, con un’azione associata a ciascun ingresso di flusso, per dire allo switch come elaborare il flusso. 21 Specifiche di uno Switch OpenFlow - Un canale sicuro basato su SSL che collega lo switch al controller remoto, che consente l’invio dei messaggi OpenFlow tra controller e switch utilizzando il protocollo OpenFlow. - Protocollo OpenFlow, che fornisce un modo aperto e standard ai controller per comunicare con i nodi della rete open. Il protocollo OpenFlow rappresenta un set standard d’istruzioni che consente ai controller di rete di leggere e scrivere il dataplane della rete in maniera indipendente dalla tecnologia. Uno switch OpenFlow, come suggerisce il nome, lavora aggregando e gestendo il traffico come flussi. Il concetto di flusso può essere generalmente definito. Per esempio, un flusso può essere una connessione TCP, o tutti i pacchetti che corrispondono a un determinato indirizzo MAC o IP di origine, o tutti i pacchetti con lo stesso ID WLAN, o tutti i pacchetti della stessa porta fisica di uno switch. Adottare una soluzione che si basa sul concetto di flusso ha la buona caratteristica di adattarsi fisicamente a dispositivi di rete a circuit-network e quindi estende la portabilità di OpenFlow al di là dei confini delle reti packet-switched. 3.2 Funzioni Base Il set delle funzioni base che la maggior parte degli switch devono supportare sulle loro piattaforme per eseguire l’astrazione di switch OpenFlow sono le seguenti: 22 Specifiche di uno Switch OpenFlow - Inoltrare i pacchetti di un determinato flusso verso una data porta o porte. Questo permette ai pacchetti di essere instradati attraverso la rete. Nella maggior parte degli switch questo dovrebbe avvenire a “velocità di linea”. - Incapsulare e inoltrare i pacchetti di un determinato flusso ad un controller. Il pacchetto viene consegnato al canale SSL, dove viene incapsulato e inviato al controller. Ciò avviene tipicamente per il primo pacchetto in un nuovo flusso, quindi il controller può decidere se il flusso deve essere aggiunto alla flow-table. Tuttavia siamo in grado di istruire gli switch per inviare esplicitamente ad un controller i pacchetti di un determinato flusso. Una applicazione specifica può imporre che il traffico http degli utenti appartenenti ad uno specifico intervallo di indirizzi IP debba passare attraverso un server proxy, quindi una volta che il primo paccheto di quel flusso viene inviato al controller, sarà impostato il percorso corretto in ogni switch appartenente al percorso relativo a tale flusso, - Eliminare i pacchetti di un determinato flusso. Può essere utilizzato per funzioni di sicurezza, scopi di virtualizzazione ( evitare il sovraccarico della CPU generato di nuovi flussi trasmessi al controllore ) o per altri obiettivi specifici. L’intestazione del flusso è mostrata in figura 3.1: Figura 3.1 Un flusso TCP può essere specificato da tutti e dieci i campi, mentre il flusso IP potrebbe non includere le porte di trasporto nella sua definizione. 23 Specifiche di uno Switch OpenFlow 3.3 Porte OpenFlow Le porte OpenFlow sono l’interfaccia di rete attraverso la quale vengono inoltrati i pacchetti tra lo switch OpenFlow e il resto della rete. Gli switch OpenFlow sono logicamente connessi gli uni con gli altri attraverso le loro porte OpenFlow; un pacchetto può essere spedito da uno switch OpenFlow ad un altro, soltanto attraverso una porta OpenFlow detta di output. Uno switch OpenFlow, inoltre, rende disponibili una serie di porte per effettuare delle operazioni sul flusso. L’insieme di porte non può essere identico al set di interfacce di rete fornite dagli switch, alcune di esse possono essere disabilitate per OpenFlow, ma lo switch potrebbe definirne altre addizionali. I pacchetti OpenFlow sono ricevuti sulla porta di ingresso detta ingress port ed elaborati dalla OpenFlow pipeline che consiste in un’astrazione mappata negli attuali hardware degli switch e definisce come i pacchetti interagiscono con le tabelle di flusso. Tale pipeline può trasmetterli verso una porta d’uscita, detta output port. OpenFlow pipeline può decidere di inviare il pacchetto verso una output port usando la cosiddetta output action che definisce come i pacchetti ritornano indietro nella rete. Uno switch OpenFlow deve supportare tre tipi di porte: Fisiche, Logiche e Riservate. - Le porte fisiche sono porte definite dallo switch e corrispondono ad un’interfaccia hardware. Per esempio, su uno switch Ethernet, le porte fisiche mappano one-to-one verso le interfacce Ethernet. - Le porte logiche non corrispondono direttamente ad un’interfaccia hardware. Appartengono ad un livello di astrazione più alto e possono essere definite in switch che non usano OpenFlow. Includono l’incapsulamento dei pacchetti. L’elaborazione effettuata dalle porte logiche deve essere trasparente a quella effettuata da OpenFlow 24 Specifiche di uno Switch OpenFlow e devono interagire con esso come le porte fisiche. L’unica differenza con le porte fisiche è che un pacchetto associato con una porta logica può avere un campo extra nella pipeline detto Tunnel-ID associato ad essa. Quando un pacchetto ricevuto su una porta logica è inviato al controller, entrambe le sue porte logiche e quelle fisiche sottostanti, sono riportate al controller. - Le porte riservate specificano generiche azioni di inoltro come ad esempio l’invio al controller, flooding, o l’inoltro senza usare OpenFlow. Uno switch non è obbligato a supportare tutte le porte riservate, ma solo quelle che sono marcate con Required. Uno switch OpenFlow può aggiungere o rimuovere porte in ogni momento. Lo switch può cambiare lo stato di una porta basato sul meccanismo sottostante, per esempio se il link si perde. Ogni cambiamento di porte, deve essere comunicato al controller. Il controller può cambiare la configurazione delle porte. Tali operazioni, non alterano il contenuto delle tabelle di flusso. Pacchetti inoltrati verso porte non esistenti sono droppati. Se una porta è cancellata e il suo numero è riusato successivamente per una differente porta fisica o logica, tutte le rimanenti entrate dei flussi ancora referenziano quel numero di porta, con risultati indesiderati. Per questo, quando una porta è cancellata è abbandonata dal controller e vengono pulite tutte le entrate di flusso che referenziano quella porta, se necessario. 25 Specifiche di uno Switch OpenFlow 3.4 OpenFlow Tables Figura 3.2 La pipeline di ogni switch OpenFlow contiene una o più tabelle di flusso e ognuna di esse contiene più flow entries. L’elaborazione della pipeline definisce come i pacchetti interagiscono con queste tabelle di flusso (Figura 3.3). Uno switch OpenFlow possiede almeno una tabella di flusso a opzionalmente ne può avere altre. Figura 3.3 26 Specifiche di uno Switch OpenFlow Uno switch OpenFlow con una sola tabella è corretto e in questo caso l’elaborazione da parte della pipeline è notevolmente semplificata. Le tabelle di flusso sono sequenzialmente numerate, partendo da 0. La pipeline spesso parte dalla prima tabella di flusso: il pacchetto è prima confrontato con le flow entires della flow table 0. Altre tabelle potrebbero essere usate a seconda del risultato dei confronti precedenti. Quando un pacchetto è elaborato da una tabella di flusso è confrontato con le flow entires della tabella per selezionarne una. Figura 3.4 Se viene trovata una flow entry, il set di istruzioni incluse in tale flow entry è eseguito. Queste istruzioni potrebbero esplicitamente indirizzare il pacchetto verso un’altra flow table (usando il Goto- Table Instruction), dove lo stesso processo è ripetuto ancora. Una flow entry può solo indirizzare un pacchetto verso una tabella di flusso con un numero 27 Specifiche di uno Switch OpenFlow che è più grande del suo, in altre parole, la pipeline può solo inoltrare in avanti e non indietro. Se un pacchetto non corrisponde a una flow entry di una tabella, si verifica un table miss. Il comportamento di un table miss, dipende dalla configurazione della tabella. Le istruzioni incluse nella flow entry di una table miss nella tabella di flusso, possono essere specificate in maniera flessibile, come delle elaborazioni di pacchetti non riconosciute e alcune opzioni consentono di scartarli, passandoli ad un’altra tabella o inviandoli a dei controller tramite messaggi specifici. Analizziamo più in dettaglio una tabella di flusso. Come abbiamo accennato, essa è composta da flow entries. Figura 3.5 Ogni flow entry contiene: - Match fields: per confrontare i pacchetti. - Priority: per la precedenza delle flow entry. - Counters: aggiornato quando i pacchetti sono abbinati. - Instructions: per modificare il set di azioni o l’elaborazione della pipeline. - Timeouts: massima quantità di tempo o di inattività prima che il flusso sia abbandonato dallo switch. - Cookie: dato opaco scelto dal controller. Potrebbe essere usato dal controller per filtrare le flow entries affette da modifiche o da richieste di cancellazione. Non usato quando i pacchetti sono in fase di elaborazione. - Flags: flags dopo il modo in cui sono gestite le flow entries. 28 Specifiche di uno Switch OpenFlow Una flow entry di una tabella è identificata dal campo match e priority: questi due campi presi insieme identificano un’unica flow entriy in una specifica tabella di flusso. Una flow entry che omette tutti i campi a ha priorità 0 è chiamata: table miss flow entry. 3.5 Istruzioni e Azioni Ogni flow entry contiene un set di istruzioni che sono eseguite quando un pacchetto le soddisfa. Ad uno switch non è richiesto di supportare tutti i tipi di istruzioni, ma solo quelle marcate con “Required Instruction”. Il controller può anche domandare allo switch quali istruzioni Opzionali (Opzional Instruction) supporta. Vediamo alcune istruzioni. - Optional Instruction: Meter_id: indirizza il pacchetto verso la specifica metrica. Dal risultato della metrica, il pacchetto potrebbe essere scartato. La metrica è un elemento dello switch che può misurare e controllare il rate del pacchetto. - Optional Instruction: Apply – Actions: Applica la specifica azione immediatamente, senza nessun cambiamento al set di azioni. Questa istruzione potrebbe essere usata per modificare - il pacchetto tra due tabelle o per eseguire multiple azioni dello stesso tipo. Le azioni sono specificare in una lista apposita. - Optional Instruction: Clear – Actions: Cancella tutte le azioni immediatamente. - Required Instruction: Write – Actions: Fonde il set di azioni specificato nel set di azione corrente. Se un azione di un dato tipo esiste nel set corrente, la sovrascrive, altrimenti la aggiunge. 29 Specifiche di uno Switch OpenFlow - Optional Instruction: Write – Metadata: Scrive il valore del metadato, nel campo metadato. - Required Instruction: Goto – Table: Indica la tabella successiva per l’elaborazione della pipeline. L’id della tabella deve essere più grande di quello della tabella corrente. Le flow entries dell’ultima tabella della pipeline non possono includere questa istruzione. Switch OpenFlow con una sola tabella non implementano tale istruzione. Le istruzioni associate ad una flow entry contengono massimo un’istruzione per ogni tipo e vengono eseguite in ordine specificato dalla lista sottostante. In pratica, gli unici vincoli sono che le istruzioni di metrica sono eseguite prima delle Apply –Actions e che le Clear –Actions eseguite prima delle Write – Actions e che le Goto –Table siano eseguite per ultime. Uno switch deve rigettare una flow entry se non può eseguire le istruzioni o parte di istruzioni associate con la flow entry. In questo caso, lo switch deve ritornare un messaggio di errore. Un set di azioni è associato ad ogni pacchetto. Tale set è vuoto di default. Una flow entry può modificare il set usando l’istruzione Write – Action o Clear – Action. Il set di azioni è trasportato tra le varie tabelle di flusso. Quando in un set di istruzioni di una flow entry non è presente l’istruzione Goto – Table, la pipeline si ferma e le azioni contenute nell’actions set del pacchetto sono eseguite. Tutte le azioni sono memorizzate in una List of Actions. Esse sono eseguite in un ordine specificato da tale lista. L’esecuzione inizia con la prima azione, le altre sono eseguite in maniera sequenziale. L’effetto è cumulativo, ad esempio se la lista contiene due Push VLAN actions , allora due VLAN headers sono 30 Specifiche di uno Switch OpenFlow aggiunti al pacchetto. Ad uno switch è consentito non supportare tutte le azioni, ma solo quelle marcate come Required Action. Il controller può anche chiedere allo switch quali azioni opzionali dette Optional Action, supporta. - Required Action: Output port_no: Invia il pacchetto verso una specifica porta OpenFlow. - Required Action: Group_id: Elabora il pacchetto attraverso lo specifico gruppo. L’esatta interpretazione dipende dal tipo di gruppo. - Required Action: Drop: Non esiste una specifica azione che rappresenta lo scarto dei pacchetti. Infatti, i pacchetti che non hanno delle output action o group action dovrebbero essere scartati. Questo avviene quando c’è un set di istruzioni vuoto o dopo aver eseguito un Clear – Actions. - Optional Actions: Set – Queue_id: Seleziona la coda in base al suo id, per un pacchetto. Quando un pacchetto è spedito verso una porta usando la output action, l’id della coda determina quale coda in questa porta è usata per schedulare o inoltrare il pacchetto. - Optional Actions: Set - Field: Le azioni di questo tipo sono identificate dal tipo di campo e modificano il valore del rispettivo header nel pacchetto. Non è strettamente richiesto, ma il supporto a riscrivere vari header usando tale azione incrementa notevolmente l’utilità dell’implementazione di OpenFlow. 31 Specifiche di uno Switch OpenFlow 3.6 OpenFlow Switch Protocol Tale protocollo supporta tre tipi di messaggi, controller-to-switch, asynchronous e symmetric, ognuno con più sotto tipi. Controller-to-switch sono inizializzati dal controller e usati per gestire e monitorare lo stato dello switch. I messaggi asincroni sono inizializzati dallo switch e usati per aggiornare il controller di eventuali cambiamenti della rete o dello switch. I messaggi simmetrici sono inizializzati dallo switch o dal controller e inviati senza una particolare sollecitazione. 1) Controller-to-Switch I messaggi di questo tipo sono lanciati dal controller e potrebbero richiedere o no il responso dello switch. Features: Il controller potrebbe richiedere richieste di identità e di capacità di uno switch inviando una features request; lo switch deve rispondere con un features reply che specifica l’identità e le capacità di base dello switch. Configuration: Il controller è abilitato a settare e richiedere dei parametri di configurazione. Lo switch risponde alla query. Modify-State: Tali messaggi sono inviati dal controller per gestire lo stato degli switch. Lo scopo primario è aggiungere, cancellare e modificare le flow/group entries nelle tabelle OpenFlo e settare le proprietà delle porte di uno switch. Read-State: Messaggi usati dal controller per collezionare varie informazioni dallo switch, come ad esempio la corrente configurazione, statistiche e capacità. 32 Specifiche di uno Switch OpenFlow Packet-out: Usati dal controller per inviare pacchetti fuori una specifica porta dello switch e per inviare pacchetti ricevuti tramite messaggi di Packet-in. I messaggi di Packet-out devono contenere un intero pacchetto o un area di buffer identificata da un id che contiene il pacchetto. Il messaggio deve contenere anche una lista di azioni da applicare nell’ordine specificato dalla lista; se la lista è vuota, il pacchetto è scartato. Barrier: Usati dal controller per garantire che le dipendenze dei messaggi siano state rispettate o ricevere notifiche a valle di operazioni completate. Role-Request: Usati dal controller per settare il ruolo del suo canale OpenFlow, o richiedere tale ruolo. Utile quando uno switch è connesso a controller multipli. Asynchronous-Configuration: Usati dal controller per settare un filtro addizionale ai messaggi asincroni che vorrebbe ricevere dal suo canale OpenFlow o richiedere tale filtraggio. Utile quando uno switch è connesso a più controller. 2) Asynchronous I messaggi asincroni sono inviati da uno switch senza sollecitare il controller. Gli switch inviano tali messaggi ai controller per denotare l’arrivo di un pacchetto, il cambiamento di stato di uno switch o un errore. I quattro messaggi asincroni principali sono: Packet-in: Trasferisce il controllo del pacchetto al controller. Inoltre tali messaggi possono essere configurati per bufferizzare pacchetti. Quando è in questa modalità e lo switch ha sufficiente memoria per bufferizzarli, il messaggio di packet-in contiene solo qualche frammento dell’header del pacchetto e un identificativo del buffer usato dal controller quando è pronto per inoltrare il pacchetto. Se un pacchetto è 33 Specifiche di uno Switch OpenFlow bufferizzato, il numero di bytes del pacchetto originale può essere configurato. Di default esso è 128 bytes. Flow-Removed: Informa il controller circa la rimozione di flow entry dalla tabella di flusso. Port-Status: Informa il controller di un cambiamento in una porta. Questi eventi includono cambiamenti nella configurazione delle porte per esempio se è chiusa direttamente da un utente o quanto un link si interrompe. Error: Lo switch è abilitato a notificare al controller i problemi usando messaggi di errore. 3) Symmetric I messaggi simmetrici sono inviati senza sollecitazione in entrambe le direzioni. Hello: Inviati tra lo switch e il controller per una connessione inziale. Echo: Echo request/reply, può essere inviata dallo switch o dal controller e deve sempre avere una risposta di echo reply. Usati maggiormente per verificare la connessione di un controller o switch e usato per misurare la latenza e la larghezza di banda. Experimenter: Offre funzionalità aggiuntive e ne sperimenta nuove che possono essere introdotte in versioni future di OpenFlow. 34 Specifiche di uno Switch OpenFlow Conclusioni In questo elaborato si è voluto presentare lo switch OpenFlow e le sue specifiche. In particolare è stato descritto OpenFlow e l’enorme vantaggio che esso apporta alle reti. Ci si aspetta che questo protocollo venga ampliamente sviluppato in futuro per consentire un miglioramento negli attuali protocolli di instradamento e per realizzarne nuovi. Con OpenFlow è possibile effettuare una rapida valutazione delle prestazioni e un testing con tempistiche molto ridotte. L’unico svantaggio che si può riscontrare è che per un corretto funzionamento è stata riscontrata la necessità di un numero elevato di flow entries per ogni host. 35 Bibliografia [1] Sito ufficiale OpenFlow http://www.openflow.org/ [2] Specifica OpenFlow http://www.openflow.org/documents/openflow-spec-v1.1.0.pdf [3] Sito ufficiale NOX/POX http://noxrepo.org/wp [4] Tutorial OpenFlow http://www.openflow.org/wx/index.php/OpenFlow_Tutorial [5] Wiki OpenFlow http://www.OpenFlow.org/wk/index.php [6] Nick McKeown, “Software-defined Networking”, Infocom Keynote Talk, April 21st 2009. http://tiny-tera.stanford.edu/~nickm/talks.html [7] OpenFlow white paper http://www.OpenFlow.org/documents/OpenFlow-wp-latest.pdf 36
© Copyright 2024 Paperzz