BC/NW 2012; №2 (21):7.1
СИСТЕМА ЭМУЛИРОВАНИЯ
СЕТЕВЫХ УСТРОЙСТВ ПО ПРОТОКОЛУ SNMP FLEETSIMULATOR
Артюхов О.И., Кац-Ванхадло А.М.
В настоящее время использование компьютерных сетей стало практически повсеместным. С увеличением числа устройств в рамках одной сети возникает необходимость контроля их работы. На сегодняшний день система управления масштаба предприятия должна работать с огромным количеством устройств, обладающих разными возможностями и техническими характеристиками, поэтому тестирование этих систем становится сложной задачей разработчиков – для воспроизведения таких сетей требуется большое количество ресурсов и устройств. Эмулирование сетевых устройств позволяет решить эту проблему и моделировать сети с большим количеством виртуальных устройств, если в наличии нет необходимого количества реальных. Существующие коммерческие системы эмуляции сетевых устройств громоздки и дорогостоящи (стоимость программных продуктов такого класса составляет порядка нескольких тысяч долларов), хотя и имеют широкие функциональные возможности.
Fleetsimulator
– система, представляющая собой программное обеспечение, которое позволяет
эмулировать более 10000 SNMP-устройств. Ее основными функциями являются:
·
Получение MIB-таблицы
существующего сетевого устройства.
·
Редактирование полученной MIB.
·
Создание и удаление множества сетевых адресов на ПК для
поддержки множества виртуальных устройств.
·
Управление множеством SNMP-агентов, привязанных к
созданным сетевым интерфейсам.
·
Распределение SNMP-агентов по нескольким
серверам.
·
Дружественный пользовательский интерфейс, доступный из
веб-браузера.
·
Поддержка операционных систем Windows, Linux.
·
Полная поддержка SNMPv2.
Система
эмулирования основана на протоколе SNMP, который был разработан с целью
проверки функционирования сетевых устройств (агентов) и является компонентом
стека протоколов TCP/IP. Организация
запросов и откликов протокола SNMP
представлена на рис.1.
Рис. 1. Схема
запросов/откликов SNMP
Сам
протокол SNMP не определяет, какие переменные управляемая система должна
предоставить, а использует управляющую базу данных MIB. Все имена MIB имеют
иерархическую структуру, содержащую идентификаторы объектов OID,
которые уникально идентифицируют переменную, которая может быть прочитана или
установлена через SNMP.
Взаимодействие
компонентов системы эмулирования FleetSimulator и SNMP-менеджеров имеет следующий
вид (рис. 2):
Рис. 2. Схема взаимодействия
Пользователи
FleetSimulator через веб-браузер обращаются к веб-серверу, который в
свою очередь обеспечивает связь с серверами агентов, которых может быть
несколько. Пользовательский интерфейс реализован с помощью Google Web Toolkit, свободного
Java-фреймворка, который позволяет создавать Ajax[1]-приложения
на основе Java. Веб-сервер использует Jetty, свободный контейнер
сервлетов, написанный на Java, который занимается системной поддержкой
сервлетов и обеспечивает их жизненный цикл в соответствии с правилами,
определёнными в спецификациях. Веб-сервер предоставляет единый графический
интерфейс клиентам и осуществляет маршрутизацию запросов к серверам.
SNMP-менеджеры (например, системы мониторинга) обращаются к виртуальным
устройствам как к реальным по ip-адресу.
Взаимодействие
серверов с клиентами основано на технологии REST (Representational State Transfer). REST ̶
подход к архитектуре сетевых протоколов, обеспечивающих доступ к
информационным ресурсам. REST предполагает разделение на сервер и клиента,
причем сервер не хранит состояния клиента, а клиенты могут кэшировать ответы.
Клиент не может однозначно определить, подключается ли он непосредственно к
серверу или к посреднику по пути подключения. Важным понятием в REST
является наличие ресурсов (источников конкретной информации), каждый из которых
определяется ссылкой с глобальным идентификатором (например, URI в HTTP).
Для того чтобы манипулировать этими ресурсами, компоненты сети
(пользовательские агенты и сервера происхождения) общаются через
стандартизованный интерфейс (например, HTTP) и обмениваются представлениями
этих ресурсов (фактическими документами для передачи информации). Сами ресурсы
концептуально отделены от представлений, возвращаемых клиенту. Каждое сообщение
содержит достаточно информации, чтобы описать способ обработки сообщения.
Серверы
FleetSimulator прослушивают порт 8030 для получения REST-HTTP-команд
и возвращают ответ в xml-формате. Команды основаны на методах GET, POST и DELETE и
реализуют функции добавления и удаления ip-адресов, добавление, запуск
и остановку агентов и др. Поддержка REST осуществляется с помощью RESTLet,
свободного REST-фреймворка, написанного на Java и реализующего все принципы
этой технологии.
Основой
серверов системы Fleetsimulator является библиотека SNMP4J
– свободная SNMP имплементация с открытым исходным кодом для версий Java™ 2SE
1.4 и выше. Для эмуляции устройств Fleetsimulator использует классы и
интерфейсы SNMP4J, но исходя из особенностей решаемых задач и большого
количества создаваемых устройств, добавлен способ хранения и использования MIB-информации
(Б-деревья), синхронные сокеты заменены архитектурой неблокирующих сокетов,
добавлена возможность создания и удаления сетевых интерфейсов для каждого
агента. Рассмотрим эти изменения подробнее.
Для
MIB-информации большого числа агентов оперативной памяти зачастую
недостаточно, поэтому в системе эмуляции помимо оперативной памяти могут
использоваться Б-деревья, хранящиеся на жестком диске. Б-дерево (рис.3)
представляет собой сильно ветвящееся дерево, обладающее следующими свойствами:
·
Каждая вершина может содержать не более 2n ключей.
·
Каждая вершина за исключением, может быть, корневой содержит
не менее n ключей (корневая вершина,
если она не является листом, содержит не менее двух потомков).
·
Каждая вершина либо представляет собой лист и не имеет
потомков, либо имеет в точности m+1 потомка, где m - количество ключей в
вершине.
·
Все листовые вершины располагаются на одном уровне.
·
Число n
называется порядком Б-дерева.
Для
организации хранилищ Б-деревьев используется библиотека JDBM -
инструмент длительного сохранения данных с поддержкой транзакций для Java,
распространяемая по лицензии BSD. Хотя обращение к жесткому диску занимает
больше времени, чем обращение к ОЗУ, организация данных в виде Б-дерева
позволяет быстро находить нужную информацию, а наличие кэш – сохранять в
оперативной памяти наиболее часто используемые записи.
Чаще
всего создается большое количество виртуальных устройств с практически
одинаковыми MIB-таблицами, отличающимися только несколькими
параметрами. Поэтому общие параметры хранятся в одном экземпляре для всех
устройств (т.н. шаблон), а отличные от них – для каждого устройства отдельно.
Кроме того общие параметры могут быть переопределены для конкретного
устройства. С таким распределением оперативной памяти компьютера (сервера) чаще
всего оказывается достаточно, что положительно влияет на быстродействие в
сравнение с использованием хранилищ бинарных деревьев на жестком диске.
Шаблонов с параметрами может быть несколько, однако каждое устройство
использует только один шаблон.
Для
создания и удаления IP-адресов виртуальных устройств система эмуляции использует
программу Netsh для Windows и утилиту ip для Linux, содержащие команды системного администрирования,
осуществляющие показ и управление маршрутизацией, сетевыми интерфейсами и
туннелями. Для добавления и удаления ip-адресов в системе эмуляции
необходимо определить операционную систему и в отдельных процессах вызвать
указанные выше утилиты с соответствующими параметрами.
Для
работы протокола SNMP и обмена запросами используется система неблокирующих
сокетов (рис. 4), позволяющая выполнять операции чтения/записи на канале, не
блокируя процессов, использующих этот сокет.
Рис. 4.
Архитектура неблокирующей системы
Клиентские приложения
одновременно посылают запросы на сервер. Селектор собирает их, создает ключи и
отдает их серверу. Каждый ключ не
содержит всю информацию потока, посылаемого клиентом, а только часть, т.к.
селектор разделяет данные клиента на подзапросы, идентифицируемые ключами. Чем
больше клиенты посылают данные на сервер, тем больше селектор создает ключей,
которые обрабатываются в соответствии с политикой разделения времени. Каждый
ключ содержит информацию о приложении, пославшем запрос и тип запроса (попытка
соединения, принятие соединения, операция чтения, операция записи).
Пользовательский
интерфейс (рис. 5) имеет два основных раздела – менеджер MIB-таблиц
и менеджер эмулируемых устройств, использующих эти таблицы.
Рис. 5. Пользовательский
интерфейс системы
Менеджер
MIB-таблиц позволяет получить параметры от реального сетевого
устройства через SNMP-протокол, добавить их в список MIB-таблиц,
удалить или изменить. Менеджер устройств позволяет добавлять агенты с заданным ip-адресом,
портом и MIB (выбирается из списка, сформированного в менеджере MIB-таблиц).
Далее устройство можно запустить, остановить и удалить. Для каждого
виртуального устройства можно вывести таблицу, содержащую параметры MIB.
Система
Fleetsimulator написана на языке Java, что позволяет сделать
систему эмуляции в данной работе кроссплатформенной, а также использовать
свободно распространяемые интегрированные среды разработки (NetBeans,
IntellijIdea), фреймворк GWT, контейнер сервлетов Jetty и
библиотеки с открытым исходным кодом, разработанные на этом языке.
Компиляция системы
производилась с помощью Apache
Ant — java-утилита для автоматизации процесса сборки
программного продукта. С помощью Ant можно написать одиночный файл компоновки,
который действует одинаково на любой Java-платформе (поскольку Ant сам
реализован в Java). Необходимые внешние библиотеки (snmp4j, snmp4j-agent, log4j, jdbm)
загружаются при компиляции, вызывая Apache
Ivy, программу управления
переходными зависимостями, разработка проекта Apache Ant. Благодаря Ivy эти библиотеки не нужно распространять
вместе с системой эмуляции, а пользователь сам может скачать их из репозитория,
скомпилировав проект. Кроме того, при появлении новых версий библиотек,
достаточно изменить скрипт со списком зависимостей, что удобно для дальнейшей
модификации системы эмуляции.
Рассматриваемая в статье
система гибкая и масштабируемая, обладает хорошим быстродействием и реализует
все поставленные задачи.
Так как в ОС Windows процесс
добавления и удаления IP-адреса
происходит довольно медленно, то при большом количестве агентов система
эмуляции достигает лучшей производительности, если она запущена на ОС Linux.
Существует
возможность дальнейшего развития системы эмуляции, например обработка
транзакций, добавление динамически изменяемых параметров, распределение агентов
по серверам, используя различные критерии.
Литература
1. Левитин А.В. Алгоритмы: введение в разработку и анализ — М.: «Вильямс», 2006. С. 331—339.
2.
Naccarato
G. Introducing Nonblocking Sockets. O’Reilly Network, 2002
http://onjava.com/pub/a/onjava/2002/09/04/nio.html?page
3. Чепмен
M. Apache Ant 101: Моментальная компоновка
Java-программ (рус.). IBM developer Works Россия, 2003.
http://www.ibm.com/developerworks/ru/edu/j-apant/index.html
4.
Fielding,
Roy T. Architectural Styles and the Design of Network-based Software
Architectures, Doctoral dissertation,
[1] AJAX — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером, когда при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными.