BC/NW 2010; №2 (17):3.2

 

СИСТЕМА ЭМУЛИРОВАНИЯ СЕТЕВЫХ УСТРОЙСТВ ПО ПРОТОКОЛУ SNMP FLEETSIMULATOR

Артюхов О.И., Кац-Ванхадло А.М., Айнбунд Р.А.

(Москва, Московский Энергетический Институт (Технический Университет), Россия,

Москва, Российский филиал Самсунг Электроникс Ко. Лтд., Россия)

В настоящее время использование компьютерных сетей становится все более распространенным. С увеличением числа устройств в рамках одной сети возникает необходимость контроля их работы. На сегодняшний день система управления масштаба предприятия должна работать с огромным количеством устройств, обладающих разными возможностями и техническими характеристиками, поэтому тестирование этих систем становится сложной задачей разработчиков – для воспроизведения больших сетей требуется большое количество ресурсов и устройств. Эмулирование сетевых устройств позволяет решить эту проблему и моделировать сети с большим количеством виртуальных устройств, если в наличии нет необходимого количества реальных.

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

Fleetsimulator - cистема, представляющая собой программное обеспечение, которое позволяет эмулировать более 1000 SNMP-устройств на одном персональном компьютере. Ее основными функциями являются:

·          Чтение конфигурации эмулируемого устройства из файла в формате snmpwalk.

·          Создание и удаление множества сетевых адресов на ПК для поддержки множества виртуальных устройств.

·          Запуск множества SNMP-агентов, привязанных к созданным сетевым интерфейсам.

·          Поддержка изменения свойств-счетчиков через определенные промежутки времени.

·          Поддержка операционных систем Windows, Linux.

·          Полная поддержка SNMPv2.

Протокол SNMP был разработан с целью проверки функционирования сетевых устройств (агентов). Организация запросов и откликов протокола SNMP представлена на рис.1.

                                   Рис.1 Схема запросов/откликов SNMP

Сам протокол SNMP не определяет какие переменные управляемая система должна предоставить, а использует управляющую базу данных MIB. Все имена MIB имеют иерархическую структуру, содержащую идентификаторы объектов OID, которые уникально идентифицируют переменную, которая может быть прочитана или установлена через SNMP.

Основой системы Fleetsimulator является библиотека SNMP4J – свободная SNMP имплементация с открытым исходным кодом для версий Java™ 2SE 1.4 и выше. Для эмуляции устройств Fleetsimulator использует классы и интерфейсы SNMP4J, но исходя из особенностей решаемых задач и большого количества создаваемых устройств, изменен способ хранения и использования MIB-информации (Б-деревья), синхронные сокеты заменены архитектурой неблокирующих сокетов, добавлена возможность создания динамических (изменяемых) параметров и сетевых интерфейсов для каждого агента. Рассмотрим эти изменения подробнее.

Для MIB-информации большого числа агентов оперативной памяти зачастую недостаточно, поэтому в системе эмуляции используются Б-деревья, хранящиеся на жестком диске. Б-дерево (рис.2) представляет собой сильно ветвящееся дерево, обладающее следующими свойствами [1]:

·        Каждая вершина может содержать не более 2n ключей.

·        Каждая вершина за исключением, может быть, корневой содержит не менее n ключей (корневая вершина, если она не является листом, содержит не менее двух потомков).

·        Каждая вершина либо представляет собой лист и не имеет потомков, либо имеет в точности m+1 потомка, где m - количество ключей в вершине.

·        Все листовые вершины располагаются на одном уровне.

·        Число n называется порядком Б-дерева.

http://www.codenet.ru/progr/alg/sort_search/s_fig43.gif

                                                    Рис.2 Пример В-дерева

Для организации хранилищ Б-деревьев используется библиотека JDBM - инструмент длительного сохранения данных с поддержкой транзакций для Java, распространяемая по лицензии BSD. Хотя обращение к жесткому диску занимает больше времени, чем обращение к ОЗУ, организация данных в виде Б-дерева позволяет быстро находить нужную информацию, а наличие кэш – сохранять в оперативной памяти наиболее часто используемые записи.

Для создания и удаления IP-адресов виртуальных устройств система эмуляции использует программу Netsh для Windows и утилиту ip для Linux, содержащие команды системного администрирования, осуществляющие показ и управление маршрутизацией, сетевыми интерфейсами и туннелями. Для добавления и удаления ip-адресов в системе эмуляции необходимо определить операционную систему и в отдельных процессах вызвать указанные выше утилиты с соответствующими параметрами.

Для работы протокола SNMP и обмена запросами используется система неблокирующих сокетов (рис.3), позволяющая выполнять операции чтения/записи на канале, не блокируя процессов, использующих этот сокет.

http://onjava.com/onjava/2002/09/04/graphics/Fig1.gif

                                  Рис.3 Архитектура неблокирующей системы

Клиентские приложения одновременно посылают запросы на сервер. Селектор собирает их, создает ключи и отдает их серверу. Каждый ключ не содержит всю информацию потока, посылаемого клиентом, а только часть, т.к. селектор разделяет данные клиента на подзапросы, идентифицируемые ключами. Чем больше клиенты посылают данные на сервер, тем больше селектор создает ключей, которые обрабатываются в соответствии с политикой разделения времени. Каждый ключ содержит информацию о приложении, пославшем запрос и тип запроса (попытка соединения, принятие соединения, операция чтения, операция записи) [2].

