Абстрактне опис синтаксису

  1. ASN.1 забезпечує стандартний спосіб представлення даних і кодування їх для передачі по мережі.
  2. абстрактні СИНТАКСИС
  3. БАЗОВІ ПРАВИЛА КОДУВАННЯ
  4. СТРУКТУРА керуючої інформації
  5. СЕТЕВОЙ есперанто

ASN.1 забезпечує стандартний спосіб представлення даних і кодування їх для передачі по мережі.

Основу моделі SNMP становить безліч об'єктів, які станції управління можуть зчитувати і записувати за допомогою агентів. Щоб пристрої різних виробників могли повідомляти і розуміти інформацію, що управляє, об'єкти повинні бути визначені стандартним, не залежних від виробника чином. Крім того, вони повинні однаково кодуватися при передачі по мережі. Іншими словами, SNMP необхідний стандартний мову опису об'єктів разом з правилами кодування. Ця мова - абстрактне опис синтаксису (Abstract Syntax Notation One, ASN.1) - розробники SNMP запозичили зі стандартів OSI. ASN.1 являє собою високорівнева мова опису типів даних і визначає формат повідомлень SNMP при передачі їх між агентами і станціями управління. Як і більша частина OSI, він великий, складний і не дуже ефективний.

Сама мова опису даних визначено в стандарті Міжнародної організації зі стандартизації (International Standard Organization, ISO) за номером 8824 під назвою "Специфікація абстрактного опису синтаксису, один", а правила кодування закріплені в стандарті 8825 під назвою "Специфікація базових правил кодування для ASN.1 ". Абстрактний синтаксис ASN.1 дозволяє визначати базові об'єкти і потім об'єднувати їх в більш складні. Декларації в ASN.1 з функціональної точки зору схожі з деклараціями з файлів-заголовків для програм на С.

абстрактні СИНТАКСИС

SNMP вводить свої умовні позначення, дещо відмінні від ASN.1. Базові типи даних записують малими літерами (наприклад, цілочисельний тип даних - як INTEGER). Визначені користувачем типи даних починаються з малої літери, але при цьому вони повинні містити принаймні один символ, відмінний від малої літери. Ідентифікатори змінних починаються з великої літери, при цьому вони можуть містити великі та малі літери, цифри і дефіси. Прогалини (знаки табуляції, переносу рядка і т. П.) Не враховуються. Коментарі починаються з "- -" (подвійного дефіса) і закінчуються або разом з кінцем рядка, або тією ж послідовністю символів "- -".

Допустимі в SNMP базові типи даних ASN.1 приведені в Таблиці 1. Змінна типу INTEGER може в теорії приймати будь-яке цілочисельне значення, але область її значень обмежують інші правила SNMP. Як приклад використання типів ми розглянемо, як змінна counter типу INTEGER декларується і (якщо необхідно) инициализируется значенням, рівним 0.
counter INTEGER :: = 0

Дуже часто змінну потрібно обмежити конкретними значеннями або конкретним діапазоном. Це можна зробити за допомогою визначення необхідного підтипу наступним чином:
Status :: = INTEGER {on (1), off (2), unknown (3)}
PacketSize :: = INTEGER (0..1023)

Змінні типу BIT STRING і OCTET STRING є рядок з 0 і більше біт або байт, відповідно. Для обох типів користувач може задати довжину рядка і початкове значення. Тип OBJECT IDENTIFIER дозволяє ідентифікувати об'єкти. Будь-який об'єкт в будь-якому офіційному стандарті може бути ідентифікований унікальним чином. Дана мета досягається за рахунок введення дерева стандартів, при цьому кожен об'єкт відповідного стандарту отримує своє місце в дереві. Верхній рівень дерева складають найбільш важливі в світі (з точки зору ISO) організації, а саме ISO і CCITT (тепер ITU), а також їх об'єднання. Нас цікавить насамперед четверта гілка ISO з ідентифікатором identified-organization (3) (визнані організації зі стандартизації), далі dod (6) (Міністерство оборони США), а потім internet (1). Гілка internet містить чотири гілки. Об'єкти бази керуючої інформації знаходяться під гілкою mgmt (див. Малюнок 1). Крім текстового ідентифікатора (label) кожна гілка має свій числовий ідентифікатор (number). Об'єкт може записуватися з використанням текстових або числових ідентифікаторів в будь-який їх комбінації. Як видно з описаної структури, всі об'єкти бази керуючої інформації мають загальний префікс
iso.identified-organization.
dod.internet.mgmt.mib-2
або
{1 3 6 1 2 1}
або
{Internet (1) 2 1}
і т. п. Таким чином, будь-який об'єкт може бути представлений за допомогою ідентифікатора об'єкта.


Малюнок 1. Кожен об'єкт може бути ідентифікований унікальним чином.

ASN.1 описує кілька способів створення нових типів даних. Перш за все, це використання простих складових типів даних (SNMP задіє тільки три з них). SEQUENCE - це впорядкований список типів, подібний структурі в С, SEQUENCE OF - одновимірний масив змінних одного типу, а CHOICE - об'єднання із заданого списку типів.

Інший спосіб полягає в призначенні тегів наявним типам даних. Теги поділяються на чотири класи або категорії: універсальний (universal), общепрікладной (application-wide), контекстно-залежний (context-specific) і приватний (private). Кожен тег складається з мітки і целочисленного ідентифікатора, наприклад:
IpAddress :: = [APPLICATION 0] OCTET STRING (SIZE (4))
визначає общепрікладной тип даних у вигляді рядка байт довжиною в 4 октету.

ASN.1 описує складний механізм макросів, активно використовується в SNMP. Макрос може служити в якості свого роду прототипу для створення безлічі нових типів і значень, кожного зі своїм власним синтаксисом. Кожен макрос визначає кілька (можливо, необов'язкових) ключових слів, які використовуються при виклику для ідентифікації параметрів (іншими словами, параметри макросу ідентифікуються не по місцю розташування, а за ключовим словом).

БАЗОВІ ПРАВИЛА КОДУВАННЯ

Транспортний синтаксис ASN.1 визначає однозначний спосіб перетворення значень змінних допустимих типів в електронних даних для передачі по мережі. У ASN.1 він називається базовими правилами кодування (Basic Encoding Rules, BER). Правила є рекурсивними, так що кодування складових об'єктів являє собою складання в ланцюжок закодованих послідовностей складових об'єктів.

Кожне передане значення - як базового, так і похідного типу - складається з трьох полів:

  • ідентифікатор;
  • довжина поля даних (в байтах);
  • поле даних.

На відміну від ASN.1, протокол SNMP вимагає завжди вказувати довжину поля даних, тому прапор кінця поля даних не використовується.

Перше поле складається в дійсності з трьох полів (див. Малюнок 2). Два старших біта ідентифікують тип тега (або, в іншій термінології, класу). Значення поля 00, 01, 10 і 11 відповідають тегами Universal, Application, Context-specific і Private. Наступний біт визначає приналежність змінної до базового або похідного типу даних - 0 для базового, 1 - для похідного. Решта 5 біт можуть використовуватися для кодування значення тега (коду), що не перевищує 30. Якщо значення тега одно 31 або більше, то п'ять молодших біт містять одні одиниці (11111), а реальне значення дається в наступному байті або байтах.


Малюнок 2. Перший байт всякого переданого елемента даних відповідно до синтаксисом ASN.1.

Використовувані правила для кодування значень, великих 30, дозволяють справлятися з довільно великими числами. Кожен наступний байт містить 7 біт даних, а старший біт задається рівним 0 у всіх байтах, за винятком останнього. Таким чином, значення тега до 27-1 можуть бути передані за допомогою двох байт.

Таблиця 1 - Базові типи змінних, допустимі в SNMP Тип змінної Опис Код INTEGER Ціле число довільної довжини 2 BIT STRING Рядок з 0 або більше біт 3 OCTET STRING Рядок з 0 або більше байт 4 NULL Тримач місця 5 OBJECT IDENTIFIER Офіційно певний тип даних 6

Значення третього поля залежить від значення першого поля. Наприклад, базові і прості складові типи даних належать до класу Universal. Кожен базовий тип має свій код, як зазначено в третій колонці в Таблиці 1, SEQUENCE і SEQUENCE OF мають один і той же код 16, а CHOICE не має свого коду, так як реальне значення завжди належить до певного типу. Саме присвоєний код вказується в третьому полі.

Поле довжини даних вказує, скільки байт займають дані. Якщо дані коротше 128 байт, то їх довжина може бути виражена за допомогою одного байта, при цьому значення крайнього лівого біта дорівнюватиме 0. Якщо дані виявляються довше, то перший байт містить 1 в старшому бите і довжину поля довжини даних (до 127 байт) в молодших 7 бітах. Наприклад, якщо довжина даних дорівнює 1000 байт, то перший байт поля довжини даних буде містити 130, т. Е. Він повідомляє приймаючій стороні про те, що за ним слід ще два байта поля довжини даних. Наступні два байта містять дійсне значення довжини даних - 1000, при цьому старший байт йде першим.

Кодування поля даних залежить від конкретного типу даних. Цілі числа кодуються за допомогою додаткового коду. Позитивне ціле число менше 128 кодується за допомогою одного байта і т. Д. Старший значущий байт передається першим.

Рядки біт передаються, як є. Єдина проблема в тому, що поле довжини даних вказує довжину в байтах, а не в бітах. Прийняте рішення полягає у вставці одного байта перед рядком бітів із зазначенням, скільки біт останнього байта не використовуються. Наприклад, рядок "010011111" довжиною 9 біт матиме вигляд 07, 4F, 80 (в шістнадцятковому представленні).

Рядок байт передається справа наліво - спочатку старші, а потім молодші байти. Нульове значення вказується за допомогою завдання поля довжини даних рівним 0. Жодне числове значення реально не передається.

OBJECT IDENTIFIER кодується у вигляді послідовності цілих чисел, з яких він складається. Наприклад, гілка mib-2 має префікс {1 3 6 1 2 1}. Однак, оскільки перше число завжди дорівнює 0, 1 або 2, а друге - менше 40 (як визначено ISO), перші два числа, х і y, кодуються за допомогою одного байта в вигляді 40x + y. Таким чином, для mib-2 перший байт дорівнює 43. Числа більше 127 кодуються за допомогою декількох байт, перший біт числа задається рівним 1, а кількість таких байт - в останніх 7 бітах.

Обидва типи SEQUENCE передаються наступним чином: спочатку тип або тег, потім загальна довжина всіх наступних полів і, нарешті, самі поля по порядку. Кодування значення змінної типу CHOICE проводиться відповідно до реального переданим типом даних.

СТРУКТУРА керуючої інформації

Вище ми коротко розглянули тільки ті частини ASN.1, що використовуються в SNMP. Насправді документи по SNMP організовані іншим чином. Так, в RFC 1442 спочатку говориться, що структури даних в SNMP будуть описуватися за допомогою ASN.1, а потім на більш ніж 50 сторінках перераховуються невикористовувані частини ASN.1 і вводяться нові визначення. Зокрема, RFC тисяча чотиреста сорок дві визначає чотири основних макросу і вісім нових типів даних, які активно використовуються в SNMP. Це свого роду надподмножество ASN.1 відомо під ім'ям структури керуючої інформації (Structure of Management Information, SMI). Воно і застосовується на практиці для визначення структур даних SNMP.

На самому нижньому рівні змінні SNMP визначаються як окремі об'єкти. Взаємопов'язані об'єкти об'єднуються в групи, а групи збираються в модулі. Наприклад, об'єкти IP і об'єкти TCP мають кожен свою групу. Маршрутизатор може підтримувати групу IP, так як він повинен надавати інформацію, наприклад, про втрачені пакетах, але не групу TCP, так як він функціонує на більш низькому рівні. Якщо якийсь пристрій підтримує певну групу, то воно повинно підтримувати і всі об'єкти з цієї групи. Однак підтримка виробником певного модуля не накладає на нього відповідальності за підтримки всіх груп цього модуля, так як не всі вони можуть мати відношення до конкретного пристрою.

Модулі MIB запускаються за допомогою виклику макросу MODULE-IDENTITY. Його параметри повідомляють ім'я та адресу розробника, дані про версію і іншу інформацію. За ним зазвичай слідує виклик макросу OBJECT-TYPE, який повідомляє реальні використовувані змінні і їх властивості.

Таблиця 2 - Використовувані SNMP типи даних Назва Тип Довжина в байтах Опис INTEGER Числовий 4 Ціле число (32 біт в поточній реалізації) Counter32 Числовий 4 беззнакову 32-розрядний лічильник з обнуленням Gauge32 Числовий 4 беззнакову 32-розрядний лічильник без обнулення Integer32 Числовий 4 32 біт навіть на 64-розрядному ЦПУ Uinteger32 Числовий 4 Те ж, що Integer32, але беззнаковий Counter64 Числовий 8 64-розрядний лічильник TimeTicks Числовий 4 Секундомір в сотих частках секунди BIT STRING Строковий 4 Рядок біт довжиною від 1 до 32 біт OCTET STRING Строковий> 0 Рядок байт змінної довжини Opaque Строковий> 0 У таревшій, тільки для зворотної сумісності OBJECT IDENTIFIER Строковий> 0 Послідовність цілих чисел IpAddress Строковий 4 Internet-адреса NsapAddress Строковий Адреса OSI NSAP

Макрос OBJECT-TYPE має чотири обов'язкові і чотири необов'язкові параметри. Перший обов'язковий параметр - SYNTAX - визначає тип змінної відповідно до наведеного в Таблиці 2 списком. Здебільшого ці типи говорять самі за себе. Суфікс 32 використовується, якщо змінна повинна являти собою 32-розрядне число, навіть якщо комп'ютери мають 64-розрядні ЦПУ. Лічильники Gauge відрізняються від Counter тим, що вони не можуть бути обнулені при досягненні максимального значення. MAX-ACCESS містить інформацію про доступ до змінної. Найбільш типові значення - "читання / запис" і "тільки читання". Станція може змінювати значення змінної з ознакою "читання / запис" і читати змінну з ознакою "тільки читання". STATUS має три можливих значення. Мінлива зі статусом CURRENT відповідає поточній специфікації SNMP, змінна зі статусом OBSOLETE не відповідає поточній специфікації, а змінна зі статусом DEPRECATED знаходиться в якомусь проміжному стані. Насправді вона не потрібна в стандарті, але не заборонена, щоб уникнути претензій з боку тих постачальників, хто продовжує використовувати їх в своїх продуктах. Останній обов'язковий параметр - DESCRIPTIONDESCRIPTION - містить опис змінної. Він призначений для людей, а не для комп'ютерів.

СЕТЕВОЙ есперанто

Незважаючи на деяку громіздкість, абстрактне опис синтаксису, а точніше, його конкретна форма, яка використовується в SNMP, дозволяє мережевим пристроям різних виробників представляти і повідомляти керуючу інформацію в стандартному вигляді. Це відкриває перед розробниками можливість створювати всеосяжні платформи управління мережею, так як багато сучасних мережеві пристрої підтримують належні до них бази керуючої інформації, об'єкти яких описуються і передаються відповідно до ASN.1.

Дмитро Ганьжа - відповідальний редактор LAN. З ним можна зв'язатися за адресою: [email protected] .