📌 XDP

eXpress Data Path XDP — подсистема в Linux kernel, использующая eBPF для сверхбыстрой обработки сетевых пакетов на самых ранних этапах поступления, до попадания в сетевой стек.

🧠 Как работает

XDP внедряется в драйвер сетевой карты и позволяет запускать eBPF-программы до того, как пакет обработан стеком IP. Это даёт:

  • Минимальную задержку (без копирования в RAM)
  • Мгновенную фильтрацию или модификацию пакетов
  • Возврат действий: XDP_PASS, XDP_DROP, XDP_TX, XDP_REDIRECT

Интеграция идёт через ip link или bpftool. Программа может читать/записывать данные из BPF Maps, использовать Verifier и быть загруженной через libbpf.

⚙️ Где применяется

ОбластьПримеры
DDoS-митиграцияCloudflare XDP, Facebook XDP
IDS/IPS системыSuricata eBPF, Snort XDP
Платформенные CNICilium, Katran
Балансировка нагрузкиXDP Load Balancer, Maglev
Хостовая защитаTetragon, XDP firewall

💻 Пример (минимальный XDP-drop)

SEC("xdp")
int xdp_drop(struct xdp_md *ctx) {
    return XDP_DROP;
}
clang -O2 -target bpf -c xdp_drop.c -o xdp_drop.o
ip link set dev eth0 xdp obj xdp_drop.o sec xdp

🧩 Архитектура XDP

[ NIC Driver ]
      ↓
[ XDP Hook ] ←→ [eBPF Program]
      ↓
[ Linux TCP/IP Stack ]

📐 Возврат значений XDP-программы

ЗначениеДействие
XDP_DROPУдалить пакет
XDP_PASSПропустить в стек
XDP_TXОтправить обратно через тот же NIC
XDP_REDIRECTПередать на другой интерфейс или CPU
XDP_ABORTEDОшибка выполнения

✅ Преимущества

  • Ультранизкая задержка, обход ядра и стеков

  • Позволяет строить user-space firewall, DDoS mitigation

  • Работает на уровне драйвера, близко к железу

❌ Недостатки

  • Требует поддержки от NIC Driver

  • Отладка сложнее, чем в userspace

  • Ограничения по сложным eBPF-программам (проверка Verifier)