2.1 Open Flow
2.1 Open Flow
Výraz OpenFlow (OF) označuje prvé štandardizované komunikačné rozhranie definované medzi riadiacou rovinou a rovinnou preposielania v rámci architektúry SDN. V súčasnosti je OpenFlow najpopulárnejší protokol používaný na komunikáciu medzi riadiacou rovinou a rovinou preposielania paketov a stal sa de facto štandardom.
Jadrom OpenFlow špecifikácií je prepínač, t.j. zariadenie spracovávajúce paket. Prepínač spracováva pakety na základe obsahu paketu a nakonfigurovaného stavu prepínača. Na manipuláciu s nastaveniami prepínača bol navrhnutý OpenFlow protokol, pomocou ktorého riadiaca jednotka, ako hlavná časť riadiacej roviny, komunikuje s viacerými prepínačmi a riadi konfigurácie ich stavov.
Špecifikácia OpenFlow popisuje:
- protokol na komunikáciu medzi OpenFlow riadiacou jednotkou a OpenFlow prepínačom,
- činnosť OpenFlow prepínača.
OpenFlow prepínač
OpenFlow prepínač je neoddeliteľnou súčasťou OpenFlow rozhrania. Pre prácu s OpenFlow protokolom existujú dva typy kompatibilných prepínačov:
- OpenFlow prepínač – podporuje iba OpenFlow operácie, všetky pakety sú spracovávané podľa OpenFlow pravidiel spracovávania.
- Hybridný OpenFlow prepínač - podporuje OpenFlow operácie aj operácie štandardných eternetových prepínačov. Hybridný prepínač povoľuje prechod paketu z režimu OpenFlow spracovania do režimu normálneho spracovania prostredníctvom portov typu NORMAL a FLOOD.
OpenFlow prepínač používa svoj výstupný port na preposielanie paketov na vstupný port iného prepínača alebo zariadenia. Ako vstupné a výstupné porty sa môžu používať iba štandardné porty, medzi ktoré patria fyzické porty, logické porty a vyhradené porty typu LOCAL (ak sú podporované). Vyhradené porty sa delia na povinné a nepovinné a sú definované v špecifikácii OpenFlow [1].
OpenFlow prepínač pozostáva z viacerých časti (Obr. 3) potrebných na spracovanie paketu. Obsahuje jednu alebo niekoľko tabuliek tokov s pravidlami spracovania paketu a tzv. skupinovú tabuľku, ktoré spolu slúžia na vyhľadávanie a spracovanie paketov. Každé pravidlo patrí k určitej podskupine dátovej prevádzky a vykonáva operácie určené pre danú prevádzku. Medzi vykonávané operácie patrí zahodenie paketu, preposlanie paketu alebo preposlanie paketu všetkým dostupným prijímateľom (tzv. flooding).
Podľa pravidiel zavedených riadiacou jednotkou, sa OpenFlow prepínač môže správať ako smerovač, prepínač, firewall, prekladač sieťovej adresy alebo niečo medzi tým.
K ďalším častiam prepínača patrí jeden a viac tzv. OpenFlow kanálov, ktoré sú prepojené s externými riadiacimi jednotkami. Komunikácia medzi prepínačom a riadiacou jednotkou, ako aj riadenie prepínača riadiacou jednotkou, prebieha prostredníctvom OpenFlow protokolu.
Obr. 3 Bloková schema OpenFlow prepínača [1]
Každá tabuľka tokov obsahuje niekoľko záznamov o tokoch (tok, angl. flow, je výraz používaný v OpenFlow pre spojenie, resp. trasu medzi odosielateľom a príjemcom dát) a každý záznam o toku pozostáva z porovnávacích polí, počítadiel a sady inštrukcií, ktoré sa aplikujú na zhodné pakety. OpenFlow protokol umožňuje riadiacej jednotke pridávať, upravovať a odstraňovať záznamy o tokoch v tabuľkách tokov na základe vlastnej iniciatívy, ako aj v rámci odpovede na zaslaný paket. Záznamy o tokoch môžu presmerovať paket na port, ktorý môže byť fyzický, logický, alebo tzv. rezervovaný. Operácie spojené so záznamami o tokoch môžu presmerovať paket na skupinu (angl. Group), ktorá bližšie určí ďalšie spracovanie. Skupiny reprezentujú sady operácií na zaplavenie (flooding) alebo na iný spôsob zložitejšieho smerovania (multipath, fast reroute, link aggregation a pod.). Zároveň skupiny umožňujú záznamom o tokoch preposielanie na bežný nasledujúci uzol, vďaka čomu môžu byť výstupné operácie na záznamoch o tokoch nemenné.
Skupinová tabuľka (Group Table), ako súčasť OF prepínača, obsahuje skupinové záznamy, v ktorých sú zoznamy operácií, líšiace sa podľa typu skupiny. Operácie v jednom alebo viacerých zoznamoch operácií sú použité na pakety odoslané do danej skupiny.
V tabuľke počítadiel (Meter Table) sa nachádzajú záznamy, ktoré určujú počítadlá pre jednotlivé toky. Počítadlá umožňujú implementovať rôzne spôsoby obmedzenia rýchlosti a úrovne kvality služby. Aj keď počítadlá sú úplne nezávislé od čakacích radov na výstupných portov, pre účely zložitejších meraní môžu byť spolu kombinované. Počítadlo meria a riadi rýchlosť paketov. Každý merací záznam je definovaný svojim meracím identifikátorom, meracími rozsahmi a počítadlami
Obr. 4 Vývojový diagram spracovania paketov v logickom prepínači OpenFlow
Postup spracovania paketov v logickom OpenFlow prepínači je znázornený na obr. 4. Spracovanie postupnosti polí vždy začína prvou tabuľkou tokov vstupného (ingress) spracovania (viď Obr. 5). So záznamami o tokoch v prvej tabuľke označenej číslom „0“ je porovnávaný prichádzajúci paket. Použitie ostatných tabuliek tokov vo vstupnom spracovaní závisí od výstupu porovnania paketu s prvou tabuľkou. Po určení výstupného portu preberá prácu s paketom výstupné (egress) spracovanie, ktoré nemusí obsahovať žiadnu tabuľku. Vstupné spracovanie začína s prázdnou sadou operácií. Výstupné spracovanie začína so sadou operácií obsahujúcou výstupnú operáciu pre aktuálny port. Výstupné spracovanie je voliteľné, prepínač ho nemusí podporovať. V takom prípade je paket spracovaný a odoslaný von z prepínača výstupným portom.
V rámci spracovania paketu, je paket porovnávaný s tokovým záznamom príslušnej tabuľky tokov. Tokový záznam obsahuje sadu inštrukcií, ktoré sú vykonané na porovnávanom pakete. Jednou z možností inštrukcií je aj priame presmerovanie paketu do nasledujúcej tabuľky tokov, pričom paket je možné presmerovať iba do tabuľky tokov označenej vyšším číslom ako je číslo odosielajúcej tabuľky.
Obr. 5 Postup spracovania paketov v OpenFlow prepínači [1]
V prípade, že prepínač nenájde vo svojich tabuľkách pre daný paket vhodný záznam, môže ho poslať správou PACKET-IN na riadiacu jednotku. Riadiaca jednotka môže v svojej odpovedi správou PACKET-OUT poslať inštrukcie pre dokončenie spracovania paketu prepínačom a správou FLOW-MOD zadať príkaz na vytvorenie záznamu o novom toku do niektorej z tabuliek na prepínači.
OpenFlow
protokol
V OpenFlow existujú nasledovné tri typy správ:
- z riadiacej jednotky na prepínač - posiela riadiaca jednotka
- asynchrónne - posiela prepínač
- synchrónne - posiela prepínač alebo riadiaca jednotka
V OpenFlow existujú nasledovné tri typy správ:
- z riadiacej jednotky na prepínač - posiela riadiaca jednotka
- asynchrónne - posiela prepínač
- synchrónne - posiela prepínač alebo riadiaca jednotka
Správy posielané z riadiacej jednotky na prepínač:
- Features – požiadavka na zasiela funkcií podporovaných prepínačom
- Configuration– riadiaca jednotka môže nastavovať konfiguračné parametre v prepínači a žiadať o ne. (Prepínač môže iba odpovedať na žiadosti o konfigurácií prijaté od riadiacej jednotky.)
- Modify-State – modifikovanie stavu (primárne slúži na pridanie, odstránenie alebo modifikovanie záznamov vo flow/group tabuľkách a pridanie/odstránenie akčných „bucketov“)
- Read-State –
umožňuje získanie rôznych informácií z prepínača (aktuálnu konfiguráciu,
štatistiky a pod).
- Packet-out –
slúži na poslanie peketu na špecifický výstupný port prepínača a na
preposielanie paketov prijatých správou Packet-in. Správa Packet-out
musí obsahovať:
- kompletný paket alebo ID zásobníka obsahujúceho paket uložený na prepínači,
- zoznam akcií, ktoré budú vykonané v poradí, ako sú špecifikované (ak nie je nič uvedené, paket je zahodený).
- Barrier– správy Barrier žiadosť/odpoveď slúžia na overenie závislosti správ a na overenie ukončenia operácií
- Role-Request – umožňuje riadiacej jednotke nastaviť rolu jeho OpenFlow kanála a ID riadiacej jednotky (ak je k prepínaču pripojených viac riadiacich jednotiek)
- Asynchronous-Configuration – umožňuje riadiacej jednotke nastaviť prídavný filter pre asynchrónne správy
Asynchrónne správy:
- Packet-in – slúži na poslanie paketu z prepínača do riadiacej jednotky. Prepínač si môže uchovávať pakety, v takom prípade sa do riadiacej jednotky posiela iba hlavička paketu a ID zásobníka, kde je paket uložený. Ak si prepínač pakety neuchováva, alebo sa pamäť určená na ukladanie paketov zaplní, posiela riadiacej jednotke celý paket.
- Flow-Removed – slúži na informovanie riadiacej jednotky, že zápis o toku bol z tabuľky tokov vymazaný.
- Port-status – informuje riadiacu jednotku o zmene konfigurácie alebo stavu portu (napr. po reaktivácií portu)
- Role-status – informuje riadiacu jednotku o zmene jeho role (napr. z master na slave)
- Controller-Status - informuje riadiacu jednotku o zmene stavu OpenFlow kanála. Posiela sa všetkým riadiacim jednotkám (uľahčuje riešenie problému pri strate možnosti vzájomnej komunikácie.)
- Flow-monitor – informuje riadiacu jednotku o zmene v tabuľke tokov. Riadiaca jednotka môže definovať súbor ukazovateľov na sledovanie zmien v tabuľkách tokov
- Hello – uvítacie správy vymieňané medzi prepínačom a riadiacou jednotkou.
- Echo – správy medzi prepínačom a riadiacou jednotkou používané na overenie funkčnosti spojenia, prípadne na meranie oneskorenia a prenosového pásma (prijímacia strana musí vždy poslať potvrdenie)
- Error – informujú o probléme na strane odosielateľa správy. Zvyčajne ju posiela prepínač, ak nemohol vykonať príkaz zaslaný riadiacou jednotkou.
- Experimenter - určené na experimentálne účely, resp. implementovanie nových funkčností.