軟體定義網路與 NFV

P4 語言(P4 language)

/ P-four /

多數網路交換器像一台按鍵固定的計算機:它們懂內建的一套協定(乙太網路、IP、TCP),而你沒辦法教它們任何新東西。P4 是一種程式語言,把這件事翻轉過來。它讓你寫下交換器該如何解析與處理封包——有哪些標頭欄位、如何讀取它們、要查哪些比對動作表、要做什麼——再把那支程式載入一台可程式化交換器。你不必接受晶片出生時就懂的那些協定,而是自己定義它們。

具體來說,一支 P4 程式用三個主要部分描述封包處理管線:一個解析器(parser),說明如何剝開封包的標頭(先讀 14 個位元組當作乙太網路,若型別是 IPv4 再讀 20 個位元組當作 IP,依此類推);比對動作表與它們可能的動作(對這些欄位比對、做這些事);以及封包流經它們的順序,加上出口時如何重新組裝(deparse)。你為某個目標——可程式化 ASIC、SmartNIC 或軟體交換器——編譯這支程式,設備接著就完全照你的程式所指定的行為。關鍵在於:P4 是協定無關的,晶片在你的程式定義之前對 IP 或 TCP 毫無內建概念,所以你不必換晶片就能加上對某個全新或自訂協定的支援。

為什麼重要:P4 是可程式化資料平面的語言,回應了固定管線——甚至 OpenFlow——的一個真實限制:OpenFlow 只能比對標準已知的標頭欄位。有了 P4,你能實驗新協定、打造把交換器自身量測蓋進封包的自訂遙測,並為單一應用量身打造一台交換器。要誠實面對範圍:P4 程式化的是資料平面(封包在線路速率下如何被處理),不是控制平面(決定政策的邏輯)——你仍需要一個控制器去填表。而且 P4 只能在被設計成可程式化的硬體或軟體目標上跑;它無法重新程式化一台功能固定的交換器。

某研究團隊發明了一種新標頭,攜帶自訂的路由標籤。在固定交換器上,這在沒有新晶片時辦不到。有了 P4,他們寫一個讀取新標頭的解析器、一張對該標籤比對的表,以及一個據此轉送的動作,再把它載入一台可程式化交換器。這台交換器如今就照一個在硬體被造出時還不存在的協定來轉送。

你定義協定;可程式化交換器就以線路速率遵照它。

P4 程式化的是資料平面,不是控制平面:它描述封包如何被解析與動作,但仍需一個獨立的控制器去決定要把哪些規則放進表裡。P4 也需要可程式化的目標——它無法重新程式化功能固定的晶片。

又称
P4Programming Protocol-independent Packet ProcessorsP4 語言