Elaborato Cacace Maurizio N46-000577

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