P4 es un lenguaje de programación para controlar 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 , permisiva licencia de código, y es mantenido por el Consorcio P4 Idioma, una organización sin fines de lucro organizada por la Fundación Redes abierto .
Paradigma | compilado , específico de dominio , imperativo |
---|---|
Desarrollador | El Consorcio de Idiomas P4 |
Apareció por primera vez | 2013 |
Lanzamiento estable | versión 1.2 [1] / 23 de octubre de 2019 |
Licencia | Estilo Apache |
Extensiones de nombre de archivo | .p4 |
Sitio web | p4 |
Historia
P4 se describió originalmente en un documento SIGCOMM CCR de 2014 titulado “Procesadores de paquetes independientes del protocolo de programación” [2] ; el nombre aliterado se abrevia a "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, fue lanzada entre 2016 y 2017, [4] reemplazando a P4-14, la especificación original de P4.
Diseño
Como el lenguaje está dirigido específicamente a aplicaciones de reenvío de paquetes, la lista de requisitos o opciones de diseño es algo inusual 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: se pueden compilar contra muchos tipos diferentes de máquinas de ejecución, como CPU de propósito general, FPGA , sistema (s) en chip , procesadores de red y ASIC. Estos diferentes tipos de máquinas se conocen como destinos P4 , y cada destino debe proporcionarse junto con un compilador que mapee el código fuente P4 en un modelo de conmutador de destino. El compilador puede estar integrado en el dispositivo de destino, un software que se ejecuta externamente o incluso un servicio en la nube. Como muchos de los objetivos iniciales de los programas P4 se utilizaron para la conmutación de paquetes simple, es muy común escuchar el término "conmutador P4", aunque "objetivo P4" es más formalmente correcto.
Independencia del protocolo
P4 está diseñado para ser independiente del protocolo: el lenguaje no tiene soporte nativo ni siquiera para protocolos comunes como IP, Ethernet, TCP, VxLAN o MPLS . En cambio, el programador 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 del protocolo y el modelo de lenguaje abstracto permiten la reconfigurabilidad: los destinos P4 deberían poder cambiar la forma en que procesan los paquetes (quizás varias veces) después de su implementación. Esta capacidad se asocia tradicionalmente con planos de reenvío construidos en CPU de uso general o procesadores de red , en lugar de los ASIC de función fija . Aunque dentro del lenguaje no hay nada que impida que un objetivo determinado se optimice en torno a un determinado conjunto de protocolos, estas optimizaciones son invisibles para el autor del lenguaje y, en última instancia, pueden reducir los objetivos de flexibilidad y reconfigurabilidad del sistema.
Componentes
Los programas P4 suelen tener los siguientes componentes:
Analizando la lógica
P4 permite la especificación de la lógica de análisis de encabezados de paquetes personalizados [4] que incluye , entre otros, 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 formatos de paquete y proporcionan nombres para los campos dentro del paquete. El lenguaje permite nombres de encabezado personalizados y campos de longitud arbitraria, aunque muchas definiciones de encabezado utilizan nombres de protocolo y anchos de campo ampliamente conocidos. Por ejemplo, una definición de encabezado Ethernet 802.3 podría denominarse "Ethernet" y constar de un campo de 48 bits llamado "dest" seguido de un campo "src" de 48 bits, seguido de un campo de "tipo" de 16 bits. Los nombres en una definición de encabezado se utilizan más adelante en el programa P4 para hacer referencia a estos campos.
Analizadores
El analizador P4 es una máquina de estados finitos que recorre un flujo de bytes entrante y extrae encabezados basados en el gráfico de análisis programado. Un ejemplo simple sería un analizador que extrae los campos de origen y destino de Ethernet y de tipo, luego realiza una extracción adicional basada en el valor en el campo de tipo (los valores comunes pueden ser ipv4, ipv6 o MPLS).
Procesamiento con estado
P4 permite al programador mantener el estado en forma de registros, contadores y medidores. [4]
Tablas de acciones de coincidencia genéricas
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 que el usuario agregue sus reglas de acción de coincidencia a través del plano de control. [4]
Procesamiento de acciones de partido
Fundamental para P4 es el concepto de canalizaciones de acciones coincidentes . Conceptualmente, los paquetes o tramas de red de reenvío se pueden dividir en una serie de búsquedas de tablas y las correspondientes manipulaciones de encabezado. En P4, estas manipulaciones se conocen como acciones y generalmente consisten en cosas como copiar campos de bytes de una ubicación a otra en función de los resultados de la búsqueda en el estado de reenvío aprendido. P4 se dirige solo al 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 usa el concepto de tablas para representar el estado del plano de reenvío. Debe proporcionarse una interfaz entre el plano de control y las diversas tablas P4 para permitir que el plano de control inyecte / modifique el estado en el programa. Esta interfaz se conoce generalmente como API del programa .
Mesas
Las tablas P4 contienen el estado utilizado para reenviar paquetes. Las tablas se componen de claves de búsqueda y un conjunto correspondiente de acciones y sus parámetros. Un ejemplo trivial podría ser almacenar un conjunto de direcciones MAC de destino como claves de búsqueda, y la acción correspondiente podría establecer el puerto de salida en el dispositivo y / o incrementar un contador. Las tablas y sus acciones asociadas casi siempre están encadenadas juntas en secuencia para realizar la lógica de reenvío de paquetes completa, aunque en abstracto es posible construir una sola tabla que incluya toda la información clave de búsqueda y el conjunto de acciones de salida completo.
Comportamiento
Las acciones en P4 describen manipulaciones de metadatos y campos de paquetes . En el contexto P4, los metadatos son información sobre un paquete que no se deriva directamente del analizador, como la interfaz de entrada a la que llegó la trama. Las descripciones en inglés de una acción de ejemplo podrían ser "disminuir el campo TTL de IPv4 en uno" o "copiar la dirección MAC de la tabla del puerto de salida en el encabezado del paquete saliente". [5] P4 define tanto los metadatos estándar que deben proporcionar todos los objetivos como los metadatos específicos del objetivo, que los proporciona el autor de los objetivos específicos.
Flujo de control
El flujo de control en P4 determina la secuencia relativa de tablas y permite la ejecución condicional de tablas basada en construcciones if / then / else.
Referencias
- ^ "Lenguaje P4 y especificaciones relacionadas" . Consultado el 2 de diciembre de 2019 .
- ^ 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" . Revisión de la comunicación informática . Consultado el 7 de abril de 2015 .
- ^ "1er Taller P4" . Sitio web oficial de P4 . Consultado el 1 de agosto de 2019 .
- ^ a b c d "Especificación P4-16" . Sitio web oficial de P4 . Consultado el 23 de octubre de 2019 .
- ^ "Listas de correo P4" . Julio de 2015 . Consultado el 15 de julio de 2015 .
enlaces externos
- Página web oficial