P4 (lingua)

P4 è un linguaggio di programmazione per esprimere la logica di elaborazione dei pacchetti all'interno di un elemento di comunicazione di rete di computer come uno switch , una scheda di rete, un router o un'appliance al fine di eseguire azioni su di essi. Il linguaggio di programmazione P4 è stato introdotto da alcune università alle imprese nel 2014 ed è originariamente descritto in un documento SIGCOMM CCR intitolato "Programming Protocol-Independent Packet Processors". Il nome comune viene abbreviato con l'acronimo "P4".


P4 Network Language
Logo.
Sviluppatori Il P4 Language Consortium
Ultima versione P4 16 , versione 1.2.023 ottobre 2019
Licenza Apache 2
Sito web p4.org

Origine

Si è svolto il primo workshop sulla lingua P4 4 giugno 2015alla Stanford University è stato presieduto da Nick McKeown della Stanford University e Jennifer Rexford della Princeton University . Il consorzio P4.org ha pubblicato la specifica finale della nuova versione del linguaggio chiamato P4 16 , inMaggio 2017, in sostituzione della prima versione del linguaggio, denominata P4 14 .

Principio

Considerato un'evoluzione del Software Defined Networking (SDN) , P4 consente di programmare il modo in cui il flusso viene gestito dall'instradamento dei pacchetti su apparecchiature di trasmissione di pacchetti di rete come router , switch o firewall , hardware o software. Come indica il nome "Processori indipendenti dal protocollo di programmazione", la lingua non tiene conto del formato di un pacchetto . Infatti, gli sviluppatori dichiarano l'elaborazione di un pacchetto in un programma scritto in linguaggio P4, e il compilatore lo inserisce nel formato desiderato in base all'hardware di destinazione. La programmazione in linguaggio P4 viene utilizzata in particolare per implementare le funzioni di trasferimento di livello 3 e le funzioni INT. La tecnologia di telemetria di rete in banda consente agli interruttori di misurazione di fornire informazioni dettagliate sul carico di rete e utilizzarle per fornire meccanismi di controllo della congestione e quindi gestire meglio la stabilità della rete ad altissima velocità.
Esistono due versioni di questa lingua: P4 14 e P4 16 . P4 16 apporta modifiche significative e non è retrocompatibile con P4 14 . Pertanto, molte funzionalità sono state rimosse dal linguaggio di base del P4 14 e sono già o sono destinate ad essere implementate in librerie esterne.

Schema di base P4


Operazione

P4 mira alla completa programmazione dell'elaborazione dei dati sugli apparati di rete. Questo linguaggio è in grado di programmare effettivamente il comportamento delle apparecchiature di rete . Un algoritmo per l'elaborazione di un pacchetto IPv4 può essere semplicemente costruito. Il formato effettivo dei pacchetti è semplicemente definito nel programma. L'esempio seguente mostra come analizzare (analizzare) un frame 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; } }

Una volta effettuata l'analisi dei pacchetti in arrivo, gli header vengono estratti e inviati a tabelle di tipo "Match + Actions". Queste tabelle contengono le informazioni dei pacchetti corrispondenti nonché i protocolli presi in considerazione per il loro instradamento. Non resta che specificare le azioni da eseguire per i pacchetti corrispondenti. Una volta creato il programma, è sufficiente compilarlo in modo che possa funzionare sull'hardware desiderato.

Sintassi

Un programma di tipo P4 contiene gli attributi dei seguenti componenti chiave:

Intestazioni (intestazioni) Una definizione di intestazione che descrive la sequenza e la struttura di una serie di campi. Include la specifica delle larghezze dei campi e dei vincoli sui valori dei campi; Parser Una definizione del parser specifica come identificare intestazioni e sequenze di intestazione valide nei pacchetti; Tabelle Le tabelle Match + action sono il meccanismo per eseguire l'elaborazione dei pacchetti. Il programma P4 definisce i campi sui quali può corrispondere una tabella e le azioni che può compiere; Azioni P4 supporta la costruzione di azioni complesse da primitive più semplici e indipendenti dal protocollo. Queste azioni complesse sono disponibili nelle tabelle match + action; Programmi di controllo Il programma di controllo determina l'ordine delle tabelle match + action che vengono applicate a un pacchetto. Un semplice programma imperativo descrive il flusso di controllo tra le tabelle 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;

Compilatore

Per essere implementato sull'hardware di destinazione, che può essere di tipo hardware o software, il programma scritto in P4 deve essere compilato, cioè trasformato dal compilatore, in un codice oggetto . Ci sono due compilatori, uno originariamente usato per P4 14 , scritto in Python , e un altro, dalla versione P4 16 , chiamato P4C. Quest'ultimo, fornito dal gruppo di sviluppatori P4 "P4 Language Consortium", è compatibile con entrambe le versioni del linguaggio ed è implementato in C ++ 11 , sotto la licenza open source Apache 2. Il compilatore ha due analizzatori, per ciascuno dei le due lingue. L'analizzatore di programma P4 14 converte il programma in P4 16 .

P4C esegue un trattamento in tre parti:

  • Front-end  : indipendentemente dall'hardware di destinazione, è responsabile dell'esecuzione di vari controlli del programma come sintassi, semantica, in modo che il codice sia conforme alle specifiche del linguaggio, quindi semplifica e ottimizza il codice secondo necessità;
  • Mid-end: esegue le trasformazioni del codice in modo che corrisponda parzialmente al target, ma non aggiunge assegnazioni di risorse specifiche;
  • Backend  : è responsabile dell'allocazione delle risorse , della schedulazione e della trasformazione del codice in un linguaggio conforme all'hardware.


Il compilatore supporta diversi tipi di backend  :

p4c-bmv2 genera codice in formato JSON in modo che il programma sia compatibile per essere implementato su softswitch; p4c-ebpf genera codice in formato C che può poi essere compilato in eBPF; p4c-grafici produce rappresentazioni visive di un programma P4 (grafici di flusso di controllo di alto livello); p4test testa il front-end dei programmi in P4 16 .

Obiettivi

Il linguaggio P4 è stato progettato per soddisfare tre obiettivi:

  • Offre la possibilità di upgrade o modifiche in loco: una volta distribuito sull'hardware, il programma può essere modificato nel caso in cui l'elaborazione dei pacchetti debba evolversi.
  • Inoltre, il linguaggio: P4 non è collegato a nessun protocollo di rete e nessuna elaborazione specifica del pacchetto, quindi non ha una nozione predeterminata del formato di un pacchetto. Ciò consente di definire nuovi protocolli, se necessario, e rimuove i vincoli su come i singoli pacchetti possono essere correlati.
  • Il target non beneficia di alcun obbligo hardware: durante la scrittura del programma P4, gli sviluppatori definiscono la funzionalità dell'elaborazione del pacchetto senza preoccuparsi delle specifiche dell'hardware target su cui il programma deve essere implementato.

Esperimenti

P4 è un linguaggio poco utilizzato ma che è ugualmente oggetto di esperimenti con diversi obiettivi.

Rilevamento degli attacchi

L'implementazione di P4 su uno switch di tipo software mostra che il linguaggio può essere utilizzato per il rilevamento di attacchi, come gli attacchi SYN . P4 consente flessibilità nella memoria allocata a un dispositivo, a differenza dell'hardware di rete standard che può avere memoria di dimensioni fisse. Su hardware implementato con P4, è possibile modificare la dimensione della memoria secondo necessità e quindi registrare il traffico di rete. Pertanto, P4 può aiutare nella sicurezza della rete attraverso una conoscenza completa del traffico dati all'interno della rete. Tuttavia, a seconda delle circostanze dell'attacco, la sperimentazione mostra che il rilevamento dell'attacco è più difficile.

Monitoraggio della rete

P4 permette di monitorare e visualizzare informazioni sullo stato della rete a costi contenuti. Infatti, a differenza di SDN che comporta costi elevati per il monitoraggio della rete, P4 recupera le informazioni sullo stato della rete (identificazione dello switch, perdita di pacchetti e occupazione della coda, ecc.) Senza aggiungere ulteriori pacchetti di rilevamento. Una volta raccolte queste informazioni, il traffico viene monitorato in tempo reale in base allo stato della rete, il che consente in particolare di eliminare il fenomeno della congestione .

Firewall software

La lingua può essere utilizzata per configurare un firewall software a basso costo. Tuttavia in un esperimento è stato dimostrato che l'efficacia del firewall dipende dal numero di pacchetti che passano. Pertanto, se può essere più veloce di alcuni firewall virtualizzati quando ci sono meno di 1000 pacchetti, non appena questa soglia viene superata, la sua efficienza diminuisce.

Benefici

