Protokół OpenFlow
Dużym wyzwaniem pozostaje standaryzacja pomiędzy rozwiązaniami różnych producentów, co opóźnia popularyzację SDN. Przykładowo, brakuje jednego API stosowanego przez wszystkich dostawców. Ten kluczowy problem można rozwiązać, korzystając z nowych rozwiązań, jak OpenFlow. Trzeba jednak pamiętać, że ten projekt jest jeszcze we wczesnej fazie rozwoju i jego stosowanie w środowiskach produkcyjnych może budzić obawy o niezawodność działania. Z drugiej strony OpenFlow jest już implementowany przez producentów w komercyjnych przełącznikach, routerach czy punktach dostępowych Wi-Fi, co jest dobrym krokiem w kierunku standaryzacji.
W klasycznych routerach czy przełącznikach płaszczyzna danych (matryca przełączająca) oraz płaszczyzna kontrolna są realizowane w jednym urządzeniu. W przełączniku OpenFlow te dwie funkcje są odseparowane. Funkcja przełączania pakietów nadal jest realizowana w przełączniku, natomiast płaszczyzna kontrolna zostaje przeniesiona na zewnątrz do kontrolera SDN. Przełącznik i kontroler komunikują się między sobą, używając protokołu OpenFlow, który definiuje takie komunikaty, jak: packet-received, send-packet-out, modify-forwarding-table czy get-stats.
Przełącznik z obsługą OpenFlow przechowuje klasyczną tablicę przepływów zawierającą wpisy z parametrami przepływów oraz sposobem obsłużenia pakietów (wyślij przez port, odrzuć, prześlij do kontrolera), które cechują się danymi parametrami. Jeśli przełącznik otrzyma pakiet, który nie pasuje do żadnego wpisu w tablicy, prześle jego parametry do kontrolera SDN. Kontroler podejmie decyzję, jak obsłużyć taki pakiet i zwróci ją do przełącznika. Tablice przepływów w przełącznikach poszczególnych producentów różnią się od siebie, ale zespół pracujący nad OpenFlow wyodrębnił zestaw poleceń występujący w większości urządzeń. Działanie protokołu opiera się właśnie na tym zestawie polecenie. To z kolei pozwala programować i kontrolować z centralnego punktu tablicę przepływów w różnych przełącznikach i routerach. Ponieważ OpenFlow definiuje standardowy interfejs, pozwala uniknąć konieczności programowania każdego urządzenia z osobna.
Przełącznik zgodny ze specyfikacją OpenFlow musi obsługiwać trzy wspomniane wcześniej polecenia dotyczące przepływów. Dwa pierwsze – prześlij przez port (forward) oraz odrzuć – są oczywiste. Warto jedynie dodać, że pakiety mogą być odrzucane ze względu bezpieczeństwa, aby zapobiec atakom DoS lub aby ograniczyć fałszywe transmisje rozgłoszeniowe. Interesujące jest natomiast polecenie prześlij do kontrolera. Powoduje ono przesłanie pakietu do kontrolera poprzez bezpieczny kanał komunikacji. Typowo ma to miejsce w przypadku nowych pakietów i pozwala podjąć decyzję co do dalszych losów danego pakietu przez kontroler SDN. Jednakże w eksperymentalnym środowisku może posłużyć również do przesyłania wszystkich pakietów do kontrolera.
OpenFlow pozwala, m.in. na konfigurowanie ścieżek dla przesyłanych pakietów przez oprogramowanie działające w oddzielnej warstwie kontrolnej, z reguły chodzi o centralny punkt sterujący ruchem w sieci (kontroler SDN). Separacja płaszczyzny kontrolnej od płaszczyzny danych pozwala potencjalnie na bardziej zaawansowane podejmowanie decyzji odnośnie ruchu w sieci, niż listy kontroli dostępu (ACL) oraz protokoły routing. Ponadto umożliwia wirtualizację środowiska sieciowego. Te protokół pozwala także na łatwe wdrażanie nowych protokołów routingu i przełączania. Można go wykorzystać do realizacji takich rozwiązań, jak mobilność maszyn wirtualnych, wysokie bezpieczeństwo sieci czy budowanie sieci IP dla urządzeń mobilnych.