Linux XDP(eXpress Data Path)란? 초고속 패킷 처리를 위한 eBPF 네트워크 기술 완벽 이해

최근 Linux 네트워크 분야에서 가장 주목받는 기술 중 하나가 XDP(eXpress Data Path) 입니다. 기존 Linux 네트워크 스택은 다양한 기능을 제공하지만, 패킷이 커널 네트워크 계층을 모두 통과해야 하기 때문에 초당 수백만 개의 패킷(PPS)을 처리하는 환경에서는 성능 한계가 발생할 수 있습니다.

이를 해결하기 위해 등장한 기술이 XDP입니다.

XDP는 네트워크 인터페이스 카드(NIC)에서 수신한 패킷을 Linux 네트워크 스택에 전달하기 전에 eBPF 프로그램으로 처리하는 초고속 패킷 처리 기술입니다.

Cloud Native 환경에서는 Cilium, Katran, Facebook Load Balancer 등 다양한 프로젝트에서 XDP를 적극 활용하고 있습니다.

이번 글에서는 XDP의 개념과 동작 원리, eBPF와의 관계, XDP 동작 모드, 주요 활용 사례를 자세히 알아보겠습니다.

Linux XDP란?

XDP는 Linux Kernel의 가장 앞단에서 패킷을 처리하는 eBPF 기반 네트워크 프레임워크입니다.

기본 구조는 다음과 같습니다.

Network Card

↓

NIC Driver

↓

XDP Program

↓

허용 또는 Drop

↓

Linux Network Stack

↓

Application

패킷이 네트워크 스택으로 들어가기 전에 처리되므로 매우 높은 성능을 제공합니다.

XDP가 필요한 이유

기존 Linux 네트워크 처리 과정은 다음과 같습니다.

NIC

↓

Driver

↓

Kernel Network Stack

↓

iptables

↓

Routing

↓

Socket

↓

Application

패킷 하나가 여러 계층을 거치기 때문에 CPU 사용량이 증가합니다.

반면 XDP는

NIC

↓

Driver

↓

XDP

↓

Drop / Redirect / Pass

와 같이 초기 단계에서 처리하여 불필요한 비용을 줄입니다.

XDP의 동작 원리

패킷이 NIC로 들어오면 다음과 같은 순서로 처리됩니다.

Packet 수신

↓

NIC Driver

↓

XDP Program 실행

↓

Action 결정

↓

Kernel 전달 여부 결정

eBPF 프로그램이 패킷을 검사한 후 즉시 처리 방향을 결정합니다.

XDP Action 종류

XDP 프로그램은 다음과 같은 동작을 수행할 수 있습니다.

Action설명
XDP_PASS정상적으로 Kernel에 전달
XDP_DROP즉시 폐기
XDP_TX들어온 인터페이스로 다시 전송
XDP_REDIRECT다른 인터페이스나 CPU로 전달
XDP_ABORTED오류 발생

가장 많이 사용하는 동작은 PASS, DROP, REDIRECT입니다.

XDP와 eBPF의 관계

XDP는 독립적인 기술이 아니라 eBPF 프로그램을 실행하는 실행 환경(Runtime) 입니다.

구조는 다음과 같습니다.

Packet

↓

XDP Hook

↓

eBPF Program

↓

BPF Map

↓

Action 결정

즉, XDP는 eBPF 프로그램을 네트워크 드라이버 단계에서 실행하도록 지원하는 프레임워크입니다.

XDP 동작 모드

XDP는 크게 세 가지 모드를 지원합니다.

모드설명
Native XDPNIC 드라이버에서 직접 실행
Generic XDP일반 Kernel Network Stack에서 실행
Offload XDPNIC 하드웨어에서 직접 실행

Native XDP가 가장 많이 사용되며 높은 성능을 제공합니다.

Native XDP

Native 모드는 NIC 드라이버가 직접 eBPF 프로그램을 실행합니다.

NIC