Come parte degli esperimenti di implementazione che hanno avuto luogo, è stato dimostrato che il linguaggio P4 ha diversi vantaggi.
Migliora così la sicurezza della rete grazie all'implementazione di intestazioni e regole per l'elaborazione dei flussi che permettono di evitare congestioni.
Inoltre, il linguaggio fornisce una certa flessibilità in termini di hardware di rete. Permette infatti di programmare l'elaborazione dei pacchetti utilizzando solo richieste e consultazioni di tabelle, indipendentemente dall'hardware su cui è implementato, a differenza dei tradizionali hardware di rete che hanno un linguaggio proprietario.
Il linguaggio offre anche la possibilità di analizzare i frame e, utilizzando il compilatore, di gestire dettagli di basso livello come l' allocazione delle risorse , poiché consente la suddivisione e la pianificazione delle risorse di archiviazione.
Con la versione P416 del linguaggio, i creatori del linguaggio hanno reso disponibili le librerie, il che è un vantaggio per lo sviluppo di alcune funzioni specifiche dell'hardware.

Svantaggi

Nel 2020, il linguaggio P4 è supportato da pochissimo hardware, il che ne limita l'utilizzo. Ciò può essere spiegato dal fatto che il linguaggio P4 è in fase di sviluppo attivo, i fornitori di hardware attendono che il linguaggio si stabilizzi e si democratizzi prima di offrire hardware adatto. P4 lascia anche molti dettagli non specificati.
P4 aumenta anche il rischio di incorrere in bug di runtime dopo la distribuzione di programmi P4 o errori di implementazione del protocollo, ad esempio. La mancanza di runtime , il software responsabile dell'esecuzione dei programmi per computer, rende difficile la risoluzione di questi bug.
Inoltre, a seconda dell'architettura di rete, a volte è difficile tradurre le specificità in P4. Il linguaggio P4 non definisce l'interfaccia tra il piano dati e il piano di controllo, è una specificità legata all'hardware di destinazione. P4 consente solo di eseguire azioni all'interno di frame di rete o quando è stata trovata una corrispondenza tabella + azione; le tabelle di corrispondenza di P4 non possono corrispondere su campi di lunghezza variabile. Pertanto, il confronto tra più variabili può essere complicato, soprattutto quando si desidera trovare il valore più piccolo, perché P4 può solo confrontare i valori tra loro negli oggetti di controllo e può modificarli solo se c'è una corrispondenza. In una tabella . Inoltre, le tabelle di corrispondenza P4 non possono eseguire corrispondenze su campi di lunghezza variabile.

Riferimenti

  1. 1 ° seminario P4
  2. Specifiche della lingua P416
  3. Martins 2018 , p.  204
  4. Hill 2018 , p.  23
  5. Geng 2018 , p.  2
  6. Budiu 2017 , pag.  11
  7. Hill 2018 , p.  24
  8. Wernecke 2018 , p.  2
  9. Bosshart 2014 , p.  91
  10. P4C C ++
  11. Sivaraman 2015 , p.  2
  12. P4C bmv2
  13. P4C ebpf
  14. Grafici P4C
  15. Test P4C
  16. Bosshart 2014 , p.  89
  17. Geng 2018 , p.  3
  18. Geng 2018 , p.  5
  19. Turkovic 2018 , p.  45
  20. Rakesh 2018 , p.  69
  21. Hill 2018 , p.  31
  22. Zhang 2017 , p.  1714
  23. Freire 2017 , p.  2495
  24. Miguel 2018 , p.  31
  25. Hill 2018 , p.  26

