P4๋ ํจํท ๋ผ์ฐํ
๊ท์น์ ํ๋ก๊ทธ๋๋ฐํ๋๋ก ์ค๊ณ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์
๋๋ค. C๋ Python๊ณผ ๊ฐ์ ๋ฒ์ฉ ์ธ์ด์ ๋ฌ๋ฆฌ P4๋ ๋คํธ์ํฌ ๋ผ์ฐํ
์ ์ต์ ํ๋ ๋ค์ํ ์ค๊ณ๋ฅผ ๊ฐ์ถ ๋๋ฉ์ธ๋ณ ์ธ์ด์
๋๋ค.
P4๋ P4 ์ธ์ด ์ปจ์์์์ด๋ผ๋ ๋น์๋ฆฌ ์กฐ์ง์์ ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ์คํ ์์ค ์ธ์ด์
๋๋ค. ๋ํ ์คํ ์์ค ๋คํธ์ํน ํ๋ก์ ํธ๋ฅผ ์ํ ๊ฐ์ฅ ํฐ ๋ ์กฐ์ง์ธ ONF(Open Networking Foundation)์ LF(Linux Foundation)์์๋ ์ง์๋ฉ๋๋ค.
์ด ์ธ์ด๋ ์๋ 2013๋
์ ๋ง๋ค์ด์ก์ผ๋ฉฐ "ํ๋กํ ์ฝ ๋
๋ฆฝ์ , ํจํท ๋ผ์ฐํ
ํ๋ก์ธ์ ํ๋ก๊ทธ๋๋ฐ"์ด๋ผ๋ ์ ๋ชฉ์ 2014 SIGCOMM CCR ๋
ผ๋ฌธ์ ์ค๋ช
๋์ด ์์ต๋๋ค.
P4๋ ์ฒ์๋ถํฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฑ์ฅํ๊ณ ๋ฐ์ ํ์ฌ ๋คํธ์ํฌ ์ด๋ํฐ, ์ค์์น ๋ฐ ๋ผ์ฐํฐ๋ฅผ ํฌํจํ ๋คํธ์ํฌ ์ฅ์น์ ํจํท ์ ์ก์ ์ค๋ช ํ๋ ํ์ค์ด ๋์์ต๋๋ค.
Open Networking Foundation์ ์ ๋ฌด์ด์ฌ์ธ Guru Parulkar๋ "SDN์ ๋คํธ์ํน ์ฐ์ ์ ๋ณํ์์ผฐ์ผ๋ฉฐ P4๋ ๋ผ์ฐํ ์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ SDN์ ํ ๋จ๊ณ ๋ ๋ฐ์ ์์ผฐ์ต๋๋ค."๋ผ๊ณ ๋งํ์ต๋๋ค.
P4 ์ธ์ด๋ ์๋ Google, Intel, Microsoft Research, Barefoot, Princeton ๋ฐ Stanford์ ์์ง๋์ด ๋ฐ ์ฐ๊ตฌ์ ๊ทธ๋ฃน์ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ๋ชฉํ๋ ๊ฐ๋จํ์ต๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ ํ๋ฃจ ๋ง์ ๋ฐฐ์ธ ์ ์๊ณ ๋คํธ์ํฌ๋ฅผ ํตํด ํจํท์ด ์ ์ก๋๋ ๋ฐฉ์์ ์ ํํ๊ฒ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์ธ์ด๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ฒ์๋ถํฐ P4๋ ํ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค(์ฆ, P4๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ASIC, FPGA, CPU, NPU ๋ฐ GPU์ ๊ฐ์ ๋ค์ํ ํ๊ฒ์์ ์คํ๋๋๋ก ๋ณ๊ฒฝ ์์ด ์ปดํ์ผ๋ ์ ์์ต๋๋ค).
์ธ์ด๋ ๋ํ ํ๋กํ ์ฝ ๋ ๋ฆฝ์ ์ ๋๋ค(์ฆ, P4 ํ๋ก๊ทธ๋จ์ ๊ธฐ์กด ํ์ค ํ๋กํ ์ฝ์ ์ค๋ช ํ๊ฑฐ๋ ์๋ก์ด ์ฌ์ฉ์ ์ ์ ์ฃผ์ ์ง์ ๋ชจ๋๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค).
์ ๊ณ์์๋ P4๊ฐ ์ฅ์น ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ง๋ ๋ฏธ๋์๋ ์ธํฐ๋ท-RFC ๋ฐ IEEE ํ์ค์๋ P4 ์ฌ์์ด ํฌํจ๋ ๊ฒ์ ๋๋ค.
P4๋ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ ์ฅ์น์ ๊ณ ์ ๊ธฐ๋ฅ ์ฅ์น ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์คํ ์์ค SONiC ์ค์์น OS์์ ์ฌ์ฉํ๋ SAI(Switch Abstraction Interface) API์์ ์ค์์น ํ์ดํ๋ผ์ธ ๋์์ ์ ํํ๊ฒ ๊ธฐ๋กํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. 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, ์์คํ ์จ ์นฉ, ๋คํธ์ํฌ ํ๋ก์ธ์ ๋ฐ ASIC๊ณผ ๊ฐ์ ๋ค์ํ ์ ํ์ ์คํ ์์ง์ฉ์ผ๋ก ์ปดํ์ผ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ค์ํ ์ ํ์ ๋จธ์ ์ P4 ํ๊ฒ์ด๋ผ๊ณ ํ๋ฉฐ, ๊ฐ ํ๊ฒ์๋ P4 ์์ค ์ฝ๋๋ฅผ ํ๊ฒ ์ค์์น ๋ชจ๋ธ๋ก ๋ณํํ๋ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋์ ์ฅ์น, ์ธ๋ถ ์ํํธ์จ์ด ๋๋ ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ด์ฅ๋ ์ ์์ต๋๋ค. P4 ํ๋ก๊ทธ๋จ์ ์๋ ๋์ ์ค ๋ค์๋ ๋จ์ํ ํจํท ๊ตํ์ ์ํ ๊ฒ์ด์๊ธฐ ๋๋ฌธ์ "P4 ๋์"์ด ๋ ์ ํํ๋๋ผ๋ "P4 ์ค์์น"๋ผ๋ ์ฉ์ด๋ฅผ ๋ฃ๋ ๊ฒ์ด ๋งค์ฐ ์ผ๋ฐ์ ์ ๋๋ค.
์ฌ์ฉ๋ ํ๋กํ ์ฝ์ ๋ ๋ฆฝ์ฑ
P4๋ ํ๋กํ ์ฝ์ ๋ ๋ฆฝ์ ์ ๋๋ค. ์ด๋ ์ธ์ด๊ฐ IP, ์ด๋๋ท, TCP, VxLAN ๋๋ MPLS์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋์ P4 ํ๋ก๊ทธ๋๋จธ๋ ํ๋ก๊ทธ๋จ์ ํ์ํ ํ๋กํ ์ฝ์ ํค๋ ํ์๊ณผ ํ๋ ์ด๋ฆ์ ์ค๋ช ํ๋ฉฐ, ์ด๋ ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ๊ณผ ๋์ ์ฅ์น์ ์ํด ํด์๋๊ณ ์ฒ๋ฆฌ๋ฉ๋๋ค.
ํ์ฅ ์ฌ๊ตฌ์ฑ์ฑ
ํ๋กํ ์ฝ ๋ ๋ฆฝ์ฑ๊ณผ ์ถ์ ์ธ์ด ๋ชจ๋ธ์ ์ฌ๊ตฌ์ฑ์ ํ์ฉํฉ๋๋ค. P4 ๋์์ ์์คํ ๋ฐฐํฌ ํ ํจํท ์ฒ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ ํต์ ์ผ๋ก ๊ณ ์ ๊ธฐ๋ฅ ์ง์ ํ๋ก๋ณด๋ค๋ ๋ฒ์ฉ ํ๋ก์ธ์๋ ๋คํธ์ํฌ ํ๋ก์ธ์๋ฅผ ํตํ ๋ผ์ฐํ ๊ณผ ๊ด๋ จ๋์ด ์์ต๋๋ค.
ํน์ ํ๋กํ ์ฝ ์ธํธ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋ฐฉํดํ๋ ์ธ์ด์๋ ์๋ฌด๊ฒ๋ ์์ง๋ง ์ด๋ฌํ ์ต์ ํ๋ ์ธ์ด ์์ฑ์์๊ฒ ๋ณด์ด์ง ์์ผ๋ฉฐ ๊ถ๊ทน์ ์ผ๋ก ์์คํ ๊ณผ ๋ชฉํ์ ์ ์ฐ์ฑ ๋ฐ ์ฌ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ ๊ฐ์์ํฌ ์ ์์ต๋๋ค.
์ธ์ด์ ์ด๋ฌํ ํน์ฑ์ ์ฒ์์๋ ๋คํธ์ํฌ ์ธํ๋ผ์์์ ๊ด๋ฒ์ํ ์ฌ์ฉ์ ์ด์ ์ ๋ง์ถฐ ์ ์์์ ์ํด ๊ท์ ๋์์ต๋๋ค.
์ด ์ธ์ด๋ ์ด๋ฏธ ๋ง์ ํ์ฌ์์ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
1) ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ผํฐ;
์ค๊ตญ ํ์ฌ Tencent๋ ์ธ๊ณ ์ต๋ ํฌ์ ํ์ฌ์ด์ ์ต๋ ๋ฒค์ฒ ์บํผํ ํ์ฌ ์ค ํ๋์ ๋๋ค. ์ค๊ตญ๊ณผ ์ ์ธ๊ณ ๋ค๋ฅธ ๊ตญ๊ฐ์ ์๋ Tencent์ ์ํ์ฌ๋ ๋ค์ํ ์ธํฐ๋ท ์๋น์ค, ์ธ๊ณต ์ง๋ฅ ๋ฐ ์ ์ ์ํฐํ ์ธ๋จผํธ ๋ถ์ผ์ ๊ฐ๋ฐ์ ํฌํจํ์ฌ ๋ค์ํ ํ์ดํ ํฌ ๋น์ฆ๋์ค ๋ถ์ผ๋ฅผ ์ ๋ฌธ์ผ๋ก ํฉ๋๋ค.
P4 ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ ๋ผ์ฐํ ์ ํ์ฌ์ ๋คํธ์ํฌ ์ํคํ ์ฒ์ ์ฌ์ฉ๋๋ ๊ณ ๊ธ ๊ธฐ์ ์ ๋๋ค.
์ฐฝ์์ ์ค ํ๋์ธ Google์ ๋คํธ์ํน ์ฐ์ , ํนํ ๋ฐ์ดํฐ ์ผํฐ ์ํคํ ์ฒ ์ค๊ณ์์ P4์ ๊ธ์ํ ์ฑํ์ ์๋์ค๋ฝ๊ฒ ์๊ฐํฉ๋๋ค.
2) ์์ ํ์ฌ;
Goldman Sachs๋ ์คํ ์์ค ์ปค๋ฎค๋ํฐ์์ ํ๋ ฅ์ ํตํด ๊ณตํต ํ์ค ๋ฐ ์๋ฃจ์ ์ ๊ฐ๋ฐํ์ฌ ๋คํธ์ํฌ ์ธํ๋ผ๋ฅผ ํ์ ํ๊ณ ๊ณ ๊ฐ์๊ฒ ๋ ๋์ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
3) ์์ฐ;
์ ์ฒด ๋คํธ์ํน ์ฐ์ ์ ์ ๋ฌ ๋์์ ๊ณ ์ ํ๊ฒ ์ ์ํ๋ P4์ ๊ฐ์ ์ธ์ด์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค. Cisco๋ ๋ํ ์ด ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ํ ๋ผ์ธ์ ์ด์ ํด์ผ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
์ฃผ๋ํผ ๋คํธ์์ค๋ ๋ค์ํ ์ ํ์ P4 ๋ฐ P4 ๋ฐํ์์ ํฌํจ์์ผฐ์ผ๋ฉฐ ์ฃผ๋ํผ ์๋ฒ ๋๋ ํ๋ก์ธ์์ ํด๋น ์ํํธ์จ์ด ์ฝ๋์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
Ruijie Networks๋ P4์ P4๊ฐ ๋คํธ์ํฌ์ ์ ๊ณตํ๋ ์ด์ ์ ๊ฐ๋ ฅํ ์ง์งํฉ๋๋ค. PXNUMX๋ฅผ ํตํด ํ์ฌ๋ ๋ค์ํ ๊ณ ๊ฐ์๊ฒ ๋๊ธ ์ต๊ณ ์ ์๋ฃจ์ ์ ๋ง๋ค๊ณ ์ ๊ณตํ ์ ์์ต๋๋ค.
4) ํต์ ์ฌ์ ์
AT&T๋ P4๋ฅผ ์ด๊ธฐ์ ์ฑํํ ํ์ฌ๋ก, P4๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ์์ ๋ณด๊ณ ์ ํ๋ ๋์์ ์ ์ํ๊ณ ๋คํธ์ํฌ์์ P4 ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ ์ ๋ฌ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ์ต์ด์ ํ์ฌ ์ค ํ๋์ ๋๋ค.
Deutsche Telekom์์ ์ด ์ธ์ด๋ Access 4.0 ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๋ก ์ฃผ์ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ํ๋กํ ํ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
5) ๋ฐ๋์ฒด ์ฐ์ ;
์ด ์ธ์ด๋ฅผ ํตํด Barefoot์ ๋คํธ์ํฌ ๋ผ์ฐํ ํ๋ ์ธ์ ์ํํธ์จ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํ ์๋ก์ด ํจ๋ฌ๋ค์์ ๊ตฌํํ ์ ์์์ต๋๋ค.
Xilinx๋ P4.org์ ์ฐฝ๋ฆฝ์ ์ค ํ๋์์ผ๋ฉฐ P4 ์ธ์ด ๊ฐ๋ฐ์ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ์ฌ ์ด๋ฅผ SmartNIC ๋ฐ NFV ํ๋์จ์ด์ฉ FPGA ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ ํ๋ซํผ์ ๊ตฌํํ์ผ๋ฉฐ SDNet ์ค๊ณ์ ์ผ๋ถ๋ก ์ต์ด์ P416 ์ปดํ์ผ๋ฌ ์ค ํ๋๋ฅผ ์ถ์ํ์ต๋๋ค.
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;
}
}โฆ
}
ะขะฐะฑะปะธัั โ ์ฌ์ฉ์ ํค๋ฅผ ์์ ๊ณผ ์ฐ๊ฒฐํ๋ ์ปดํจํฐ ์ํ๋ฅผ ํฌํจํฉ๋๋ค. ํ๋ โ ํจํค์ง๋ฅผ ์กฐ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ์ ๋๋ค.
ํ ์ด๋ธ์๋ ํจํท ์ ๋ฌ์ ๋ํ ์ํ(๊ด๋ฆฌ ์์ค์์ ์ ์๋จ)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ผ์น ์์ ๋จ์๋ฅผ ์ค๋ช ํฉ๋๋ค.
ํจํท์ ๋ค์๊ณผ ์ผ์นํฉ๋๋ค.
- ์ ํํ ์ผ์น
- 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;
}
๋งค์น ์ก์ ๋ชจ๋ โ ๊ฒ์ ํค ์์ฑ, ํ ์ด๋ธ ๊ฒ์, ์์ ์ํ์ ์ํ ์์ ์ ๋๋ค.
๋ชจ๋์ ์ผ๋ฐ์ ์ธ ์๊ฐ ๊ทธ๋ฆผ์ ๋์ ์์ต๋๋ค.
์ ์ด ํ๋ฆ โ ์ผ์น ์์ ๋ชจ๋์ด ์ฌ์ฉ๋๋ ์์๋ฅผ ๋ํ๋ ๋๋ค. ์ด๊ฒ์ ์์ ์์ค์ ๋ ผ๋ฆฌ์ ์ผ์น ์์ ์์๋ฅผ ์ ์ํ๋ ํ์ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ ์ด ํ๋ฆ์ ์ ์ด ์์ค์ ์ ์ํ์ฌ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
์ธ๋ถ ๊ฐ์ฒด ๋ช ํํ๊ฒ ์ ์๋ ์ํคํ ์ฒ์ 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
}
๋ฉํ ๋ฐ์ดํฐ โ ๊ฐ ํจํค์ง์ ๊ด๋ จ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
๋ฉํ๋ฐ์ดํฐ์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ฉํ๋ฐ์ดํฐ(๋ชจ๋ ํจํค์ง์ ๋ํ ๋น ๊ตฌ์กฐ)
์ฌ๊ธฐ์๋ ๋น์ ์ด ์ํ๋ ๊ฒ์ ๋ฃ์ ์ ์์ต๋๋ค
ํ์ดํ๋ผ์ธ ์ ์ฒด์์ ์ฌ์ฉ ๊ฐ๋ฅ
์๋ฅผ ๋ค์ด ํจํค์ง ํด์๋ฅผ ์ ์ฅํ๋ ๋ฑ ์์ ๋ง์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ํธ๋ฆฌํฉ๋๋ค.
๋ด๋ถ ๋ฉํ๋ฐ์ดํฐ - ์ํคํ
์ฒ์์ ์ ๊ณต
์
๋ ฅ ํฌํธ, ์ถ๋ ฅ ํฌํธ๊ฐ ์ฌ๊ธฐ์ ์ ์๋ฉ๋๋ค.
ํจํท์ด ๋๊ธฐ์ด์ ์ถ๊ฐ๋ ํ์์คํฌํ, ๋๊ธฐ์ด ๊น์ด
๋ฉํฐ์บ์คํธ ํด์/๋ฉํฐ์บ์คํธ ๋๊ธฐ์ด
ํจํค์ง ์ฐ์ ์์, ํจํค์ง ์ค์๋
์ถ๋ ฅ ํฌํธ ์ฌ์(์: ์ถ๋ ฅ ๋๊ธฐ์ด)
P4 ์ปดํ์ผ๋ฌ
P4 ์ปดํ์ผ๋ฌ(P4C)๋ ๋ค์์ ์์ฑํฉ๋๋ค.
- ๋ฐ์ดํฐ ํ๋ ์ธ ๋ฐํ์
- ๋ฐ์ดํฐ ํ๋ ์ธ์์ ๋จธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ API
P4 ์ธ์ด์ ์ํํธ์จ์ด ์ค์์น ์
์์ค์ฝ๋๋ ์ ์ฅ์์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
p4lang/p4c-bm: bmv2์ ๋ํ JSON ๊ตฌ์ฑ์ ์์ฑํฉ๋๋ค.
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>
์์ค ์ฝ๋์๋ ์ํํธ์จ์ด ์ค์์น API๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก simple_switch_CLI ํ๋ก๊ทธ๋จ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ด ์์ ์ ๋ค๋ฅธ ์์ ๋ฅผ ์ ์ฅ์์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
PS ์ฌ ์ฌ๋ฆ ์ด, ์ธํ ์ ํ์ดํผ์ค์ผ์ผ ํด๋ผ์ฐ๋ ์ฌ์ฉ์์ ์๊ตฌ ์ฌํญ์ ์ ์ํ๊ฒ ์ถฉ์กฑํ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ์ผํ์ผ๋ก Barefoot Networks ์ธ์ ๊ณ์ฝ์ ์ฒด๊ฒฐํ์ต๋๋ค. Navin Shenoy(Intel Corporation์ ๋ฐ์ดํฐ ์ผํฐ ๊ทธ๋ฃน ์์ ๋ถ์ฌ์ฅ ๊ฒธ ์ด๊ด ๊ด๋ฆฌ์)๊ฐ ๋งํ๋ฏ์ด, ์ด๋ฅผ ํตํด Intel์ ๋ฐ์ดํฐ ์ผํฐ ๊ณ ๊ฐ์๊ฒ ๋ ํฐ ์ํฌ๋ก๋์ ๋ ๋ง์ ๊ธฐํ๋ฅผ ์ ๊ณตํ ์ ์์ ๊ฒ์ ๋๋ค.
์ ๊ฐ์ธ์ ์ธ ์๊ฐ์ผ๋ก๋ Intel์ด FPGA ์นฉ ์์ฐ์ ์ ๋์ฃผ์์ด๊ณ ๋ฐ์ด๋ Quartus ํ๊ฒฝ์ ๊ฐ์ถ๊ณ ์๋ค๋ ์ ์ ์์ด์๋ ์ ๋ฉ๋๋ค. ์ด๋ Intel์ ์ถ์๋ก Barefoot์ด ์ ํ ๋ผ์ธ์ ํ์ฅํ ๋ฟ๋ง ์๋๋ผ Quartus ๋ฐ P4 Studio๋ Toffino ๋ฐ Toffino 2 ๋ผ์ธ์ ๋ํ ์ฌ๊ฐํ ์ ๋ฐ์ดํธ ๋ฐ ์ถ๊ฐ๋ฅผ ๋ฐ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
P4 ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ์ - ํ์ฌ
์ถ์ฒ : habr.com