Недавно, в ходе работы над 100GE анализатором трафика передо мной была поставлена задача по изучению такого типа приборов, как Network Packet Broker (также встречается название Network Monitoring Switch), или, если просто и по-русски, «балансировщик».

Используется этот прибор преимущественно в системах сетевого мониторинга. Постепенно, углубляясь в тему, накопилось достаточное количество информации, разрозненной по различным уголкам интернета и документациям. Так и родилась идея статьи, в которой я решил собрать всю найденную информацию воедино и поделиться с хабросообществом.

Для тех, кому стало интересно, что же такого особенного в этом типе приборов, как они используются и почему именно «балансировщик» — прошу под кат.

Что в имени тебе моем?


NPB — встраиваемое в стойку сетевое устройство, получающее и агрегирующее сетевой трафик с SPAN-портов или TAP-ов. Этим-то трафиком (или его копиями) и манипулирует в дальнейшем сам NPB.

NPB могут быть как цельным устройством, так и модульным (т.е. состоять из нескольких blade-ов в одном корпусе с возможностью замены). Типичным набором характеристик NPB являются:

  • Порты данных (скорости 1GE, 10GE, 40GE, 100GE с модулями SFP, SFP+, QSFP+ и CFP, соответственно).
  • Порты управления (чаще всего RJ-45 10/100/1000). Управление обычно осуществляется удаленно (API, CLI, GUI, по протоколам HTTP, SSH, Telnet или SNMP).
  • Функции, реализованные в приборе (от балансировки нагрузки и ее типов до специфических опций фильтрации трафика).

Что же умеет NPB и в чем его особенности?


Основной и самой главной функцией NPB является балансировка нагрузки (поэтому его и можно назвать «балансировщиком»). Сама по себе балансировка нагрузки — процесс разделения входного потока c одного или нескольких интерфейсов на несколько выходных интерфейсов по определенным правилам или критериям. Почти всегда вместе с балансировкой используются следующие функции:

  • Фильтрация — правила, позволяющие выделить потоки с целью их последующей балансировки и уменьшения количества данных в этих потоках.
  • Агрегация — объединение потоков с нескольких входных интерфейсов в один перед выполнением операции балансировки.
  • Коммутация — большинство NPB может выполнять роль коммутатора.

Основное применение NPB — выделение из больших потоков данных нужных и разделение их на более мелкие. Встречается эта задача довольно часто.

Во многих компаниях сейчас установлено множество инструментов мониторинга для обеспечения безопасности, наблюдения, аналитики и управления производительностью. Здесь встает проблема перехода на другие уровни скоростей ( с 1G на 10G, с 10G на 100G), ведь остается много оборудования, которое попросту не умеет работать с такими скоростями. Варианта здесь два — либо закупка нового дорогого оборудования, либо внедрение в существующую структуру прослойки в виде NPB, которые будут заниматься адаптацией потоков данных под старое оборудование.

Возьмем для примера обычный call-центр. Практически все они сейчас цифровые и все звонки там проходят в виде VoIP-трафика по LAN, а для записи звонков используются специальные записывающие устройства (network traffic recorders). При увеличении количества звонков в call-центр, какое-то из записывающих устройств может достичь порога своей пропускной способности. Здесь и применяется балансировка нагрузки, позволяющая работать параллельно нескольким записывающим устройствам, c выполнением следующих условий:

  • Для каждого звонка, весь разговор (в обоих направлениях потока трафика) должен заканчиваться на одном записывающем устройстве, чтобы не нужно было искать части записанного разговора на нескольких устройствах.
  • Вызов установки трафика (трафик SIP) должен быть доступен для всех звонков, поступающих на данное записывающее устройство.

Трафик, приходящий с нескольких портов агрегируется и поступает на NPB. И тут (согласно первому из условий) к нему появляется одно из главных требований — если оборудование клиента работает с потоками на уровне сессий (а это почти всегда так), то NPB не должен эти сессии нарушать (сессия — группа пакетов, передающихся между конкретными узлами), то есть пакеты из одной сессии всегда должны приходить на один и тот же выходной интерфейс. Это свойство называется Flow Coherency.

