P4 (język)

P4 to język programowania służący do wyrażania logiki przetwarzania pakietów w elemencie komunikacyjnym sieci komputerowej, takim jak przełącznik , karta sieciowa, router lub urządzenie w celu wykonywania na nim działań. Język programowania P4 został wprowadzony przez niektóre uniwersytety do firm w 2014 r. I został pierwotnie opisany w dokumencie SIGCOMM CCR zatytułowanym „Programming Protocol-Independent Packet Processors”. Nazwa zwyczajowa jest skrócona do akronimu „P4”.


Język sieciowy P4
Logo.
Deweloperzy Konsorcjum językowe P4
Ostatnia wersja P4 16 , wersja 1.2.023 października 2019 roku
Licencja Apache 2
Stronie internetowej p4.org

Pochodzenie

W dniu odbyły się pierwsze warsztaty z języka P4 4 czerwca 2015na Uniwersytecie Stanforda przewodniczyli mu Nick McKeown z Uniwersytetu Stanforda i Jennifer Rexford z Uniwersytetu Princeton . P4.org konsorcjum opublikowała ostateczną specyfikację nowej wersji języka zwanego P4 16 , wMaja 2017, zastępując pierwszą wersję języka, zwaną P4 14 .

Zasada

Uważana za ewolucję sieci definiowanej programowo (SDN) , P4 umożliwia programowanie sposobu, w jaki przepływ jest przetwarzany przez routing pakietów w sprzęcie do transmisji pakietów w sieci, takim jak routery , przełączniki lub zapory , zarówno sprzętowe, jak i programowe. Jak sugeruje nazwa „Procesory niezależne od protokołu programowania”, język nie uwzględnia formatu pakietu . Rzeczywiście, programiści deklarują przetwarzanie pakietu w programie napisanym w języku P4, a następnie kompilator umieszcza go w żądanym formacie zgodnie z docelowym sprzętem. Programowanie w języku P4 służy w szczególności do realizacji funkcji przenoszenia poziomu 3 oraz funkcji INT. Technologia telemetrii sieci w paśmie umożliwia przełącznikom pomiarowym dostarczanie szczegółowych informacji o obciążeniu sieci i wykorzystywanie ich do zapewniania mechanizmów kontroli przeciążenia, a tym samym do lepszego zarządzania stabilnością sieci o bardzo dużej szybkości.
Istnieją dwie wersje tego języka: P4 14 i P4 16 . P4 16 wprowadza istotne zmiany i nie jest wstecznie kompatybilny z P4 14 . W związku z tym wiele funkcji zostało usuniętych z języka podstawowego P4 14 i jest już lub ma zostać zaimplementowanych w bibliotekach zewnętrznych.

Schemat podstawowy P4


Operacja

P4 ma na celu pełne programowanie przetwarzania danych na urządzeniach sieciowych. Ten język jest w stanie faktycznie programować zachowanie sprzętu sieciowego . Algorytm przetwarzania jest IPv4 pakiet może być łatwo wykonana. Rzeczywisty format pakietów jest po prostu definiowany w programie. Poniższy przykład pokazuje, jak analizować (analizować) ramkę Ethernet.

