P4 (idioma)

P4 es un lenguaje de programación para expresar la lógica de procesamiento de paquetes dentro de un elemento de comunicación de la red informática , como un conmutador , tarjeta de red, enrutador o dispositivo para realizar acciones en el mismo. El lenguaje de programación P4 fue introducido por algunas universidades a las empresas en 2014 y se describe originalmente en un documento de SIGCOMM CCR titulado "Procesadores de paquetes independientes del protocolo de programación". El nombre común se abrevia al acrónimo "P4".


Idioma de la red P4
Logo.
Desarrolladores El Consorcio de Idiomas P4
Última versión P4 16 , versión 1.2.023 octubre 2019
Licencia Apache 2
Sitio web p4.org

Origen

El primer taller sobre el lenguaje P4 tuvo lugar el 4 de junio de 2015en la Universidad de Stanford fue presidido por Nick McKeown de la Universidad de Stanford y Jennifer Rexford de la Universidad de Princeton . El consorcio P4.org ha publicado la especificación final de la nueva versión del lenguaje denominada P4 16 , enMayo de 2017, en sustitución de la primera versión del idioma, llamada P4 14 .

Principio

Considerado una evolución de las redes definidas por software (SDN) , P4 permite programar la forma en que se procesa el flujo mediante el enrutamiento de paquetes en equipos de transmisión de paquetes de red , como enrutadores , conmutadores o firewalls , ya sea hardware o software. Como sugiere su nombre “Procesadores independientes del protocolo de programación”, el lenguaje no tiene en cuenta el formato de un paquete . De hecho, los desarrolladores declaran el procesamiento de un paquete en un programa escrito en lenguaje P4, y el compilador lo coloca en el formato deseado de acuerdo con el hardware de destino. La programación en lenguaje P4 se utiliza en particular para implementar funciones de transferencia de nivel 3 y funciones INT. La tecnología de telemetría de red en banda permite que los conmutadores de medición proporcionen información detallada sobre la carga de la red y la utilicen para proporcionar mecanismos de control de congestión y, por lo tanto, gestionar mejor la estabilidad de la red de muy alta velocidad.
Hay dos versiones de este idioma: P4 14 y P4 16 . P4 16 realiza cambios significativos y no es retrocompatible con P4 14 . Por lo tanto, muchas características se han eliminado del lenguaje base de P4 14 y ya están o están destinadas a implementarse en bibliotecas externas.

Diagrama básico P4


Operación

P4 tiene como objetivo la programación completa del procesamiento de datos en equipos de red. Este lenguaje es capaz de programar realmente el comportamiento de los equipos de red . Simplemente se puede construir un algoritmo para procesar un paquete IPv4 . El formato real de los paquetes se define simplemente en el programa. El siguiente ejemplo muestra cómo analizar (analizar) una trama de 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 vez realizado el análisis de los paquetes entrantes, se extraen los encabezados y se envían a tablas tipo "Match + Actions". Estas tablas contienen la información de los paquetes correspondientes así como los protocolos que se tienen en cuenta para su enrutamiento. Solo falta especificar las acciones a realizar para los paquetes correspondientes. Una vez creado el programa, basta con compilarlo para que pueda ejecutarse en el hardware deseado.

Sintaxis

Un programa de tipo P4 contiene los atributos de los siguientes componentes clave:

Encabezados (encabezados) Una definición de encabezado que describe la secuencia y estructura de una serie de campos. Incluye la especificación de anchos de campo y restricciones sobre los valores de campo; Analizadores Una definición de analizador especifica cómo identificar encabezados válidos y secuencias de encabezado en paquetes; Mesas Las tablas de coincidencias + acciones son el mecanismo para realizar el procesamiento de paquetes. El programa P4 define los campos en los que puede corresponder una tabla y las acciones que puede realizar; Comportamiento P4 admite la construcción de acciones complejas a partir de primitivas independientes del protocolo más simples. Estas acciones complejas están disponibles en las tablas de coincidencias + acciones; Programas de control El programa de verificación determina el orden de las tablas de coincidencias + acciones que se aplican a un paquete. Un programa imperativo simple describe el flujo de control entre las tablas de coincidencias + acciones. #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;

Compilador

