Linux eBPF와 XDP 실전 구조란? 초고속 패킷 처리 시스템의 전체 동작 과정 완벽 이해

eBPF를 공부하다 보면 가장 많이 등장하는 기술 중 하나가 XDP(eXpress Data Path) 입니다.

XDP는 단순히 빠른 패킷 필터가 아닙니다. Linux 네트워크 스택(Network Stack)에 패킷이 들어오기 전에 eBPF 프로그램을 실행하여 방화벽, DDoS 방어, 로드 밸런싱, 패킷 분석 등을 매우 빠르게 수행할 수 있는 기술입니다.

오늘날 Cilium, Katran, Cloudflare, Meta(Facebook) 등 대규모 서비스에서도 XDP를 적극 활용하고 있습니다.

이번 글에서는 eBPF와 XDP가 실제 시스템에서 어떻게 동작하는지, 패킷이 NIC(Network Interface Card)에서 사용자 공간까지 이동하는 전체 과정을 자세히 알아보겠습니다.

Linux XDP란?

XDP는 네트워크 패킷이 Linux Kernel Network Stack으로 들어가기 전에 실행되는 eBPF 프로그램입니다.

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

Network Packet

↓

NIC Driver

↓

XDP Hook

↓

eBPF Program

↓

Kernel Network Stack

Kernel Network Stack보다 앞에서 실행되므로 매우 높은 성능을 제공합니다.

기존 네트워크 처리 방식

일반적인 Linux에서는 패킷이 다음과 같이 처리됩니다.

Packet

↓

NIC

↓

Interrupt

↓

Kernel Network Stack

↓

Netfilter

↓

Socket

↓

Application

패킷이 Kernel 전체를 통과해야 하므로 CPU 사용량이 증가할 수 있습니다.

XDP 처리 방식

XDP는 Network Stack 이전에서 실행됩니다.

Packet

↓

NIC Driver

↓

XDP

↓

Pass / Drop / Redirect

↓

Kernel

불필요한 패킷은 Network Stack에 들어오기 전에 제거할 수 있습니다.

전체 동작 과정

XDP 기반 시스템의 전체 흐름은 다음과 같습니다.

Internet

↓

NIC

↓

Driver

↓

XDP Hook

↓

eBPF Program

↓

BPF Map

↓

PASS

DROP

TX

REDIRECT

XDP 프로그램은 패킷을 검사한 후 적절한 동작을 선택합니다.

XDP Hook

XDP Hook은 NIC Driver 내부에 존재합니다.

Packet

↓

Driver Receive

↓

XDP Hook

↓

Network Stack

Kernel Network Stack보다 먼저 실행되므로 매우 빠른 응답이 가능합니다.

XDP에서 사용하는 BPF Map

XDP는 다양한 Map을 함께 사용합니다.

대표적으로

  • Hash Map
  • LRU Hash
  • Array
  • Per-CPU Array
  • Ring Buffer

등이 자주 사용됩니다.

예를 들어 IP 차단 목록은 Hash Map에 저장합니다.

IP

↓

Hash Map

↓

Drop 여부 확인

XDP의 반환값

XDP 프로그램은 항상 결과를 반환합니다.

대표 반환값은 다음과 같습니다.

반환값설명
XDP_PASSKernel로 전달
XDP_DROP즉시 삭제
XDP_TX들어온 인터페이스로 재전송
XDP_REDIRECT다른 인터페이스로 전달
XDP_ABORTED오류 발생

이 반환값에 따라 패킷의 운명이 결정됩니다.

XDP_DROP

가장 많이 사용하는 동작입니다.

Packet

↓

XDP

↓

DROP

↓

종료

DDoS 공격 방어에서 가장 많이 사용됩니다.

XDP_PASS

정상적인 패킷은 Kernel로 전달합니다.

Packet

↓

XDP

↓

PASS

↓

Kernel Stack

기존 Linux 네트워크 처리 방식과 동일하게 동작합니다.

XDP_REDIRECT

패킷을 다른 인터페이스로 전달합니다.

NIC0

↓

XDP

↓

NIC1

로드 밸런서 구현에 자주 사용됩니다.

XDP_TX

들어온 인터페이스로 다시 전송합니다.

NIC

↓

XDP

↓

TX

↓

NIC

