P4 (Programming Protocol-independent Packet Processors) (P4)
P4は、ネットワーク機器のデータプレーンを記述するためのドメイン特化型プログラミング言語である。名称はProgramming Protocol-independent Packet Processorsに由来し、スイッチ、NIC、ルータ、フィルタといったデータプレーン機器がパケットをどのように処理するかを規定する。従来はシリコンベンダが機能追加の時期を握っていたのに対し、利用者側で動作を定義できるようになり、変更を年単位ではなく分単位で反映できる点が変化とされる。
P4プログラムは、パケットをヘッダによって分類する処理と、分類結果に対して実行する動作を記述する。特定のプロトコルを前提としないため、既存プロトコルに加えて新しいヘッダ形式も扱える。プログラムは対象機器ごとに固有であり、コンパイルによって、FPGAやプログラマブルASICなどのハードウェア、あるいはソフトウェア基盤向けの実行バイナリと、制御プレーンから参照するランタイム用のメタデータが生成される。固定機能のハードウェアに縛られず、必要な機能だけを実装できる一方、機器の資源制約の範囲内に処理を収める設計が求められる。
データセンタのネットワークでは、輻輳制御、テレメトリ、トンネリング、負荷分散などを運用者の要件に合わせて実装する需要がある。オープンなネットワークOSやパケット処理フレームワークと組み合わせ、ベンダ固有の固定機能に依存しない構成を取る事例が増えている。