SNMP - простой протокол сетевого управления. Он включает следующие элементы: некоторое количество узлов, способных отвечать на запросы (агенты), как минимум один генератор команд (менеджер) и протокол, с помощью которого они взаимодействуют. На данный момент актуальна версия 3, в которую были добавлены алгоритмы аутентификации с целью предотвращения модификации данных и подмены отправителя.
Тип SNMP сообщения определяет PDU (Protocol Data Unit определен в RFC-3416). PDU обхединяются в классы:
- Read class (GetRequest, GetNextRequest, GetBulkRequest)
- Write class (SetRequest)
- Response class (Response, Report)
- Notification class (Trapv2, InformRequest)
- Internal class (Report для внутренних целей)
Кроме того, SNMP сообщения можно классифицировать по наличию подтверждения (для GetRequest, GetNextRequest, GetBulkRequest, SetRequest и InformRequest оно есть, а для Report, Trapv2 и GetResponse - нет)
Управляющая информация
Управляющая информация - это набор управляемых объектов, располагающихся в виртуальном хранилище MIB (Management Information Base). Наборы определяются в MIB модулях. Существует специальная нотация, позволяющая определять объекты, модули и другие элементы управляющей информации. Ее называют SNMP data definition language. Язык представляет из себя адаптированное подмножество ASN.1 и определен в STD 58, RFCs 2578, 2579, 2580. Структура управляющей информации включает в себя определение модулей, объектов и уведомлений. Соответствующие макросы ASN.1: MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE. RFC-2578 определяет основные типы данных (Integer32, enumerated integers, Unsigned32, Gauge32, Counter32, Counter64, TimeTicks, INTEGER, OCTET STRING, OBJECT IDENTIFIER, IpAddress, Opaque, BITS) и следующие конструкции:
- IMPORTS позволяет указывать элементы, используемые в MIB модуле, но определенные в другом MIB модуле
- MODULE-IDENTITY позволяет указывать описание и административную информацию для MIB модуля (контакты, история изменений)
- OBJECT-IDENTITY для указания OID значений
- OBJECT-TYPE для указания типа данных, статуса и семантики объектов
- SEQUENCE для перечислимых типов
- NOTIFICATION-TYPE определяет событие уведомления
При проектировании MIB модуля часто необходимо определить семантику для множества объектов с одинаковым поведением. Это реализуется введением нового типа на основе базового. Каждый новый тип имеет свое имя и сужает базовый тип. Эти новые типы называют текстовыми соглашениями (textual conventions). Определены в RFC-2579
То как все это уложено в транспортный уровень описывает RFC-3417. Архитектуру описывает RFC-3411.
Структура типовых SNMP сущностей отражена в RFC3411 - пункт 3.1. Рассмотрим типичного агента:
+------------------------------+
| Network |
+------------------------------+
^ ^ ^
| | |
v v v
+-----+ +-----+ +-------+
| UDP | | IPX | . . . | other |
+-----+ +-----+ +-------+ (traditional SNMP agent)
+-------------------------------------------------------------------+
| ^ |
| | +---------------------+ +----------------+ |
| | | Message Processing | | Security | |
| Dispatcher v | Subsystem | | Subsystem | |
| +-------------------+ | +------------+ | | | |
| | Transport | | +->| v1MP * |<--->| +------------+ | |
| | Mapping | | | +------------+ | | | Other | | |
| | (e.g., RFC 3417) | | | +------------+ | | | Security | | |
| | | | +->| v2cMP * |<--->| | Model | | |
| | Message | | | +------------+ | | +------------+ | |
| | Dispatcher <--------->| +------------+ | | +------------+ | |
| | | | +->| v3MP * |<--->| | User-based | | |
| | | | | +------------+ | | | Security | | |
| | PDU Dispatcher | | | +------------+ | | | Model | | |
| +-------------------+ | +->| otherMP * |<--->| +------------+ | |
| ^ | +------------+ | | | |
| | +---------------------+ +----------------+ |
| v |
| +-------+-------------------------+---------------+ |
| ^ ^ ^ |
| | | | |
| v v v |
| +-------------+ +---------+ +--------------+ +-------------+ |
| | COMMAND | | ACCESS | | NOTIFICATION | | PROXY | |
| | RESPONDER |<->| CONTROL |<->| ORIGINATOR | | FORWARDER | |
| | application | | | | applications | | application | |
| +-------------+ +---------+ +--------------+ +-------------+ |
| ^ ^ |
| | | |
| v v |
| +----------------------------------------------+ |
| | MIB instrumentation | SNMP entity |
+-------------------------------------------------------------------+
Получив сообщение Dispatcher определяет версию протокола и передает на MessageProcessingSubsystem. В зависимости от PDU запрос передается одному из приложений, которое исполняет управляющую информацию, определенную в MIB.
Сценарий выполнения запроса агентом:
Command Dispatcher Message Security
Responder | Processing Model
| | Model |
| | | |
| registerContextEngineID | | |
|------------------------>| | |
|<------------------------| | | |
| | Receive SNMP | | |
: | Message | | |
: | from Network | | |
: |<-------------+ | |
: | | |
: |prepareDataElements | |
: |------------------->| |
: | | processIncomingMsg |
: | |------------------->|
: | | |
: | |<-------------------|
: | | |
: |<-------------------| |
| processPdu | | |
|<------------------------| | |
| | | |
: : : :
: : : :
| returnResponsePdu | | |
|------------------------>| | |
: | prepareResponseMsg | |
: |------------------->| |
: | |generateResponseMsg |
: | |------------------->|
: | | |
: | |<-------------------|
: | | |
: |<-------------------| |
: | | |
: |--------------+ | |
: | Send SNMP | | |
: | Message | | |
: | to Network | | |
: | v | |
Управляющая информация расположена на SNMP сущности, в которой приложение Command Responder может манипулировать несколькими контекстами. Данное приложение использует contextEngineID.
SNMP контекст - это набор управляющей информации. Элемент управляющей информации может находится более чем в одном контексте. SNMP сущность потенциально может иметь доступ более чем к одному контексту.
Обычно имеется несколько сущностей одного типа управляющей информации. Для идентификации каждой отдельной сущности необходимо иметь contextName, contextEngineID, тип и конкретный элемент.
Рассмотрим, к примеру, тип управляемого объекта - описание интерфейса ifDescr. Для того, чтобы идентифицировать первый индерфейс на устройстве X, необходимо задать snmpEngineID SNMP сущности, которая имеет доступ к управляющей информации на устройстве X, название контекста (устройство X), тип управляемого объекта (ifDescr) и конкретный элемент (1).
Comments
comments powered by Disqus