Netmond V2. Протокол NetStateДля получения актуальной картинки наблюдаемой сети в реальном времени в
Netmond предусмотрен специальный механизм - NetState
сервер.
Общее описание протоколаПротокол NetState предназначен для передачи данных в сети от сервера
к клиенту по запросам клиента. NetState является текстовым протоколом
взаимодействия клиента и сервера в установленном TCP соединении на
определенном порту сервера.
Функция клиента состоит из:
Функция сервера заключается в:
Сервер всегда ожидает поступления соединения на известном TCP порту. При необходимости, клиент устанавливает TCP соединение с сервером. Затем сервер посылает приветствие и ожидает команд клиента в течении времени Timeout, или отвергает клиента на основании списка доступа и закрывает это соединение. При наличии доступа, между клиентом и сервером происходит обмен командами и соответствующими ответами до тех пор пока соединение не закрывается клиентом или не прерывается по ошибке. Команды NetState протокола могут состоять из нескольких ключевых слов и одного обязательного аргумента, посылаемых одной строкой. Принята следующая нотация синтаксиса команд, посылаемых клиентом серверу:
После посылки команды клиент ожидает ответа от сервера в течении времени Timeout. Очередная команда посылается клиентом только при получении приглашения ввода от сервера. Ответы NetState протокола мультистроковые. Они состоят из произвольного колличества строк - индикаторов статуса, с возможными ключевыми словами, и строк, являющихся возвращаемыми данными. Принята следующая нотация синтаксиса ответов, возвращаемых клиенту сервером:
Если затребованных данных не найдено, то строки с возвращаемыми данными полностью отсутствуют. При этом могут наблюдаться только переключатели текущих типов обьектов. Таким образом можно узнать колличество обьектов и все возможные их типы на сервере. Клиент может посылать серию команд в одной сессии с сервером. Соединение
завершается клиентом с помощью специальной команды QUIT без аргументов.
Типы обьектовВсе данные, передаваемые в протоколе NetState разграничиваются по типам обьектов - их владельцев. В настоящий момент приняты следующие типы обьектов:
Типы обьектов протокола NetState должны строго соответствовать типам обьектов Netmond. Однако, сервер NetState может иметь и возвращать большее колличество типов обьектов, суть которых заранее не известна клиенту. В этом случае клиент самостоятельно принимает решение как использовать неизвестные ему типы обьектов, например он может их просто игнорировать. Если же клиент NetState запрашивает данные о неизвестном серверу типе обьекта, то сервер вернет сообщение об ошибке. Команды клиентаКоманды клиента протокола NetState состоят из:
Команда подается одной строкой, где все ее члены разделяются между собой произвольным колличеством пробелов и завершаются CRLF парой. Результирующая длинна строки не может превышать 1024 символа, иначе она будет усечена сервером. Регистр букв в модификаторах и командах значения не имеет. В агрументе регистр букв учитывается обязательно. Модификаторы опциональны, они могут отсутствовать в команде. В настоящий момент распознаются следующие ключевые слова модификаторов:
Командой является ключевое слово типа обьекта, на который запрашиваются данные, или специальное ключевое слово ANY - запрос любых типов обьектов. В настоящий момент распознаются следующие ключевые слова команд:
Исключением из этих правил является команда выхода QUIT, она состоит из одного ключевого слова и не имеет модификаторов и аргументов. По команде QUIT сервер закрывает сессию с клиентом ничего не возвращая. В качестве агрумента команды указывается выражение в REGEX формате, используемое для маскирования имен переменных и их полных путей - имен владельцев. По этой маске сервер должен отфильтровать данные перед выдачей клиенту. Пример простой команды с модификатором и аргументом: Где, Old - модификатор, Any - команда и .* - агрумент. По такой команде сервер вернет предыдущие значения всех известных ему переменных независимо от принадлежности их владельцев. Возвращаемые данныеКлючевые слова типов обьектов, используемые в качестве команд в запросах клиента, также используются и в качестве переключателей типов обьектов в ответах сервера. По запросам клиента сервер возвращает данные, соответствующие указанному типу обьекта и совпавшие с REGEX маской команды. Если совпадений не найдено, то никакие данные не возвращаются. Вперемежку с данными возвращаются также индикаторы статуса с переключателем типов обьекта - владельца данных. Последние возвращаются всегда, независимо от наличия данных, таким образом, клиент может определить какие типы обьектов поддерживает сервер. Данные возвращаются сервером NetState построчно, где каждая строка состоит из полного названия переменной и ее значения, разделенные знаком равенства: Название переменной представлено в виде полного пути к ней в иерархии обьектов Netmond, где члены иерархии отделяются друг от друга специальным символом ! (знак восклицания). Значение переменной представлено в виде числа (с возможной точкой) или в виде строки текста, заключенной в символы двойных апострофов, например "No error". Если значение переменной еще не определено, то в качестве значения может фигурировать ключевое слово Unused. По умолчанию возвращаются текущие значения переменных, т.е. значения, полученные в последнем поллинге. Если в запросе был указан модификатор OLD, то возвращаются значения предыдущего поллинга. Признаком завершения вывода массива данных со всеми сопутствующими переключателями типов обьектов является одиночный символ ! - приглашение для ввода следующих команд. Пример простой сессииНиже приведенный пример илюстрирует простую сессию с NetState сервером, в которой клиент получает текушие и предыдущие значения счетчиков байт интерфейсов с их тайм-штампами: netmon:bob:~/work> telnet localhost 3333 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. S: NetState server ready (timeout 30 sec.) S: ! C: interface Octets S: !INTERFACE S: host-1!Serial0/0!ifInOctets = 2345522619 S: host-1!Serial0/0!ifOutOctets = 2566982883 S: !INTERFACE S: host-1!Serial0/2!ifInOctets = 3272028327 S: host-1!Serial0/2!ifOutOctets = 1026741022 S: ! C: interface REPLY S: !INTERFACE S: host-1!Serial0/0!REPLYTIME = 948284131 S: !INTERFACE S: host-1!Serial0/2!REPLYTIME = 948284131 S: ! C: old interface Octets S: !INTERFACE S: host-1!Serial0/0!ifInOctets = 2345415173 S: host-1!Serial0/0!ifOutOctets = 2566644924 S: !INTERFACE S: host-1!Serial0/2!ifInOctets = 3271986926 S: host-1!Serial0/2!ifOutOctets = 1025637499 S: ! C: old interface REPLY S: !INTERFACE S: host-1!Serial0/0!REPLYTIME = 948284101 S: !INTERFACE S: host-1!Serial0/2!REPLYTIME = 948284101 S: ! C: quit Connection closed by foreign host. Смотри также: © 1998-2002, Rinet Software
|