state parse_ethernet { packet.extract(headers.ethernet) { transition select(headers.ethernet.ethertype) { 0x8100: parse_vlan; 0x9100: parse_vlan; 0x0800: parse_ipv4; 0x86dd: parse_ipv6; default: reject; } }

Po przeprowadzeniu analizy przychodzących pakietów nagłówki są wyodrębniane i wysyłane do tabel typu „Match + Actions”. Tabele te zawierają informacje o odpowiednich pakietach oraz protokołach branych pod uwagę przy ich routingu. Pozostaje tylko określić akcje, które mają zostać wykonane dla odpowiednich pakietów. Po utworzeniu programu wystarczy go skompilować, aby mógł działać na żądanym sprzęcie.

Składnia

Program typu P4 zawiera atrybuty następujących kluczowych komponentów:

Nagłówki (nagłówki) Definicja nagłówka opisująca sekwencję i strukturę szeregu pól. Obejmuje specyfikację szerokości pól i ograniczeń dotyczących wartości pól; Parsery Definicja parsera określa, jak identyfikować prawidłowe nagłówki i sekwencje nagłówków w pakietach; Tabele Tabele działań Match + są mechanizmem przetwarzania pakietów. Program P4 definiuje pola, którym może odpowiadać tabela oraz czynności, które może wykonywać; działania P4 obsługuje tworzenie złożonych akcji z prostszych, niezależnych od protokołu prymitywów. Te złożone akcje są dostępne w tabelach dopasowań + działań; Programy sterujące Program sprawdzający określa kolejność tabel dopasowania + akcji, które są stosowane do pakietu. Prosty program imperatywny opisuje przepływ kontroli między tabelami match + action. #include <core.p4> #include <v1model.p4> struct metadata {} struct headers {} parser MyParser(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { state start { transition accept; } } control MyVerifyChecksum(inout headers hdr, inout metadata meta) { apply { } } control MyIngress (inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { apply { if (standard_metadata.ingress_port ==1) { standard_metadata.egress_spec =2; } else if (standard_metadata.ingress_port ==2) { standard_metadata.egress_spec =1; } } } control MyIngress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { apply { } } control MyComputeChecksum (inout headers hdr, inout metadata meta) { apply {} } control MyComputeChecksum(inout headers hdr, inout metadata meta) { apply { } control MyDeparser(packet_out packet, in headers hdr){ apply { } } V1Switch( MyParser(), MyVerifyChecksum(), MyIngress(), MyEgress(), MyComputeChecksum(), MyDeparser(), ) main;

Kompilator

Aby zostać zaimplementowanym na docelowym sprzęcie, który może być typu sprzętowego lub programowego, program napisany w P4 musi zostać skompilowany, to znaczy przekształcony przez kompilator w kod obiektowy . Istnieją dwa kompilatory, jeden pierwotnie używany dla P4 14 , napisany w Pythonie , a drugi, od wersji P4 16 , nazwany P4C. Ten ostatni, dostarczony przez grupę programistów P4 „P4 Language Consortium”, jest kompatybilny z obiema wersjami języka i jest zaimplementowany w C ++ 11 , na licencji open-source Apache 2. Kompilator ma dwa analizatory, dla każdego z nich dwa języki. Analizator programu P4 14 przekształca program w P4 16 .

P4C wykonuje trzyczęściowy zabieg:

  • Front-end  : Niezależnie od docelowego sprzętu, jest odpowiedzialny za wykonywanie różnych kontroli programu, takich jak składnia, semantyka, aby kod był zgodny ze specyfikacjami języka, a następnie upraszcza i optymalizuje kod według potrzeb;
  • Mid-end: wykonuje transformacje kodu tak, aby częściowo pasował do celu, ale nie dodaje określonych przydziałów zasobów;
  • Backend  : Odpowiada za alokację zasobów , planowanie i transformację kodu do języka zgodnego ze sprzętem.


Kompilator obsługuje kilka typów backendu  :

p4c-bmv2 generuje kod w formacie JSON , dzięki czemu program jest kompatybilny do implementacji na softswitchach; p4c-ebpf generuje kod w formacie C, który można następnie skompilować do eBPF; p4c-graphs tworzy wizualne reprezentacje programu P4 (grafika przepływu sterowania na wysokim poziomie); p4test testuje front-end programów w P4 16 .

Cele

Język P4 został zaprojektowany, aby spełnić trzy cele:

  • Oferuje możliwość aktualizacji lub modyfikacji na miejscu: Po wdrożeniu na sprzęcie program może zostać zmodyfikowany w przypadku, gdy przetwarzanie pakietów musi ewoluować.
  • Ponadto język: P4 nie jest powiązany z żadnym protokołem sieciowym i nie ma określonego przetwarzania pakietów, więc nie ma z góry określonego pojęcia o formacie pakietu. Pozwala to na zdefiniowanie nowych protokołów, jeśli to konieczne, i usuwa ograniczenia dotyczące sposobu korelacji poszczególnych pakietów.
  • Cel nie korzysta z żadnych zobowiązań sprzętowych: Pisząc program P4, programiści definiują funkcjonalność przetwarzania pakietów bez martwienia się o specyfikę sprzętu docelowego, na którym program ma być zaimplementowany.

Eksperymenty

P4 jest językiem, który jest rzadko używany, ale jest jednocześnie przedmiotem eksperymentów mających różne cele.

Wykrywanie ataku

Implementacja P4 na przełączniku programowym pokazuje, że język może być używany do wykrywania ataków, takich jak ataki SYN . P4 zapewnia elastyczność pamięci przydzielonej urządzeniu, w przeciwieństwie do standardowego sprzętu sieciowego, który może mieć pamięć o stałym rozmiarze. Na sprzęcie zaimplementowanym z P4 możliwa jest zmiana rozmiaru pamięci w razie potrzeby, a tym samym rejestracja ruchu sieciowego. W ten sposób P4 może pomóc w bezpieczeństwie sieci dzięki pełnej wiedzy na temat ruchu danych w sieci. Jednak w zależności od okoliczności ataku eksperymenty pokazują, że wykrycie ataku jest trudniejsze.

Monitorowanie sieci

P4 umożliwia monitorowanie i wizualizację informacji o stanie sieci po niższych kosztach. Rzeczywiście, w przeciwieństwie do SDN, który wiąże się z wysokimi kosztami monitorowania sieci, P4 pobiera informacje o stanie sieci (identyfikacja przełącznika, utrata pakietów i zajętość kolejki itp.) Bez dodawania dodatkowych pakietów wykrywania. Po zebraniu tych informacji ruch jest monitorowany w czasie rzeczywistym zgodnie ze stanem sieci, co pozwala w szczególności na eliminację zjawiska kongestii .

Zapora programowa

Ten język może być używany do konfigurowania zapory programowej po niskich kosztach. Jednak w eksperymencie wykazano, że skuteczność zapory zależy od liczby przesyłanych pakietów. Tak więc, jeśli może być szybszy niż niektóre zwirtualizowane zapory ogniowe, gdy jest mniej niż 1000 pakietów, po przekroczeniu tego progu jego wydajność spada.

Korzyści

W ramach przeprowadzonych eksperymentów wdrożeniowych wykazano, że język P4 ma kilka zalet.
Tym samym poprawia bezpieczeństwo sieci dzięki implementacji nagłówków i reguł przetwarzania przepływów, które pozwalają uniknąć zatorów.
Ponadto język zapewnia pewną elastyczność w zakresie sprzętu sieciowego. W rzeczywistości umożliwia programowanie przetwarzania pakietów za pomocą tylko żądań i konsultacji tabel, niezależnie od sprzętu, na którym jest zaimplementowany, w przeciwieństwie do tradycyjnego sprzętu sieciowego, który ma zastrzeżony język.
Język oferuje również możliwość analizowania ramek i, za pomocą kompilatora, obsługi szczegółów niskiego poziomu, takich jak alokacja zasobów , ponieważ umożliwia podział zasobów pamięci masowej i planowanie.
Wraz z wersją języka P416 twórcy języka udostępnili biblioteki, co jest zaletą dla rozwoju niektórych funkcji specyficznych dla sprzętu.

Niedogodności

W 2020 roku język P4 jest obsługiwany przez bardzo mało sprzętu, co ogranicza jego użycie. Można to wytłumaczyć faktem, że język P4 jest aktywnie rozwijany, a dostawcy sprzętu czekają, aż język się ustabilizuje i zdemokratyzuje, zanim zaoferują odpowiedni sprzęt. P4 również pozostawia wiele szczegółów nieokreślonych.
P4 zwiększa również ryzyko wystąpienia błędów w czasie wykonywania po wdrożeniu programów P4 lub na przykład błędów implementacji protokołu. Brak środowiska uruchomieniowego, oprogramowania odpowiedzialnego za uruchamianie programów komputerowych, utrudnia rozwiązywanie tych błędów.
Ponadto, w zależności od architektury sieci, czasami trudno jest przełożyć specyfikacje na P4. Język P4 nie definiuje interfejsu między płaszczyzną danych a płaszczyzną sterowania, jest to specyfika związana z docelowym sprzętem. P4 pozwala tylko na wykonywanie akcji wewnątrz ramek sieciowych lub po znalezieniu zgodności tabela + akcja; tabele korespondencji P4 nie mogą pasować do pól o zmiennej długości. Zatem porównanie kilku zmiennych może być skomplikowane, zwłaszcza gdy chce się znaleźć najmniejszą wartość, ponieważ P4 może porównywać ze sobą wartości tylko w obiektach sterujących i modyfikować je tylko wtedy, gdy istnieje zgodność. W tabeli . Ponadto tabele korespondencji P4 nie mogą wykonywać korespondencji na polach o zmiennej długości.

Bibliografia

  1. Pierwszy warsztat P4
  2. Specyfikacja języka P416
  3. Martins 2018 , str.  204
  4. Hill 2018 , s.  23
  5. Geng 2018 , s.  2
  6. Budiu 2017 , s.  11
  7. Hill 2018 , s.  24
  8. Wernecke 2018 , s.  2
  9. Bosshart 2014 , str.  91
  10. P4C C ++
  11. Sivaraman 2015 , s.  2
  12. P4C bmv2
  13. P4C ebpf
  14. Wykresy P4C
  15. Test P4C
  16. Bosshart 2014 , s.  89
  17. Żeński 2018 , s.  3
  18. Żeński 2018 , s.  5
  19. Turkovic 2018 , s.  45
  20. Rakesh 2018 , s.  69
  21. Hill 2018 , s.  31
  22. Zhang 2017 , s.  1714
  23. Freire 2017 , s.  2495
  24. Miguel 2018 , s.  31
  25. Hill 2018 , s.  26

Bibliografia

  • (en) Junjie Geng , Jinyao Yan , Yangbiao Ren i Yuan Zhang , „  Projektowanie i wdrażanie architektury monitorowania i harmonogramowania sieci w oparciu o P4  ” , ACM (Stowarzyszenie maszyn komputerowych) - Materiały z 2. międzynarodowej konferencji poświęconej informatyce i inżynierii aplikacji ,październik 2018, s.  1-6 ( ISBN  9781450365123 , DOI  10.1145 / 3207677.3278059 ). Książka użyta do napisania artykułu
  • (en) Belma Turkovic , Fernando Kuipers , Niels van Adrichem i Koen Langendoen , „  Szybkie wykrywanie przeciążenia sieci i unikanie przy użyciu P4  ” , ACM (Association for Computing Machinery) - Proceedings of the 2018 Workshop on networking for new applications and technology ,sierpień 2018, s.  1-8 ( ISBN  9781450359078 , DOI  10.1145 / 3229574.3229581 ). Książka użyta do napisania artykułu
  • (en) Joseph Hill , Mitchel Aloserij i Paola Grosso , „  Tracking Network Flows with P4  ” , 2018 IEEE / ACM Innovating the Network for Data-Intensive Science (INDIS) ,listopad 2018, s.  36-43 ( ISBN  9781728101941 , DOI  10.1109 / INDIS.2018.00006 ). Książka użyta do napisania artykułu
  • (en) Jehandad Khan and Peter Athanas , „  Query language for large-scale P4 network debugging  ” , ACM (Association for Computing Machinery) - Proceedings of the 2018 Symposium on architecture for networking and communication systems ,lipiec 2018, s.  162-164 ( ISBN  9781450359023 , DOI  10.1145 / 3230718.3232108 )
  • (en) Christian Wernecke , Helge Parzyjegla , Gero Muhl , Peter Danielis i Dirk Timmermann , „  Realizing Content-Based Publish / Subscribe with P4  ” , 2018 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN) ,listopad 2018, s.  1-7 ( DOI  10.1109 / NFV-SDN.2018.8725641 ). Książka użyta do napisania artykułu
  • (en) Regis FT Martins , Fabio L Verdi , Rodolfo Villaca i Luis Fernando U Garcia , „  Using Probabilistic Data Structures for Monitoring of Multi-tenant P4-based Networks  ” , 2018 IEEE Symposium on Computers and Communications (ISCC) ,czerwiec 2018, s.  204-207 ( ISBN  9781538669501 , DOI  10.1109 / ISCC.2018.8538352 ). Książka użyta do napisania artykułu
  • (en) Anirudh Sivaraman , Kim Changhoon , Ramkumar Krishnamoorthy , Advait Dixit i Mihai Budiu , „  DC.p4: Programowanie płaszczyzny przekazywania przełącznika centrum danych  ” , Materiały z pierwszego sympozjum ACM SIGCOMM na temat badań sieci definiowanych programowo ,czerwiec 2015, s.  1-8 ( ISBN  9781450334518 , DOI  10.1145 / 2774993.2775007 ). Książka użyta do napisania artykułu
  • (en) Elie F Kfoury , Jorge Crichigno , Elias Bou-Harb , David Khoury i Gautam Srivastava , „  Enabling TCP Pacing using Programmable Data Plane Switches  ” , Publikacje konferencyjne IEEE - 42nd International Conference on Telecommunications and Signal Processing (TSP) ,lipiec 2019, s.  273-277 ( ISBN  9781728118642 , DOI  10,1109 / TSP.2019.8768888 )
  • (en) Zijun Hang , Mei Wen , Yang Shi and Chunyuan Zhang , „  Programming Protocol-Independent Packet Processors High-Level Programming (P4HLP): Towards Unified High-Level Programming for a Commodity Programmable Switch  ” , Directory of Open Access Journals (DOAJ ) , t.  8 ust. 9,sierpień 2019, s.  958 ( ISSN  2079-9292 , DOI  10.3390 / elektronika8090958 )
  • (en) Mihai Budiu i Chris Dodd , „  Język programowania P416  ” , ACM Digital Library (Association for Computing Machinery) - ACM SIGOPS Operating Systems Review , vol.  51, n o  1,Październik-grudzień 2017, s.  5-14 ( ISSN  1943-586X , DOI  10.1145 / 3139645.3139648 )
  • (en) Radek Isa , Pavel Benacek i Viktor Pus , „  Verification of Generated RTL from P4 Source Code  ” , IEEE 26th International Conference on Network Protocols (ICNP) ,wrzesień 2018, s.  444-445 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00065 )
  • (en) Rui Miguel , Salvatore Signorello i Fernando M. V Ramos , „  Named Data Networking with Programmable Switches  ” , IEEE 26th International Conference on Network Protocols (ICNP) ,wrzesień 2018, s.  400-405 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00055 ). Książka użyta do napisania artykułu
  • (en) Lucas Freire , Miguel Neves , Alberto Schaeffer-Filho i Marinho Barcellos , „  POSTER: Finding Vulnerabilities in P4 Programs with Assertion based Verification  ” , IEEE Concurrency ,październik 2017, s.  2495-2497 ( ISBN  9781450349468 , DOI  10.1145 / 3133956.3138837 ). Książka użyta do napisania artykułu
  • (en) Cheng Zhang , Jun Bi , Yu Zhou , Jianping Wu , Bingyang Liu , Zhaogeng Li , Abdul Basit Dogar i Yangyang Wang , „  P4DB: debugowanie w locie programowalnego samolotu danych  ” , IEEE 25. międzynarodowa konferencja w sieci Protokoły (ICNP) ,październik 2017, s.  1-10 ( ISBN  9781509065011 , DOI  10.1109 / ICNP.2017.8117548 ). Książka użyta do napisania artykułu
  • (en) Jeferson Santiago Da Silva , François-Raymond Boyer , Laurent-Olivier Chiquette i JM Pierre Langlois , „  Extern Objects in P4: an ROHC Header Compression Scheme Case Study  ” , 4th IEEE Conference on Network Softwarization and Workshops (NetSoft) ,czerwiec 2018( ISBN  978-1-5386-4633-5 , DOI  10.1109 / NETSOFT.2018.8460108 )
  • (en) Radu Stoenescu , Dragos Dumitrescu , Matei Popovici , Lorina Negreanu et Costin Raiciu , „  Debugging P4 Programs with vera  ” , Proceedings of the 2018 Conference of the ACM Special Interest Group on data communication ,sierpień 2018, s.  518-532 ( ISBN  9781450355674 , DOI  10.1145 / 3230543.3230548 )
  • (en) Peilong Li i Yan Luo , „  P4GPU: przyspieszenie przetwarzania pakietów programu P4 z heterogeniczną architekturą CPU-GPU  ” , ACM / IEEE Symposium on Architectures for Networking and Communications Systems (ANCS) ,marzec 2016, s.  125-126 ( ISBN  9781450341837 , DOI  10.1145 / 2881025.2889480 )
  • (en) Pavel Benáček , Viktor Puš , Hana Kubátová i Tomáš Čejka , „  P4-To-VHDL: Automatyczne generowanie szybkich wejściowych i wyjściowych bloków sieciowych  ” , Microprocessors and Microsystems , vol.  56,luty 2018, s.  22-33 ( ISBN  978-1-7281-0194-1 , DOI  10.1016 / j.micpro.2017.10.012 )
  • (en) Pat Bosshart , Dan Daly , Glen Gibb , Martin Izzard , Nick Mckeown , Jennifer Rexford , Cole Schlesinger , Dan Talayco , Amin Vahdat , George Varghese i David Walker , „  P4: procesory pakietów niezależne od protokołu programowania  ” , ACM SIGCOMM Computer Przegląd komunikacji , vol.  44, n o  3,lipiec 2014, s.  87-95 ( ISSN  1943-5819 , DOI  10.1145 / 2656877.2656890 ). Książka użyta do napisania artykułu
  • (en) Ali Kheradmand i Grigore Rosu , „  P4K: A Formal Semantics of P4 and Applications  ” , Cornell University ,kwiecień 2018( arXiv  1804.01468 )
  • (en) F Paolucci , F Civerchia , A Sgambelluri , A Giorgetti , F Cugini i P Castoldi , „  P4 Edge node umożliwiający stanową inżynierię ruchu i cyberbezpieczeństwo  ” , IEEE / OSA Journal of Optical Communications and Networking , vol.  11, n o  1,styczeń 2019, A84-A95 ( ISSN  1943-0639 )
  • (en) Bin Niu , Jiawei Kong , Shaofei Tang , Yingcong Li i Zuqing Zhu , „  Wizualizuj swoją sieć optyczną IP w czasie rzeczywistym: elastyczny wielowarstwowy system telemetrii sieci w paśmie (ML-INT) oparty na P4  ” , IEEE Dostęp , vol.  7,czerwiec 2019( ISSN  2169-3536 , DOI  10.1109 / ACCESS.2019.2924332 )
  • (en) Miguel Neves , Lucas Freire , Alberto Schaeffer-Filho i Marinho Barcellos , „  Weryfikacja programów P4 w możliwym czasie przy użyciu asercji  ” , ACM Digital Library (Association for Computing Machinery) - Materiały z 14. międzynarodowej konferencji na temat nowych eksperymentów sieciowych i technologie ,grudzień 2018, s.  73-85 ( ISBN  9781450360807 , DOI  10.1145 / 3281411.3281421 )
  • (en) Datta Rakesh , Choi Sean , Chowdhary Anurag and Park Younghee , „  P4Guard: Designing P4 Based Firewall  ” , MILCOM 2018 - 2018 IEEE Military Communications Conference (MILCOM), październik 2018, str. 1-6 ,październik 2018, s.  1-6 ( ISBN  9781538671856 , DOI  10.1109 / MILCOM.2018.8599726 ). Książka użyta do napisania artykułu
  • (en) Jed Liu , William Hallahan , Cole Schlesinger , Milad Sharif , Jeongkeun Lee , Robert Soulé , Han Wang i Călin Caşcaval , „  p4v: praktyczna weryfikacja programowalnych samolotów danych  ” , Obrady Konferencji Grupy Specjalnych ds. komunikacja danych ,sierpień 2018, s.  490-503 ( ISBN  9781538671856 , DOI  10.1145 / 3230543.3230582 )

Linki zewnętrzne

Powiązane artykuły