p4語言簡介
P4(Programming Protocol-Independent Packet Processors) 是一種數(shù)據(jù)面的高級編程語言。數(shù)據(jù)面編程就是我們自定義匹配字段 寇仓,自定義動作類型 榴芳, 從而自定義流表 ,進而形成流水線裳朋。p4不僅可以對數(shù)據(jù)流進行轉(zhuǎn)發(fā)病线,還可以對交換機等轉(zhuǎn)發(fā)設(shè)備的數(shù)據(jù)處理流程進行軟件編程定義。p4語言實現(xiàn)的交換機架構(gòu)如下圖
p4語言特點
p4的幾個需要注意的點:
- 可以實現(xiàn)現(xiàn)有協(xié)議的轉(zhuǎn)發(fā)功能
- 可以自定義數(shù)據(jù)包結(jié)構(gòu)
- 可以在現(xiàn)有協(xié)議的基礎(chǔ)上進行新的功能開發(fā)
- SW 風格開發(fā)——協(xié)議和轉(zhuǎn)發(fā)的開發(fā)模式類似于軟件開發(fā)
p4的語言要素
- headers(metadata)
- parser
- table & action
- control flow code
headers
可以自定義header鲤嫡,添加目前數(shù)據(jù)包中不存在的字段送挑,便于實現(xiàn)轉(zhuǎn)發(fā)時候特定字段的匹配和動作。但是p4寫成的程序只負責解析字段暖眼,所以還需要軟件環(huán)境惕耕。
parser
用于解析數(shù)據(jù)包的headers的狀態(tài)機,他可以有很多種狀態(tài)诫肠,可以根據(jù)來的數(shù)據(jù)包的狀態(tài)來選擇變成哪個狀態(tài)司澎,而且有三個預留的狀態(tài)
- start
- reject
-
accept
除這三個之外的狀態(tài)可以自己定義,狀態(tài)之間的轉(zhuǎn)變也可以用戶自己定義栋豫,完全是可編程的挤安。
table & action
table是由controller通過南向協(xié)議進行下發(fā),而匹配的模式可以由p4語言來確定丧鸯,table只提供了表蛤铜,怎么去查表,查表之后進行怎么樣的動作,也都完全由p4程序來確定围肥,包括匹配的key剿干,下一步的action id,但是action data是由table傳出來的穆刻。
control flow code
這部分就像是c++程序里面的順序結(jié)構(gòu)置尔,規(guī)定先干什么,然后在干什么氢伟,最后干什么榜轿,這部分的可編程化,把交換機的單一功能變得更加自主和智能化腐芍。交換機不再僅僅完成簡單的ip或者名稱匹配差导,而是又一個復雜的流程需要完成,可以是多個匹配任務(wù)的連續(xù)猪勇,也可以對數(shù)據(jù)包的包頭進行修改设褐,增加,刪減等動作泣刹。所謂的協(xié)議和轉(zhuǎn)發(fā)策略一切變得跟軟件開發(fā)一樣簡單助析。