↓

Driver

↓

XDP

↓

Drop / Pass

Kernel Network Stack 이전에 실행되므로 오버헤드가 매우 적습니다.

Generic XDP

NIC 드라이버가 XDP를 지원하지 않는 경우 사용됩니다.

NIC

↓

Kernel

↓

Generic XDP

호환성은 높지만 Native 방식보다 성능이 낮습니다.

Hardware Offload

일부 고성능 NIC는 XDP 프로그램을 NIC 내부에서 실행할 수 있습니다.

NIC Hardware

↓

XDP

↓

Packet 처리

↓

Kernel 미진입

CPU를 거의 사용하지 않고도 매우 높은 처리량을 제공합니다.

XDP 프로그램 확인

현재 XDP 프로그램이 연결되어 있는지 확인하려면

ip link show

또는

ip -details link show

를 사용합니다.

XDP가 적용된 인터페이스에서는 관련 정보가 함께 표시됩니다.

XDP 프로그램 연결

예시

ip link set dev eth0 xdp object xdp_prog.o

특정 인터페이스에 XDP 프로그램을 연결합니다.

프로그램 제거

ip link set dev eth0 xdp off

bpftool 확인

현재 XDP 프로그램 확인

sudo bpftool prog show

인터페이스 정보

sudo bpftool net

XDP가 적용된 네트워크 장치를 확인할 수 있습니다.

실무에서 자주 사용하는 명령어

인터페이스 확인

ip link show

상세 정보

ip -details link show

XDP 연결

ip link set dev eth0 xdp object xdp_prog.o

XDP 제거

ip link set dev eth0 xdp off

프로그램 확인

sudo bpftool prog show

네트워크 확인

sudo bpftool net

실무 사례

예를 들어 대규모 웹 서비스에서 DDoS 공격이 발생했다고 가정해 보겠습니다.

기존 방식에서는 공격 패킷이 Linux 네트워크 스택까지 진입한 후 iptables에서 차단됩니다.

반면 XDP를 적용하면 다음과 같은 흐름으로 동작합니다.

  1. NIC에서 패킷 수신
  2. XDP eBPF 프로그램 실행
  3. 공격 패턴 검사
  4. XDP_DROP으로 즉시 폐기
  5. 정상 패킷만 Kernel 전달

이 방식은 CPU 사용량을 크게 줄이고 초당 수백만 개 이상의 패킷도 효율적으로 처리할 수 있습니다.

자주 묻는 질문

XDP와 iptables의 차이는 무엇인가요?

iptables는 패킷이 Linux 네트워크 스택에 진입한 이후 동작합니다. 반면 XDP는 NIC 드라이버 단계에서 패킷을 처리하므로 훨씬 빠르고 CPU 사용량도 적습니다.

모든 네트워크 카드에서 XDP를 사용할 수 있나요?

Generic XDP는 대부분의 환경에서 사용할 수 있지만, Native XDP와 Hardware Offload는 NIC 드라이버와 하드웨어가 지원해야 합니다.

XDP와 eBPF는 같은 기술인가요?

아닙니다. eBPF는 커널에서 실행되는 프로그램 기술이며, XDP는 그 eBPF 프로그램을 네트워크 드라이버 단계에서 실행하기 위한 프레임워크입니다.

마무리

Linux XDP는 eBPF 기반의 초고속 네트워크 처리 기술로, 패킷을 Linux 네트워크 스택에 전달하기 전에 처리하여 매우 높은 성능을 제공합니다. DDoS 방어, 로드 밸런싱, 패킷 필터링, 네트워크 모니터링 등 다양한 분야에서 활용되며, 최신 클라우드 네이티브 인프라에서는 핵심 기술로 자리 잡고 있습니다. XDP의 동작 원리와 eBPF의 관계를 이해하면 Linux 네트워크 성능 최적화와 대규모 서비스 운영에 큰 도움이 됩니다.

댓글 남기기