Para ser implementado en el hardware de destino, que puede ser de tipo hardware o software, el programa escrito en P4 debe ser compilado, es decir transformado por el compilador, en un código objeto . Hay dos compiladores, uno usado originalmente para P4 14 , escrito en Python , y otro, desde la versión P4 16 , llamado P4C. Este último, proporcionado por el grupo de desarrolladores P4 "P4 Language Consortium", es compatible con ambas versiones del lenguaje y está implementado en C ++ 11 , bajo la licencia de código abierto Apache 2. El compilador tiene dos analizadores, para cada uno de los dos idiomas. El analizador de programas P4 14 convierte el programa en P4 16 .

P4C realiza un tratamiento de tres partes:

  • Front-end  : Independientemente del hardware de destino, es responsable de realizar varios controles del programa, como la sintaxis, la semántica, para que el código se ajuste a las especificaciones del lenguaje, luego simplifica y optimiza el código según sea necesario;
  • Mid-end: realiza las transformaciones del código para que coincida parcialmente con el objetivo, pero no agrega asignaciones de recursos específicas;
  • Backend  : Se encarga de la asignación de recursos , la programación y la transformación del código a un lenguaje conforme al hardware.


El compilador admite varios tipos de backend  :

p4c-bmv2 genera código en formato JSON para que el programa sea compatible para ser implementado en softswitches; p4c-ebpf genera código en formato C que luego se puede compilar en eBPF; gráficos p4c produce representaciones visuales de un programa P4 (gráficos de flujo de control de alto nivel); p4test prueba el front-end de los programas en P4 16 .

Metas

El lenguaje P4 fue diseñado para cumplir con tres objetivos:

  • Ofrece la posibilidad de actualización o modificación en el sitio: Una vez implementado en el hardware, el programa puede ser modificado en caso de que el procesamiento de los paquetes deba evolucionar.
  • Además, el lenguaje: P4 no está vinculado a ningún protocolo de red y no tiene un procesamiento de paquetes específico, por lo que no tiene una noción predeterminada del formato de un paquete. Esto permite definir nuevos protocolos si es necesario y elimina las restricciones sobre cómo se pueden correlacionar paquetes individuales.
  • El objetivo no se beneficia de ninguna obligación de hardware: al escribir el programa P4, los desarrolladores definen la funcionalidad del procesamiento de paquetes sin preocuparse por las especificaciones del hardware de destino en el que se implementará el programa.

Experimentos

P4 es un lenguaje poco utilizado pero que, a pesar de todo, es objeto de experimentos con diversos objetivos.

Detección de ataques

La implementación de P4 en un conmutador de tipo software muestra que el lenguaje se puede utilizar para la detección de ataques, como los ataques SYN . P4 permite flexibilidad en la memoria asignada a un dispositivo, a diferencia del hardware de red estándar que puede tener memoria de un tamaño fijo. En hardware implementado con P4, es posible cambiar el tamaño de la memoria según sea necesario y, por lo tanto, registrar el tráfico de la red. Por lo tanto, P4 puede ayudar en la seguridad de la red a través de un conocimiento completo del tráfico de datos dentro de la red. Sin embargo, dependiendo de las circunstancias del ataque, la experimentación muestra que la detección del ataque es más difícil.

Monitoreo de la red

P4 permite monitorear y visualizar información sobre el estado de la red a bajo costo. De hecho, a diferencia de SDN que conlleva altos costos para el monitoreo de la red, P4 recupera información sobre el estado de la red (identificación del conmutador, pérdida de paquetes y ocupación de la cola, etc.) sin agregar paquetes de detección adicionales. Una vez recogida esta información, el tráfico se monitoriza en tiempo real según el estado de la red, lo que permite en particular eliminar el fenómeno de la congestión .

Cortafuegos de software

El idioma se puede utilizar para configurar un firewall de software a bajo costo. Sin embargo, en un experimento, se muestra que la efectividad del cortafuegos depende del número de paquetes que pasan. Por lo tanto, si puede ser más rápido que algunos firewalls virtualizados cuando hay menos de 1000 paquetes, tan pronto como se excede este umbral, su eficiencia cae.

Ventajas