На основании этого свойства можно привести следующие примеры типов балансировки нагрузки, которые могут использоваться в NPB:
  • Равномерная (per-packet или round-robin).
    На все выходные порты идет примерно одинаковое количество трафика, пакеты назначаются на выходные интерфейсы по кругу. Данный тип балансировки не обеспечивает Flow Coherency, т.к. направление пакета никак не связано с направлениями других пакетов.
  • Статическая
    Балансировка происходит по фиксированному набору заданных правил, например, по IP-source или типу протокола. При этом количество данных, пришедших на конкретный выходной интерфейс, никак не учитывается, т.е. нет никакой обратной информации о том, какой из выходных интерфейсов получил больше или меньше трафика. В зависимости от того, по каким именно полям происходит фильтрация, данный тип балансировки нагрузки может либо обеспечивать, либо не обеспечивать Flow Coherency.
  • Динамическая
    Идет учет трафика, отправляемого на каждый выходной порт. Наиболее оптимальна, если есть жесткие требования к равномерной нагрузке на выходных интерфейсах. По каким полям будет производиться данный вид балансировки зависит от алгоритма. Поддерживает Flow Coherency.
  • На основе хэшей
    Для выбора порта используются значения хэш-функций, рассчитанных по полям пакета (которые задаются пользователем). Так как для одних и тех же полей всегда будет рассчитан один и тот же хеш, то, при выборе нужных полей, балансировка будет обеспечивать Flow Coherency. Если так выйдет, что в распределении хешей будет перекос, то балансировка может стать очень неравномерной, так как статистика по реальной выходной нагрузке не используется в алгоритме балансировки, но вероятность этого не велика.

Обычно потоки, поступающие на NPB, определяются с помощью 5-tuple заголовков (src/dst IP, src/dst порт, протокол). Пакеты с одинаковыми 5-tuple, но с поменянными местами IP и портами должны идти на одно и то же устройство (чтобы записать разговор в обе стороны). Но при этом потоки могут задаваться по-разному. Например, если используется 3-tuple, т.е. IP-адреса фиксированы, а порты меняются в зависимости от пути пакетов, или наоборот, порты фиксированы, а IP-адреса могут меняться, то NPB должен уметь подстраиваться под возможные изменения структуры потоков. При этом современные NPB используют алгоритмы, которые не завязаны на хранение информации о сессиях, и, следовательно, никак не ограничены в количестве обрабатываемых потоков.

Также есть некоторые функции, следящие за состоянием каналов, с которыми работает NPB.
  • Link state awaraness — функция, которая позволяет отслеживать состояние выходных каналов. Если один из них (или клиентское оборудование) выходит из строя, то трафик автоматически перераспределяется между остальными выходными портами данной группы. Когда канал возвращается в рабочее состояние, то вновь происходит перераспределение трафика. В моменты перераспределения возможны кратковременные нарушения когерентности потока. Работоспособность канала отслеживается по наличию линка и/или при помощи keep-alive пакетов.
  • N+M redundancy — функция резервирования каналов, которая работает следующим образом: в балансировочной группе выбираются N используемых (активных) и M резервных каналов и если один из активных каналов группы выходит из строя, то его трафик переводится на один из резервных каналов. При восстановлении канала перераспределения не происходит и восстановленный канал становится резервным. Эта функция используется в том случае, когда недопустимы даже кратковременные нарушения когерентности потока (вместо link state awaraness).
  • Overflow mode — эта функция позволяет задействовать каналы по мере увеличения количества трафика. Пользователь выбирает группу каналов и указывает те, которые будут активны сразу. Остальные каналы автоматические будут задействованы после того, как нагрузка на основные превысит заданный пользователем порог.

Что касается трафика SIP из нашего примера, то его можно пускать на все записывающие устройства, т.к. он создает малую по сравнению с VoIP трафиком нагрузку. SIP передается по протоколу TCP, в то время как VoIP передается по RTP-UDP. Здесь работают фильтры — один из фильтров выделяет из потока трафик SIP и направляет его на все записывающие устройства, а другой выделяет пакеты RTP и NPB проводит балансировку нагрузки этого трафика между всеми записывающими устройствами.

