๊ณ ์ณ์ผํ ๋ถ๋ถ์ด
๋๋ฌด๋ง์์ ๋์ค์ ํด๋น ๋ถ๋ถ๋ง ๊ธ์ ์์ฑํ ์์ ์ ๋๋ค.
์ด๋๋ง ์ด๋ฒ ์คํฐ๋๋ ๋๋ง์ Cilium์ ๋ค๋ฃจ๊ธฐ ์์ํฉ๋๋ค.
Cilium์ ์ด๋ ๊ฒ๋ (์ ๋ฅผ ํฌํจํ) ๋ชจ?๋๊ฐ ์ด๊ดํ๋์ง ์์๋ณด๊ธฐ ์ ์
๊ทผ๊ฐ์ด ๋๋ eBPF๋ฅผ ๋จผ์ ๊ฐ๋ณ๊ฒ ์์๋ณด๊ณ ๊ฐ๋ คํฉ๋๋ค.
์ด ๋๋ ์ค๋ง ํ์ง๋ง, ์ญ์๋ ์ค๋ถ์ฌ ์๋ฉ์ด์๋ค
CloudNet@์์ ์งํํ๊ณ ์๋ K8s Advanced Network Study(์ดํ, KANS)๋ฅผ ํตํด ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํฉ๋๋ค.
1. Linux Network Stack
์คํฐ๋ 1์ฃผ์ฐจ์ Jenkins ์ปจํ ์ด๋์์ Host์ Docker ๋ฐ๋ชฌ ์ฌ์ฉํ๊ธฐ์์ ๊ฐ๋ณ๊ฒ ๋ง์ ๋ณด๊ณ ๋๋ง์น๊ธฐ ๋ฐ๋นด์ง๋ง, ์ฌํผ ์๋์ ์ฌํญ์ ์ค์ณ์ง๋๊ฐ์ต๋๋ค.
- iptables: userspace ๊ธฐ๋ฐ์ ๋คํธ์ํน
ufw, firewalld ๋ฑ์ ๋ฐฉํ๋ฒฝ ํ๋ก๊ทธ๋จ์ด ์ด๋ฅผ ๋ํํ์๋ค๋ ๊ฑด ๋์ถฉ ๋์ด๊ฐ๋คํ๋๋ผ๋,
Linux ํ๊ฒฝ์์ userspace๋ฅผ ํตํด ์ ์ด๋ฅผ ํ๋ค๋ ๊ฒ์ ์์๋์์ ๋,
์ด๋ฅผ ๋คํธ์ํน ์คํ
์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ๊ธฐ์กด์ ๋ฐฉ์์ด ์ฝ๊ฐ์ด๋ผ๋ ๋ฒ๊ฑฐ๋กญ๋ค๋ ๊ฒ์ ๋๋ ์ ์์ต๋๋ค.
๊ทธ ์๋ฏธ๋ yaml์ ์ ์ฉํ๋ฉด, ์ผ์ผํ iptables๋ฅผ ์์ ํ์ฌ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฅผ ๋ ํ๊ฒ๋๋ฉด…
- ํ๋ฒ ๊ท์น(rule)์ ์์ ํ๋ค๊ณ ํ ๋, ์ฌ์์ฑ=๋ชจ๋ ๊ท์น์ ์ ๋ฐ์ดํธํ๋ค.
- Chaning ๋ ๊ท์น์ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋์์ ๋ณต์ก๋๋ O(n).
- ACLs๋ ์ฐ์ ์์๊ฐ ๋์ ๊ท์น์์ ์์ฐจ์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
- IP ๋ฐ ํฌํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, L7 ํ๋กํ ์ฝ์ ๋ํด์๋ ์ง์์ด ๋์ง ์์ต๋๋ค.
- ์๋ก์ด IP ํน์ ํฌํธ๊ฐ ์ถ๊ฐ๋๋ฉด, ๊ท์น์ ์ถ๊ฐ๋์ด์ผํ๊ณ ์ฒด์ด๋์ ๋ฐ๋์ด์ผํฉ๋๋ค.
์ฆ ๊ทธ๋๋ง๋ค ๋ชจ๋ ๊ท์น์ ์ ๋ฐ์ดํธํด์ผํ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๊ตญ kube-proxy์ฒ๋ผ ์ด๋ฅผ ํ์ฉํ Kubernetes์ ์์ด ๋ฆฌ์์ค ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค๊ณ , Youtube/FOSDEM2020์ ๋์์์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก iptables๋ฅผ ์ฐ๋ ๊ฒ์ด kernel ๋จ์ netfilter๋ฅผ ์กฐ์ํ๋ ์ต์ํ ๋ฐฉ์์ด๋ผ ์ ์ฉํ๊ธฐ ํจ์จ์ ์ด์์ ๊ฒ์ด๋ผ ์๊ฐ๋ฉ๋๋ค.