Como parte de los experimentos de implementación que se han llevado a cabo, se ha demostrado que el lenguaje P4 tiene varias ventajas.
Así, mejora la seguridad de la red gracias a la implementación de cabeceras y reglas para el procesamiento de flujos que permiten evitar la congestión.
Además, el lenguaje proporciona cierta flexibilidad en términos de hardware de red. De hecho, permite programar el procesamiento de paquetes utilizando únicamente solicitudes y consultas de tablas, independientemente del hardware en el que se implemente, a diferencia del hardware de red tradicional que tiene un lenguaje propietario.
El lenguaje también ofrece la capacidad de analizar marcos y, utilizando el compilador, manejar detalles de bajo nivel como la asignación de recursos , ya que permite desglosar los recursos de almacenamiento y programar.
Con la versión P416 del lenguaje, los creadores del lenguaje pusieron a disposición bibliotecas, lo que supone una ventaja para el desarrollo de determinadas funciones específicas del hardware.

Desventajas

En 2020, el lenguaje P4 es compatible con muy poco hardware, lo que limita su uso. Esto puede explicarse por el hecho de que el lenguaje P4 está en desarrollo activo, los proveedores de hardware esperan que el lenguaje se estabilice y democratice antes de ofrecer el hardware adecuado. P4 también deja muchos detalles sin especificar.
P4 también aumenta el riesgo de incurrir en errores de tiempo de ejecución después de la implementación de programas P4, o errores de implementación del protocolo, por ejemplo. La falta de tiempo de ejecución , el software responsable de ejecutar los programas informáticos, dificulta la solución de estos errores.
Además, dependiendo de la arquitectura de la red, a veces es difícil traducir las especificidades a P4. El lenguaje P4 no define la interfaz entre el plano de datos y el plano de control, es una especificidad vinculada al hardware de destino. P4 solo permite que se realicen acciones dentro de los marcos de la red o cuando se ha encontrado una coincidencia de tabla + acción; las tablas de coincidencia de P4 no pueden coincidir en campos de longitud variable. Por lo tanto, la comparación entre varias variables puede resultar complicada, especialmente cuando se desea encontrar el valor más pequeño, porque P4 solo puede comparar valores entre sí en los objetos de control y puede modificarlos solo si hay una coincidencia. En una tabla . Además, las tablas de correspondencia P4 no pueden realizar correspondencia en campos de longitud variable.

Referencias

  1. 1er Taller P4
  2. Especificación de idioma P416
  3. Martins 2018 , p.  204
  4. Hill 2018 , p.  23
  5. Geng 2018 , p.  2
  6. Budiu 2017 , p.  11
  7. Colina 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. Gráficos P4C
  15. Prueba 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. Colina 2018 , p.  26

