Date Tags snmp / pdu / rfc

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