Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Пакетный фильтр


Владимир Мешков

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

Это особенно актуально, если трафик очень плотный. Вторая проблема – вас могут интересовать только пакеты, адресованные выделенным хостам, а не все подряд. Решение заключается в фильтрации входящих сетевых пакетов по какому-либо определенному признаку, например по адресной части. Одним из вариантов решения является использование оператора условия if, однако данное решение неэффективно. В этом случае ядру приходится вытаскивать полный пакет из сети, на что отнимается процессорное время, затем анализатор вынужден «экзаменовать» заголовок каждого пакета перед принятием решения – отображать данные или нет. Оптимальным является решение отсеять лишние пакеты как можно раньше, на уровне драйвера сетевой карты. Ядро Linux позволяет сделать это при помощи пакетного фильтра.

Описание языка BPF

Пакетный фильтр представляет собой последовательность инструкций, составленных в кодах псевдо-машинного языка, который называется BPF – Berkeley Packet Filter. Этот язык был разработан Стивом Маккеном (Steve McCanne) и Ван Якобсоном (Van Jacobson). BPF похож на язык ассемблер. В нем, как и в ассемблере, есть регистры, инструкции для загрузки и хранения операндов, выполнения арифметико-логических операций, условных и безусловных переходов. Для работы с операндами в BPF используются регистр-аккумулятор (или просто аккумулятор), индексный регистр, ячейка памяти и внутренний программный счетчик.

Формат инструкции языка BPF определяет следующая структура:

struct sock_filter {

    __u16  code;

    __u8   jt;

    __u8   jf;

    __u32  k;

};

которая определена в файле <linux/filter.h>.

Назначение полей структуры следующее:

n  поле k – числовое значение операнда, с которым работает инструкция;

n  поля jt (jump true) и jf (jump false) – меняют порядок выполнения инструкций;

n  поле code – код выполняемой инструкции.

Существует 8 типов инструкций. Вначале их перечислим, а потом остановимся отдельно на каждом. Итак, вот эти 8 типов: BPF_LD, BPF_LDX, BPF_ST, BPF_STX, BPF_ALU, BPF_JMP, BPF_RET, BPF_MISC.

BPF_LD

Инструкция BPF_LD служит для загрузки в аккумулятор следующих величин:

n  константы (BPF_IMM);

n  блока данных, расположенных по фиксированному смещению (BPF_ABS);

n  блока данных, расположенных по смещению, которое является переменной величиной (BPF_IND);

n  длины блока данных (BPF_LEN);

n  значения, находящегося в ячейке памяти (BPF_MEM).

Для значений BPF_IND и BPF_ABS размер загружаемых данных должен быть задан как слово (BPF_W), полуслово (BPF_H), байт (BPF_B). Здесь имеется в виду машинное слово, которое равно числу разрядов в регистрах общего назначения. Для 32-х разрядных процессоров это значение равно 4 байта.


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100