В этом руководстве вы познакомитесь с основами eBPF и XDP на практических примерах. Мы разберём код, который анализирует пакеты на разных уровнях протокольного стека, посмотрим, как работают действия XDP, и увидим, как из этих базовых компонентов строятся высокопроизводительные сетевые приложения.
Если заглянуть в код сетевого стека ядра Linux, станет видно, что он рассчитан на поддержку множества протоколов и возможностей: IPv4 и IPv6, TCP и UDP, VLAN, туннелей вроде VXLAN и GRE, а также QoS и управления трафиком.
Но каждый этап обработки пакета добавляет микросекунды задержки. Звучит незначительно, однако при миллионах пакетов в секунду эти накладные расходы быстро превращаются в узкое место, с которым с трудом справляется даже современное оборудование.
Поэтому существуют разные техники обхода сетевого стека ядра, например DPDK и PF_RING ZC. Они позволяют приложениям в пространстве пользователя получать пакеты напрямую от сетевого оборудования, не пропуская их через ядро.