Articulo de referencia

P4 (lenguaje de programación)

P4 es un lenguaje de programación para controlar los planos de reenvío de paquetes en dispositivos de red, como enrutadores y conmutadores. A diferencia de un lenguaje de propós...

P4 es un lenguaje de programación para controlar los planos de reenvío de paquetes en dispositivos de red, como enrutadores y conmutadores. A diferencia de un lenguaje de propósito general como C o Python , P4 es un lenguaje específico de dominio con una serie de construcciones optimizadas para el reenvío de datos de red . P4 se distribuye como código abierto con licencia permisiva y es mantenido por el Proyecto P4 (anteriormente Consorcio del Lenguaje P4), una organización sin fines de lucro alojada por la Open Networking Foundation .

Historia

P4 se describió originalmente en un documento de SIGCOMM CCR de 2014 titulado “Programming Protocol-Independent Packet Processors” [ 2 ] —el nombre aliterativo se abrevia como “P4”. El primer taller de P4 tuvo lugar en junio de 2015 en la Universidad de Stanford . [ 3 ] Una especificación actualizada de P4, llamada P4-16, se publicó entre 2016 y 2017, [ 4 ] reemplazando a P4-14, la especificación original de P4.

Diseño

Dado que el lenguaje está específicamente orientado a aplicaciones de reenvío de paquetes, la lista de requisitos o decisiones de diseño es algo específica para esos casos de uso. El lenguaje está diseñado para cumplir varios objetivos:

Independencia del objetivo

Los programas P4 están diseñados para ser independientes de la implementación: pueden compilarse para diversos tipos de máquinas de ejecución, como CPU de propósito general, FPGA , sistemas en chip (SOC) , procesadores de red y ASIC. Estos distintos tipos de máquinas se conocen como objetivos P4 , y cada objetivo debe ir acompañado de un compilador que adapte el código fuente P4 a un modelo de conmutador de destino. El compilador puede estar integrado en el dispositivo de destino, ser un software externo o incluso un servicio en la nube. Dado que muchos de los objetivos iniciales para programas P4 se utilizaban para la conmutación de paquetes simple, es muy común escuchar el término "conmutador P4", aunque "objetivo P4" sea más formalmente correcto.

Independencia del protocolo

P4 está diseñado para ser independiente del protocolo: el lenguaje no tiene soporte nativo para protocolos comunes como IP, Ethernet, TCP, VxLAN o MPLS . En cambio, el programador de P4 describe los formatos de encabezado y los nombres de campo de los protocolos requeridos en el programa, que a su vez son interpretados y procesados ​​por el programa compilado y el dispositivo de destino.

Reconfigurabilidad

La independencia de protocolo y el modelo de lenguaje abstracto permiten la reconfigurabilidad: los dispositivos P4 deberían poder modificar la forma en que procesan los paquetes (quizás varias veces) después de su implementación. Esta capacidad se asocia tradicionalmente con los planos de reenvío basados ​​en CPU de propósito general o procesadores de red , en lugar de los ASIC de función fija . Si bien el lenguaje no impide que un dispositivo se optimice en torno a un conjunto específico de protocolos, estas optimizaciones son invisibles para el autor del lenguaje y, en última instancia, pueden reducir la flexibilidad y la reconfigurabilidad del sistema.

Componentes

Los programas P4 suelen tener los siguientes componentes:

Lógica de análisis sintáctico

P4 permite especificar una lógica de análisis de encabezados de paquetes personalizada [ 4 ] que incluye, entre otras cosas, el análisis de encabezados típicos utilizados en el conjunto de protocolos TCP/IP y encabezados específicos de la aplicación.

Encabezados

Las definiciones de encabezado describen los formatos de los paquetes y proporcionan nombres para los campos que contienen. El lenguaje permite personalizar los nombres de los encabezados y los campos, con longitudes arbitrarias, aunque muchas definiciones utilizan nombres de protocolo y anchos de campo ampliamente conocidos. Por ejemplo, una definición de encabezado Ethernet 802.3 podría llamarse "Ethernet" y constar de un campo de 48 bits llamado "dest", seguido de un campo de 48 bits llamado "src" y, finalmente, un campo de 16 bits llamado "type". Los nombres en una definición de encabezado se utilizan posteriormente en el programa P4 para hacer referencia a estos campos.

