Пакетный фильтр Berkeley
-
Обзор BPF
- BPF — это сетевой фильтр, который позволяет фильтровать пакеты на уровне операционной системы.
- Он предоставляет интерфейс для канальных уровней передачи данных и позволяет процессам пользовательского пространства фильтровать пакеты.
- BPF повышает производительность, избегая копирования нежелательных пакетов из ядра в процесс.
-
Механизм фильтрации
- Фильтрация реализована в виде интерпретатора машинного языка, который может выполнять арифметические операции и сравнения.
- Расширения и оптимизации включают JIT-компиляторы для повышения производительности.
-
История и реализация
- Статья была написана Стивеном Маккенной и Ван Джейкобсоном в 1992 году.
- BPF предоставляет псевдоустройства для чтения и записи пакетов.
- В 2007 году были добавлены расширения буфера нулевого копирования для повышения эффективности.
-
Расширения и оптимизация
- Некоторые платформы используют JIT-компиляторы для повышения производительности.
- Linux включает JIT-компилятор BPF по умолчанию, который можно отключить.
-
Программирование и безопасность
- Классический BPF генерируется на основе текстовых правил высокого уровня.
- eBPF позволяет писать программы на языках более высокого уровня, таких как C и Rust.
- eBPF может быть скомпилирован в байт-код для использования в ядре Linux.
-
eBPF и безопасность
- eBPF включает расширенную виртуальную машину с 64-битными регистрами.
- eBPF используется для несетевых целей и для подключения программ к точкам трассировки.
- eBPF был обновлен для предотвращения атак типа «отказ в обслуживании» и для поддержки циклов с ограниченным временем выполнения.
-
Дополнительные ресурсы
- Ссылки на документацию и руководства по BPF доступны в статье.
Полный текст статьи: