OpenFlow

Z Wikipedii, wolnej encyklopedii

OpenFlow to protokół komunikacyjny umożliwiający zdalny dostęp do płaszczyzny danych urządzenia sieciowego. Zamierzeniem twórców protokołu było wsparcie budowy programowalnych sieci komputerowych (ang. Software-defined network, SDN) dzięki standaryzacji oraz dopasowaniu do możliwości produkowanych urządzeń.

Zasada działania OpenFlow[edytuj | edytuj kod]

Uczestnicy komunikacji[edytuj | edytuj kod]

Przykładowa architektura sieci wykorzystującej protokół OpenFlow - w wersji z czystymi przełącznikami OpenFlow

Protokół OpenFlow rozdziela płaszczyznę danych (ang. forwarding plane) przełączników sieciowych i ruterów[1] oraz sterowania (ang. control plane). Płaszczyzna danych realizowana jest przez urządzenia nazywane w tym kontekście przełącznikami OpenFlow, a płaszczyznę sterowania realizują kontrolery OpenFlow. W celu osiągnięcia postulowanej w ramach SDN centralizacji funkcji sterowania, każdy kontroler na ogół będzie sterował wieloma przełącznikami. Danym przełącznikiem może natomiast sterować wiele kontrolerów np. w celu uzyskania odporności na awarie lub równoważenia obciążenia.

Sterowanie w przypadku OpenFlow oznacza, że to kontroler OpenFlow definiuje za pośrednictwem kanału OpenFlow, w jaki sposób przełącznik OpenFlow powinien przetwarzać trafiające do niego pakiety[2]. Na podstawie wytycznych otrzymanych od kontrolera, przełącznik samodzielnie przetwarza większość pakietów. Dzięki takiemu podejściu przetwarzanie komunikatów może wykorzystywać zaawansowane algorytmy w kontrolerze przy jednoczesnym zachowaniu wysokiej wydajności przetwarzania poszczególnych pakietów.

Przełączniki mogą pełnić tylko funkcje płaszczyzny danych (czysty przełącznik OpenFlow) albo łączyć funkcje płaszczyzn danych i sterowania (przełącznik hybrydowy). Oprócz kontrolera, przełącznik, podobnie jak typowe urządzenia sieciowe, współpracuje z innymi urządzeniami sieciowymi (jak przełączniki i rutery) oraz komputerami (hostami).

Porty[edytuj | edytuj kod]

OpenFlow operuje na abstrakcyjnych portach umożliwiających wymianę pakietów ze światem zewnętrznym. Portami w OpenFlow mogą być zarówno fizyczne porty, w które wyposażony jest przełącznik, jak i pomocnicze porty logiczne lub specjalne pseudo-porty pozwalające realizować zaawansowane operacje na pakietach. Portem jest w szczególności kanał komunikacji przełącznika z kontrolerem, pozwalający przełącznikowi przekazać wybrane pakiety do kontrolera w celu analizy, a kontrolerowi nieumożliwiający wysłanie do innych urządzeń lub hostów pakietu za pośrednictwem przełącznika.

Przepływy[edytuj | edytuj kod]

Wytyczne do przekazywania pakietów przez przełączniki są reprezentowane w postaci pozycji przepływu (ang. flow entry), a zlecane przez kontroler tworzenie, modyfikowanie i usuwanie pozycji przepływu stanowi podstawowe zastosowanie protokołu OpenFlow. Każda taka pozycja wspiera przekazywanie strumienia pakietów (przepływ) o określonych cechach, a wiele pozycji zgrupowanych jest w jednej bądź wielu tabelach przepływów (ang. flow table).

Tabela przepływów wykorzystywana jest w momencie nadejścia do przełącznika nowego pakietu. Przełącznik przegląda wówczas właściwą tabelę w celu wyszukania najlepszej pojedynczej pozycji przepływu z uwzględnieniem cech odebranego pakietu oraz priorytetów poszczególnych pozycji w tabeli. Po wybraniu takiej pozycji przepływu, przełącznik wykonuje na pakiecie instrukcje określone w wybranej pozycji.

Wybór pozycji przepływu dokonywany jest poprzez porównanie wartości pól zawartych w nagłówku pakietu lub metadanych z wartościami określonymi w danej pozycji. Pozycja przepływu określa dokładne wartości, jakie muszą mieć wybrane pola w nagłówku pakietu, aby dopasowanie było możliwe albo wskazuje, że dane pola mogą mieć dowolną wartość. Dla niektórych pól możliwe jest również określenie masek dopasowania wskazujących, jaka część wartości pola jest istotna z punktu widzenia dopasowania pakietu do pozycji przepływu.