Для эмуляции, приближенной к реальным процессам, необходимо наличие переменных параметров, изменяющихся в соответствии с заданной функцией, например подсчет обращений к конкретному OID или инкрементирование через заданные промежутки времени. Таких функций может быть множество. Fleetsimulator реализует наращивание параметра через определенные промежутки времени. Для этого в исходном walk-файле для динамических переменных необходимо указать параметры их изменения, которые при добавлении агентов образуют дополнительные хранилища Б-деревьев (также на основе библиотеки JDBM). При запуске эмуляции записи из хранилища организующиеся в виде сортированного списка. После активации всех агентов происходит запуск таймера - отдельный поток, который через каждую секунду просматривает каждый элемент списка. К каждому элементу в параметры функции добавляется значение, наращиваемое при каждой проверки таймера. Как только это значение станет равным заданному для этого OID промежутку времени, происходит наращивание значения изменяемого параметра в хранилище и обнуление поля.

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

1.     Добавление ip-адреса и хранилищ с данными агента

На данном этапе определяется операционная система и вызывается соответствующая утилита для добавления ip-адреса. Если адрес был добавлен, то он добавляется в список агентов и происходит преобразование walk-файла с помощью регулярного выражения. Snmpwalk-файл представляет собой текстовый файл с перечислением параметров MIB (OID, тип, значение), полученных при помощи утилиты Net-Snmp, а также указания функции для динамического изменения параметра.

2.     Запуск добавленных агентов

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

3.     Удаление ip-адреса и хранилищ:           

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

4.     Вывод списка существующих агентов.

Происходит путем чтения текстового файла со списком добавленных агентов (их IP-адресам).

5.     Вывод данных выбранного агента.

Происходит путем последовательного вывода содержимого хранилищ с MIB агента.

6.     Вывод справки.

Система Fleetsimulator написана на языке Java, что позволяет сделать систему эмуляции в данной работе кроссплатформенной, а также использовать свободно распространяемые интегрированные среды разработки (NetBeans, IntellijIdea) и библиотеки с открытым исходным кодом, разработанные на этом языке.

Компиляция системы производилась с помощью Apache Ant java-утилита для автоматизации процесса сборки программного продукта. С помощью Ant можно написать одиночный файл компоновки, который действует одинаково на любой Java-платформе (поскольку Ant сам реализован в Java) [3]. Необходимые внешние библиотеки (snmp4j, snmp4j-agent, log4j, jdbm) загружаются при компиляции, вызывая Apache Ivy, программу управления переходными зависимостями, разработка проекта Apache Ant. Благодаря Ivy эти библиотеки не нужно распространять вместе с системой эмуляции, а пользователь сам может скачать их из репозитория, скомпилировав проект. Кроме того, при появлении новых версий библиотек, достаточно изменить скрипт со списком зависимостей, что удобно для дальнейшей модификации системы эмуляции.

Пользовательский интерейс консольный, представляет собой набор функций, вызвать которые можно посредством задания соответствующих аргументов при запуске исполнительного jar-файла simulator.jar из командной строки или терминала.

Тестируя систему эмуляции на персональном компьютере с процессором Intel Core2 Quad CPU Q6600 2.40 GHz и оперативной памятью 3.25 GB, получили, что время отклика одного агента на запрос walk от утилиты Net-SNMP составило 1 секунду, от программы Ireasoning MIB Browser – 3 секунды.

Было произведено исследование зависимости времени добавления, запуска и удаления агентов от их количества и операционной системы, в которой они эмулируются. Так как в ОС Windows процесс добавления и удаления IP-адреса происходит довольно медленно, то при большом количестве агентов система эмуляции достигает лучшей производительности, если она запущена на ОС Linux, что наглядно демонстрируют полученные результаты (табл.1):

Таблица 1. Зависимость времени добавления, удаления и запуска агентов от их количества и ОС

Количество агентов

Время добавления, с

Время запуска, с

Время удаления, с

Windows

Linux

Windows

Linux

Windows

Linux

1

3

1

1

1

2

1

10

33

7

1

1

24

1

20

66

14

1

2

52

1

50

168

51

2

3

148

1

100

341

71

4

4

371

1

200

707

145

7

8

794

1

500

1671

362

20

22

1965

2

1000

3372

721

42

46

3970

4

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

 

Литература

1.     А. В. Левитин. Глава 7. Пространственно-временной компромисс: B-деревья // Алгоритмы: введение в разработку и анализ — М.: «Вильямс», 2006. С. 331—339.

2.     Giuseppe Naccarato. Introducing Nonblocking Sockets. 09/04/2002 http://onjava.com/pub/a/onjava/2002/09/04/nio.html?page=1

3.     Мэтт Чепмен. Apache Ant 101: Моментальная компоновка Java-программ (рус.). IBM developer Works Россия, 17 декабря 2003.

http://www.ibm.com/developerworks/ru/edu/j-apant/index.html