Hintergrund und Motivation zur Entwicklung der Programmiersprache P4

In klassischen Netzwerkwerkgeräten wie Switche und Router sind die Prozesse und Algorithmen zur Verarbeitung von Datenpaketen proprietär und in der Regel durch den Betreiber nicht bzw. nur eingeschränkt anpassbar. Die Einführung neuer Netzwerkfunktionen auf bestehenden Systemen ist langwierig, kostenintensiv und steht nicht selten im diametralen Verhältnis zu den wirtschaftlichen Interessen der Gerätehersteller, die neue Netzwerkfunktion erst mit Einführung neuer Technik zur Verfügung stellen.

Eine weitere Herausforderung, der die Netzbetreiber gegenüberstehen, sind die dynamischen Anforderungen an die heutigen Datennetze. Netzwerke müssen in der Lage sein, sich dem steigenden Datenverkehr flexibel anzupassen, Lastspitzen schnell abzufangen und Echtzeitkritischen Anwendungen hohe Übertragungsgeschwindigkeiten und niedrigen Laufzeiten bereitstellen. Mit der herkömmlichen Systemarchitektur können diese Anforderungen nicht mit verhältnismäßigem Aufwand bedient werden.

Mit Einführung des Software Defined Networks (SDN) und der Trennung von Hardware und Software in Netzwerkgeräten wurden die entscheidenden Weichen für eine flexible und effiziente Netzbewirtschaftung gelegt. Während die Software (Control-Plane) entscheidet, wohin Datenpakete geleitet werden, erfolgt die tatsächliche Weiterleitung der Datenpakete durch die Hardware (Data-Plane). Ein weiteres Kernprinzip von SDN ist die Programmierbarkeit von Netzwerkfunktionen, die eine schnelle Umsetzung von Anpassungsbedarfen ermöglichen soll. Einen erfolgssprechenden Ansatz stellt die Programmiersprache P4 (Programming Protocol-Independent Packet Processors) dar, die 2013 durch das Open-Source Projekt P4 (zunächst Teil der ONF – Open Networking Foundation und seit 2023 von der Linux Foundation gehostet) entwickelt wurde. Zu den namhaften Mitgliedern des Konsortiums zählen Google, die Chiphersteller AMD und Intel sowie die Netzwerkausrüster Cisco, HP-Enterprise und ZTE.

Mit Entwicklung und Einführung der Programmiersprache P4 erfolgt ein Paradigmenwechsel. Die althergebrachte herstellerabhängige Paketverarbeitungslogik innerhalb der Netzwerkgeräte wird zu Gunsten eines offenen und standardisierten Switching-Designs aufgegeben und erlaubt den Netzwerkarchitekten und -ingenieuren einen hohen Grad an Flexibilität bei der Konfiguration und dem Betrieb der Geräte in ihren Netzen.

 Vorteile von P4

Die Programmiersprache P4 stellt insbesondere für die Netzbetreiber ein vielversprechendes Werkzeug im Bereich der Netzbewirtschaftung dar und bietet eine Vielzahl von Vorteilen, die sie besonders attraktiv machen. Hierzu zählen die Programmierbarkeit und Flexibilität, die P4 bietet. Durch die Protokollunabhängigkeit können Netzwerkgeräte so programmiert werden, dass sie Pakete unabhängig von bestehenden Netzwerkprotokollen verarbeiten können. Darüber hinaus ermöglicht P4 die Entwicklung und Implementierung benutzerdefinierter Funktionen, neuer Protokolle und Paketverarbeitungsmechanismen.

P4 verfügt über eine hohe Interoperabilität mit bestehenden hardware- und softwarebasierten Netzwerktechnologien und ermöglicht eine nahtlose Integration in bereits vorhandene Infrastrukturen, was den Übergang zu neuen Technologien erleichtert.

Die Anwendungsmöglichkeiten von P4 sind vielfältig und erstrecken sich über verschiedene Bereiche. Im Bereich der Netzwerksicherheit kann P4 beispielsweise für Intrusion Detection Systeme oder Deep Packet Inspection eingesetzt werden. Auch im Cloud-Computing zeigt sich das Potenzial dieser Sprache: Sie erlaubt es, die Netzwerkinfrastruktur gezielt an die spezifischen Anforderungen von Cloud-Rechenzentren anzupassen. Darüber hinaus bietet P4 durch dynamische Routing Entscheidungen Einsatzmöglichkeiten in intelligente Verkehrsmanagementsysteme für z.B. Content Delivery Network (CDN).

Grobe Übersicht zur Funktionsweise von P4

Die Entwicklung und der Betrieb von Netzwerkfunktionen auf P4-fähigen Geräten (in der P4-Welt als Target bezeichnet) erfolgt nach vordefinierten Prozessen, in der vier funktionale Komponente eine zentrale Rolle einnehmen. Diese sind das P4-Programm, der Compiler, die Data Plane und die API zur Control Plane. Die Komponenten werden in der folgenden Abbildung grob skizziert.

Vereinfachte Darstellung der Funktionsblöcke in P4

Abbildung 1 – Vereinfachte Darstellung der Funktionsblöcke in P4

Das P4-Programm