Много фильтраций, хороших и разных


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

Packet Filtering

Позволяет фильтровать приходящие пакеты с помощью заданных правил. Это может быть протокол, MAC, IP, VLAN теги, метки MPLS и другие. Поиск при этом ведется по всему содержимому пакета (включая payload). Шаблоны, которые при этом используются, могут быть как простыми строками со статическим, заданным пользователем отступом, так и сложными регулярными выражениями с меняющимся отступом. Основная задача — пропустить пакеты, попадающие под заданные критерии, для их последующей балансировки.

Packet Slicing

Некоторым устройствам мониторинга нужна определенная информация из пакета, его определенная часть. При этом просмотр всего пакета займет лишние ресурсы. Эта функция позволяет “вырезать” из пакета эту часть и направить ее дальше на устройство мониторинга для дальнейших преобразований, анализа или сбора статистики, избегая при этом ненужного просмотра всего содержимого пакета. После процедуры slicing’а CRC пакета пересчитывается.

Port Stamping

Функция вставки в пакет метки номера порта, с которого он пришел. Генерация номера, записываемого в поле самой метки, происходит по определенной формуле. В некоторых приборах есть возможность назначения номера порта самостоятельно через CLI. Длина поля не больше 2-х байт. При этом CRC пакета после вставки метки пересчитывается.

Time Stamping

Аналогия с port stamping — вставка временной метки. В приходящий пакет вставляется 8-байтный timestamp-блок (32 бита — счетчик секунд, 32 бита — счетчик наносекунд). Одним из методов является вставка 14-байтного trailer’а в конец пакета — 2 байта — Source ID (из port stamping’a), 8 байт — Timestamp, 4 байта — пересчитанная CRC. Прибором должен поддерживаться протокол NTP, который описан в RFC 5905 (речь о NTPv4).

Packet De-duplication

Помечает или вовсе удаляет дублированные пакеты, которые обнаруживаются при помощи сконфигурированного интервала оригинального пакета (от 1 до 50,000 микросекунд). Встречаются при использовании технологий SPAN и mirror в switch'ах, либо при сборе пакетов с нескольких мест.

Tagging (VLAN и MPLS)

Служит для вставки в пакеты меток VLAN или MPLS, что позволяет отслеживать их и управлять их перемещением по сети.

Protocol/Header Stripping, De-incapsulation

Функции, обратные tagging’у и не отличающиеся друг от друга по принципу действия — удаление определенной части пакета (например, заголовков или меток).

Вместо заключения


Подытоживая все вышесказанное, можно сказать, что в лице Netwok Packet Broker’ов мы имеем мощный и гибко-настраиваемый инструмент позволяющий фильтровать, агрегировать и перераспределять трафик на различные устройства, без замены уже используемого оборудования.

Платой за пользу такого рода приборов является сложность внедрения их в уже существующие сети — это требует многие часы перепланирования (в зависимости от сложности структуры самой сети и желаемых критериев фильтрации и балансировки).

Среди производителей NPB стоит выделить несколько компаний, таких как VSS Monitoring, Gigamon, Apcon и Ixia (в состав которой, с недавних пор, входит еще и NetOptics, которая также выпускала NPB). Кому интересно, что предлагают те или производители — милости прошу в ссылки.

Спасибо за внимание!

Ссылки:


Сайт Gigamon.
Сайт VSS Monitoring.
Сайт Ixia.
Сайт Apcon.

P.S. Выражаю огромную благодарность Des333 и paulig за помощь в подготовке статьи.

Комментарии (3)


  1. amarao
    05.06.2015 15:28
    +1

    Порт-мирроринг по хешу или заголовку пакета. Да. Мелкая фича для коммутатора. Почему это надо продавать как Большую Дорогую Специальную Штуку?

    Ах, да, я понял. Если её продавать как Большую Дорогую Специальную Штуку, то за неё можно попросить Больше Денег.


  1. CMHungry
    05.06.2015 18:44

    какой-то очень-очень частный случай использования балансировщика
    без необходимости в балансировщике как таковом вообще, причем


  1. miha2
    05.06.2015 20:12

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