Abstract Syntax Notation One — ASN. 1 Для
Abstract Syntax Notation One — ASN.1
Для спецификации синтаксиса заголовков блоков данных протоколов высокого уровня и переносимых ими структур данных потребовалась специальная нотация, позволяющая определять синтаксис передаваемых структурных значений и составляющих их типов не зависимо от конкретного способа представления. Такой нотацией, разработанной в рамках OSIE, является "Abstract Syntax Notation One".
Из встроенных типов ASN.1 прежде всего выделяют набор простых типов. К ним относятся: булевский (BOOLEAN), целочисленный (INTEGER), тип "строка битов" (BIT STRING), тип "строка октетов" (OCTET STRING), пустой тип (NULL), перечислимый тип (ENUMERATED), тип "действительное число" (REAL). ENUMERATED Заданное множество выделенных значений REAL Элементы множества действительных чисел
Абстрактный синтаксис ASN.1 представляет собой средство со строгой типизацией, что требует явного описания используемых типов. Пример определения типа: Employed ::= BOOLEAN Подобным же образом определяется тип для целых значений: CheckingAccountBalance ::= INTEGER При определении целочисленных типов можно указывать идентификаторы поименованных значений, а также максимальные и минимальные значения: DayOfTheMonth ::= INTEGER { first(1), last(31) }
Тип BIT STRING следует использовать для представления двоичных данных, формат и длина которых не заданы, при этом длина (в битах) не обязательно кратна восьми. Тип OCTET STRING по своему назначению полностью аналогичен типу BIT STRING, позволяя представлять двоичные данные, причем длина (в битах) кратна восьми. Значения типа REAL включают значения PLUS INFINITY и MINUS INFINITY, вместе с действительными числами, которые могут быть представлены в виде MxBE, где целочисленные M, B, E, соответственно, - мантисса, основание и порядок. B принимает значения 2 или 10, M и E - произвольные целые числа. Тип ENUMERATED используется для определения типа с тремя или более выделенными значениями. MaritalStatus ::= ENUMERATED { single(0), married(1), widowed(2) }
Каждый тип, используемый в ASN.1, содержит специальный признак, называемый тегом. Тег определяется либо самим стандартом, либо пользователем. Тегированием называется замена существующего (возможно, заданного по умолчанию) тега некоторого типа новым тегом. Тег вводится главным образом для машинного использования (при кодировании), чем для человека. Один и тот же тег может назначаться различным типам. В этом случае теги будут трактоваться в соответствии с текущим контекстом. В то же время для обозначения одного и того же типа можно использовать различные теги. При всех способах кодирования обеспечивается отличие значений нового типа от значений исходного типа, тем самым при декодировании обеспечивается возможность однозначного восстановления информации о типах переданных значений.
Тег состоит из идентификатора класса и неотрицательного целого, различающего теги внутри класса. Четыре класса тегов: UNIVERSAL - используется только для данных, представленных в соответствии с правилами ASN.1 и назначается либо одному из типов, либо одному из способов формирования сложных типов. APPLICATION - применяется для определения типов, построенных по правилам других стандартов. PRIVATE - используется для обозначения типов, не входящих ни в один из стандартов. Существует класс контекстно-зависимых тегов, служащий для интерпретации типов в зависимости от контекста.
Используя базовые типы и применяя небольшой набор способов построения, можно получать сложные типы. Способы можно применять в любой последовательности, повторно, многократно. Получаемые в результате типы называют структурированными. В ASN.1 определяется шесть способов структурирования: "последовательность" (SEQUENCE), "последовательность из" (SEQUENCE OF), "множество" (SET), "множество из" (SET OF), выборочный тип (CHOICE), селективный тип.
Тип "последовательность" - это структурированный тип, определяемый ссылкой на фиксированный, упорядоченный список типов; каждое значение нового типа является упорядоченной последовательностью значений типов-компонентов, по одному на каждого из них. Credentials ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER } Любой тип-компонент может быть помечен как `OPTIONAL` или `DEFAULT_Значение`.
Тип "последовательность из" - это структурированный тип, определяемый ссылкой на один из существующих типов; каждое значение нового типа является упорядоченной последовательностью произвольной длины из значений существующего типа. NamesOfMemberNations ::= SEQUENCE OF VisibleString
Тип "множество" - это структурированный тип, определяемый ссылкой на фиксированный неупорядоченный список типов; каждое значение нового типа является неупорядоченным списком значений типов-компонентов, по одному на каждого из них. UserName ::= SET { personalName [0] IMPLICIT VisibleString, organizationName [1] IMPLICIT VisibleString, countryName [2] IMPLICIT VisibleString } Все типы-компоненты должны иметь различные теги. В данном примере исходные типы для типов-компонентов одинаковы, поэтому применено явное тегирование посредством контекстно-зависимых тегов. IMPLICIT означает, что при кодировании теги исходных типов VisibleString передаваться не будут (т.к. все равно различить элементы UserName можно будет только по заданным явно тегам).
Тип "множество из" - это структурированный тип, определяемый ссылкой на единственный существующий тип; каждое значение нового типа является неупорядоченным списком из значений существующего типа. Keywords ::= SET OF VisibleString
Выборочный тип - это структурированный тип, определяемый указанием фиксированного неупорядоченного списка различных типов; каждое значение нового типа является значением одного из типов-компонентов. FileIndentifier ::= CHOICE { relativeName [0] IMPLICIT VisibleString, --имя файла (например, MarchProgressReport) absoluteName [1] IMPLICIT VisibleString, --имя файла и содержащий это имя каталог, --например, Williams/MarchProgressReport serialNumber [2] IMPLICIT INTEGER --идентификатор, присвоенный файлу системой }
Селективный тип - это структурированный тип, определяемый указанием одного из типов-компонентов выборочного типа. FileAttribute ::= CHOICE { date-last-used INTEGER, file-name VisibleString } CurrentAttributes ::= SEQUENCE { date-last-used file-name } Здесь применен селективный тип при определении типов-компонентов типа CurrentAttributes. Возможное значение CurrentAttributes: { date-last-used 27, file-name "PROGRAM" }
Подтипом называется тип, значения которого задаются как подмножество значений другого типа (порождающего). В ASN.1 определяется целый ряд методов задания подтипа: a) одно значение; b) вложенный подтип; c) диапазон значений; d) ограничение размера; e) ограничение алфавита; f) внутренний подтип. Обозначение для подтипа имеет следующий вид: Подтип::= ПорождающийТип СпецификацияПодтипа | SET ОграничениеРазмера OF Тип | SEQUENCE ОграничениеРазмера OF Тип
В ASN.1 предусмотрен способ, с помощью которого пользователь может определить новую систему обозначений, посредством которой он может строить те же типы данных, что и в ASN.1, ссылаться на них, а также задавать значения этих типов. Предположим, что желательно иметь обозначение для определения типа следующего вида: PAIR TYPEX=.... TYPEY=...., допускающие запись соответствующего значения в виде (X=----, Y=----), где `....` и `----` означают соответственно любой тип ASN.1 и соответствующее значение. T1 ::= PAIR TYPEX=INTEGER TYPEY=BOOLEAN T2 ::= PAIR TYPEX=VisibleString TYPEY=T1 Тогда значение типа T2 может иметь вид: (X="Name", Y=(X=4, Y=FALSE))
Для структуризации описаний ASN.1, относящихся к одной предметной области, вводятся модули. Имена модулей должны быть уникальными. Для международных стандартов рекомендуется использовать имена модулей в следующем виде: ISOxxxx-yyyy, где xxxx - номер международного стандарта, а yyyy - некоторое сокращение, используемое для этого стандарта. ISO8571-FTAM DEFINITION ::= BEGIN EXPORTS PDU ... PDU ::= CHOICE { InitializePDU, FilePDU, BulcdataPDU } ... END
15_abstract_syntax_notation_one_-_asn.1_2.ppt
- Количество слайдов: 17