Пакет можно отбросить до создания skb Обычно сетевой пакет проходит… — Network Admin — TG.ME

Пакет можно отбросить до создания skb

Обычно сетевой пакет проходит довольно длинный путь внутри Linux:

NIC → driver → skb → network stack → socket → application


Но skb создаётся не в самом начале.

XDP может выполнить программу прямо на раннем этапе обработки пакета, когда драйвер уже получил его из NIC, но обычный sk_buff ещё не создан.

Поэтому решение можно принять буквально на входе:

NIC

driver

XDP
├── DROP
├── PASS → обычный network stack
├── TX
└── REDIRECT


Например, простой XDP-программе достаточно проверить destination IP и сразу отбросить пакет:

SEC("xdp")
int drop_packet(struct xdp_md *ctx)
{
return XDP_DROP;
}


При XDP_DROP пакет вообще не доходит до обычного kernel networking stack.

Это важно под большой нагрузкой: если отбросить ненужный трафик после создания skb, часть работы ядро уже успело выполнить. XDP позволяет перенести фильтрацию значительно раньше.

Проверить, загружена ли XDP-программа:

ip -details link show dev eth0


И посмотреть статистику:

ip -s link show dev eth0


Поэтому «firewall на сервере» - не всегда означает, что пакет сначала проходит весь сетевой стек, а потом его фильтруют. В Linux точка принятия решения может находиться практически сразу после получения кадра сетевой картой.

N.A.
👍3❤2
August 25, 2026 1.3K 15