Die Programmierung der Targets -zur Verarbeitung der Datenpakete erfolgt über die Erstellung eines P4-Programms. Es wird vom Benutzer bzw. Entwickler geschrieben und enthält fünf Hauptblöcke, die die Logik der Paketverarbeitung definiert:

  • Header -> definiert das Format der Pakete (Paketfelder, Länge, Reihenfolge)
  • Parser -> verhält sich wie eine endliche Zustandsmaschine und beschreibt die erlaubten Sequenzen von Headern innerhalb empfangener Pakete, wie diese Headersequenzen identifiziert werden können und welche Header und Felder aus den Paketen extrahiert werden sollen
  • Tabellen und Aktionen -> bestimmen den tatsächlichen Entscheidungsprozess im Paketverarbeitungsfluss. Tabelleneinträge (Match-Action Tables) bestimmen, welche Paket-Header-Werte oder Variablen abgeglichen werden sollen, um festgelegte Aktionen auf das entsprechende Paket anzuwenden
  • Match-Action-Pipeline -> legt die Reihenfolge und Logik der Operationen fest, die auf die durch das Target fließenden Pakete angewendet werden

Ein P4-Programm verfügt über eine ähnliche Syntax, wie ein in der Programmiersprache C geschriebenes Programm (P4-Compiler unterstützen eine Reihe von C Preprocessor-Funktionen).

Der P4-Compiler

Das P4-Programm ist in einer höheren Sprache geschrieben und muss zur Lauffähigkeit auf dem Target in einen vom Gerät interpretierbaren Maschinencode übersetzt werden. Diese Aufgabe übernimmt der P4-Compiler, der vom Hersteller des P4-fähigen Netzwerkgeräts bereitgestellt wird. Neben der Erzeugung einer ausführbaren Datei für die Funktionsblöcke Parser und Match-Action-Pipeline (in der Data Plane), erstellt der P4-Compiler eine API, um die Kommunikation zwischen der Control-Plane und Data-Plane zu ermöglichen.

Die Data-Plane

Zu den vielen Vorteilen von P4 zählt – vorausgesetzt das Netzwerkelement ist P4-fähig und der Hersteller bietet einen Compiler – die Geräteunabhängigkeit bei der Programmierung der Paketverarbeitungslogik des Targets. Diese Unabhängigkeit wird durch die Nutzung des Open-Source-Frameworks PSA (Portable Switch Architecture) erreicht, dass die Kernblöcke von programmierbaren Netzwerkswitche in drei abstrakte Funktionsblöcke in der Data-Plane unterteilt:

  • Der Parser wandelt den Byte-Stream des Datenpaket in ein auswertbares Format um und gibt die Reihenfolge der verschiedenen Protokollheader in einem Paket an, die zu analysieren sind.
  • Der Match-Action-Block enthält mehrere Match-Action-Tabellen, die verwendet werden, um auf Basis vom Benutzer ausgewählter Paket-Header-Werte bestimmt Aktionen auszuführen.
  • Der Deparser, setzt die Paketheader wieder in regulärer Reihenfolge zusammen und leitet das Datenpaket als Byte-Stream aus der Data-Plane aus.

Die P4-API

Wie beschrieben, wurde in SDN die Trennung von Control-Plane und Data-Plane eingeführt, um das Netzwerk durch ein flexibles, effizientes und zentralisiertes Netzmanagement zu optimieren und die Steuerung und Überwachung der Datenverkehre zu vereinfachen und skalierbarer zu gestalten.

Für die Steuerung, Konfiguration und Überwachung der Elemente und Metriken innerhalb der Data-Plane durch die abgesetzte Control-Plane, erzeugt der P4-Compiler eine Kommunikationsschnittstelle (P4-API), Mittels dieser API kann das Paketverarbeitungsverhalten des Targets während der Laufzeit angepasst werden, ohne den Maschinencode für die Data-Plane neu kompilieren zu müssen. Es können beispielsweise Match-Action-Einträge (z.B. Pakete mit einer bestimmten Ziel-IPv4-Adresse, die verworfen sollen) im laufenden Betrieb hinzugefügt, verändert oder entfernt werden.

Zusammenfassung und Ausblick

Die Entwickler der Programmiersprache P4 beanspruchen für sich die heutige Paketverarbeitung in Netzwerkgeräte zu revolutionieren. Während aktuell die Anbieter dieser Geräte die vollständige Kontrolle über die unterstützten Funktionen in den Datennetzwerk ausüben und selbst (zum Teil nach Gutsherrenart) darüber entscheiden, welches Netzwerkprotokoll, welche Netzfunktion und welcher Service wann und wie in den Netzwerkgeräten implementiert wird, eröffnet P4 die Möglichkeit, dieses verkrustete Modell aufzubrechen. Anwendungsentwickler und Netzwerkingenieure können aktiv das spezifische Verhalten der Paketverarbeitung im Netzwerk beeinflussen und Änderungen in kürzester Zeit umsetzen.

Auch wenn Intel die Weiterführung seiner P4-programmierbaren Ethernet-Switch ASICs (Intel Tofino) seit Juni 2023 aufgrund einer Produktkonsolidierungskampagne gestoppt hat, um seine Ressourcen stärker den PC- und Server-Prozessoren zu widmen, bleibt die Entwicklung rund um die Programmiersprache P4 weiterhin vielversprechend. Zur Unterstützung dieser Community hat Intel sein Software-Development-Kit Tofino P4 Studio, die für die Entwicklung und zum Debugging von P4-Anwendungen eingesetzt wird, Anfang 2025 unter Open-Source veröffentlicht. Dieser Schritt öffnet Netzwerkforschern und Geräteherstellern Möglichkeiten bei der aktiven Gestaltung und Optimierung von Netzwerkinfrastrukturen, da mit P4 und den unterstützten Geräten eine präzise und flexible Kontrolle über die Paketverarbeitung in Software Defined Networking-Elementen, wie z.B. Switche, Router, Firewalls und Loadbalancer möglich wird.