analizadores sintácticos

El analizador P4 es una máquina de estados finitos que recorre un flujo de bytes entrante y extrae las cabeceras según el grafo de análisis programado. Un ejemplo sencillo sería un analizador que extrae los campos de origen y destino Ethernet y el tipo, y luego realiza una extracción adicional basada en el valor del campo de tipo (los valores comunes podrían ser ipv4, ipv6 o MPLS).

Procesamiento con estado

P4 permite al programador mantener el estado en forma de registros, contadores y medidores. [ 4 ]

Tablas genéricas de acciones de coincidencia

El componente principal de un programa P4 es un conjunto de tablas de acciones de coincidencia definidas por el usuario. P4 trata todas las tablas de acciones de coincidencia como genéricas, dejando al usuario la tarea de agregar sus reglas de acción de coincidencia a través del plano de control. [ 4 ]

Procesamiento de coincidencia de acciones

Fundamental para P4 es el concepto de pipelines de coincidencia-acción . Conceptualmente, el reenvío de paquetes o tramas de red se puede dividir en una serie de búsquedas en tablas y manipulaciones de encabezados correspondientes. En P4, estas manipulaciones se conocen como acciones y generalmente consisten en cosas como copiar campos de bytes de una ubicación a otra según los resultados de la búsqueda en el estado de reenvío aprendido. P4 solo aborda el plano de datos de un dispositivo de reenvío de paquetes. No especifica el plano de control ni ningún protocolo exacto para comunicar el estado entre los planos de control y de datos. En cambio, P4 utiliza el concepto de tablas para representar el estado del plano de reenvío. Se debe proporcionar una interfaz entre el plano de control y las diversas tablas de P4 para permitir que el plano de control inyecte/modifique el estado en el programa. Esta interfaz generalmente se conoce como la API del programa .

Tablas

Las tablas P4 contienen el estado utilizado para reenviar paquetes. Estas tablas se componen de claves de búsqueda y un conjunto correspondiente de acciones y sus parámetros. Un ejemplo sencillo sería almacenar un conjunto de direcciones MAC de destino como claves de búsqueda, y la acción correspondiente podría configurar el puerto de salida del dispositivo o incrementar un contador. Las tablas y sus acciones asociadas casi siempre se encadenan secuencialmente para implementar la lógica completa de reenvío de paquetes, aunque en abstracto es posible construir una única tabla que incluya toda la información de las claves de búsqueda y el conjunto completo de acciones de salida.

Comportamiento

Las acciones en P4 describen manipulaciones de campos y metadatos de paquetes . En el contexto de P4, los metadatos son información sobre un paquete que no se deriva directamente del analizador, como la interfaz de entrada por la que llegó la trama. Ejemplos de descripciones en inglés de una acción podrían ser "disminuir el campo TTL de IPv4 en uno" o "copiar la dirección MAC de la tabla de puertos de salida en la cabecera del paquete saliente". [ 5 ] P4 define tanto metadatos estándar que deben proporcionar todos los destinos como metadatos específicos del destino, que proporciona el autor de destinos específicos.

Flujo de control

El flujo de control en P4 determina la secuencia relativa de las tablas y permite la ejecución condicional de las mismas basándose en construcciones if/then/else.

Referencias

  1. ^ "Especificación del lenguaje P416" . Consultado el 23 de marzo de 2026 .
  2. ^ P. Bosshart; D. Daly; G. Gibb; M. Izzard; N. McKeown; J. Rexford; C. Schlesinger; D. Talayco; A. Vahdat; G. Varghese; D. Walker (julio de 2014). "P4: Procesadores de paquetes independientes del protocolo de programación" . Computer Communication Review . Recuperado el 9 de junio de 2025 .
  3. ^ "Primer taller P4" . Sitio web oficial de P4 . 4 de junio de 2015. Consultado el 1 de agosto de 2019 .
  4. ^ a b c d "Especificaciones" . Sitio web oficial de P4 . Consultado el 7 de junio de 2022 .
  5. ^ "Listas de correo P4" . Julio de 2015. Consultado el 15 de julio de 2015 .
  • Sitio web oficial
Obtenido de " https://en.wikipedia.org/w/index.php?title=P4_(programming_language)&oldid=1345047890 "