Tabele przepływów mogą dodatkowo zawierać wskazanie, jak przełącznik powinien zareagować na pakiet, w przypadku braku dopasowania pakietu do którejkolwiek z pozycji w tabeli. Jeśli wykorzystuje się wiele tabel przepływów, to działania związane z poszczególnymi tabelami tworzą potok (ang. pipeline) następujących po sobie faz przetwarzania danego pakietu.

Akcje[edytuj | edytuj kod]

Przetwarzanie pakietów realizowane przez przełącznik jest definiowane za pomocą akcji, z których najważniejszą jest przekazanie pakietu do określonego portu przełącznika (np. do kontrolera). Akcje mogą jednak określać również inne atomowe czynności, takie jak odrzucenie pakietu, skierowanie go do kolejki lub zmiana wartości jego pól lub metadanych. Akcje na pakiecie mogą być wykonywane na bieżąco tj. w miarę jego przetwarzania w ramach potoku bądź zbierane w postaci zbioru czynności do łącznego wykonania na koniec przetwarzania pakietu - bezpośrednio przed przekazaniem go do wybranego portu.

Oprócz akcji do wykonania na pakiecie, możliwe jest również zdefiniowanie instrukcji, których najważniejszym zastosowaniem jest sterowanie przebiegiem przetwarzania pakietu w ramach potoku.

Pozostałe składowe protokołu[edytuj | edytuj kod]

Protokół OpenFlow pozwala również:

  • odczytywać wartości liczników powiązanych z poszczególnymi pozycjami przepływu, tabelami przepływów etc. w celu monitorowania ruchu w sieci,
  • tworzyć mierniki i kolejki, dzięki którym można definiować zachowania przełącznika realizujące jakość usług sieciowych,
  • definiować grupy jako dodatkowe fazy przetwarzania pakietów w potoku z odrębnymi zestawami akcji do wykonania na tych pakietach, dzięki czemu złożone algorytmy przetwarzania można wyrażać w sposób zwięzły,
  • przekazywać z przełącznika do kontrolera powiadomienia o zdarzeniach różnych typów,
  • wysłać kontrolny pakiet sieciowy za pośrednictwem kontrolera.

Powstanie OpenFlow[edytuj | edytuj kod]

Open Networking Foundation (ONF) to organizacja zorientowana na propagowanie i promowanie koncepcji SDN[3], zarządzająca standardem OpenFlow[4].

ONF definiuje OpenFlow jako pierwszy standard interfejsu komunikacyjnego określonego pomiędzy płaszczyzną sterowania a płaszczyzną danych w architekturze SDN. Brak otwartego standardu dostępu do płaszczyzny danych doprowadził do tego, że współczesne urządzenia sieciowe uważane są za monolityczne, zamknięte i podobne do systemów klasy mainframe. Protokół taki jak OpenFlow jest niezbędny, aby przenieść funkcję sterowania z zamkniętych urządzeń producentów do lokalnie zarządzanego oprogramowania otwartego[5].

Innymi słowy, OpenFlow pozwala, aby trasa pakietów poprzez sieć telekomunikacyjną była określana przez oprogramowanie działające w kontrolerze. Takie oddzielenie sterowania od przekazywania pakietów pozwala na bardziej zaawansowanie zarządzanie ruchem, niż byłoby możliwe przy wykorzystaniu tylko mechanizmów, takich jak list kontroli dostępu (ACL) i protokołów trasowania. Twórcy OpenFlow uważają go za element umożliwiający budowę SDN.

Historia wersji standardu[edytuj | edytuj kod]

Protokół powstawał na przestrzeni kilku lat, głównie dzięki pracom realizowanym na Uniwersytecie Stanforda[6]. Pierwsza dojrzała wersja 1.0 protokołu określona przez autorów jako gotowa do implementacji w powszechnie dostępnych urządzeniach została udostępniona w grudniu 2009 roku[7].

W latach 2011-2013 w ramach prac ONF kolejne wersje protokołu powstawały dość często. Opublikowane zostały kolejno wersje 1.1, 1.2, 1.3, 1.3.1, 1.3.2 oraz 1.4.0.

Aktualnie obowiązująca wersja protokołu OpenFlow nosi numer 1.4.0[8], a w trakcie procesu ratyfikacji znajduje się wersja 1.3.3[9] (stan na październik 2013).

Przyjęcie w branży[edytuj | edytuj kod]

