• Non ci sono risultati.

Tabelle e Pipeline di elaborazione dei pacchetti

Capitolo 2 Software-defined Networking

2.2 OpenFlow

2.2.3 Tabelle e Pipeline di elaborazione dei pacchetti

Le pipeline sono gli strumenti messi a disposizione dallo standard che con- sentono di agire sul traffico. Il traffico passante per uno switch OpenFlow viene trasportato attraverso l’impiego di due canali, o pipeline, che si

47 occupano di elaborarlo. Le pipeline sono chiamate rispettivamente Ingress

processing e Egress processing, la prima rappresenta un canale per il traffico

in entrata mentre la seconda si occupa del canale in uscita, la seconda pipe- line, introdotta nell’ultima versione del protocollo, è opzionale.

Figura 21 - Pipeline di elaborazione dei pacchetti.

Come illustrato in Figura 21 il processamento del traffico viene gestito da una serie di tabelle chiamate Flow Table. Le voci in questa tabella, chiamate

Flow Entry, sono delle regole a cui è associato un Instruction-Set che corri-

sponde ad un insieme di azioni che dovranno essere eseguite in caso di corri- spondenza con la specifica Flow Entry. Queste istruzioni possono andare a costruire e manipolare un insieme di azioni, denominato Action-Set, la cui applicazione al termine della pipeline realizza l’elaborazione effettiva del traffico.

Quando un pacchetto giunge ad una qualsiasi porta di ingresso, viene in- serito nella pipeline di ingresso, in questa pipeline deve esserci sempre al- meno una Flow Table di ingresso denominata “0” a cui è possibile concate- nare una o ulteriori tabelle, da questa configurazione deriva il termine pipe- line. La Flow Table non è altro che un contenitore logico in cui organizzare diverse regole, o Flow Entry, le quali svolgono l’effettiva elaborazione dei pacchetti. Alla fine di ogni Flow Table, è possibile definire anche una Flow

Entry speciale chiamata Table-Miss che entrerà in gioco quando non è stata

trovata alcuna corrispondenza per quel particolare pacchetto. La struttura di una Flow Entry è costituita dai seguenti elementi:

48

• Match fields: si specificano le caratteristiche che il pacchetto deve avere affinché possa essere trovata una corrispondenza con la Flow

Entry in questione.

• Priority: stabilisce una relazione d’ordine tra le diverse Flow En-

try.

• Counters: contatore aggiornato ogni volta che viene trovata una corrispondenza tra un pacchetto e la Flow Entry corrente.

• Instructions: istruzioni da eseguire in caso di match, possono avere effetto immediato o essere inserite nell’Action-Set.

• Timeouts: tempo massimo di validità o di inattività dopo il quale il flow viene considerato non più valido dallo switch.

• Cookie: informazione non utilizzata per l’elaborazione dei pac- chetti. È un valore opaco scelto dal controller, può essere utilizzato da quest’ultimo per filtrare le Flow Entry che presentano determi- nate statistiche o che sono interessate da richieste di modifica o di eliminazione.

• Flags: alterano le modalità con le quali le Flow Entry sono gestite.

È possibile identificare univocamente una Flow Entry attraverso i campi

Match Fields e Priority in particolare nel primo sono definiti quei parametri

utilizzati per discriminare l’appartenenza di un pacchetto ad una determinata

Flow Entry e quindi di capire cosa filtrare, come e con quale granularità. I

parametri configurabili sono numerosi; la specifica infatti ne definisce 44, non è necessario definirli tutti ma solo il sottoinsieme utile a riconoscere il pacchetto che varia da caso a caso. Un pacchetto viene associato ad una de- terminata Flow Entry se e solo se soddisfa tutte le condizioni specificate nel campo Match Fields. Alcuni di questi parametri sono:

• Porta di ingresso dello switch. • Indirizzo Ethernet di destinazione. • Indirizzo Ethernet sorgente. • VLAN ID.

• Indirizzo IPv4/IPv6 sorgente/destinazione. • Porta UDP sorgente/destinazione.

49 • Flag TCP.

• Codice ICMP. • Tipo ICMPv6.

Il campo Priority entra in gioco in caso di corrispondenza sovrapposta su più Flow Entry e specifica quale Flow Entry abbia precedenza sull’altra. A questo campo è associato un valore di 2 byte, pertanto è possibile definire fino a 65535 possibili priorità. Al valore maggiore corrisponde una priorità maggiore. Una volta determinata la Flow Entry di appartenenza per un pac- chetto, viene incrementato il valore del campo counter della Flow Entry. Suc- cessivamente si eseguono le Instruction contenute nel rispettivo campo. Le azioni possibili sono diverse, si possono ad esempio effettuare modifiche al pacchetto, inoltrarlo verso un’altra Flow Table, modificare il suo Action-Set o operare su altri metadati. Per quanto riguarda l’invio del pacchetto ad altre

Flow Table, è importante specificare che non è mai possibile far tornare un

pacchetto in una tabella precedente e logicamente le Flow Entry dell’ultima tabella non potranno mai inviare il pacchetto ad un’altra tabella. La gestione dell’Action-Set è fondamentale in questa fase, in quanto all’interno di questo insieme vengono accumulate tutte le elaborazioni da effettuare sul pacchetto, prima di concludere il suo percorso nella pipeline. Una volta che il pacchetto ha terminato il suo percorso all’interno della pipeline è pronto per essere ela- borato dallo switch. L’Action-Set durante l’attraversamento è stato incremen- tato, decrementato e ripulito nel numero di volte stabilito dalle Instruction presenti nelle Flow Entry. Le azioni da svolgere sul pacchetto devono essere eseguite nell’ordine stabilito a monte. Alcune di queste azioni sono:

• Copy TTL inwards: copia il valore Time To Live dall’header più esterno all’header successivo più vicino; ad esempio da un header IP ad un altro, da un header MPLS ad un altro oppure da un header MPLS ad uno IP.

• Copy TTL outwards: copia il valore Time To Live dall’header di riferimento all’header più esterno; ad esempio da un header IP ad un altro, da un header MPLS ad un altro oppure da un header IP ad uno MPLS.

• Push/Pop MPLS: rimuove l’header MPLS dal pacchetto cor- rente.

• Push MPLS: inserisce un header MPLS nel pacchetto corrente. • Decrement IPv4 TTL: decrementa il valore di Time To Live

50

• Set IPv4 Source Address, Set IPv4 Destination Address, Set Ipv4 ToS bits, Set IPv4 ECN bits: sostituiscono i campi appro- priati nell’header IP più esterno e aggiorna il valore di checksum. • Output to Switch Port: porta da utilizzare per l’inoltro in uscita

del pacchetto.

Tra queste azioni eseguibili ci sono ad esempio la manipolazione dei TTL, il pop e il push di alcune tipologie di tag come VLAN e MPLS e soprattutto l’inoltro del pacchetto in uscita per mezzo delle azioni Group e Output.