간단한 응답(Packet Reflection)이나 테스트 환경에서 활용됩니다.

Driver Mode와 Generic Mode

XDP는 두 가지 방식으로 실행됩니다.

모드특징
Native(Driver) ModeNIC Driver에서 실행, 최고 성능
Generic ModeKernel에서 실행, 호환성 우수

Native Mode가 성능은 훨씬 뛰어나지만, NIC 드라이버가 지원해야 합니다.

XDP와 TC 비교

항목XDPTC
실행 위치DriverNetwork Stack
처리 속도매우 빠름빠름
기능제한적다양함
용도DDoS, 방화벽QoS, 트래픽 제어

속도가 중요하다면 XDP, 다양한 네트워크 제어가 필요하다면 TC가 적합합니다.

XDP의 장점

XDP를 사용하면 다음과 같은 이점이 있습니다.

  • 매우 낮은 지연 시간(Latency)
  • 높은 패킷 처리량
  • CPU 사용량 감소
  • DDoS 방어 최적화
  • 고성능 방화벽 구현
  • 로드 밸런싱 지원

대규모 트래픽을 처리하는 환경에서 특히 효과적입니다.

XDP 사용 시 주의사항

다음 사항을 고려해야 합니다.

  • NIC Driver가 XDP를 지원하는지 확인
  • Driver Mode와 Generic Mode의 차이 이해
  • BPF Verifier 제한 준수
  • BPF Map 크기 관리
  • 프로그램 복잡도 최소화

복잡한 처리는 Kernel Network Stack 이후 단계에서 수행하는 것이 좋습니다.

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

XDP Program 확인

sudo bpftool prog show

Network 인터페이스 확인

ip link show

XDP Attach 상태 확인

ip -details link show eth0

BPF Map 확인

sudo bpftool map show

Kernel 기능 확인

sudo bpftool feature

NIC 드라이버 확인

ethtool -i eth0

실무 사례

예를 들어 초당 수천만 개의 패킷이 유입되는 웹 서비스를 운영한다고 가정해 보겠습니다.

일반적인 방화벽은 모든 패킷을 Kernel Network Stack으로 전달한 후 필터링합니다. 이 경우 불필요한 패킷도 CPU 자원을 사용하게 됩니다.

XDP를 사용하면 다음과 같은 방식으로 처리할 수 있습니다.

  1. NIC가 패킷 수신
  2. XDP Hook에서 eBPF 프로그램 실행
  3. 차단 대상 IP인지 Hash Map 조회
  4. 공격 패킷이면 XDP_DROP 반환
  5. 정상 패킷만 XDP_PASS로 Kernel 전달
  6. 사용자 애플리케이션은 정상 트래픽만 처리

이처럼 XDP는 커널 네트워크 스택에 불필요한 트래픽이 들어오는 것을 막아 CPU 부하를 줄이고 서비스 성능을 크게 향상시킵니다.

자주 묻는 질문

XDP는 Netfilter(iptables, nftables)를 완전히 대체하나요?

아닙니다. XDP는 매우 빠른 패킷 처리를 위한 기술이며, 복잡한 연결 추적(Connection Tracking)이나 고급 방화벽 정책은 여전히 Netfilter가 적합한 경우가 많습니다. 두 기술은 목적에 따라 함께 사용할 수 있습니다.

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

Generic Mode는 대부분의 환경에서 사용할 수 있지만, 최고 성능을 제공하는 Native(Driver) Mode는 NIC 드라이버가 XDP를 지원해야 합니다.

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

아닙니다. eBPF는 커널에서 안전하게 실행되는 프로그램 기술이며, XDP는 eBPF 프로그램이 실행될 수 있는 대표적인 Hook 중 하나입니다.

마무리

Linux XDP는 eBPF를 이용해 네트워크 패킷을 Kernel Network Stack 이전에서 처리하는 초고속 패킷 처리 기술입니다. DDoS 방어, 방화벽, 로드 밸런서, 트래픽 분석 등 다양한 분야에서 활용되며, 대규모 트래픽 환경에서 매우 뛰어난 성능을 제공합니다. XDP의 전체 동작 구조를 이해하면 현대 Linux 네트워크 시스템이 어떻게 고성능을 구현하는지 더욱 명확하게 이해할 수 있습니다.

댓글 남기기