Znaczna liczba producentów przełączników sieciowych i ruterów w tym Arista Networks[10], Big Switch Networks[11][12], Brocade Communications[13], Cisco, Dell[14], Digisol, Extreme Networks, Force10, Hewlett-Packard[15], IBM, Juniper Networks, Larch Networks, MikroTik[16] oraz NEC[17] ogłosiła zamiar wsparcia OpenFlow bądź już dostarcza odpowiednie urządzenia. OpenFlow jest wykorzystywany głównie pomiędzy przełącznikiem a kontrolerem za pośrednictwem bezpiecznego kanału komunikacyjnego.

W maju 2011 Indiana University w powiązaniu z ONF uruchomił Laboratorium Interoperacyjności SDN, aby testować, jak produkty SDN pochodzące od różnych dostawców współpracują ze sobą[18]. W lutym 2012 Big Switch Networks udostępniło kontroler OpenFlow projekt Floodlight na licencji otwartego oprogramowania Apache[19]. W kwietniu 2012 Urs Hölzle z Google opisał, jak wewnętrzna sieć jego firmy została przebudowana od podstaw w okresie poprzednich dwóch lat w oparciu o protokół OpenFlow, co pozwoliło na osiągnięcie znacznych korzyści w zakresie wydajności[20].

Przypisy[edytuj | edytuj kod]

  1. Nick McKeown et al.: OpenFlow: Enabling innovation in campus networks. ACM Communications Review, 2008-04. [dostęp 2009-11-02].
  2. Grzegorz Danilewicz, Wojciech Kabaciński, Janusz Kleban, Marek Michalski, Remigiusz Rajewski: Sieci sterowane programowo SDN oraz środowisko OpenFlow (dostęp płatny). Przegląd Telekomunikacyjny - Wiadomości Telekomunikacyjne, luty 2013. [dostęp 2013-08-31].
  3. Kate Greene, TR10: Software-Defined Networking, [w:] MIT Technology Review [online], kwiecień 2009 [dostęp 2011-10-07] [zarchiwizowane z adresu 2012-09-13].
  4. Open Networking Foundation: SDN Defined. Open Networking Foundation.
  5. Software-Defined Networking (SDN): The New Norm for Networks. Open Networking Foundation. [zarchiwizowane z tego adresu (2014-08-18)].
  6. The history of OpenFlow. Steve Evans. [dostęp 2013-09-08].
  7. OpenFlow 1.0 Released. 2009-12-31. [dostęp 2013-09-08].
  8. Open Networking Foundation - OpenFlow v1.4.0. [dostęp 2013-09-08]. [zarchiwizowane z tego adresu (2017-06-27)].
  9. Open Networking Foundation - OpenFlow v1.3.3 (wersja standardu w trakcie ratyfikacji).
  10. Arista dodaje do EOS wsparcie dla protokołów OpenFlow i OpenStack. networld.pl. [dostęp 2013-08-31].
  11. Cade Metz: You Can’t Have Google’s Pluto Switch, But You Can Have This. Wired, 26 marca 2013.
  12. Sean Michael Kerner: Big Switch Emerges with Commercial SDN Portfolio. Enterprise Networking Planet, 2012-11-13.
  13. Pavel Radda: Brocade Leads OpenFlow Adoption to Accelerate Network Virtualization and Cloud Application Development. Reuters, 2011-03-22. [dostęp 2011-11-29]. [zarchiwizowane z tego adresu (2013-11-04)].
  14. Dell Networking S6000 - przełącznik dla centrów danych. benchmark.pl. [dostęp 2013-08-31].
  15. Colin Neagle: HP takes giant first step into OpenFlow: HP is announcing its first effort to support OpenFlow standard on its Ethernet switches. Network World, 2 lutego 2012. [dostęp 2013-04-28]. [zarchiwizowane z tego adresu (13 maja 2013)].
  16. MikroTik homepage. 29 stycznia 2013.
  17. Jim Duffy: NEC rolls out OpenFlow for Microsoft Hyper-V: NEC virtual switch adds IPv6 support to SDN controller. Network World, 22 stycznia 2013. [dostęp 2013-04-28]. [zarchiwizowane z tego adresu (3 kwietnia 2013)].
  18. SDN Interoperability Lab. [dostęp 2013-08-24]. [zarchiwizowane z tego adresu (2012-06-05)].
  19. Bernard Cole: Big Switch releases open source controller for OpenFlow. EE Times, 2 lutego 2012. [dostęp 2012-02-02].
  20. Levy, Steven, "Going With the Flow: Google’s Secret Switch to the Next Wave of Networking", Wired, April 17, 2012. Retrieved 2012-04-17

Linki zewnętrzne[edytuj | edytuj kod]