2. BPF(Berkeley Packet Filter) kernel hooks
BPF๋ฅผ ์ปค๋์ ์ฝ์
ํ์ฌ, ํจํท์ ํํฐ๋ง(ํต์ )ํ ์ ์๋ค๊ณ ํ๋๋ฐ… ์ด๊ฑธ๋ก๋ ํฌ๊ฒ ์๋ฟ์ง ์๊ณ ์.
๋ค๋ฅธ ๊ธ์๋ tcpdump๋ฅผ ๋ํ์ ์ธ ์ฌ์ฉ๋ก๋ก ์๊ฐํ๊ณ ์์ต๋๋ค.
๋์์ถํ ์ธ์ฌ์ดํธ์ ๋ฐ๋ฅด๋ฉด, ํจํท ํํฐ๋ง์ ๋์ด ๊ณ ๊ธ ์ฑ๋ฅ ๋ถ์ ๋๊ตฌ ๋ฑ์ ์ด์ฉ๋๋ ๋ค์ํ ๋ถ์ผ์ ์ฌ์ฉ๊ฐ๋ฅํ ๋ฒ์ฉ ์คํ ์์ง์ ์ผ์ปฝ๋ ๋
๋ฆฝ์ ๊ธฐ์ ์ด๋ผ๊ณ ํ๋๋ฐ, ์ปค๋์ ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค ๋ณผ ์ ์๋ ์ด๋ฅ๋ ฅ(๋งค์ง!)์ ์ค๋ค๊ณ ํฉ๋๋ค.
์ปดํจํฐ๊ณผํ์ ์ด๋ฅ๋ ฅ์ด๋ผ๋, ์ฒ์์ ๊ฐธ์ํ๋๋ฐ Cilium์ ๋ณด๋ฉด์ ๊ทธ์ ๋ฏฟ๋ ์๋ฐ์ ์์์ฃ .

