在2016年時,P4這個語言才剛出爐不久,直到最近,才有愈來愈多的中文資料出現,也有比較完整的實作資料可以參考。
由於論文需要使用P4這個語言作為我的實作工具,因此整理了一些資料和筆記下來,紀錄於此處。
Contents
P4是什麼
- P4是一種「特定域」程式語言,和C或JAVA這種「通用」程式語言不同。
- P4得名於一篇2014年在SIGCOMM CCR(Computer Communication Review)發布的論文:"Programming Protocol-Independent Packet Processors",取四個P開頭,而有P4之名。
簡單來說,在現今的網路中,有許多的通訊協定(Protocol),例如arp或者http,而市面上販售的網通產品(如:路由器或者交換器),之所以能夠轉送arp、http或者更多不同通訊協定的封包,是因為那些網通產品已經將功能實作在晶片上,若遇到新的或不認得的通訊協定,則會產生無法預期的行為。
而P4恰好就是拿來處理這樣的情況,在使用者想要實作新的Protocol時,只需要使用P4語言撰寫並將程式部署到實體或虛擬的交換器(Switch)上,便可以讓該Switch認得使用者實作的Protocol。
更具體來說,將Switch想像成海關,而一般的海關可以認得台灣人和美國人,卻無法讓外星人和火星人通行,而P4卻可以透過寫好的程式讓海關能夠辨認外星人和火星人,讓其能夠快速通關。
P4演進
P414和P416分別於2014和2016開始制定,現今主流為P416,和P414有許多的不同點:
- 保留字:P416刪去了一些P414的保留字(約70多個),並留下了36個保留字,如下所示
- 架構:P416將P414中經常使用到的功能變成library,也就是下圖中的core.p4
- 語法