P4 ืืื ืึท ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืืืืื ื ืฆื ืคึผืจืึธืืจืึทื ืคึผืึทืงืึทื ืจืืืื ื ืึผืืืื. ื ืื ืขื ืืขื ืึท ืืขื ืขืจืึทื-ืฆืื ืฉืคึผืจืึทื ืึทืืึท ืืื C ืึธืืขืจ Python, P4 ืืื ืึท ืคืขืื-ืกืคึผืขืฆืืคืืฉ ืฉืคึผืจืึทื ืืื ืึท ื ืืืขืจ ืคืื ืืืืืื ื ืึธืคึผืืืืืืขื ืคึฟืึทืจ ื ืขืฅ ืจืืืื ื.
P4 ืืื ืึทื ืึธืคึฟื ืืงืืจ ืฉืคึผืจืึทื ืืืืกืึทื ืกื ืืื ืืืื ืืืื ื ืืืจื ืึท ื ืึทื-ื ืืฅ ืึธืจืืึทื ืืืึทืฆืืข ืืขืจืืคื ืื P4 ืฉืคึผืจืึทื ืงืึธื ืกืึธืจืืืื. ืขืก ืืื ืืืื ืืขืฉืืืฆื ืืืจื ืื ืขืคึฟื ื ืขืืืืึธืจืงืื ื ืืืืงืืคึผืขืืืข (ONF) ืืื ืื ืืื ืืงืก ืืืืงืืคึผืขืืืข (LF), ืฆืืืื ืคืื ืื ืืจืขืกืืข ืฉืืจืขื ืึธืจืืึทื ืึทืืืืฉืึทื ื ืคึฟืึทืจ ืขืคึฟืขื ืขื ืืงืืจ ื ืขืืืืึธืจืงืื ื ืคึผืจืึทืืืฉืขืงืก.
ืื ืฉืคึผืจืึทื ืืื ืืขืืืขื ืขืจืืืืฉื ืึทืื ืงืืื ื ืืื 2013 ืืื ืืืกืงืจืืืื ืืื ืึท 2014 SIGCOMM CCR ืคึผืึทืคึผืืจ ืขื ืืืืืึทืื "ืคึผืจืึธืืึธืงืึธื ืื ืืขืคึผืขื ืืขื ื, ืคึผืึทืงืึทื ืจืืืื ื ืคึผืจืึทืกืขืกืขืจ ืคึผืจืึธืืจืึทืืืื ื."
ืืื ื ืืืื ืึธื ืืืื, P4 ืืื ืืขืืืืงืกื ืืื ืืืืึทืืืื ืขืงืกืคึผืึธืื ืขื ืฉืึทืื, ืืื ืืื ืืขืฉืืืื ื ืืขืืืืจื ืึท ื ืึธืจืืึทื ืคึฟืึทืจ ืืืกืงืจืืืืื ื ืื ืืจืึทื ืกืืืกืืข ืคืื โโืคึผืึทืงืืฅ ืืืจื ื ืขืฅ ืืขืืืืกืขืก, ืึทืจืืึทื ืืขืจืขืื ื ื ืขืฅ ืึทืืึทืคึผืืขืจื, ืกืืืืืฉืื ืืื ืจืึธืืืขืจืก.
"SDN ืืื ืคืืจืืืื ืืืขื ืื ื ืขืืืืึธืจืงืื ื ืืื ืืืกืืจืืข, ืืื P4 ื ืขืื SDN ืฆื ืืขืจ ืืืืึทืืขืจ ืืืจืื ืืืจื ืืจืขื ืืขื ืคึผืจืึธืืจืึทืืืึทืืืืืื ืฆื ืจืืืื ื," ืืื ืืขืืืื ืืืจื ืคึผืึทืจืืืงืึทืจ, ืืืืขืงืืึทืืืื ืืืจืขืงืืึธืจ ืคืื ืื ืขืคึฟื ื ืขืืืืึธืจืงืื ื ืืืืงืืคึผืขืืืข.
ืื P4 ืฉืคึผืจืึทื ืืื ืขืจืืืืฉื ืึทืื ืืืฉืืคื ืืืจื ืึท ืืจืืคึผืข ืคืื โโืขื ืืืฉืึทื ืืจื ืืื ืจืืกืขืจืืฉืขืจื ืคืื Google, Intel, Microsoft Research, Barefoot, Princeton ืืื Stanford. ืืขืจ ืฆืื ืืื ืืขืืืขื ืคึผืฉืื: ืฉืึทืคึฟื ืึทื ืืจืื ื-ืฆื-ื ืืฆื ืฉืคึผืจืึทื ืืืึธืก ืึท ืืืืืืืืืจื ืืขืืืขืืึธืคึผืขืจ ืงืขื ืืขืจื ืขื ืืื ืึท ืืึธื ืืื ื ืืฆื ืฆื ืึทืงืืขืจืึทืืื ืืึทืฉืจืืึทืื ืืื ืคึผืึทืงืืฅ ืืขื ืขื ืืขืฉืืงื ืึทืจืืืขืจ ื ืขืืืืึธืจืงืก.
ืคึฟืื ืื ืึธื ืืืื, P4 ืืื ืืืืืื ื ืฆื ืืืื ืฆืื ืืืืึธืคึผืืขื ืืืง (ื"ื ืึท ืคึผืจืึธืืจืึทื ืืขืฉืจืืื ืืื P4 ืงืขื ืืืื ืงืึทืืคึผืืืื ืึทื ืืฉืืื ืืืฉื ืฆื ืืืืคื ืืืืฃ ืึท ืคืึทืจืฉืืืื ืงืืึทื ืคืื ืืึทืจืืึทืฅ ืึทืืึท ืืื ASICs, FPGAs, CPUs, NPUs ืืื GPUs).
ืื ืฉืคึผืจืึทื ืืื ืืืื ืคึผืจืึธืืึธืงืึธื ืคืจืืึท (ื"ื ืึท P4 ืคึผืจืึธืืจืึทื ืงืขื ืขื ืืึทืฉืจืืึทืื ืืืืืกืืื ื ื ืึธืจืืึทื ืคึผืจืึธืืึธืงืึธืืก ืึธืืขืจ ืืืื ืืขืืืืื ื ืฆื ืกืคึผืขืฆืืคืืฆืืจื ื ืืึทืข ืื ืื ืึทืืจืขืกืื ื ืืึธืืขืก).
ืืื ืืื ืืืกืืจืืข, P4 ืืื ืืขื ืืฆื ืคึฟืึทืจ ืืืื ืคึผืจืึธืืจืึทืืืื ื. ืืึธืืขืจ ืืื ืืขืจ ืฆืืงืื ืคึฟื ืืื ืืขืจื ืขื-RFC ืืื IEEE ืกืืึทื ืืึทืจืืก ืืืขื ืืืื ืึทืจืืึทื ื ืขืืขื ืื P4 ืืึทืฉืจืืึทืืื ื.
P4 ืงืขื ืขื ืืืื ืืขืืืืื ื ืคึฟืึทืจ ืืืืืข ืคึผืจืึธืืืจืึทืืึทืืึทื ืืื ืคืึทืจืคืขืกืืืงื ืคืื ืงืฆืืข ืืขืืืืกืขืก. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืขืก ืืื ืืขื ืืฆื ืฆื ืึทืงืืขืจืึทืืื ืจืขืงืึธืจืืืจื ืืึทืฉืืืืขื ืจืขืจื - ืืื ืืข ื ืึทืืืจ ืืื ืื ืกืืืืืฉ ืึทืืกืืจืึทืงืฉืึทื ืฆืืืื ื (SAI) ืึทืคึผืืก ืืขื ืืฆื ืืืจื ืื ืึธืคึฟื ืืงืืจ SONiC ืืึทืฉืืืืขื ืึทืก. P4 ืืื ืืืื ืืขื ืืฆื ืืื ืื ONF ืกืืจืึทืืื ืคึผืจืืืขืงื ืฆื ืืึทืฉืจืืึทืื ืกืืืืืฉืื ื ื ืึทืืืจ ืฆืืืืฉื ืคืึทืจืฉืืื ืคืึทืจืคืขืกืืืงื ืืื ืคึผืจืึธืืืจืึทืืึทืืึทื ืืขืืืืกืขืก.
ืคึฟืึทืจ ืื ืขืจืฉืืขืจ ืืึธื, ืืืกืงืจืืืืื ื ืื ื ืึทืืืจ ืคืื ืื ืืึทืฉืืืืขื ืืื ื ืขืฅ ืึทืืึทืคึผืืขืจื ืึทืืึทืื ืืืจ ืฆื ืฉืึทืคึฟื ืึทื ืคึผืื ืืืขื ืขืงืกืขืงืืืึทืืืข ืืึธืืขื ืคืื ืื ืืื ืฆืข ื ืขืฅ ืืืืืขืจ ืืืคึผืืืืืึทื ื. ืืจืืืก ืืืึธืืงื ืคึผืจืึทืืืืืืขืจื ืงืขื ืขื ืคึผืจืืืืจื ืืื ืืืืึทืืื ื ืื ื ืขืฅ ืืขืืึทืืจืข ื ืืฆื ืืืืืืืืืจื, ืืื ืืืืืืืืง ืจืืืืกืื ื ืื ืฆืืื ืืื ืงืึธืก ืคืื ืื ืืขืจืึธืคึผืขืจืึทืืืืืื ืืขืกืืื ื ืืื ืื ืืึทืืึธืจืึทืืึธืจืืข ืึธื ืจืืงืืืืืจืื ื ืืืึทืขืจ ืืึทืื ืืืึทืจื.
ืืืจื ื ืืฆื P4, ื ืขืฅ ืืืกืจืืื ืืืขื ืืึธืจืก ืงืขื ืขื ืืขืจืืืึทืจืื ืคึผืจืึธืกื ืึทื ืืขืจืืืืื ื ืจืืืื ื ื ืึทืืืจ ืืื ืึทืืข ืคึผืจืึธืืืงืื, ืึทืืึทืืื ื ืจืืืืก ืคืื ืคึผืจืืืืจื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ, ืกืืืคึผืืึทืคืืืื ื ืคืึทืจืืืึทืืืื ื ืืืืืืืืืจื ืึทื ืืืืืงืืื ื ืืื ืืขืกืึธืฃ ืื ืฉืืจืื ื ืื ืืขืจืึธืคึผืขืจืึทืืืืืื.
ืืึธื, P4 ืงืขื ืขื ืืืื ืืขืืืืื ื ืฆื ืฉืจืืึทืื ืืืืื ืืืึธืก ืืึทืฉืจืืึทืื ืืึธืจ ื ืืึทืข ืืืขืื ืคืื ืจืืืื ื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, P4 ืืื ืืืืืืื ืืขื ืืฆื ืคึฟืึทืจ ืืขืืขืืขืืจื ืืื ืืขืืฉืขืจืืึทื ืฅ ืืื ืืึทืื ืกืขื ืืขืจืก, ืคืึทืจื ืขืืื ื ืืื ืกืขืจืืืืก ืคึผืจืึทืืืืืืขืจื ื ืขืืืืึธืจืงืก.
ืื ืคืึธืจืฉืื ื ืงืื ืืื ืืืื ืกืืขืคึผื ืึทืจืืืฃ. ืขืืืขืืข ืืืืื ื ืึทืงืึทืืขืืืง ื ืขืืืืึธืจืงืื ื ืคืึธืจืฉืื ื ืืจืืคึผืขืก ืืึธืื ืืจืืืก ืืงืกืืืืื ื ื ืืึทืข ืึทืคึผืืึทืงืืืฉืึทื ื ืืืืืจื ืืืืฃ P4 ืืืืื, ืึทืจืืึทื ืืขืจืขืื ื ืืึทืกืข ืืึทืืึทื ืกืื ื, ืงืึธื ืกืขื ืกืืก ืคึผืจืึธืืึธืงืึธืืก ืืื ืฉืืืกื ืืืขืจื ืงืึทืืฉืื ื. ื ื ืืึทืข ืคึผืจืึธืืจืึทืืืื ื ืคึผืึทืจืึทืืืื ืืื ืืืฉืืคื, ืืืืขืฉ ืืื ืืึธืืืื ื ืคืื ืืึทืื ืืืึทืจื ืฆื ืืืืืืืืืจื, ืึทืืึทืืื ื ืคืืืข ืืืืืขืจืืื, ื ืืึทืข ืืื ืื ืืืฉืื ืืึทืก ืืขืืื ืงืขื ืฆื ืึทืจืืืกืงืืืขื.
ืื ืืขืืืขืืึธืคึผืขืจ ืงืื ืืื ืืขืืืื ืืึทืืืึทืืืง ืงืึทื ืืจืึทืืืืฉืึทื ื ืฆื ืงืึธื ืึทื ืืืืืงืืื ื, ืึทืจืืึทื ืืขืจืขืื ื ืงืึธืืคึผืืืขืจืก, ืคึผืืืคึผืืืื ื, ื ืึทืืืจืึทื ืืึธืืขืืก, ืึทืคึผืืก, ืคึผืจืืืืจื ืคืจืึทืืขืืืึธืจืงืก, ืึทืคึผืืึทืงืืืฉืึทื ื ืืื ืืขืจ. ืงืึธืืคึผืึทื ืืขืก ืึทืืึท ืืื 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 ืฉืคึผืจืึทื:
ืึทืคึผืคึผืืืงืึทืืืึธื ืคึผืจืึทืกืคึผืขืงืก
ืืื ื ืื ืฉืคึผืจืึทื ืืื ืืืขื ืคึฟืึทืจ ืจืืืื ื ืึทืคึผืืึทืงืืืฉืึทื ื, ืื ืจืฉืืื ืคืื ืจืขืงืืืืจืขืืขื ืฅ ืืื ืคึผืืึทื ืึธืคึผืฆืืขืก ืืื ืึทื ืืขืจืฉ ืงืึทืืคึผืขืจื ืืื ืืขื ืขืจืึทื-ืฆืื ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทืื. ืื ืืืืคึผื ืคึฟืขืึดืงืืืื ืคืื ืืขืจ ืฉืคึผืจืึทื ืืขื ืขื:
- ืืขืืืกืืฉืืขื ืืืงืืื ืคืื ืฆืื ืืืคึผืืึทืืขื ืืืืฉืึทื;
- ืืขืืืกืืฉืืขื ืืืงืืื ืคืื ืื ืคึผืจืึธืืึธืงืึธื (s) ืืขื ืืฆื;
- ืคืขืื ืจืขืงืึธื ืคืืืืจืึทืืืืืื.
ืืขืืืกืืฉืืขื ืืืงืืื ืคืื ืฆืื ืืืคึผืืึทืืขื ืืืืฉืึทื
P4 ืืืืื ืืขื ืขื ืืืืืื ื ืฆื ืืืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืจืืึท, ืืืึทืืฉ ืืื ืงืขื ืขื ืืืื ืงืึทืืคึผืืืื ืคึฟืึทืจ ืคืืืข ืคืึทืจืฉืืืขื ืข ืืืืคึผืก ืคืื ืืืจืืคืืจืื ื ืขื ืืืฉืึทื ื, ืึทืืึท ืืื ืืขื ืขืจืึทื-ืฆืื ืคึผืจืึทืกืขืกืขืจื, FPGAs, ืกืืกืืขื-ืืืืฃ-ืืฉืืคึผืก, ื ืขืฅ ืคึผืจืึทืกืขืกืขืจื ืืื ASICs. ืื ืคืึทืจืฉืืืขื ืข ืืืืคึผืก ืคืื ืืืฉืื ืขื ืืขื ืขื ืืืงืื ื ืืื P4 ืืึทืจืืึทืฅ, ืืื ืืขืืขืจ ืฆืื ืจืืงืืืืืขืจื ืึท ืงืึทืืคึผืืืืขืจ ืฆื ืืขืจ ืื P4 ืืงืืจ ืงืึธื ืืื ืึท ืฆืื ืืึทืฉืืืืขื ืืึธืืขื. ืืขืจ ืงืึทืืคึผืืืืขืจ ืงืขื ืขื ืืืื ืืขืืืื ืืื ืื ืฆืื ืืืื, ืคืื ืืจืืืกื ืืืง ืืืืืืืืืจื ืึธืืขืจ ืืคืืื ืึท ืืืึธืืงื ืืื ืกื. ืืืืึทื ืคืืืข ืคืื โโืื ืึธืจืืืื ืขื ืืึทืจืืึทืฅ ืคึฟืึทืจ ืคึผ4 ืืืืื ืืขื ืขื ืืขืืืขื ืคึฟืึทืจ ืคึผืฉืื ืคึผืึทืงืึทื ืกืืืืืฉืื ื, ืขืก ืืื ืืืืขืจ ืคึผืจืึธืกื ืฆื ืืขืจื ืื ืืขืจืืื "ืคึผ4 ืืึทืฉืืืืขื" ืืึธืืฉ "ืคึผ4 ืฆืื" ืืื ืืขืจ ืคึผืื ืืืขื.
ืืขืืืกืืฉืืขื ืืืงืืื ืคืื ืื ืคึผืจืึธืืึธืงืึธื (s) ืืขื ืืฆื
P4 ืืื ืคึผืจืึธืืึธืงืึธื ืคืจืืึท. ืืขื ืืืื ืึทื ืื ืฉืคึผืจืึทื ืืื ื ืืฉื ืืึธืื ืืขืืืืจื ืฉืืืฆื ืคึฟืึทืจ ืคึผืจืึธืกื ืคึผืจืึธืืึธืงืึธืืก ืึทืืึท ืืื IP, ืขืืืขืจื ืขื, TCP, VxLAN ืึธืืขืจ MPLS. ืึทื ืฉืืึธื, ืื P4 ืคึผืจืึธืืจืึทืืืกื ืืืฉืจืืืื ืื ืืขืืขืจ ืคึฟืึธืจืืึทืืืจืื ืืขื ืืื ืคืขืื ื ืขืืขื ืคืื ืื ืคืืจืืื ืื ืคึผืจืึธืืึธืงืึธืืก ืืื ืืขื ืคึผืจืึธืืจืึทื, ืืืึธืก ืืื ืงืขืจ ืืขื ืขื ืื ืืขืจืคึผืจืึทืืึทื ืืื ืคึผืจืึทืกืขืกื ืืืจื ืื ืงืึทืืคึผืืืื ืคึผืจืึธืืจืึทื ืืื ืื ืฆืื ืืืื.
ืคืขืื ืจืขืงืึธื ืคืืืืจืึทืืืืืื
ืื ืคึผืจืึธืืึธืงืึธื ืืขืืืกืืฉืืขื ืืืงืืึทื ืืื ืึทืืกืืจืึทืงื ืฉืคึผืจืึทื ืืึธืืขื ืึทืืึทืื ืคึฟืึทืจ ืจืขืงืึธื ืคืืืืจืึทืืืืืื - P4 ืืึทืจืืึทืฅ ืืึธื ืงืขื ืขื ืฆื ืืืืฉื ืคึผืึทืงืึทื ืคึผืจืึทืกืขืกืื ื ื ืึธื ืื ืกืืกืืขื ืืื ืืืคึผืืืื. ืื ืคืืืืงืืื ืืื ืืจืึทืืืฉืึทื ืึทืื ืคืืจืืื ืื ืืื ืจืืืื ื ืืืจื ืืขื ืขืจืึทื-ืฆืื ืคึผืจืึทืกืขืกืขืจื ืึธืืขืจ ื ืขืฅ ืคึผืจืึทืกืขืกืขืจื ืืื ืืื ืคืึทืจืคืขืกืืืงื-ืคืื ืงืฆืืึธื ืืจื ืื ืึทืืจืืืืื ืกืขืจืงืึทืฅ.
ืืึธืืฉ ืขืก ืืื ืืึธืจื ืืฉื ืืื ืืขืจ ืฉืคึผืจืึทื ืืืึธืก ืืืึธืื ืคืึทืจืืืึทืื ืึทืคึผืืึทืืึทืืืืฉืึทื ืคืื ืื ืคืึธืจืฉืืขืืื ื ืคืื ืึท ืืึทืืื ืืขืจ ืืึทื ื ืคืื ืคึผืจืึธืืึธืงืึธืืก, ืื ืึธืคึผืืืืืืึทืืืึธื ืก ืืขื ืขื ืืืืขืืง ืคึฟืึทืจ ืื ืฉืคึผืจืึทื ืืืืจ ืืื ืงืขื ืขื ืืขืกืึธืฃ ืจืขืืืฆืืจื ืื ืืืืืืงืืึทื ืคืื ืื ืกืืกืืขื ืืื ืืึธืืื ืืื ืืืืขืจ ืจืขืงืึธื ืคืืืืจืึทืืืืืื.
ะะฐะฝะฝัะต ั ะฐัะฐะบัะตัะธััะธะบะธ ัะทัะบะฐ ะธะทะฝะฐัะฐะปัะฝะพ ะทะฐะบะปะฐะดัะฒะฐะปะธัั ะตะณะพ ัะพะทะดะฐัะตะปัะผะธ ั ะพัะธะตะฝัะฐัะธะตะน ะฝะฐ ะฟะพะฒัะตะผะตััะฝะพะต ะธัะฟะพะปัะทะพะฒะฐะฝะธะต ะตะณะพ ะฒ ัะตัะตะฒะพะน ะธะฝััะฐััััะบัััะต.
ืื ืฉืคึผืจืึทื ืืื ืฉืืื ืืขื ืืฆื ืืื ืคืืืข ืงืึธืืคึผืึทื ืืขืก:
1) ืืืคึผืขืจืกืงืึทืืข ืืึทืื ืกืขื ืืขืจืก;
ืื ืืื ืขืืขืจ ืคืืจืืข Tencent ืืื ืื ืืจืขืกืืข ืืื ืืืขืกืืืขื ื ืคืืจืืข ืืื ืืขืจ ืืืขืื ืืื ืืืื ืข ืคืื โโืื ืืจืขืกืืข ืคืืจื ืขื ืงืืคืืืื ืคืืจืืขืก. ืื ืกืึทืืกืืืืขืจืื ืคืื ืืขื ืฆืขื ื, ืกืื ืืื ืืื ืข ืืื ืกืื ืืื ืื ืืขืจืข ืืขื ืืขืจ ืืืืขืจ ืืขืจ ืืืขืื, ืกืคืขืฆืืืืืืืจื ืืื ืืื ืคืืจืฉืืืขื ืข ืืขืืืื ืคืื ืืื-ืืขืง ืืืื ืขืก, ืืจืืื ืืขืจืขืื ื ืคืืจืฉืืืขื ืข ืืื ืืขืจื ืขื ืกืขืจืืืืกืขืก, ืื ืืืืืงืืื ื ืืื ืขื ืืขืืื ืคืื ืงืื ืกืืืืืข ืืื ืืขืืืืขื ืฅ ืืื ืขืืขืงืืจืื ืืฉืข ืคืืจืืืืืืื ื.
P4 ืืื ืคึผืจืึธืืืจืึทืืึทืืึทื ืจืืืื ื ืืขื ืขื ืึทืืืึทื ืกืืจืืข ืืขืงื ืึทืืึทืืืฉืื ืืืึธืก ืืขื ืขื ืืขื ืืฆื ืืื ืื ืคืืจืืข 'ืก ื ืขืฅ ืึทืจืงืึทืืขืงืืฉืขืจ.
ืืื ืืืื ืขืจ ืคืื ืื ืขืจืืืืฉืึทื ืืืืขืจื, Google ืืื ืฉืืึธืืฅ ืฆื ืืึทืืขืจืงื ืื ืืื ืึทืืึทืคึผืฉืึทื ืคืื P4 ืืื ืื ื ืขืืืืึธืจืงืื ื ืืื ืืืกืืจืืข ืืื ืืื ืื ืึทืจืงืึทืืขืงืืฉืขืจืึทื ืคึผืืึทื ืคืื ืืึทืื ืฆืขื ืืขืจ ืืื ืืึทืืื ืืขืจ.
2 ) ืงืืืขืจืฆืืขืืข ืคืืจืืขืก;
Goldman Sachs ะธัะฟะพะปัะทัั ะฟัะตะธะผััะตััะฒะฐ ัะฐะฑะพัั ั ัะพะพะฑัะตััะฒะพะผ ะพัะบัััะพะณะพ ะธัั ะพะดะฝะพะณะพ ะบะพะดะฐ ะธ ัะฐะทัะฐะฑะพัะบะธ ะพะฑัะธั ััะฐะฝะดะฐััะพะฒ ะธ ัะตัะตะฝะธะน ัะถะต ัะตะนัะฐั ะฟัะธะฒะฝะพัะธั ะธะฝะฝะพะฒะฐัะธะธ ะฒ ัะตัะตะฒัั ะธะฝััะฐััััะบัััั ะธ ะฟัะตะดะพััะฐะฒะปัะตั ะปัััะธะต ัะตัะตะฝะธั ะดะปั ะบะปะธะตะฝัะพะฒ.
3) ืคึผืจืึธืืืงืฆืืข;
ืื ืืื ืฆืข ื ืขืืืืึธืจืงืื ื ืืื ืืืกืืจืืข ืืืึธืื ื ืืฅ ืคืื ืึท ืฉืคึผืจืึทื ืืื P4 ืืืึธืก ืืื ืืงืื ืืืคืืื ื ืคืึธืจืืืขืจืืื ื ื ืึทืืืจ. Cisco ืืืื ืืืืืื ืืื ืืจืึทื ืกืคืขืจืื ื ืืืึทื ืคึผืจืึธืืืงื ืฉืืจืืช ืฆื ื ืืฆื ืืขื ืฉืคึผืจืึทื.
Juniper Networks ืืื ืึทืจืืึทื ืืขืจืขืื ื P4 ืืื P4 ืจืื ืืืืข ืืื ืึท ื ืืืขืจ ืคืื ืคึผืจืึธืืืงืื, ืืื ืืื ืคึผืจืึธืืจืึทืืืึทืืืง ืึทืงืกืขืก ืฆื ืื ืืืฉืื ืืคึผืขืจ ืขืืืขืืื ืคึผืจืึทืกืขืกืขืจ ืืื ืืืื ืืืืืืืืืจื ืงืึธื.
Ruijie ื ืขืืืืึธืจืงืก ืืื ืึท ืฉืืึทืจืง ืกืึทืคึผืึธืจืืขืจ ืคืื P4 ืืื ืื ืืขื ืขืคืืฅ ืขืก ืืจืขื ืื ืฆื ื ืขืืืืึธืจืงืก. ืืื P4, ืื ืคืืจืืข ืงืขื ืขื ืฉืึทืคึฟื ืืื ืฆืืฉืืขืื ืืขืกืืขืจ-ืืื-ืงืืึทืก ืกืึทืืืฉืึทื ื ืฆื ืึท ืืจืืื ืงืืื ืคืื ืงืึทืกืืึทืืขืจื.
4) ืืขืืขืงืึธืืืื ืืงืึทืืืึธื ืก ืคึผืจืึทืืืืืืขืจื;
AT&T ืืื ืืขืืืขื ืึท ืคืจื ืึทืืึทืคึผืืขืจ ืคืื P4, ืืืื ืขืจ ืคืื ืื ืขืจืฉืืข ืฆื ื ืืฆื P4 ืฆื ืืขืคืื ืืจื ืื ื ืึทืืืจ ืืืึธืก ืื ืืขืืืืื ืฆื ืืขื ืืื ืืืื ื ืขืืืืึธืจืงืก, ืืื ืฆื ื ืืฆื P4 ืคึผืจืึธืืืจืึทืืึทืืึทื ืคืึธืจืืืขืจืืื ื ืืขืืืืกืขืก ืืืืฃ ืืืื ื ืขืฅ.
ืืื Deutsche Telekom, ืื ืฉืคึผืจืึทื ืืื ืืขื ืืฆื ืฆื ืคึผืจืึธืืืึทืืืืคึผ ืฉืืืกื ื ืขืฅ ืคืึทื ืืงืฉืึทื ื ืืื ืึท ืืืื ืคืื ืื ืึทืงืกืขืก 4.0 ืคึผืจืึธืืจืึทื.
5) ืกืขืืืงืึทื ืืึทืงืืขืจ ืืื ืืืกืืจืืข;
ืื ืฉืคึผืจืึทื ืื ืืืืึทืื Barefoot ืฆื ืื ืกืืจืืืขื ื ืึท ื ืืึทืข ืคึผืึทืจืึทืืืื ืคึฟืึทืจ ืืืืืืืขืจืื ื ืืืืืืืืืจื ืงืืืคึผืึทืืืืึทืืื ืฆื ืื ื ืขืฅ ืจืืืื ื ืคืืึทื.
Xilinx ืืื ืืขืืืขื ืืืื ืขืจ ืคืื ืื ืืจืื ืืขืจืก ืคืื P4.org ืืื ืืื ืืขืืืขื ืึทืงืืืืืื ืื ืืืึทืืืื ืืื ืืขืจ ืึทื ืืืืืงืืื ื ืคืื ืื P4 ืฉืคึผืจืึทื ืืื ืืืคึผืืึทืืขื ืึทื ืขืก ืืื FPGA-ืืืืืจื ืคึผืจืึธืืืจืึทืืึทืืึทื ืคึผืืึทืืคืึธืจืืก ืคึฟืึทืจ SmartNIC ืืื NFV ืืึทืื ืืืึทืจื, ืจืืืืกืื ื ืืืื ืขืจ ืคืื ืื ืขืจืฉืืข P416 ืงืึทืืคึผืืืืขืจื ืืื ืึท ืืืื ืคืื ืื SDNet ืคึผืืึทื.
6) ืืืืืืืืืจื.
VMware ืืืืืื ืึทื P4 ืงืจืืืืฅ ืจืืืืง ืขื ืขืจืืืข, ืืืืขืฉ ืืื ืงืื ืืืึธืก ืืื ืืจืืืืืื ื ืืื ืื ืืคืึทื ืืื ื ืืืืืง ืืจืึทื ืกืคืึธืจืืึทืฆืืข ืืื ืื ื ืขืฅ. VMware ืืื ืืขืืืขื ืึท ืืืื ืคืื ืืขื ืื ืืึทืกืืจื ืืึทืืืขืืื ื ืืื ื ืื ืึธื ืืืื, ืืืืึทื ืึท ื ืืึทืข ืืืืึทืืืข ืคืื โโืืืืขืฉ ืืื ืืขืืจืืื ืืืจื ืืืืืืืืืจื-ืืืืืจื ืึทืคึผืจืึธืืืฉืื ืืืึธืก ืคืึทืจืืจืืืืขืจื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืงืืืคึผืึทืืืืึทืืื ืืื ืืืคึผืืึทืืึทื ืฅ ืขืก ืืื ืื ืืขืฆืืข ืคึผืจืึธืืืงืื.
ืืืื, P4 ืืื ืึท ืฆืื-ืคืจืืึท ืืื ืคึผืจืึธืืึธืงืึธื-ืคืจืืึท ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืืึธืก ืืื ืืขื ืืฆื ืืืจื ืื ืืึทืกืืจื ืืื ืึทืงืึทืืขืืืข ืฆื ืืื ืืงืื ืืขืคืื ืืจื ืคึผืึทืงืึทื ืจืืืื ื ื ืึทืืืจ ืืื ืึท ืคึผืจืึธืืจืึทื, ืืืึธืก ืืื ืงืขืจ ืงืขื ืขื ืืืื ืงืึทืืคึผืืืื ืคึฟืึทืจ ืงืืืคื ืืึทืจืืึทืฅ. ืืืึทื ื, ืืึทืจืืึทืฅ ืึทืจืืึทื ื ืขืืขื ืืึทืื ืืืึทืจื ืืื ืืืืืืืืืจื ืกืืืืืฉืื, ืืืคึผืขืจืืืืืืขืจ ืกืืืืืฉืื, ื ืคึผืืก, ืืคึผืืก, ืคืคึผืืึท, ืกืืึทืจืื ืืงืก ืืื ืึทืกืืง.
ืื ืืืืคึผื ืคึฟืขืึดืงืืืื ืคืื ืืขืจ ืฉืคึผืจืึทื ืืืืืืืืง ืืงืกืคึผืึทื ื ืื ืคืึทืจื ืขื ืคืื ืืืึทื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืขื ืฉืืจ ืื ืืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืืื ื ืขืฅ ืึทืจืงืึทืืขืงืืฉืขืจื.
ืืขืืื ื ืกืืึทืจืืขื
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;
}
}โฆ
}
ืืืฉื - ืึทื ืืืึทืืื ืืึทืฉืื ืฉืืึทืื ืคึฟืึทืจืืื ืืื ื ืืึทื ืืฆืขืจ ืฉืืืกืืขื ืืื ืึทืงืฉืึทื ื. ืืขืืืงืืื - ืึท ืืึทืฉืจืืึทืืื ื ืคืื ืืื ืื ืคึผืขืงื ืืึธื ืืืื ืืึทื ืืคึผืืึทืืืืืื.
ืื ืืืฉื ืึทื ืืืึทืืื ืฉืืึทืื (ืืืคืืื ื ืืื ืื ืคืึทืจืืืึทืืืื ื ืืืจืื) ืคึฟืึทืจ ืคึผืึทืงืึทื ืคืึธืจืืืขืจืืื ื, ืืึทืฉืจืืึทืื ืื ืืึทืืฉ-ืึทืงืฉืึทื ืึทืคึผืึทืจืึทื
ืคึผืึทืงืึทืฅ ืืขื ืขื ืืึทืืฉื ืืืจื:
- ืคึผืื ืืืขื ืืืืึทืื
- ืืึธื ืืขืกื ืคึผืจืขืคืืงืก ืืืืึทืื (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;
}
ืืืืึทืื-ืึทืงืฉืึทื ืืึทืืืฉืืื - ืึทืงืฉืึทื ื ืฆื ืฉืึทืคึฟื ืึท ืืืื ืฉืืืกื, ืืืื ืืื ืึท ืืืฉ, ืืืจืืคืืจื ืึทืงืฉืึทื ื.
ื ืืืคึผืืฉ ืืืึทืฉืคึผืื ืคืื ืึท ืืึธืืืืข ืืื ืืขืืืืื ืืื ืื ืคืืืืจ:
ืงืึธื ืืจืึธื ืืืืคื - ืื ืืืงืืืฅ ืื ืกืืจ ืืื ืืืึธืก ืืึทืืฉ-ืึทืงืฉืึทื ืืึทืืืฉืืื ืืขื ืขื ืืขื ืืฆื. ืืึธืก ืืื ืึทื ืืืคึผืขืจืึทืืืื ืคึผืจืึธืืจืึทื ืืืึธืก ืืืคืืื ื ืื ืืืื ืืืจืื ืคืื ืืึธืืืง ืืื ืืึทืืฉ-ืึทืงืฉืึทื ืกืืงืืืึทื ืก. ืื ืงืึธื ืืจืึธื ืืืืคื ืคึฟืึทืจืืื ืืื ื ืึทืืข ืึทืืืืฉืขืงืฅ ืืืจื ืืืคืืื ืื ื ืื ืืืจืื ืคืื ืงืึธื ืืจืึธื.
ืคืื ืืจืืืกื ืืืง ืึทืืืืฉืขืงืก ืืขื ืขื ืกืคึผืขืฆืืคืืฉ ืึทืืืืฉืขืงืฅ ืืื ืึท ืงืืืจ ืืืคืืื ื ืึทืจืงืึทืืขืงืืฉืขืจ ืืื ืึทืคึผื ืื ืืขืจืคืืืกืื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืฉืขืงืกืื ืืขืืฉืื, ืจืขืืืฉืืกืืขืจื, ืงืึธืื ืืขืจืก, ืงืึธืื ืืขืจืก, ืืื"ื ื.
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) ืืืฉืขื ืขืจืืืฅ:
- ืืึทืืึท ืคืืึทื ืจืื ืืืืข
- ืึทืคึผื ืคึฟืึทืจ ืึธื ืคืืจืื ื ืืึทืฉืื ืฉืืึทื ืืื ืื ืืึทืื ืคืืึทื
ืืืึทืฉืคึผืื ืคืื ืึท ืืืืืืืืืจื ืืึทืฉืืืืขื ืืื P4 ืฉืคึผืจืึทื
ืืงืืจ ืงืึธืืื ืงืขื ืขื ืืืื ืืึทืื ืืึธืืืื ืคืื ืื ืจืืคึผืึทืืึทืืึธืจื.
p4lang/p4c-bm: ืงืจืืืืฅ ืืืฉืกืึธื ืงืึทื ืคืืืืขืจืืืฉืึทื ืคึฟืึทืจ bmv2
p4lang/bmv2: ืึท ืืืืืืืืืจื ืืึทืฉืืืืขื ืืืึธืก ืคืืจืฉืืืื bmv2 ืืืขืจืกืืข JSON ืงืึทื ืคืืืืขืจืืืฉืึทื ื
ืื ืคืืืืจ ืืืืืื ืื ืคึผืจืืืขืงื ืืึทืืืื ื ืืืึทืืจืึทืืข:
ืืึทื ืืคึผืืึทืืืืฉืึทื ื ืืื ืืืฉื, ืืืืขื ืขื ืจืขืืืฉืืกืืขืจื, ืงืึธืื ืืขืจืก:
- 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>
ืืขืจ ืืงืืจ ืงืึธื ืึผืืื ืื ืคึผืฉืื_ืกืืืืืฉ_ืงืื ืคึผืจืึธืืจืึทื ืคึฟืึทืจ ืืึทืงืืืขื ื ืืฆื ืคืื ืื ืืืืืืืืืจื ืืึทืฉืืืืขื ืึทืคึผื.
ืืืจ ืงืขื ืขื ืืจืืคืงืืคืืข ืืขื ืืื ืื ืืขืจืข ืืืืฉืคืืื ืคืื ืื ืจืืคึผืึทืืึทืืึธืจื.
ืคึผืก ืคืจื ืืขื ืืืืขืจ, Intel ืืขืืชืืขื ืึท ืืขืกืงืขื ืฆื ืงืจืืื Barefoot Networks ืืื ืึทื ืึธื ืฉืืจืขื ืืื ื ืฆื ืืขืฉืืืื ื ืืจืขืคื ืื ืืืืขืจืคืขื ืืฉื ืคืื Hyperscale Cloud ืืืืขืจื. ืืื Navin Shenoy (ืขืงืืขืงืืืืืื ืืืืฆืข ืคึผืจืขืืืืขื ื ืืื ืืขื ืขืจืึทื ืคืึทืจืืืึทืืืขืจ ืคืื ืื ืืึทืืึท ืฆืขื ืืขืจ ืืจืืคืข ืืื Intel Corporation) ืืื ืืขืืืื, ืืึธืก ืืืขื ืืึธืื ืื ืืขื ืฆื ืฆืืฉืืขืื ืืจืขืกืขืจืข ืืืขืจืงืืึธืืื ืืื ืืขืจ ืึทืคึผืขืจืืื ืึทืืื ืคึฟืึทืจ ืืึทืื ืฆืขื ืืขืจ ืงืึทืกืืึทืืขืจื.
ืืื ืืืื ืคืขืจืืขื ืืขืืข ืืืื ืื ื, ืืืจ ืืึธื ื ืืฉื ืคืึทืจืืขืกื ืึทื ืื ืืขื ืืื ืึท ืคืืจืขืจ ืืื ืืขืจ ืคึผืจืึธืืืงืฆืืข ืคืื โโFPGA ืืฉืืคึผืก ืืื ืขืก ืืื ืึท ืืืกืืขืฆืืืื ื ืงืืืึทืจืืืก ืกืืืืืืข. ืืึธืก ืืืื ื ืึทื ืืืจ ืงืขื ืขื ืืขืจืืืึทืจืื ืึทื ืืื ืืขื ืึธื ืงืืืขื ืคืื ืื ืืขื, Barefoot ืืืขื ื ืืฉื ืืืืื ืืงืกืคึผืึทื ื ืืืื ืคึผืจืึธืืืงื ืฉืืจื, ืึธืืขืจ ืืืื Quartus ืืื P4 ืกืืืืืึธ ืืืขื ืืึทืงืืืขื ืขืจื ืกื ืืขืจืืืึทื ืืืงืื ืืขื ืืื ืึทืืืฉืึทื ื ืฆื ืื Toffino ืืื Toffino 2 ืฉืืจื.
ืืึทืึทืืืขืจ ืืืืืืื ืคืื ืืขืจ P4 ืงืื - ืคืืจืืข
ืืงืืจ: www.habr.com