Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сетевые протоколы в инфокоммуникациях (ПЗ).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.51 Mб
Скачать

5.6.2.2. Структурированный тип

Комбинируя простой и структурированный типы данных, мы можем создать новые структурированные типы данных. SMI определяет два вида структурированных типов данных: sequence (последовательности) и sequence of (последовательности из).

  • Sequence (последовательность). Тип данных sequence (последовательности) – это комбинация простых типов данных, не обязательно одного типа. Это аналог понятий struct (структура) или record (комбинированный), используемых в языках программирования, таких как C.

  • Sequence of (последовательность из). Тип данных sequence of (последовательность из) — комбинация из простых типов данных одного типа или комбинации последовательного типа данных одного типа. Это аналог понятия массив, используемого в языках программирования, таких как C.

Рисунок 5.5. показывает концептуальный обзор типов данных.

Рис. 5.5. Концептуальные типы данных

5.7. Метод кодирования

SMI использует другой стандарт, основные правила кодирования (BER — Basic Encoding Rules), чтобы кодировать данные, которые будут переданы по сети. BER определяет, что каждая часть данных кодируется в формате тройки: тег, длина и значение, как проиллюстрировано на рисунке 5.6.

Рис. 5.6. Формат длины

Тег. Тег – однобайтовое поле, которое определяет тип данных. Оно составлено из трех подполей: класс (2 бита), формат (1 бит), и номер (5 битов). Подполе класса определяет область действия данных. Определены четыре класса: универсальный (00), прикладной (01), контекстно-определенный (10) и частный (11). Универсальные типы данных взяты из ASN.1 (INTEGER, OCTET STRING и ObjectIdentifeir). Прикладные типы данных — те, которые добавлены SMI (IPAddress, Counter, Gauge и TimeTicks). Пять контекстно-определенных типов данных имеют значения, которые могут измениться от одного протокола к другому. Частные типы данных определяются поставщиком.

Подполе "Формат" указывает, являются ли данные простыми (0) или структурированными (1). Далее подполе "номера" делит простые или структурированные данные на подгруппы. Например, в универсальном классе, с простым форматом, INETGER имеет значение 2, OCTET STRING имеет значение 4, и так далее. Таблица 5.2. показывает типы данных, которые мы используем в этой лекции, и их теги в двоичных и шестнадцатеричных числах.

  • Тип данных

  • Класс

  • Формат

  • Номер

  • Тег (двоичный)

  • Тег (шестнад.)

  • INTEGER (Целый)

  • 00

  • 0

  • 00010

  • 00000010

  • 02

  • OCTET STRING (октет последовательностей)

  • 00

  • 0

  • 00100

  • 00000100

  • 04

  • OBJECT IDENTIFIER (ИДЕНТИФИКАТОР ОБЪЕКТА)

  • 00

  • 0

  • 00110

  • 00000110

  • 06

  • NULL (ПУСТОЙ УКАЗАТЕЛЬ)

  • 00

  • 0

  • 00101

  • 00000101

  • 05

  • Последовательность, последовательность из

  • 00

  • 1

  • 10000

  • 00110000

  • 30

  • IPAddress (IP-адрес)

  • 01

  • 0

  • 00000

  • 01000000

  • 40

  • Counter (Счетчик)

  • 01

  • 0

  • 00001

  • 01000001

  • 41

  • Gauge (Шаблон)

  • 01

  • 0

  • 00010

  • 01000010

  • 42

  • TimeTicks (Сигналы времени)

  • 01

  • 0

  • 00011

  • 01000011

  • 43

Длина. Поле длины – один или более байт. Если поле длины один байт, старший знаковый бит должен быть равен нулю. Другие 7 бит определяют данные. Если поле длины больше чем 1 байт, старший знаковый первого байта должен быть равным единице. Другие 7 бит первого байта определяет число байт, нужных для определения длины. Формат отображения поля длины ( Рис 5.7.):

  • Рис. 5.7. Формат длины

Значение. Поле кодирует значение данных в соответствии с правилами, определенными в правилах кодирования (например, ANSI).

Для того чтобы показать, как эти три поля — тег, длина и значение – могут определить объект, мы приведем несколько примеров.

Пример 1

Рисунок 5.8. показывает, как определяется INTEGER 14:

Рис. 5.8. Пример 1 INTEGER 14

Пример 2

Рисунок 5.9. показывает, как определяется OCTET STRING "H1":

Рис. 5.9. Пример 2 OCTET STRING "H1"

Пример 3

Рисунок 5.10. показывает, как определяется OBJECT Identifier 1.3.6.1 (iso.dod.internet):

Рис. 5.10. Пример 3 ObjectIdentifier 1.3.6.1

Пример 4

Рисунок 5.11. показывает, как определить IPAddress 131.21.14.8:

Рис. 5.11. Пример 4 IPAdress 131.21.14.8

trans и snmp. Эти группы в адресе находятся после обозначения объекта MIB2 в дереве объектов идентификации ( Рисунок 5.12.).

Рис. 5.12. MIB-2

5.7.1. Организация доступа MIB-переменных

Чтобы показать доступность различных переменных, мы используем как пример udp-группы. Имеются четыре простых переменных в группах и одна последовательность записей (таблица). Рисунок 5.13. показывает переменные и таблицу.

Рис. 5.13. udp-группа

Мы покажем, как иметь доступ к каждому объекту.

5.7.1.1. Простая переменная

Чтобы организовать доступ любой простой переменной, мы используем групповой id ( 1.3.6.1.2.1.7 ), сопровождаемый id переменной. Ниже показано, как организовать доступ к каждой переменной:

Однако эти объекты-идентификаторы определяют переменные, но не представителя (содержимое). Чтобы описать представителя или содержимое каждой переменной, мы должны добавить суффикс экземпляра. Суффикс экземпляра для простой переменной – это просто ноль. Другими словами, чтобы показать экземпляр переменной, мы используем нижеследующее: