P4 (språk)

P4 er et programmeringsspråk for å uttrykke pakkebehandlingslogikk i et datanettverkskommunikasjonselement som en bryter , et nettverkskort, en ruter eller et apparat for å utføre handlinger derpå. P4-programmeringsspråket ble introdusert av noen universiteter til bedrifter i 2014 og er opprinnelig beskrevet i et SIGCOMM CCR-dokument med tittelen "Programming Protocol-Independent Packet Processors". Fellesnavnet er forkortet til akronymet "P4".


P4 Nettverksspråk
Logo.
Utviklere P4 språkkonsortium
Siste versjon P4 16 , versjon 1.2.023. oktober 2019
Tillatelse Apache 2
Nettsted p4.org

Opprinnelse

Den første workshopen om P4-språket fant sted den 4. juni 2015ved Stanford University ble det ledet av Nick McKeown fra Stanford University og Jennifer Rexford fra Princeton University . Den P4.org konsortiet har publisert den endelige spesifikasjonen av den nye versjonen av språket kalles P4 16 , iMai 2017, erstatter den første versjonen av språket, kalt P4 14 .

Prinsipp

Betraktet som en utvikling av Software Defined Networking (SDN) , gjør P4 det mulig å programmere måten strømmen behandles på ved ruting av pakker på nettverkspakkeoverføringsutstyr som rutere , svitsjer eller brannmurer , enten maskinvare eller programvare. Som navnet “Programmeringsprotokolluavhengige prosessorer” antyder, tar ikke språket hensyn til formatet på en pakke . Faktisk erklærer utviklerne behandlingen av en pakke i et program skrevet på P4-språk, og kompilatoren setter den deretter i ønsket format i henhold til målmaskinvaren. Programmering i P4-språk brukes spesielt til å implementere nivå 3-overføringsfunksjoner og INT-funksjoner. In-Band Network Telemetry-teknologi gjør det mulig å måle brytere for å gi detaljert informasjon om nettverksbelastning og bruke den til å gi overbelastningskontrollmekanismer og dermed bedre administrere nettstabilitet med høy hastighet.
Det er to versjoner av dette språket: P4 14 og P4 16 . P4 16 gjør betydelige endringer og er ikke bakoverkompatibel med P4 14 . Dermed er mange funksjoner fjernet fra basisspråket P4 14 og er allerede eller er ment å bli implementert i eksterne biblioteker .

Grunnleggende diagram P4


Operasjon

P4 tar sikte på fullstendig programmering av databehandling på nettverksutstyr. Dette språket er i stand til å faktisk programmere oppførselen til nettverksutstyr . En algoritme for behandling av en IPv4- pakke kan enkelt konstrueres. Det faktiske formatet til pakkene er ganske enkelt definert i programmet. Eksemplet nedenfor viser hvordan du analyserer (parse) en Ethernet- ramme .

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; } }

Når analysen av innkommende pakker er utført, blir overskriftene hentet ut og sendt til "Match + Actions" -tabellene . Disse tabellene inneholder informasjonen om de tilsvarende pakkene, samt protokollene som tas i betraktning for rutingen. Alt som gjenstår er å spesifisere handlingene som skal utføres for de tilsvarende pakkene. Når programmet er opprettet, er det tilstrekkelig å kompilere det slik at det kan kjøres på ønsket maskinvare.

Syntaks

Et P4-type program inneholder attributtene til følgende nøkkelkomponenter:

Overskrifter (topptekster) En toppdefinisjon som beskriver sekvensen og strukturen til en serie felt. Den inkluderer spesifikasjonen av feltbredder og begrensninger for feltverdier; Parsers En parserdefinisjon spesifiserer hvordan du kan identifisere gyldige overskrifter og topptekster i pakker; Tabeller Match + action-tabeller er mekanismen for å utføre pakkebehandling. P4-programmet definerer feltene som en tabell kan samsvare med og handlingene den kan utføre; Handlinger P4 støtter konstruksjonen av komplekse handlinger fra enklere, protokolluavhengige primitiver. Disse komplekse handlingene er tilgjengelige i kamp + handlingstabellene; Kontrollprogrammer Kontrollprogrammet bestemmer rekkefølgen på match + action-tabellene som brukes på en pakke. Et enkelt tvingende program beskriver kontrollflyten mellom match + action-tabellene. #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

For å bli implementert på målmaskinvaren, som kan være av maskinvare eller programvaretype, må programmet skrevet i P4 kompileres, det vil si transformert av kompilatoren, til en objektkode . Det er to kompilatorer, en opprinnelig brukt til P4 14 , skrevet i Python , og en annen siden versjon P4 16 , kalt P4C. Sistnevnte, levert av P4-utviklergruppen "P4 Language Consortium", er kompatibel med begge versjonene av språket og er implementert i C ++ 11 , under åpen kildekode Apache 2. Lisensen . Kompilatoren har to analysatorer for hver av de to språkene. P4-programanalysatoren 14 konverterer programmet til P4 16 .

P4C utfører en tredelt behandling:

  • Front-end  : Uansett målmaskinvare, er det ansvarlig for å utføre forskjellige programkontroller som syntaks, semantikk, slik at koden samsvarer med språkspesifikasjonene, så forenkler og optimaliserer den koden etter behov;
  • Mid-end: Den utfører transformasjonene av koden slik at den delvis samsvarer med målet, men legger ikke til spesifikke ressurstilordninger;
  • Backend  : Det er ansvarlig for tildeling av ressurser , planlegging og transformasjon av koden til et språk som samsvarer med maskinvaren.


Kompilatoren støtter flere typer backend  :

p4c-bmv2 genererer kode i JSON- format slik at programmet er kompatibelt for å bli implementert på softswitches; p4c-ebpf genererer kode i C-format som deretter kan kompileres til eBPF; p4c-grafer produserer visuelle representasjoner av et P4-program (kontrollnivågrafikk på høyt nivå); p4test tester frontend av programmer i P4 16 .

Mål

P4-språket ble designet for å oppfylle tre mål:

  • Det gir muligheten for oppgradering eller modifisering på stedet: Når den er distribuert på maskinvaren, kan programmet endres i tilfelle behandlingen av pakkene må utvikle seg.
  • I tillegg er språket: P4 ikke knyttet til noen nettverksprotokoll og ingen spesifikk pakkebehandling, så det har ingen forhåndsbestemt forestilling om formatet til en pakke. Dette gjør at nye protokoller kan defineres etter behov og fjerner begrensningene for hvordan individuelle pakker kan korreleres.
  • Målet drar ikke nytte av noen maskinvareforpliktelse: Når du skriver P4-programmet, definerer utviklerne funksjonaliteten til pakkebehandlingen uten å bekymre seg for detaljene til målmaskinvaren som programmet skal implementeres på.

Eksperimenter

P4 er et språk som er lite brukt, men som likevel er gjenstand for eksperimenter som har forskjellige mål.

Angrepsdeteksjon

Implementeringen av P4 på en programvaretype-bryter viser at språket kan brukes til å oppdage angrep, for eksempel SYN-angrep . P4 tillater fleksibilitet i minnet som er tildelt en enhet, i motsetning til vanlig nettverksmaskinvare som kan ha minne av fast størrelse. På maskinvare implementert med P4 er det mulig å endre minnestørrelsen etter behov, og derfor registrere nettverkstrafikk. Dermed kan P4 hjelpe i nettverkssikkerhet gjennom fullstendig kunnskap om datatrafikken i nettverket. Avhengig av omstendighetene til angrepet, viser eksperimentering imidlertid at deteksjon av angrep er vanskeligere.

Nettverksovervåking

P4 gjør det mulig å overvåke og visualisere informasjon om tilstanden til nettverket til en lavere kostnad. Faktisk, i motsetning til SDN som gir høye kostnader for nettverksovervåking, henter P4 informasjon om tilstanden til nettverket (bryteridentifikasjon, pakketap og købelegg osv.) Uten å legge til ytterligere deteksjonspakker. Når denne informasjonen er samlet inn, overvåkes trafikken i sanntid i henhold til tilstanden til nettverket, noe som spesielt gjør det mulig å eliminere fenomenet overbelastning .

Programvarebrannmur

Språket kan brukes til å sette opp en programvarebrannmur til en lav pris. I et eksperiment er det imidlertid vist at brannmurens effektivitet avhenger av antall pakker som passerer. Dermed, hvis det kan være raskere enn noen virtualiserte brannmurer når det er mindre enn 1000 pakker, så snart denne terskelen overskrides, synker effektiviteten.

fordeler

Som en del av implementeringseksperimentene som har funnet sted, har det vist seg at P4-språket har flere fordeler.
Dermed forbedrer det nettverkssikkerheten takket være implementeringen av overskrifter og regler for prosesseringsflyter som gjør det mulig å unngå overbelastning.
I tillegg gir språket en viss fleksibilitet når det gjelder nettverksmaskinvare. Faktisk gjør det det mulig å programmere behandlingen av pakker ved bruk av bare forespørsler og konsultasjoner av tabeller, uavhengig av maskinvaren den er implementert på, i motsetning til tradisjonell nettverksmaskinvare som har et proprietært språk.
Språket har også evnen til å analysere rammer, og ved hjelp kompilatoren, håndtak lavnivå detaljer som ressurs allokering , som gjør det mulig lagringsressurser til å bli brutt ned, og planlegging.
Med P416-versjonen av språket gjorde skaperne av språket biblioteker tilgjengelig, noe som er en fordel for utviklingen av visse funksjoner som er spesifikke for maskinvaren.

Ulemper

I 2020 støttes P4-språket av svært lite maskinvare, noe som begrenser bruken. Dette kan forklares med det faktum at P4-språket er under aktiv utvikling, maskinvareleverandørene venter på at språket skal stabiliseres og demokratiseres før de tilbyr passende maskinvare. P4 etterlater også mange detaljer uspesifiserte.
P4 øker også risikoen for å pådra kjøretids insekter etter utplassering av P4-programmer, eller protokollimplementeringsfeil f.eks. Mangelen på kjøretid , programvaren som er ansvarlig for å kjøre dataprogrammer, gjør det vanskelig å feilsøke disse feilene.
I tillegg, avhengig av nettverksarkitekturen, er det noen ganger vanskelig å oversette spesifikkene til P4. P4-språket definerer ikke grensesnittet mellom dataplanet og kontrollplanet, det er en spesifisitet knyttet til målmaskinvaren. P4 tillater bare at handlinger utføres i nettverksrammer, eller når en tabell + handlingsmatch er funnet. P4s kamptabeller kan ikke matche på felt med variabel lengde. Dermed kan sammenligningen mellom flere variabler være komplisert, spesielt når man ønsker å finne den minste verdien, fordi P4 bare kan sammenligne verdier med hverandre i kontrollobjektene og bare kan endre dem hvis det er samsvar. I en tabell . I tillegg kan ikke P4-korrespondansetabellene utføre korrespondanse på felt med variabel lengde.

Referanser

  1. 1. P4 Workshop
  2. P416 Språkspesifikasjon
  3. Martins 2018 , s.  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 , s.  91
  10. P4C C ++
  11. Sivaraman 2015 , s.  2
  12. P4C bmv2
  13. P4C ebpf
  14. P4C-grafer
  15. P4C-test
  16. Bosshart 2014 , s.  89
  17. Geng 2018 , s.  3
  18. Geng 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

Bibliografi

  • (no) Junjie Geng , Jinyao Yan , Yangbiao Ren og Yuan Zhang , “  Design and Implementation of Network Monitoring and Scheduling Architecture Based on P4  ” , ACM (Association for Computing Machinery) - Proceedings of the 2nd International Conference on Computer Science and Application Engineering ,oktober 2018, s.  1-6 ( ISBN  9781450365123 , DOI  10.1145 / 3207677.3278059 ). Bok brukt til å skrive artikkelen
  • (en) Belma Turkovic , Fernando Kuipers , Niels van Adrichem og Koen Langendoen , “  Fast trafikk på nettverket deteksjon og unngåelse bruke P4  ” , ACM (Association for Computing Machinery) - Proceedings of 2018 Workshop om nettverksbygging for nye anvendelser og teknologier ,august 2018, s.  1-8 ( ISBN  9781450359078 , DOI  10.1145 / 3229574.3229581 ). Bok brukt til å skrive artikkelen
  • (en) Joseph Hill , Mitchel Aloserij og Paola Grosso , “  Tracking Network Flows with P4  ” , 2018 IEEE / ACM Innovating the Network for Data-Intensive Science (INDIS) ,november 2018, s.  36-43 ( ISBN  9781728101941 , DOI  10.1109 / INDIS.2018.00006 ). Bok brukt til å skrive artikkelen
  • (en) Jehandad Khan og Peter Athanas , “  Spørrespråk for storskala P4-nettverksfeilsøking  ” , ACM (Association for Computing Machinery) - Forløp fra 2018-symposiet om arkitekturer for nettverks- og kommunikasjonssystemer ,juli 2018, s.  162-164 ( ISBN  9781450359023 , DOI  10.1145 / 3230718.3232108 )
  • (en) Christian Wernecke , Helge Parzyjegla , Gero Muhl , Peter Danielis og Dirk Timmermann , “  Realizing Content-Based Publish / Subscribe with P4  ” , 2018 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN) ,november 2018, s.  1-7 ( DOI  10.1109 / NFV-SDN.2018.8725641 ). Bok brukt til å skrive artikkelen
  • (en) Regis FT Martins , Fabio L Verdi , Rodolfo Villaca og Luis Fernando U Garcia , “  Using Probabilistic Data Structures for Monitoring of Multi-tenant P4-based Networks  ” , 2018 IEEE Symposium on Computers and Communications (ISCC) ,juni 2018, s.  204-207 ( ISBN  9781538669501 , DOI  10.1109 / ISCC.2018.8538352 ). Bok brukt til å skrive artikkelen
  • (en) Anirudh Sivaraman , Kim Changhoon , Ramkumar Krishnamoorthy , Advait Dixit og Mihai Budiu , “  DC.p4: programmering videresending planet av et datasenter switch  ” , Proceedings of første ACM SIGCOMM Symposium på Software Defined nettverk forskning ,juni 2015, s.  1-8 ( ISBN  9781450334518 , DOI  10.1145 / 2774993.2775007 ). Bok brukt til å skrive artikkelen
  • (no) Elie F Kfoury , Jorge Crichigno , Elias Bou-Harb , David Khoury og Gautam Srivastava , “  Enabling TCP Pacing using Programmable Data Plane Switches  ” , IEEE Conference Publications - 42nd International Conference on Telecommunications and Signal Processing (TSP) ,juli 2019, s.  273-277 ( ISBN  9781728118642 , DOI  10.1109 / TSP.2019.8768888 )
  • (en) Zijun Hang , Mei Wen , Yang Shi og 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 ) , vol.  8 (9),august 2019, s.  958 ( ISSN  2079-9292 , DOI  10.3390 / elektronikk8090958 )
  • (en) Mihai Budiu og Chris Dodd , “  The P416 Programming Language  ” , ACM Digital Library (Association for Computing Machinery) - ACM SIGOPS Operating Systems Review , vol.  51, n o  1,Oktober-desember 2017, s.  5-14 ( ISSN  1943-586X , DOI  10.1145 / 3139645.3139648 )
  • (en) Radek Isa , Pavel Benacek og Viktor Pus , “  Verification of Generated RTL from P4 Source Code  ” , IEEE 26. International Conference on Network Protocols (ICNP) ,september 2018, s.  444-445 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00065 )
  • (en) Rui Miguel , Salvatore Signorello og Fernando M. V Ramos , "  Named Data Networking with Programmable Switches  " , IEEE 26. internasjonale konferanse om nettverksprotokoller (ICNP) ,september 2018, s.  400-405 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00055 ). Bok brukt til å skrive artikkelen
  • (en) Lucas Freire , Miguel Neves , Alberto Schaeffer-Filho og Marinho Barcellos , “  POSTER: Find Sulnerabilities in P4 Programs with Assertion-based Verification  ” , IEEE Concurrency ,oktober 2017, s.  2495-2497 ( ISBN  9781450349468 , DOI  10.1145 / 3133956.3138837 ). Bok brukt til å skrive artikkelen
  • (no) Cheng Zhang , Jun Bi , Yu Zhou , Jianping Wu , Bingyang Liu , Zhaogeng Li , Abdul Basit Dogar og Yangyang Wang , “  P4DB: On-the-fly debugging of the programmable data plane  ” , IEEE 25. internasjonale konferanse om nettverk Protokoller (ICNP) ,oktober 2017, s.  1-10 ( ISBN  9781509065011 , DOI  10.1109 / ICNP.2017.8117548 ). Bok brukt til å skrive artikkelen
  • (no) Jeferson Santiago Da Silva , François-Raymond Boyer , Laurent-Olivier Chiquette og JM Pierre Langlois , "  Extern Objects in P4: an ROHC Header Compression Scheme Case Study  " , 4. IEEE-konferanse om nettverkssoftwarisering og workshops (NetSoft) ,juni 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 programmer med vera  ” , Proceedings of 2018 konferanse ACM Special Interest Group on datakommunikasjon ,august 2018, s.  518-532 ( ISBN  9781450355674 , DOI  10.1145 / 3230543.3230548 )
  • (en) Peilong Li og Yan Luo , “  P4GPU: Accelerate packet processing of a P4 program with a CPU-GPU heterogeneous architecture  ” , ACM / IEEE Symposium on Architectures for Networking and Communications Systems (ANCS) ,mars 2016, s.  125-126 ( ISBN  9781450341837 , DOI  10.1145 / 2881025.2889480 )
  • (no) Pavel Benáček , Viktor Puš , Hana Kubátová og Tomáš Čejka , “  P4-To-VHDL: Automatic generation of high-speed input and output network blocks  ” , Microprocessors and Microsystems , vol.  56,februar 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 og David Walker , "  P4: programmering av protokolluavhengige pakkeprosessorer  " , ACM SIGCOMM Computer Communication Review , vol.  44, n o  3,juli 2014, s.  87-95 ( ISSN  1943-5819 , DOI  10.1145 / 2656877.2656890 ). Bok brukt til å skrive artikkelen
  • (en) Ali Kheradmand og Grigore Rosu , “  P4K: A Formal Semantics of P4 and Applications  ” , Cornell University ,april 2018( arXiv  1804.01468 )
  • (en) F Paolucci , F Civerchia , A Sgambelluri , A Giorgetti , F Cugini og P Castoldi , “  P4 Edge node muliggjør stateful traffic engineering og cybersikkerhet  ” , IEEE / OSA Journal of Optical Communications and Networking , vol.  11, n o  1,januar 2019, A84-A95 ( ISSN  1943-0639 )
  • (no) Bin Niu , Jiawei Kong , Shaofei Tang , Yingcong Li og Zuqing Zhu , “  Visualiser ditt IP- overoptiske nettverk i sanntid: et P4-basert fleksibelt multilayer In-band Network Telemetry (ML-INT) -system  ” , IEEE Access , vol.  7,juni 2019( ISSN  2169-3536 , DOI  10.1109 / ACCESS.2019.2924332 )
  • (no) Miguel Neves , Lucas Freire , Alberto Schaeffer-Filho og Marinho Barcellos , “  Verification of P4 programs in feasible time using assertions  ” , ACM Digital Library (Association for Computing Machinery) - Prosedyrer fra den 14. internasjonale konferansen om nye nettverkseksperimenter og teknologier ,desember 2018, s.  73-85 ( ISBN  9781450360807 , DOI  10.1145 / 3281411.3281421 )
  • (en) Datta Rakesh , Choi Sean , Chowdhary Anurag og Park Younghee , “  P4Guard: Designing P4 Based Firewall  ” , MILCOM 2018 - 2018 IEEE Military Communications Conference (MILCOM), oktober 2018, s.1-6 ,oktober 2018, s.  1-6 ( ISBN  9781538671856 , DOI  10.1109 / MILCOM.2018.8599726 ). Bok brukt til å skrive artikkelen
  • (en) Jed Liu , William Hallahan , Cole Schlesinger , Milad Sharif , Jeongkeun Lee , Robert Soulé , Han Wang og Călin Caşcaval , “  p4v: praktisk verifisering for programmerbare dataflygplaner  ” , Fremgangsmåten for 2018-konferansen til ACM Special Interest Group on datakommunikasjon ,august 2018, s.  490-503 ( ISBN  9781538671856 , DOI  10.1145 / 3230543.3230582 )

Eksterne linker

Relaterte artikler