XDP (или Express Data Path) — это сетевая утилита, доступная в ядре Linux. XDP используется во многих популярных компаниях для решения серьезных сетевых проблем, с которыми они сталкиваются при обработке миллионов запросов в секунду. Это программа с открытым исходным кодом, лицензированная MIT, встроенная в ядро Linux версии 4.8.
XDP — это высокопроизводительный программируемый процессор сетевых пакетов данных. Он создан для смягчения некоторых серьезных проблем на стороне сервера, таких как DDoS-атаки (распределенный отказ в обслуживании), или в качестве балансировщика нагрузки.
Читайте также: 5 полезных советов при компиляции собственного ядра Linux
Необходимость XDP
Потребность в эффективном сетевом пути к данным всегда является обязательной функцией серверов Linux. Но также должна быть обеспечена программируемость этих путей к данным, чтобы разработчики могли сделать из них что-то полезное. Несмотря на то, что XDP требует довольно сложного пути обучения, благодаря недавнему развитию множества инструментов и инфраструктур написание кода XDP в настоящее время вполне доступно.
Огромным преимуществом XDP является его скорость. Основная функциональность XDP заключается в том, ч
Contents
Необходимость XDP
авать новые функции для фильтрации пакетов без изменения самого ядра.В некоторых случаях пакету не обязательно проходить через весь сетевой стек, чтобы просто принять решение о пересылке или удалении пакета. Это следует сделать на первом уровне сетевого стека, разместив несколько фильтров. Эти фильтры должны быть запрограммированы таким образом, чтобы они могли легко распознать вредоносный пакет и отбросить его прямо в начало стека. Это может сэкономить много вычислительной мощности и времени.
При использовании XDP такая фильтрация возможна прямо в начале сетевого стека.
Теперь, используя XDP, разработчик может отфильтровывать любые пакеты, которые может отправить любой хакер для проведения DDoS-атаки. Это может снизить значительную часть накладных расходов в обычном сетевом стеке ядра. Эту функцию недавно продемонстрировала компания Cloudflare в демонстрации защиты от DDoS.
Некоторые примечательные особенности XDP заключаются в следующем:
- Для этого не требуется никакого специального оборудования: XDP может работать на любом оборудовании, которое вы ему предоставите. Да, скорость может снизиться, если у вас нет оптимизированного устройства или его драйверов, но для целей тестирования вам не понадобится какое-либо специальное оборудование.
- Не требуется обход ядра: XDP запускается до того, как пакет попадет в сетевой стек ядра. Функция обратного вызова запускается при получении пакета, и XDP обрабатывает его как можно быстрее.
- Он не заменяет стек TCP/IP: XDP присутствует на самом низком уровне сетевого стека. Когда пакет проходит, он попадает в обычный сетевой стек ядра, который включает в себя стек TCP/IP.
- Он работает в сочетании с TCP/IP со всеми функциями BPF (Berkeley Packet Filter): XDP ничего не заменяет. Он даже использует eBPF для обработки пакетов, что упрощает написание кода разработчиком.
Читайте также: Как собрать и установить собственное ядро в Ubuntu
Почему XDP очень быстрый
XDP — это программируемый высокопроизводительный сетевой путь передачи данных на основе eBPF в ядре Linux. Прирост производительности XDP достигается за счет обработки пакетов «голого железа» на самом низком уровне программного стека. Это означает, что пакет данных, поступающий из сети, сначала попадает в XDP, а затем в любой другой процесс ядра.
Поэтому инженеры могут программировать XDP, оптимизируя его для различных вариантов использования. От защиты от DDoS до балансировщика нагрузки.
XDP загружается непосредственно в сетевой стек. Когда сетевой стек получает пакет, он получает обратный вызов и обрабатывает пакеты как можно быстрее. XDP может отбрасывать 26 миллионов пакетов в секунду на одно ядро стандартного оборудования.
Основная причина, по которой XDP очень быстр, заключается в том, что пользователю разрешено напрямую читать или вносить изменения в данные сетевых пакетов и принимать решения о том, как обрабатывать пакет на более раннем этапе. Это требует гораздо меньше накладных расходов на процесс и, как следствие, повышает скорость.
Подключение сетевого стека с помощью XDP
Вы можете подключиться к сети с помощью XDP различными способами, но здесь я упоминаю некоторые популярные методы.
- Общий XDP. В этом процессе XDP загружается в ядро, но прирост производительности очень мал. Это простой способ запустить программу XDP без какой-либо аппаратной поддержки.
- Собственный XDP. Собственный XDP загружается самим сетевым драйвером. Требуется поддержка драйвера сетевой карты.
Также читайте: Как исправить ошибку ввода данных ядра в Windows
Типы операций, выполняемых XDP
Некоторые операции, которые XDP может выполнять после получения пакета сетевым интерфейсом:
- XDP_DROP : он отбрасывает пакеты и не обрабатывает их. Использование программы eBPF для анализа структуры трафика и отбрасывания пакетов в режиме реального времени.
- XDP_PASS : он пересылает пакеты в сетевой стек для дальнейшей обработки. Он может изменить содержимое пакета до того, как это произойдет.
- XDP_ABORTED : пакет сетевых данных отбрасывается, оставляя исключение точки трассировки.
- XDP_TX : перенаправить пакеты на тот же сетевой интерфейс, который их получил. Пакеты могут быть изменены в неизмененном виде.
- XDP_REDIRECT : перенаправить пакет на др
Почему XDP очень быстрый
сетевого интерфейса).
XDP и eBPF
eBPF — это расширенная версия фильтра пакетов Беркли. Это похоже на абстрактную виртуальную машину, работающую внутри ядра Linux. eBPF используется для запуска пользовательской программы в изолированной среде ядра Linux. Обычно он используется для запуска сетевых инструментов и инструментов мониторинга на серверах Linux для обеспечения оптимальной производительности.
XDP — это платформа, используемая для реализации высокоскоростной обработки пакетов в приложениях BPF. Чтобы сделать это еще быстрее, XDP запускает BPF сразу после получения пакета сетевым стеком.
XDP требует очень сложного обучения. Поэтому разработчики делают инструменты и фреймворки , чтобы упростить программирование с использованием eBPF. Это позволяет очень легко писать код для обработки высокочастотной сетевой обработки с использованием XDP и eBPF. Основное преимущество XDP заключается в том, что он не требует модификации ядра, что было огромной головной болью для инженеров.
Но, как говорят, великая сила предполагает большую ответственность. Поскольку XDP запускает eBPF как можно раньше, до того, как пакеты будут проанализированы самим ядром, программам eBPF приходится выполнять весь анализ самостоятельно и они не могут рассчитывать на то, что ядро сделает что-либо за них.
Как программист, вы большую часть времени работаете с терминалом. Это руководство по использованию подсказки украсьте свой терминал . Обязательно проверьте это.
Читайте также:Подключение сетевого стека с помощью XDPt-yadro-linux/" title="Как понизить версию ядра в Linux">Как понизить версию ядра в Linux
Распространенные случаи использования XDP и eBPF
- DDoS-атака. Основным вариантом использования XDP является защита от DDoS (распределенный отказ в обслуживании). Во время DDoS-атаки злоумышленник пытается использовать как можно больше ресурсов сервера, не оставляя ни одного процесса конечному пользователю. Используя XDP в качестве очень быстрого уровня сетевого стека, затраты на обработку, связанные с отбрасыванием пакета сетевых данных, отсутствуют. После фильтрации XDP пакет проходит все остальные методы фильтрации, предоставляемые ядром Linux.
- Балансировщик нагрузки. XDP также используется в качестве балансировщика нагрузки для обработки огромного объема трафика, поступающего на сервер. Эту технологию используют многие гигантские технологические компании, включая Facebook. Раньше инженеры использовали выделенный сервер в качестве балансировщика нагрузки. Им очень сложно управлять, и он должен работать очень хорошо, чтобы обслуживать миллио
Типы операций, выполняемых XDP
ь XDP используется в качестве балансировщика нагрузки без центрального сервера и, как следствие, без единой точки отказа. - Брандмауэр : XDP с eBPF можно использовать для написания различных правил брандмауэра для защиты системы с минимальными накладными расходами.
Читайте также: Как использовать команду Rm в Linux
Часто задаваемые вопросы
Что такое BCC и eBPF?
BCC построен на основе eBPF. Это набор инструментов или платформа для программ трассировки ядра и манипуляций с очень полезным интерфейсом командной строки. BCC помогает писать инструкции ядра на C. Он также включает в себя оболочку LLVM.
Что такое libBPF?
LibBPF — это альтернативный набор инструментов для создания приложений BPF. Он написан на языке программирования C.