In una SDN sono presenti due flussi, Verso la forwarding table vanno i pacchetti utente Verso il controller vanno i pacchetti di controllo
La parte di controllo consiste in una RIB ovvero Routing Information Base
Dallo switch contenente la forwarding table, i pacchetti vengono inviati alla tabella dello switch, che comunica con il controllore.
L'interfaccia dal controllore al campo (insieme di nodi che gestiscono i pacchetti) viene chiamata southbound Per gli switch abbiamo una quasi commoditizzazione dovuta dal fatto che i diversi switch hanno caratteristiche simili e prezzo simile che varia in base al costo dei pezzi utilizzati. I controllori invece essendo oggetti monolitici, si differenziano molto in base al vendor e l'interfaccia northbound (interfaccia di controllo del controllore) varia in base al marchio.
Se adotto un controllore per switch la rete ha una resistenza ai guasti Se invece avessi un controllore unico, la funzionalitá della rete dipende da quel singolo nodo.
La pratica adottata é utilizzare piú controllori per vari switch, che comunicano tra di loro tramite l'interfaccia east-west.
Anche per questa interfaccia ci sono diverse soluzioni in base al vendor, ma presumendo che una rete venga composta da controllori della stessa marca, il protocollo proprietario tra due controllori funziona.
Il protocollo openflow é uno standard, non IEEE, non IETF, open non sta per open source ma per il fatto che chiunque puó usare lo standard senza pagare royalties. Esso definisce:
La versione a cui facciamo riferimento é la V.1.3 (2012)
, la V1.0 prevedeva un unica tabella
di packet classification
La versione attuale V.1.5 (2015) presenta nuove funzionalitá interessanti ma sono ancora troppo
recenti per essere adottate dai vari prodotti.
I pacchetti entrano dalle porte di ingresso e finiscono in una pipeline Pipeline:
Le Flow Table sono tabelle che fanno il match sui pacchetti e possono eseguire delle azioni. Il pacchetto che arriva porta con se un action set inizialmente vuoto. La tabella, per ogni pacchetto puó aggiungere delle azioni all'action set di quest'ultimo. La tabella ha come input per ogni pacchetto:
Le istruzioni possono consistere in "saltare ad una tabella m" o saltare all'uscita. All'uscita vengono eseguite tutte le azioni presenti nell'action set.
Inoltre é presente il client openflow e una group table La group table contiene dei cambiamenti da applicare globalmente a tutti i flussi del gruppo.
Se un pacchetto non effettua il match su nessuna riga, viene attivata una regola di default se presente, altrimenti il pacchetto va scartato.
Le porte fisiche (per INPUT e OUTPUT) Le porte logiche (per INPUT e OUTPUT) sono differenti dalle porte fisiche per il fatto che una singola porta fisica puó essere divisa in piú porte logiche per la gestione di diversi flussi.
Tipicamente con una tipologia a stella voglio comunicare tra due estremi senza passare per il centro e per questo posso usare dei protocolli speciali di livello 2.
Spesso per aumentare la velocitá di collegamento tra due link conviene usare piú collegamenti fisici piuttosto che comprarne uno di capacitá superiore. Normalmente lo spanning-tree spegnerebbe tre delle 4 porte ma posso aggregare i link in modo che lo switch li veda come un unico collegamento ed evito problemi di loop.
Le porte all (solo OUTPUT) che copiano il pacchetto su tutte le uscite (tranne la porta di ingresso), questo implementa il broadcast ethernet.
La porta controller (per input o output), che incapsula il pacchetto nel protocollo openflow e lo spedisce al controller.
La porta any Usata solo nei match
La porta local Usata solo se lo swtich viene collegato come un host, ovvero reindirizza il pacchetto ai livelli superiori dell'host su cui é implementato lo switch.
é presente all'interno della pipeline é una lista di tante flow entry
Match fields | Prioritá | Contatori | Istruzioni | Timeout | Cookie |
---|
I match fields possono essere:
Questi match possono solo essere esatti (o wildcard) Quindi non possono essere implementate tabelle di routing IP. La prioritá determina a paritá di match quale regola si attiverá. I timeout servono per far scadere le regole Possono essere:
Il cookie é un identificativo scelto univocamente per la regola. Servono per indicare una specifica regola nei comandi openflow.
La tabella con indice massimo non puó avere istruzione GOTO, questo garantisce che il pipeline finisca per ogni pacchetto.