- BPF: A Tour of Program Types
- BPF In Depth: Communicating with Userspace
- bpftune - Using Reinforcement Learning in BPF
์์ ํฌ์คํ ์ ์์ธํ ๋์์์ง๋ง, ์ ๊ฐ ์ดํดํ๋ ค๊ณ ์๋์ ๊ฐ์ด ๋์ ์์ต๋๋ค.
- Syscall
userspace map interaction(์ํธ์์ฉ)์ ์ํํฉ๋๋ค.
- Sockmap
BPF Map์ ํ ์ ํ์ผ๋ก ๋ณด์ด๋ฉฐ, ์์ผ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
BPF Map์ BPF ํ๋ก๊ทธ๋จ์ด ๋ค๋ฅธ BPFํ๋ก๊ทธ๋จ ๋ฐ map ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๋ ๋ค๋ฅธ
userspaceํ๋ก๊ทธ๋จ์ผ๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์ป๋ ๋ฐ ์ฐ์ธ๋ค๊ณ ํฉ๋๋ค.
๋ ์์ธํ ๊ฒ์ The Linux Kernel Docs์์.
- Sockops: also called
TCP-BPFmechanism that support setting TCP parameters.
ops๋ผ๊ธธ๋, xops์ธ์ค ์์๋๋ฐoperand์ธ ๊ฑด์ ๋ํ์ฌ;
ํ๋ฒ ์ฐพ์๋ณด๋ ์ข์ ๊ธ์ด ์์์ต๋๋ค. eBPF็ณปๅ-ebpf mapไนไฝฟ็จsockmapๆๅๆฌๅฐsocket่ฝฌๅ
netdevconf/brakmo-tcpbpf-talk์ ๋ณํํด์ ์ฝ์ด๋ณธ ๋ฐ, ํ์ฌ ์ดํดํ ์ฌํญ์…
(1) SYN ์์ ์ : BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB ํํธ
(2) SYN-ACK ์์ ์ : BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB ํํธ
(3) ์ด ์ธ์๋ RTO ์๊ฐ์ ๋์ ์ผ๋ก ์กฐ์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ธ๋ฐ, ์๋ ๋ธ๋ก๊ทธ์ ์ฌ๋ฏธ๋’๋ณด์ด๋’ ์์๊ฐ ์์ต๋๋ค. ์ธ์ ๊ฐ ์ RTO๋ฅผ ์ ์กฐ์ํ๋์ง ์ด์ ๋ฅผ ์ข ๋ ์์๋ดค์ผ๋ฉด ์ข๊ฒ ๋ค์.
Customize TCP initial RTO (retransmission timeout) with BPF
- Cgroups / TC(Transmission Control) Hooks
์ฌ์ค
TC๊ฐ ํธ๋ํฝ ์ปจํธ๋กค ์๋๊ฐ,IPv4, IPv6 ๋ cgroup ์ด์ฃ ?๋ผ๋ ์ง๋ฌธ์ ๋ฐ๊ณ ,
๋ญ๊ฐ ์?๋ชป ๋์๋ค๋ ์๊ฐ์ด ๋ค์ด์ ์ด ๊ธ์ ํตํด ์ ๋ง ์กฐ๊ธ๋ง ๋ ํ๋ณด๊ธฐ๋ก ํ์ต๋๋ค. (๋ ํํ ์ค)
OpenEuler/eBPF Introduction์ ์ํ๋ฉด cgroup์ ๊ฒฝ์ฐ, ๋น์ฐํ ์ด์ผ๊ธฐ๊ฒ ์ง๋ง Permission ์ด์ผ๊ธฐ๋ก ์๊ฐ์ด ๋๋๋ฐ, BPF_PROG_TYPE_CGROUP_DEVICE์ฒ๋ผ ์ธ ์ ์๋ค๊ณ ์๊ฐ๋์ด ์ง๋๋ค.
eunomia/eBPF Tutorial by Example 20: tc Traffic Control์์
tc(traffic control)๊ณผ TC(Transmission Control)์ ๊ตฌ๋ถํ๊ณ ์๋๋ฐ,
๊ฒฐ๊ตญ ๋ฌด์์ธ์ง๋ ์์ง ํท๊ฐ๋ฆฝ๋๋ค. ์ ์กํ๋๊ฑด ๋๊ฐ์ผ๋ ๊ทธ๋ง ์ข ์๊ฐํด๋ณผ๊น
์์ง์ ํ์ ์ ํ์ง ๋ชปํ์ผ๋ฏ๋ก ์๋์ ๊ธ๊ณผ ํจ๊ป ๋ณด๋ฅํด๋ณด๊ฒ ์ต๋๋ค.
Whirl Offload/Understanding tc โdirect actionโ mode for BPF
man7/tc-bpf(8)#DESCRIPTION
๋น์ฐํ traffic control๋ก ๊ธฐ์ฌ์ผ ๋์ด์๊ฒ ์ง๋ง, ์ค๋ช ์ ์ฝ์ด๋ณด๋
(SHAPING) When traffic is shaped, its rate of transmission is under control.
์ด๋ ๊ฒ ์ ํ์์ด์, ๊ฒฐ๊ตญ ์ ์ก์๋ ์ ์ด์ด๋ ๋ ๋ค ๋ง๋ ๋ง ๊ฐ๊ธฐ๋…?
์ฌํผ shaping์ burst ์ํ์ ๋์์ด ๋๊ณ , egress ์์ ๋ฐ์ํ๋ค๊ณ ํฉ๋๋ค.
- XDP(eXpress Data Path)
Red Hat/Get started with XDP์ ๋ณด๋, ์๋๋ถํฐ learning curve๊ฐ ์ฌํ๋ค๊ณ ํ๋๊ตฐ์. ์ ์๊น
ํ์๋ก ์๋ด๋ Red Hat/Achieving high-performance, low-latency networking with XDP: Part I๋ฅผ ์ดํด๋ด ์๋ค.
XDP ์ด์ ์ ํจํท ์ฒ๋ฆฌ๋ฅผ ์ํ ์ปค๋ ์๋ฃจ์ ์ DPDK(Data Plane Development Kit)์ด๋ผ๋ bypass ์๋ฃจ์ ๋๋น 10๋ฐฐ ์ด์ ์ฑ๋ฅ์ด ๋ค์ณ์ ธ์์๋ค๊ณ ํฉ๋๋ค.
ํ์ง๋ง XDP๋ฅผ ํตํด, ์๋์ ์ฅ์ ์ ํฌํจํ์ฌ XDP ์ง์ ๋๋ผ์ด๋ฒ์์ 14Mpps ์ด์์ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ํฉ๋๋ค.
(0) ์ปค๋ ๋ด ์ฝ๋ ์ถ๊ฐ ์์ด ์ปค๋ ๋์ ๋ณ๊ฒฝ ๋ฐ ํ์ฅ: ??? ๋ญ๋ผ๊ณ ?
(1) SKBs(socket buffers) ๊ด๋ฆฌ์ ์ค๋ฒํค๋ ์ ๊ฑฐ(?)
(2) ํจํท๋น ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ค๋ฒํค๋ ๊ฐ์
(3) ๋ ํจ๊ณผ์ ์ธ ๋๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ
์ ์จ๋๊ณ ๋ ๋ค์ ์ฝ์ด๋ณด๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค์.
์ฌํผ, ์ปค๋ ๋ด๋ถ์ ์ ์์ค hook์ BPF(eBPF) ํ๋ก๊ทธ๋จ์ ๋ถ์ผ ์ ์๋ค๊ณ ํฉ๋๋ค.
์ด hook์ด network device driver์ ์ํด ๊ตฌํ๋๋ ์์ ์
ํ์ฌ(current) ํจํท์ ์์ผ ๋ฒํผ๊ฐ ํ ๋น๋๊ธฐ ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก NAPI ๋ฐฉ์์ poll()๊ณผ ๊ฐ์ด,
ingress traffic proccessing function(์ธ๊ทธ๋ ์ค ํธ๋ํฝ ์ฒ๋ฆฌ ํจ์)๋ด๋ถ์์ ์ฒ๋ฆฌ๋๋ค๊ณ ํฉ๋๋ค.
์ ์ฅํฉํ๊ฒ ์ฐ๋, ๋ ๋ชจ๋ฅด๊ฒ ์ด!
3. eBPF(Extended BPF)
์์ ์ค๋ช
์ด ์ฅํฉํ๋๋ฐ, ์๋์ ๊ทธ๋ฆผ์ ์กฐ๊ธ์ ์ดํดํ ์ ์๊ฒ ๋์์ต๋๋ค. ๊ณผ์ฐ

Source: Is it Observable/How to observe your network with eBPF
์์ ๋ด์ฉ์์๋ eBPF๊ฐ ๊ฐํน ๋์ค๋๋ฐ ๊ทธ์ผ BPF์์ ํ์ฅ๋ ๊ฒ์ด๋ ๊ธฐ๋ณธ์๋ฆฌ๋ ๊ฐ์ ์ ๋ฐ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
-
ํต์ฌ: ์ปค๋์ current feature(ํ์ฌ ๊ธฐ๋ฅ)์ ๊ฐ์ ํ ์ ์์.
- ์ปค๋์ด ์์ผ ์ฐ๊ฒฐ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ ๋, KPIs๋ฅผ ์์งํ๋ ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐ
์ด์งธ์ KPI๋ฅผ ์ฌ๊ธฐ์ ๋ณด๋ ๊ฒ์ธ๊ฐ
-
ํ์ฉ: ๋ฌด๊ถ๋ฌด์ง
- ๋คํธ์ํน: ๋ถ์, ๋ผ์ฐํ ๋ฑ
- ๋ณด์: ํน์ ๊ท์น์ ๋ฐ๋ผ ํธ๋ํฝ ํํฐ๋ง ๋ฐ ํ์ฉ/์ฐจ๋จ ํธ๋ํฝ ๋ณด๊ณ
- ์คํํ๋ฆ ์์ง(execution flows):
- scope: userspace ~ kernel instruction
- purpose: tracing, profiling
- Observability~~(๊ด์ฐฐ๊ฐ๋ฅ์ฑ…)~~:
- Not Pooling Information: EFFECTIVE!!!
- eBPF ํ๋ก๊ทธ๋์ ์ธก์ ์ด ํ์ํ ๋, ์ ํํ ์คํ๋๋ค๊ณ ํฉ๋๋ค.
-
๊ณผ์ฅ OR ์คํด:
๋ธ๋ผ์ฐ์ ์ JavaScript ์๋ ๊ฒ์ ๋น๊ฒฌํจ;;;
์๋ ๊ทธ๋ฆผ์ผ๋ก ๊ธํ ๋ง๋ฌด๋ฆฌ๋ฅผ ์๋ํด๋ณด๊ฒ ์ต๋๋ค.

4. etc.
- 1000 Mpbs = 1488000 pps = 1.488 Mpps: ๊ถ๊ธํด์ ์ฐพ์๋ณธ ๊ฒ. ๋น ๋ฅด๋ค์.
- 672 bit/s(=bps) = 1 Packet/s(=pps)
- 1 Mbps = 1488 pps = 1.488 Kpps
- Source: inyong_pang @velog
kkumtree
Source code on GitHub
ยฉ 2025 kkumtree and contributors All rights reserved.
Licensed under
CC BY-NC-ND 4.0