20.10.2 Первая абстрактная синтаксическая нотация (ASN.1)
Определения MIB написаны на стандартном языке первой абстрактной синтаксической нотации (Abstract Syntax Notation 1 — ASN.1), разработанном в ISO. ASN.1 похож на компьютерные языки. Существуют и основные правила кодирования (Basic Encoding Rules — BER), также от ISO, определяющие формат пересылки значений, определенных с помощью ASN.1.
Станция управления анализирует переменные MIB, компилируя определения MIB в записи ASN.1. Хорошие станции управления позволяют компилировать столько MIB, сколько нужно.
После компиляции станция управления готова посылать и получить сообщения SNMP, содержащие любую из скомпилированных переменных. Хорошие станции могут также выводить описания переменных. На рис. 20.13 показан вывод в HP Open View условия DESCRIPTION описания sysDescr.
Рис. 20.13. Вывод описаний переменных на экране диспетчера SNMP
20.10.3 Типы данных MIB
Причиной широкого распространения SNMP стало то, что проектировщики придерживались правила "Будь проще!"
■ Все данные MIB состоят из простых скалярных переменных, хотя отдельные части MIB могут быть логически организованы в таблицы.
■ Только небольшое число типов данных (например, целые числа или строки октетов) используется выражения значений всех переменных MIB.
Фактически основные типы данных — это INTEGER (целое), OCTET STRING (строка октетов) и OBJECT IDENTIFIER (идентификатор объекта).
20.10.4 Целые числа
Целые числа используются в двух случаях:
■ Для ответа на вопрос "сколько?"
■ Для перечисления списка вариантов, например 1 = включено, 2 = выключено, 3 = тестирование.
Ниже приведено определение, иллюстрирующее использование различных типов данных. Заметьте, что в первом определении формулировка SYNTAX ограничивает амплитуду значений.
tcpConnLocalPort OBJECT-TYPE
SYNTAX INTEGER (0..65535)
ACCESS read-only
STATUS mandatory
DESCRIPTION
"Номер локального порта для данного
соединения TCP."
:: = { tcpConnEntry 3 }
ifAdminStatus OBJECT-TYPE
SYNTAX INTEGER {
up (1), - готов к пересылке пакета
down (2),
testing (3) - режим тестирования
}
ACCESS read-write
STATUS mandatory
DESCRIPTION
"Требуемое состояние интерфейса. Тестирование (3) указывает
на отмену пересылки пакетов."
::= { ifEntry 7 }
20.10.5 Счетчики
Счетчик — это положительное целое число, которое увеличивается до максимального значения и затем сбрасывается в ноль. Известно, что 32-разрядный счетчик может увеличиваться до 2³²-1 (4 294 967 295) и затем сбрасывается в 0. В версии 2 добавлен 64-разрядный счетчик, который может увеличиваться до 18 446 744 073 709 551 615.
Значение счетчика само по себе не используется. Регистрируется текущее значение счетчика, а затем сравнивается с его предыдущим значением. Смысл имеет разность этих значений. Пример переменной со счетчиком:
ifInOctets OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"Общее количество полученных интерфейсом октетов,
включая символы обрамления кадров."
:: = { ifEntry 10 }
20.10.6 Масштаб
Масштаб (gauge) — это целое число, которое ведет себя по-разному. Значения масштаба увеличиваются и уменьшаются. Масштабы используются для количественного описания, например длины очереди. Иногда значение масштаба растет, а иногда уменьшается.
32-разрядный масштаб может увеличиваться до 2³²-1 (4 294 967 295). Если измеряемая величина превышает масштаб, то она фиксируется в этом максимуме, пока значение снова не уменьшится (см. рис. 20.14).
Рис. 20.14. Поведение значения масштаба
Пример переменной масштаба:
ifOutQLen OBJECT-TYPE
SYNTAX Gauge
ACCESS read-only
STATUS mandatory
DESCRIPTION
"Длина выходной очереди пакетов
(в пакетах)."
::= { ifEntry 21 }
20.10.7 TimeTicks
Интервалы времени измеряются в Time Ticks, размер которого выражается в сотых долях секунды. Значение TimeTick — неотрицательное целое число в пределах от 1 до 2³²-1. Для переполнения счетчика TimeTick потребуется 497 дней.
SysUptime, измеряющая время от инициализации программного обеспечения агента,— это наиболее часто используемая переменная TimeTick.
sysUpTime OBJECT-TYPE
SYNTAX TimeTicks