Bibliografia

  • (en) Junjie Geng , Jinyao Yan , Yangbiao Ren e Yuan Zhang , "  Design and Implementation of Network Monitoring and Scheduling Architecture Based on P4  " , ACM (Association for Computing Machinery) - Atti della 2a Conferenza Internazionale su informatica e ingegneria delle applicazioni ,ottobre 2018, p.  1-6 ( ISBN  9781450365123 , DOI  10.1145 / 3207677.3278059 ). Libro utilizzato per scrivere l'articolo
  • (en) Belma Turkovic , Fernando Kuipers , Niels van Adrichem e Koen Langendoen , "  Rilevamento ed evitamento rapido della congestione della rete utilizzando P4  " , ACM (Association for Computing Machinery) - Atti del seminario 2018 sul networking per applicazioni e tecnologie emergenti ,agosto 2018, p.  1-8 ( ISBN  9781450359078 , DOI  10.1145 / 3229574.3229581 ). Libro utilizzato per scrivere l'articolo
  • (en) Joseph Hill , Mitchel Aloserij e Paola Grosso , "  Tracking Network Flows with P4  " , 2018 IEEE / ACM Innovating the Network for Data-Intensive Science (INDIS) ,novembre 2018, p.  36-43 ( ISBN  9781728101941 , DOI  10.1109 / INDIS.2018.00006 ). Libro utilizzato per scrivere l'articolo
  • (en) Jehandad Khan e Peter Athanas , "  Query language for large-scale P4 network debugging  " , ACM (Association for Computing Machinery) - Atti del simposio 2018 sulle architetture per reti e sistemi di comunicazione ,luglio 2018, p.  162-164 ( ISBN  9781450359023 , DOI  10.1145 / 3230718.3232108 )
  • (it) Christian Wernecke , Helge Parzyjegla , Gero Muhl , Peter Danielis e Dirk Timmermann , "  Realizing Content-Based Publish / Subscribe with P4  " , 2018 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN) ,novembre 2018, p.  1-7 ( DOI  10.1109 / NFV-SDN.2018.8725641 ). Libro utilizzato per scrivere l'articolo
  • (en) Regis FT Martins , Fabio L Verdi , Rodolfo Villaca e Luis Fernando U Garcia , "  Using Probabilistic Data Structures for Monitoring of Multi-tenant P4-based Networks  " , 2018 IEEE Symposium on Computers and Communications (ISCC) ,giugno 2018, p.  204-207 ( ISBN  9781538669501 , DOI  10.1109 / ISCC.2018.8538352 ). Libro utilizzato per scrivere l'articolo
  • (en) Anirudh Sivaraman , Kim Changhoon , Ramkumar Krishnamoorthy , Advait Dixit e Mihai Budiu , "  DC.p4: programming the forwarding plane of a data-center switch  " , Atti del 1 ° simposio ACM SIGCOMM sulla ricerca di reti definite dal software ,giugno 2015, p.  1-8 ( ISBN  9781450334518 , DOI  10.1145 / 2774993.2775007 ). Libro utilizzato per scrivere l'articolo
  • (en) Elie F Kfoury , Jorge Crichigno , Elias Bou-Harb , David Khoury e Gautam Srivastava , "  Enabling TCP Pacing using Programmable Data Plane Switches  " , IEEE Conference Publications - 42nd International Conference on Telecommunications and Signal Processing (TSP) ,luglio 2019, p.  273-277 ( ISBN  9781728118642 , DOI  10.1109 / TSP.2019.8768888 )
  • (en) Zijun Hang , Mei Wen , Yang Shi e 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),agosto 2019, p.  958 ( ISSN  2079-9292 , DOI  10.3390 / elettronica 8090958 )
  • (it) Mihai Budiu e Chris Dodd , "  The P416 Programming Language  " , ACM Digital Library (Association for Computing Machinery) - ACM SIGOPS Operating Systems Review , vol.  51, n o  1,Ottobre-dicembre 2017, p.  5-14 ( ISSN  1943-586X , DOI  10.1145 / 3139645.3139648 )
  • (en) Radek Isa , Pavel Benacek e Viktor Pus , "  Verification of Generated RTL from P4 Source Code  " , IEEE 26th International Conference on Network Protocols (ICNP) ,settembre 2018, p.  444-445 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00065 )
  • (en) Rui Miguel , Salvatore Signorello e Fernando M. V Ramos , "  Named Data Networking with Programmable Switches  " , IEEE 26th International Conference on Network Protocols (ICNP) ,settembre 2018, p.  400-405 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00055 ). Libro utilizzato per scrivere l'articolo
  • (en) Lucas Freire , Miguel Neves , Alberto Schaeffer-Filho e Marinho Barcellos , "  POSTER: Finding Vulnerabilities in P4 Programs with Assertion-based Verification  " , IEEE Concurrency ,ottobre 2017, p.  2495-2497 ( ISBN  9781450349468 , DOI  10.1145 / 3133956.3138837 ). Libro utilizzato per scrivere l'articolo
  • (it) Cheng Zhang , Jun Bi , Yu Zhou , Jianping Wu , Bingyang Liu , Zhaogeng Li , Abdul Basit Dogar e Yangyang Wang , "  P4DB: debugging al volo del piano dati programmabile  " , 25a conferenza internazionale IEEE sulla rete Protocolli (ICNP) ,ottobre 2017, p.  1-10 ( ISBN  9781509065011 , DOI  10.1109 / ICNP.2017.8117548 ). Libro utilizzato per scrivere l'articolo
  • (en) Jeferson Santiago Da Silva , François-Raymond Boyer , Laurent-Olivier Chiquette e JM Pierre Langlois , "  Extern Objects in P4: an ROHC Header Compression Scheme Case Study  " , 4th IEEE Conference on Network Softwarization and Workshops (NetSoft) ,giugno 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  " , Atti della Conferenza 2018 del Gruppo di Interesse Speciale ACM sulla comunicazione dei dati ,agosto 2018, p.  518-532 ( ISBN  9781450355674 , DOI  10.1145 / 3230543.3230548 )
  • (en) Peilong Li e Yan Luo , "  P4GPU: Accelera l'elaborazione dei pacchetti di un programma P4 con un'architettura eterogenea CPU-GPU  " , ACM / IEEE Symposium on Architectures for Networking and Communications Systems (ANCS) ,marzo 2016, p.  125-126 ( ISBN  9781450341837 , DOI  10.1145 / 2881025.2889480 )
  • (en) Pavel Benáček , Viktor Puš , Hana Kubátová e Tomáš Čejka , "  P4-To-VHDL: generazione automatica di blocchi di rete di ingresso e uscita ad alta velocità  " , Microprocessors and Microsystems , vol.  56,febbraio 2018, p.  22-33 ( ISBN  978-1-7281-0194-1 , DOI  10.1016 / j.micpro.2017.10.012 )
  • (it) Pat Bosshart , Dan Daly , Glen Gibb , Martin Izzard , Nick Mckeown , Jennifer Rexford , Cole Schlesinger , Dan Talayco , Amin Vahdat , George Varghese e David Walker , "  P4: programming protocol-independent packet processors  " , ACM SIGCOMM Computer Communication Review , vol.  44, n o  3,luglio 2014, p.  87-95 ( ISSN  1943-5819 , DOI  10.1145 / 2656877.2656890 ). Libro utilizzato per scrivere l'articolo
  • (en) Ali Kheradmand e Grigore Rosu , "  P4K: A Formal Semantics of P4 and Applications  " , Cornell University ,aprile 2018( arXiv  1804.01468 )
  • (en) F Paolucci , F Civerchia , A Sgambelluri , A Giorgetti , F Cugini e P Castoldi , "  P4 Edge node enable stateful traffic engineering and cyber security  " , IEEE / OSA Journal of Optical Communications and Networking , vol.  11, n o  1,gennaio 2019, A84-A95 ( ISSN  1943-0639 )
  • (it) Bin Niu , Jiawei Kong , Shaofei Tang , Yingcong Li e Zuqing Zhu , "  Visualizza la tua rete IP su rete ottica in tempo reale: un sistema di telemetria di rete in banda flessibile multistrato (ML-INT) basato su P4  " , IEEE Access , vol.  7,giugno 2019( ISSN  2169-3536 , DOI  10.1109 / ACCESS.2019.2924332 )
  • (en) Miguel Neves , Lucas Freire , Alberto Schaeffer-Filho e Marinho Barcellos , "  Verifica dei programmi P4 in tempo fattibile utilizzando asserzioni  " , ACM Digital Library (Association for Computing Machinery) - Atti della 14a conferenza internazionale sugli esperimenti di rete emergenti e tecnologie ,dicembre 2018, p.  73-85 ( ISBN  9781450360807 , DOI  10.1145 / 3281411.3281421 )
  • (en) Datta Rakesh , Choi Sean , Chowdhary Anurag e Park Younghee , "  P4Guard: Designing P4 Based Firewall  " , MILCOM 2018 - 2018 IEEE Military Communications Conference (MILCOM), ottobre 2018, pagg . 1-6 ,ottobre 2018, p.  1-6 ( ISBN  9781538671856 , DOI  10.1109 / MILCOM.2018.8599726 ). Libro utilizzato per scrivere l'articolo
  • (en) Jed Liu , William Hallahan , Cole Schlesinger , Milad Sharif , Jeongkeun Lee , Robert Soulé , Han Wang e Călin Caşcaval , "  p4v: practice verify for programmable data planes  " , Atti della Conferenza 2018 del Gruppo di interesse speciale comunicazione dei dati ,agosto 2018, p.  490-503 ( ISBN  9781538671856 , DOI  10.1145 / 3230543.3230582 )

link esterno

Articoli Correlati