Bibliografía

  • (en) Junjie Geng , Jinyao Yan , Yangbiao Ren y Yuan Zhang , "  Diseño e implementación de una arquitectura de programación y supervisión de redes basada en P4  " , ACM (Association for Computing Machinery) - Actas de la 2a Conferencia internacional sobre informática e ingeniería de aplicaciones ,octubre 2018, p.  1-6 ( ISBN  9781450365123 , DOI  10.1145 / 3207677.3278059 ). Libro utilizado para escribir el artículo
  • (en) Belma Turkovic , Fernando Kuipers , Niels van Adrichem y Koen Langendoen , “  Detección y evitación rápida de congestión en la red usando P4  ” , ACM (Asociación de Maquinaria de Computación) - Actas del Taller de 2018 sobre redes para aplicaciones y tecnologías emergentes ,agosto 2018, p.  1-8 ( ISBN  9781450359078 , DOI  10.1145 / 3229574.3229581 ). Libro utilizado para escribir el artículo
  • (en) Joseph Hill , Mitchel Aloserij y Paola Grosso , “  Seguimiento de los flujos de red con P4  ” , IEEE / ACM 2018 Innovating the Network for Data-Intensive Science (INDIS) ,noviembre 2018, p.  36-43 ( ISBN  9781728101941 , DOI  10.1109 / INDIS.2018.00006 ). Libro utilizado para escribir el artículo
  • (en) Jehandad Khan y Peter Athanas , "  Lenguaje de consulta para depuración de redes P4 a gran escala  " , ACM (Asociación de Maquinaria de Computación) - Actas del Simposio de 2018 sobre arquitecturas para sistemas de redes y comunicaciones ,julio 2018, p.  162-164 ( ISBN  9781450359023 , DOI  10.1145 / 3230718.3232108 )
  • (en) Christian Wernecke , Helge Parzyjegla , Gero Muhl , Peter Danielis y Dirk Timmermann , "  Realizing Content-Based Publish / Subscribe with P4  " , Conferencia IEEE 2018 sobre virtualización de funciones de red y redes definidas por software (NFV-SDN) ,noviembre 2018, p.  1-7 ( DOI  10.1109 / NFV-SDN.2018.8725641 ). Libro utilizado para escribir el artículo
  • (en) Regis FT Martins , Fabio L Verdi , Rodolfo Villaca y Luis Fernando U García , “  Uso de estructuras de datos probabilísticas para el monitoreo de redes basadas en P4 de múltiples inquilinos  ” , Simposio IEEE de Computadoras y Comunicaciones (ISCC) 2018 ,junio 2018, p.  204-207 ( ISBN  9781538669501 , DOI  10.1109 / ISCC.2018.8538352 ). Libro utilizado para escribir el artículo
  • (en) Anirudh Sivaraman , Kim Changhoon , Ramkumar Krishnamoorthy , Advait Dixit y Mihai Budiu , "  DC.p4: programación del plano de reenvío de un conmutador de centro de datos  " , Actas del 1er Simposio ACM SIGCOMM sobre investigación de redes definidas por software ,junio 2015, p.  1-8 ( ISBN  9781450334518 , DOI  10.1145 / 2774993.2775007 ). Libro utilizado para escribir el artículo
  • (en) Elie F Kfoury , Jorge Crichigno , Elias Bou-Harb , David Khoury y Gautam Srivastava , "  Habilitación de la estimulación TCP mediante conmutadores de plano de datos programables  " , Publicaciones de la conferencia IEEE - 42a Conferencia internacional sobre telecomunicaciones y procesamiento de señales (TSP) ,julio 2019, p.  273-277 ( ISBN  9781728118642 , DOI  10.1109 / TSP.2019.8768888 )
  • (en) Zijun Hang , Mei Wen , Yang Shi y Chunyuan Zhang , “  Programación de alto nivel de procesadores de paquetes independientes del protocolo de programación (P4HLP): Hacia una programación unificada de alto nivel para un conmutador programable de productos básicos  ” , Directorio de revistas de acceso abierto (DOAJ) ) , vol.  8 (9),agosto 2019, p.  958 ( ISSN  2079-9292 , DOI  10.3390 / electrónica8090958 )
  • (en) Mihai Budiu y Chris Dodd , “  El lenguaje de programación P416  ” , Biblioteca digital ACM (Asociación de maquinaria de computación) - Revisión de sistemas operativos ACM SIGOPS , vol.  51, n o  1,Octubre-diciembre de 2017, p.  5-14 ( ISSN  1943-586X , DOI  10.1145 / 3139645.3139648 )
  • (en) Radek Isa , Pavel Benacek y Viktor Pus , "  Verificación de RTL generado a partir del código fuente P4  " , IEEE 26th International Conference on Network Protocols (ICNP) ,septiembre 2018, p.  444-445 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00065 )
  • (en) Rui Miguel , Salvatore Signorello y Fernando M. V Ramos , “  Redes de datos con nombre con conmutadores programables  ” , IEEE 26th International Conference on Network Protocols (ICNP) ,septiembre 2018, p.  400-405 ( ISBN  9781538660430 , DOI  10.1109 / ICNP.2018.00055 ). Libro utilizado para escribir el artículo
  • (en) Lucas Freire , Miguel Neves , Alberto Schaeffer-Filho y Marinho Barcellos , “  POSTER: Finding Vulnerabilities in P4 Programs with Assertion-based Verification  ” , IEEE Concurrency ,octubre de 2017, p.  2495-2497 ( ISBN  9781450349468 , DOI  10.1145 / 3133956.3138837 ). Libro utilizado para escribir el artículo
  • (en) Cheng Zhang , Jun Bi , Yu Zhou , Jianping Wu , Bingyang Liu , Zhaogeng Li , Abdul Basit Dogar y Yangyang Wang , "  P4DB: Depuración sobre la marcha del plano de datos programable  " , 25ª Conferencia Internacional sobre Redes de IEEE Protocolos (ICNP) ,octubre de 2017, p.  1-10 ( ISBN  9781509065011 , DOI  10.1109 / ICNP.2017.8117548 ). Libro utilizado para escribir el artículo
  • (en) Jeferson Santiago Da Silva , François-Raymond Boyer , Laurent-Olivier Chiquette y JM Pierre Langlois , "  Extern Objects in P4: an ROHC Header Compression Scheme Case Study  " , IV Conferencia IEEE sobre Talleres y Softwarización de Redes (NetSoft) ,junio 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 , “  Depurando programas P4 con vera  ” , Actas de la Conferencia de 2018 del Grupo de Interés Especial de ACM sobre comunicación de datos ,agosto 2018, p.  518-532 ( ISBN  9781450355674 , DOI  10.1145 / 3230543.3230548 )
  • (en) Peilong Li y Yan Luo , "  P4GPU: Acelere el procesamiento de paquetes de un programa P4 con una arquitectura heterogénea CPU-GPU  " , Simposio ACM / IEEE sobre arquitecturas para sistemas de redes y comunicaciones (ANCS) ,marzo de 2016, p.  125-126 ( ISBN  9781450341837 , DOI  10.1145 / 2881025.2889480 )
  • (en) Pavel Benáček , Viktor Puš , Hana Kubátová y Tomáš Čejka , “  P4-To-VHDL: generación automática de bloques de red de entrada y salida de alta velocidad  ” , Microprocesadores y microsistemas , vol.  56,febrero 2018, p.  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 y David Walker , "  P4: procesadores de paquetes independientes del protocolo de programación  " , ACM SIGCOMM Computer Revisión de la comunicación , vol.  44, n o  3,julio 2014, p.  87-95 ( ISSN  1943-5819 , DOI  10.1145 / 2656877.2656890 ). Libro utilizado para escribir el artículo
  • (en) Ali Kheradmand y Grigore Rosu , "  P4K: A Formal Semantics of P4 and Applications  " , Cornell University ,abril de 2018( arXiv  1804.01468 )
  • (en) F Paolucci , F Civerchia , A Sgambelluri , A Giorgetti , F Cugini y P Castoldi , “  Nodo de borde P4 que permite la ingeniería de tráfico con estado y la seguridad cibernética  ” , IEEE / OSA Journal of Optical Communications and Networking , vol.  11, n o  1,enero 2019, A84-A95 ( ISSN  1943-0639 )
  • (en) Bin Niu , Jiawei Kong , Shaofei Tang , Yingcong Li y Zuqing Zhu , “  Visualice su red IP sobre óptica en tiempo real: un sistema de telemetría de red multicapa flexible en banda (ML-INT) basado en P4  ” , IEEE Acceso , vol.  7,junio de 2019( ISSN  2169-3536 , DOI  10.1109 / ACCESS.2019.2924332 )
  • (en) Miguel Neves , Lucas Freire , Alberto Schaeffer-Filho y Marinho Barcellos , “  Verificación de programas P4 en tiempo factible mediante afirmaciones  ” , Biblioteca Digital ACM (Asociación de Maquinaria de Computación) - Actas de la 14a Conferencia Internacional sobre experimentos emergentes de redes y tecnologías ,diciembre 2018, p.  73-85 ( ISBN  9781450360807 , DOI  10.1145 / 3281411.3281421 )
  • (en) Datta Rakesh , Choi Sean , Chowdhary Anurag y Park Younghee , “  P4Guard: Designing P4 Based Firewall  ” , MILCOM 2018 - 2018 IEEE Military Communications Conference (MILCOM), octubre de 2018, págs .octubre 2018, p.  1-6 ( ISBN  9781538671856 , DOI  10.1109 / MILCOM.2018.8599726 ). Libro utilizado para escribir el artículo
  • (en) Jed Liu , William Hallahan , Cole Schlesinger , Milad Sharif , Jeongkeun Lee , Robert Soulé , Han Wang y Călin Caşcaval , "  p4v: verificación práctica para planos de datos programables  " , Actas de la Conferencia de 2018 del Grupo de Interés Especial ACM sobre comunicación de datos ,agosto 2018, p.  490-503 ( ISBN  9781538671856 , DOI  10.1145 / 3230543.3230582 )

enlaces externos

Artículos relacionados