P4 Π΅ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Π΅Π·ΠΈΠΊ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠΎ C ΠΈΠ»ΠΈ Python, P4 Π΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π·Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π΅Π·ΠΈΠΊ Ρ ΡΠ΅Π΄ΠΈΡΠ° Π΄ΠΈΠ·Π°ΠΉΠ½ΠΈ, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅.
P4 Π΅ Π΅Π·ΠΈΠΊ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠ°Π½ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ ΠΎΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Ρ Π½Π΅ΡΡΠΎΠΏΠ°Π½ΡΠΊΠ° ΡΠ΅Π», Π½Π°ΡΠ΅ΡΠ΅Π½Π° P4 Language Consortium. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΎΡ Open Networking Foundation (ONF) ΠΈ Linux Foundation (LF), Π΄Π²Π΅ ΠΎΡ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ-ΡΠ°Π΄ΡΡΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄.
ΠΠ·ΠΈΠΊΡΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΡΠ΅Π· 2013 Π³. ΠΈ Π΅ ΠΎΠΏΠΈΡΠ°Π½ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π½Π° SIGCOMM CCR ΠΎΡ 2014 Π³., ΠΎΠ·Π°Π³Π»Π°Π²Π΅Π½ βΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°β.
ΠΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΡΠΈ P4 Π½Π°ΡΠ°ΡΠ½Π° ΠΈ ΡΠ΅ ΡΠ°Π·Π²ΠΈ Π΅ΠΊΡΠΏΠΎΠ½Π΅Π½ΡΠΈΠ°Π»Π½ΠΎ, Π±ΡΡΠ·ΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π° Π² ΡΡΠ°Π½Π΄Π°ΡΡ Π·Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΎΡ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π°Π΄Π°ΠΏΡΠ΅ΡΠΈ, ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡΠΈ ΠΈ ΡΡΡΠ΅ΡΠΈ.
βSDN ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ ΠΈ P4 ΠΈΠ·Π²Π΅ΠΆΠ΄Π° SDN Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ, ΠΊΠ°ΡΠΎ Π²Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌΠΎΡΡ Π² ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎβ, ΠΊΠ°Π·Π° ΠΡΡΡ ΠΠ°ΡΡΠ»ΠΊΠ°Ρ, ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡ Π½Π° Open Networking Foundation.
ΠΠ·ΠΈΠΊΡΡ P4 ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΎΡ Π³ΡΡΠΏΠ° ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ ΠΈ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΡ Google, Intel, Microsoft Research, Barefoot, Princeton ΠΈ Stanford. Π¦Π΅Π»ΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠ°: ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π»Π΅ΡΠ΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π΅Π·ΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΡΡΠΈ Π·Π° Π΅Π΄ΠΈΠ½ Π΄Π΅Π½ ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, Π·Π° Π΄Π° ΠΎΠΏΠΈΡΠ΅ ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π² ΠΌΡΠ΅ΠΆΠΈΡΠ΅.
ΠΡ ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ P4 Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Π΄Π° Π±ΡΠ΄Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΡΠ΅Π»ΠΈ (Ρ.Π΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° P4, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π°, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π»ΠΈ ΠΊΠ°ΡΠΎ ASIC, FPGA, CPU, NPU ΠΈ GPU).
ΠΠ·ΠΈΠΊΡΡ ΡΡΡΠΎ Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° (Ρ.Π΅. P4 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ Π½Π° Π°Π΄ΡΠ΅ΡΠΈΡΠ°Π½Π΅).
Π ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ° P4 ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠΎΠΆΠ΅ Π±ΠΈ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΡΠ΅ Internet-RFC ΠΈ IEEE ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° P4.
P4 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΠΊΡΠΎ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π·Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π½Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π»Ρ Π² API Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π·Π° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π½Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π»Ρ (SAI), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ OS Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ SONiC ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π». P4 ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° ONF Stratum, Π·Π° Π΄Π° ΠΎΠΏΠΈΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΠ° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡΠ° ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π°Π΄Π°ΠΏΡΠ΅ΡΠΈ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠΎΡΠ΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΡΠ»Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ° ΠΏΡΠ΅Π΄ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ. ΠΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΠ½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ΡΡΠ²Π°Ρ ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΈΠ·ΡΡΠ»ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Π² Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡΡΠ°, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠΊΡΠΏ Ρ Π°ΡΠ΄ΡΠ΅Ρ.
Π§ΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° P4 Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΠΎΠ±ΠΎΡΡΠ΄Π²Π°Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΎΡΠ°ΠΊΠ²Π°Ρ ΠΎΠ±ΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΡΡΡΠ΅Ρ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, P4 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΠΏΠΈΡΠ²Π°Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½ΠΎΠ²ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ P4 ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΡΠΎΠΊΠΎ Π·Π° ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½ΠΈΡ Π² ΡΠ΅Π½ΡΡΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ ΠΈ ΠΌΡΠ΅ΠΆΠΈ Π½Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈ.
ΠΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠ°ΡΠ° ΠΎΠ±ΡΠ½ΠΎΡΡ ΡΡΡΠΎ ΡΠ΅ Π·Π°ΡΠΈΠ»ΠΈ. ΠΡΠΊΠΎΠ»ΠΊΠΎ Π²ΠΎΠ΄Π΅ΡΠΈ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠΈ Π³ΡΡΠΏΠΈ Π·Π° Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ½ΠΈ ΠΌΡΠ΅ΠΆΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ Π° Π²ΡΠ»Π½ΡΠ²Π°ΡΠΈ Π½ΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° P4 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΡΠ½ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΈ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΠΎΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. Π‘ΡΠ·Π΄Π°Π²Π° ΡΠ΅ Π½ΠΎΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°, ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΎΡ Ρ Π°ΡΠ΄ΡΠ΅Ρ ΠΊΡΠΌ ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈ, Π½ΠΎΠ²ΠΈ ΠΈ Π³Π΅Π½ΠΈΠ°Π»Π½ΠΈ ΠΈΠ΄Π΅ΠΈ.
ΠΠ±ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΈΠΌΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΠΏΡΠΈΠ½ΠΎΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ, ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, API, ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠ°ΠΌΠΊΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π΄Ρ. ΠΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠ°ΡΠΎ Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ΠΈ ZTE ΠΈΠΌΠ°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ; ΠΎΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ΠΈ USI; ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ΠΈ Stratum, ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π°Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ P4 Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°.
Π’ΠΈΠΏΠΈΡΠ½ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ Π·Π° Π΅Π·ΠΈΠΊΠ° P4:
ΠΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²ΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π΅Π·ΠΈΠΊΡΡ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅, ΡΠΏΠΈΡΡΠΊΡΡ Ρ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° Π΄ΠΈΠ·Π°ΠΉΠ½ Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π΅Π·ΠΈΡΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° ΡΠ°:
- ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π»ΡΠ°;
- ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»(ΠΈ);
- Π Π΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ.
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π»ΡΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ P4 ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΎΡ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, FPGA, SoC, ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΈ ASIC. Π’Π΅Π·ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΌΠ°ΡΠΈΠ½ΠΈ ΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΠΊΠ°ΡΠΎ P4 ΡΠ΅Π»ΠΈ ΠΈ Π²ΡΡΠΊΠ° ΡΠ΅Π» ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° P4 Π² ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΠ΅Π»Π΅Π²ΠΈ ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡ. ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ Π² ΡΠ΅Π»Π΅Π²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π²ΡΠ½ΡΠ΅Π½ ΡΠΎΡΡΡΠ΅Ρ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΎΠ±Π»Π°ΡΠ½Π° ΡΡΠ»ΡΠ³Π°. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡΠ΅ ΡΠ΅Π»ΠΈ Π·Π° P4 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π±ΡΡ Π° Π·Π° ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΌΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΡΠ²Π° ΡΠ΅ΡΠΌΠΈΠ½ΡΡ "P4 switch", Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ "P4 target" Π΅ ΠΏΠΎ-ΡΠΎΡΠ΅Π½.
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»(ΠΈ).
P4 Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π΅Π·ΠΈΠΊΡΡ Π½ΡΠΌΠ° Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠ±ΡΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ ΠΊΠ°ΡΠΎ IP, Ethernet, TCP, VxLAN ΠΈΠ»ΠΈ MPLS. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΡΡ P4 ΠΎΠΏΠΈΡΠ²Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠ°Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
Π Π΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈΡ Π΅Π·ΠΈΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ - P4 ΡΠ΅Π»ΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π±ΡΠ΄Π΅ ΡΠ°Π·Π³ΡΡΠ½Π°ΡΠ°. Π’Π°Π·ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ, Π° Π½Π΅ ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅Π³ΡΠ°Π»Π½ΠΈ ΡΡ Π΅ΠΌΠΈ Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ Π² Π΅Π·ΠΈΠΊΠ°, ΠΊΠΎΠ΅ΡΠΎ Π±ΠΈ ΠΏΠΎΠΏΡΠ΅ΡΠΈΠ»ΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, ΡΠ΅Π·ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° Π°Π²ΡΠΎΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π°ΠΌΠ°Π»ΡΡ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈ ΡΠ΅Π»ΠΈΡΠ΅ ΠΈ ΡΡΡ Π½Π°ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅.
Π’Π΅Π·ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ Π·Π°Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΡ ΡΡΠ·Π΄Π°ΡΠ΅Π»ΠΈΡΠ΅ ΠΌΡ Ρ Π°ΠΊΡΠ΅Π½Ρ Π²ΡΡΡ Ρ ΡΠΈΡΠΎΠΊΠΎΡΠΎ ΠΌΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
ΠΠ·ΠΈΠΊΡΡ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ:
1) Π₯ΠΈΠΏΠ΅ΡΠΌΠ°ΡΠ°Π±Π½ΠΈ ΡΠ΅Π½ΡΡΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ;
ΠΠΈΡΠ°ΠΉΡΠΊΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Tencent Π΅ Π½Π°ΠΉ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΎΠ½Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π² ΡΠ²Π΅ΡΠ° ΠΈ Π΅Π΄Π½Π° ΠΎΡ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π·Π° ΡΠΈΡΠΊΠΎΠ² ΠΊΠ°ΠΏΠΈΡΠ°Π». ΠΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½Π° Tencent, ΠΊΠ°ΠΊΡΠΎ Π² ΠΠΈΡΠ°ΠΉ, ΡΠ°ΠΊΠ° ΠΈ Π² Π΄ΡΡΠ³ΠΈ ΡΡΡΠ°Π½ΠΈ ΠΏΠΎ ΡΠ²Π΅ΡΠ°, ΡΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΡΠ»ΡΠ³ΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΠΈΠ·ΠΊΡΡΡΠ²Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π»Π΅ΠΊΡ ΠΈ Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½ΠΈΡΠ΅ Π·Π°Π±Π°Π²Π»Π΅Π½ΠΈΡ.
P4 ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌΠΎΡΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ ΡΠ° ΡΡΡΠ²ΡΡΡΠ΅Π½ΡΡΠ²Π°Π½ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°.
ΠΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΡΠ·Π΄Π°ΡΠ΅Π»ΠΈΡΠ΅, Google Ρ Π³ΠΎΡΠ΄ΠΎΡΡ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π° Π±ΡΡΠ·ΠΎΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° P4 Π² ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ ΠΈ ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° ΡΠ΅Π½ΡΡΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ.
2) Π’ΡΡΠ³ΠΎΠ²ΡΠΊΠΈ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π°;
Goldman Sachs ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΈΠ½ΠΎΠ²Π°ΡΠΈΡ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅.
3) ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ;
Π¦ΡΠ»Π°ΡΠ° ΠΌΡΠ΅ΠΆΠΎΠ²Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ ΡΠ΅ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ Π΅Π·ΠΈΠΊ ΠΊΠ°ΡΠΎ P4, ΠΊΠΎΠΉΡΠΎ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅. Cisco ΡΡΡΠΎ Π²ΡΡΠ²Π° Π² ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ.
Juniper Networks Π²ΠΊΠ»ΡΡΠΈ P4 ΠΈ P4 Runtime Π² ΡΠ΅Π΄ΠΈΡΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Juniper ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠΎΡΡΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄.
Ruijie Networks Π΅ ΡΠΈΠ»Π΅Π½ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ½ΠΈΠΊ Π½Π° P4 ΠΈ ΠΏΠΎΠ»Π·ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½ΠΎΡΠΈ Π·Π° ΠΌΡΠ΅ΠΆΠΈΡΠ΅. Π‘ P4 ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π° ΠΈ Π΄ΠΎΡΡΠ°Π²Ρ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ Π² ΠΊΠ»Π°ΡΠ° ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΈΡΠΎΠΊ ΠΊΡΡΠ³ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ.
4) Π’Π΅Π»Π΅ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ;
AT&T Π±Π΅ΡΠ΅ ΡΠ°Π½Π΅Π½ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π½Π° P4, Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΡΡΠ²ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π° P4, Π·Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°Ρ Π° Π΄Π° Π²ΠΈΠ΄ΡΡ Π² ΡΠ²ΠΎΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΠΈ, ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ P4 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°ΡΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π² ΡΠ²ΠΎΡΡΠ° ΠΌΡΠ΅ΠΆΠ°.
Π Deutsche Telekom Π΅Π·ΠΈΠΊΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° ΠΊΠ»ΡΡΠΎΠ²ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Access 4.0.
5) ΠΠΎΠ»ΡΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠΎΠ²Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ;
ΠΠ·ΠΈΠΊΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Barefoot Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈ Π½ΠΎΠ²Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° Π·Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² ΡΠ°Π²Π½ΠΈΠ½Π°ΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅.
Xilinx Π±Π΅ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° P4.org ΠΈ ΡΡΠ°ΡΡΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° P4 ΠΈ Π³ΠΎ Π²Π½Π΅Π΄ΡΠΈ Π² Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° FPGA ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π·Π° Ρ Π°ΡΠ΄ΡΠ΅Ρ SmartNIC ΠΈ NFV, ΠΏΡΡΠΊΠ°ΠΉΠΊΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΡΡΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ P416 ΠΊΠ°ΡΠΎ ΡΠ°ΡΡ ΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° SDNet.
6) Π‘ΠΎΡΡΡΠ΅Ρ.
VMware Π²ΡΡΠ²Π°, ΡΠ΅ P4 ΡΡΠ·Π΄Π°Π²Π° ΠΎΠ³ΡΠΎΠΌΠ½Π° Π΅Π½Π΅ΡΠ³ΠΈΡ, ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ ΠΈ ΠΎΠ±ΡΠ½ΠΎΡΡ, ΠΊΠΎΠΈΡΠΎ Π²ΠΎΠ΄ΡΡ Π΄ΠΎ Π·Π½Π°ΡΠΈΠΌΠ° ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°. VMware Π΅ ΡΠ°ΡΡ ΠΎΡ ΡΠΎΠ²Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΎΠ²Π° Π²ΡΠ»Π½Π° ΠΎΡ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ ΡΠ΅ Π·Π°Π΄Π²ΠΈΠΆΠ²Π° ΠΎΡ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ Π³ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Ρ Π² Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ.
ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ P4 Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΡΠ΅Π»ΡΠ° ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ° ΠΈ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ Π·Π° Π΅Π΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° Π·Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π»ΠΈ. ΠΠ½Π΅Ρ ΡΠ΅Π»ΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΈ ΠΈ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡΠΈ, Ρ ΠΈΠΏΠ΅ΡΠ²Π°ΠΉΠ·ΠΎΡΠ½ΠΈ ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡΠΈ, NPU, GPU, FPGA, SmartNIC ΠΈ ASIC.
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π°Ρ ΠΎΠ±Ρ Π²Π°ΡΠ° Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π±ΡΡΠ·ΠΎΡΠΎ ΠΌΡ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π² ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ.
ΠΡΡΠ²ΠΈ ΡΡΡΠΏΠΊΠΈ
P4 Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠ»Π°ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΅ Π½Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ°
ΠΡΡΠ·ΠΊΠ° ΠΊΡΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ:
ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈ β Ρ ΡΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°.
ΠΠ΅ΡΠΈΠ½ΠΈΡΠΈΡΡΠ° Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° ΡΡΠΎΡΠ½ΡΠ²Π°:
- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ° Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ°
- ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
header Ethernet_h{
bit<48> dstAddr;
bit<48> srcAddr;
bit<16> etherType;
}
header IPv4_h{
bit<4> version;
bit<4> ihl;
bit<8> diffserv;
bit<16> totalLen;
bit<16> identification;
bit<3> flags;
bit<13> fragOffset;
bit<8> ttl;
bit<8> protocol;
bit<16> hdrChecksum;
bit<32> srcAddr;
bit<32> dstAddr;
varbit<320> options;
}
ΠΠ°ΡΡΠ΅ΡΠΈ β ΡΡΡ Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π·Π°Π³Π»Π°Π²ΠΈΡΡΠ°.
Π‘Π»Π΅Π΄Π½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΠΏΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° ΠΎΡ Π΅Π΄Π½ΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΡΠΌ Π΅Π΄Π½ΠΎ ΠΎΡ Π΄Π²Π΅ΡΠ΅ ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΡ:
parser MyParser(){
state start{transition parse_ethernet;}
state parse_ethernet{
packet.extract(hdr.ethernet);
transition select(hdr.ethernet.etherType){
TYPE_IPV4: parse_ipv4;
default: accept;
}
}β¦
}
ΠΌΠ°ΡΠΈ β ΡΡΠ΄ΡΡΠΆΠ° ΡΡΡΡΠΎΡΠ½ΠΈΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ°, ΡΠ²ΡΡΠ·Π²Π°ΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠ΅ΠΉΠ½ΠΎΡΡ β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ° ΠΎΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°ΡΠ°.
Π’Π°Π±Π»ΠΈΡΠΈΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΡΡΡΠΎΡΠ½ΠΈΡ (Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅) Π·Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΎΠΏΠΈΡΠ²Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΡΠ° Match-Action
ΠΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΡΡΠΏΠΎΡΡΠ°Π²ΡΡ ΠΏΠΎ:
- Π’ΠΎΡΠ½ΠΎ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅
- ΠΠ°ΠΉ-Π΄ΡΠ»Π³ΠΎ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠ° (LPM)
- Π’ΡΠΎΠΉΠ½ΠΎ ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ (ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅)
table ipv4_lpm{
reads{
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
ΠΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠΈ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΡΠ° ΡΠ΅ ΡΡΡΡΠΎΡΡ ΠΎΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠ°Π½Π½ΠΈΡΠ΅ ΠΈΠ΄Π²Π°Ρ ΠΎΡ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ. IP Π°Π΄ΡΠ΅ΡΠΈ/Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅). ΠΡΠΊΠΎΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π±Π΅Π· ΡΠΈΠΊΠ»ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ, Π½ΠΎ Π±ΡΠΎΡΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΠΈΠΊΠ»ΠΈ ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ.
action ipv4_forward(macAddr_t dstAddr, egressSpec_t port){
standard_metadata.egress_spec = port;
hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
hdr.ethernet.dstAddr = dstAddr;
hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}
ΠΠΎΠ΄ΡΠ»ΠΈ Match-Action β Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡ Π·Π° ΡΡΡΡΠ΅Π½Π΅, ΡΡΡΡΠ΅Π½Π΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°, ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
Π’ΠΈΠΏΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΌΠΎΠ΄ΡΠ» Π΅ ββΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΠ³ΡΡΠ°ΡΠ°:
ΠΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΠΏΠΎΡΠΎΠΊ β ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ΅Π΄Π°, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Match-Action. Π’ΠΎΠ²Π° Π΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅-Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΡΠ²ΡΡΠ·Π²Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠ°ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ».
ΠΡΠ½ΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΡΡΠ½ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ API ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΡΠΌΠ°, ΡΠ΅Π³ΠΈΡΡΡΠΈ, Π±ΡΠΎΡΡΠΈ, Π±ΡΠΎΡΡΠΈ ΠΈ Ρ.Π½.
extern register{
register(bit<32> size);
void read(out T result, in bit<32> index);
void write(in bit<32> index, in T value);
}
extern Checksum16{
Checksum16(); //constructor
void clear(); //prepare unit for computation
void update(in T data); //add data to checksum
void remove(in T data); /remove data from existing checksum
bit<16> get(); //get the checksum for the data added since last clear
}
ΠΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ β ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π²ΡΠ΅ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠΌΠ° 2 Π²ΠΈΠ΄Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ:
ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ (ΠΏΡΠ°Π·Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ)
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅ ΡΡΠΊ
ΠΡΠ΅Π΄Π»Π°Π³Π° ΡΠ΅ Π² ΡΠ΅Π»ΠΈΡ ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄
ΡΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π·Π° Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ΅Π»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Ρ
Π΅Ρ ΠΏΠ°ΠΊΠ΅Ρ
ΠΡΡΡΠ΅ΡΠ½ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°
ΠΡ
ΠΎΠ΄Π΅Π½ ΠΏΠΎΡΡ, ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΏΠΎΡΡ ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡΠΊ
ΠΡΠ΅ΠΌΠ΅Π²ΠΎ ΠΊΠ»Π΅ΠΉΠΌΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΡΡ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°, Π΄ΡΠ»Π±ΠΎΡΠΈΠ½Π° Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ°
ΠΌΡΠ»ΡΠΈΠΊΠ°ΡΡ Ρ
Π΅Ρ / ΠΌΡΠ»ΡΠΈΠΊΠ°ΡΡ ΠΎΠΏΠ°ΡΠΊΠ°
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, Π²Π°ΠΆΠ½ΠΎΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΏΠΎΡΡ (Π½Π°ΠΏΡ. ΠΈΠ·Ρ
ΠΎΠ΄Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°)
P4 ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ
ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ P4 (P4C) Π³Π΅Π½Π΅ΡΠΈΡΠ°:
- ΠΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π²Π½ΠΈΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ
- API Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π² ΡΠ°Π²Π½ΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΎΡΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π» Π½Π° Π΅Π·ΠΈΠΊ P4
ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ΠΈ ΠΎΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ.
p4lang/p4c-bm: ΡΡΠ·Π΄Π°Π²Π° JSON ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° bmv2
p4lang/bmv2: ΡΠΎΡΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ° JSON ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° bmv2 Π²Π΅ΡΡΠΈΡ
Π€ΠΈΠ³ΡΡΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°:
ΠΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΠΈ Ρ ΡΠ°Π±Π»ΠΈΡΠΈ, ΡΠ΅Π³ΠΈΡΡΡΠΈ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, Π±ΡΠΎΡΡΠΈ:
- table_set_default <table name> <action name> <action parameters>
- table_add <table name> <action name> <match fields> => <action
parameters> [priority]
- table_delete <table name> <entry handle>
ΠΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° simple_switch_CLI Π·Π° ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° API Π·Π° ΡΠΎΡΡΡΠ΅ΡΠ΅Π½ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π».
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ.
PS Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠΎΠ²Π° Π»ΡΡΠΎ Intel ΠΏΠΎΠ΄ΠΏΠΈΡΠ° ΡΠΏΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅ Π½Π° Barefoot Networks Π² ΠΎΠΏΠΈΡ Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π±ΡΡΠ·ΠΎ Π½Π° Π½ΡΠΆΠ΄ΠΈΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Hyperscale Cloud. ΠΠ°ΠΊΡΠΎ ΠΊΠ°Π·Π° Navin Shenoy (ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π²ΠΈΡΠ΅ΠΏΡΠ΅Π·ΠΈΠ΄Π΅Π½Ρ ΠΈ Π³Π΅Π½Π΅ΡΠ°Π»Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° Data Center Group Π² Intel Corporation), ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Intel Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π½ΡΡΠΎΠ²Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ.
Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½ Π»ΠΈΡΠ½ΠΎ Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° Π·Π°Π±ΡΠ°Π²ΡΠΌΠ΅, ΡΠ΅ Intel Π΅ Π»ΠΈΠ΄Π΅Ρ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° FPGA ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΈΠΌΠ° ΠΎΡΠ»ΠΈΡΠ½Π° ΡΡΠ΅Π΄Π° Quartus. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅, ΡΠ΅ Ρ ΠΏΡΠΈΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° Intel, Barefoot Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠΈ ΡΠ²ΠΎΡΡΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²Π° Π»ΠΈΠ½ΠΈΡ, Π½ΠΎ ΠΈ Quartus ΠΈ P4 Studio ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ΅ΡΠΈΠΎΠ·Π½ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΠΌ Π»ΠΈΠ½ΠΈΡΡΠ° Toffino ΠΈ Toffino 2.
ΠΡΠΈΡΠΈΠ°Π»Π΅Π½ ΡΠ»Π΅Π½ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° P4 - ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com