Обозначение управления кодированием

Нотация управления кодированием (ECN) — это стандартизированный формальный язык, который является частью семейства международных стандартов Abstract Syntax Notation One (ASN.1). [1] ECN предназначен для использования вместе с ASN.1, и каждая спецификация ECN (согласованный набор определений кодирования) явно связана с конкретной спецификацией ASN.1 (согласованный набор определений типов).

Стандарт ECN опубликован как ITU-T , так и ISO и официально называется Рекомендация ITU-T X.692 | ISO/IEC 8825-3, Информационные технологии – Правила кодирования ASN.1: Спецификация нотации управления кодированием (ECN) . [2]

ECN поддерживает формальную спецификацию нестандартных правил кодирования для определений типов ASN.1 и предназначен для использования в тех случаях, когда необходимо использовать кодировки, отличающиеся от тех, которые предусмотрены стандартизированными правилами кодирования, такими как BER или PER.

Использование ECN

Тип ASN.1 имеет набор абстрактных значений. Правила кодирования определяют представление этих абстрактных значений в виде серии битов. Существуют приложения, в которых требуются специальные кодировки, отличные от тех, которые можно получить с помощью любого из стандартных наборов правил кодирования ASN.1.

Вот несколько примеров возможных ситуаций, требующих меньших или больших отклонений от стандартных кодировок:

  • протокол может потребовать чрезвычайно компактных кодировок; даже несмотря на то, что правила невыровненного упакованного кодирования (PER) обычно довольно компактны, в некоторых случаях можно достичь большей компактности, используя статистическое распределение значений определенных полей или удаляя другие формы избыточности;
  • протокол может требовать, чтобы определенные части закодированного сообщения были легкодоступны без необходимости декодировать все сообщение, скажем, с помощью полного декодера PER; в общем случае переход в середину сообщения, закодированного с помощью PER, и начало декодирования с этой точки не является рекомендуемой практикой, но в некоторых случаях это может быть необходимо или полезно; в таких случаях доступ к определенным частям кодировки можно облегчить и сделать надежным, указав измененную версию PER;
  • Существуют некоторые стандартные протоколы, которые кодируют свои данные в формате тег-длина-значение (TLV), похожем на BER; может возникнуть необходимость создать формальную спецификацию ASN.1 для одного из этих протоколов и указать модифицированную версию BER, которая соответствует специальному формату TLV;
  • Существует множество стандартных протоколов, которые кодируют свои данные в специальном двоичном формате (обычно указанном с помощью таблиц), который может существенно отличаться от PER или любого другого набора правил кодирования ASN.1; может возникнуть необходимость создать формальную спецификацию ASN.1 для одного из этих протоколов и указать двоичное кодирование, которое соответствует специальному формату.

В приведенных выше случаях и во многих других подобных случаях совместное использование ASN.1 и ECN позволяет создать полную формальную спецификацию как абстрактного синтаксиса (схемы), так и кодировок. Затем кодировщики и декодеры могут быть автоматически сгенерированы из объединенных спецификаций. Это является существенным фактором в сокращении как объема работы, так и вероятности ошибок при создании совместимых систем. Еще одним существенным преимуществом ECN является возможность предоставления автоматической поддержки инструментов для тестирования. Эти преимущества доступны только с ASN.1, когда достаточно стандартизированных правил кодировки, но ECN обеспечивает эти преимущества в обстоятельствах, когда стандартизированных правил кодировки недостаточно.

Обзор ECN

Концепции

Чтобы понять, как работает ECN, полезно сосредоточиться на четырех типах элементов языка ASN.1: встроенные типы (например, INTEGERи UTF8String), встроенные ключевые слова конструктора (например, SEQUENCE, CHOICE, SEQUENCE OF, OPTIONAL), определяемые пользователем простые типы (например, , ) и определяемые пользователем сложные типы (например, ). Есть и другие аспекты ASN.1, которые также отражены в ECN, но мы не будем обсуждать их здесь.Age ::= INTEGER(0..200)Color ::= ENUMERATED { green, yellow, red }Name ::= SEQUENCE { first UTF8String, middle UTF8String, last UTF8String }

Язык ECN также имеет встроенные типы, встроенные ключевые слова конструктора, определяемые пользователем простые типы и определяемые пользователем сложные типы. Эти элементы языка ECN похожи на элементы ASN.1, но их имена всегда начинаются с # . Официально они называются классами кодирования , но здесь мы будем называть их просто типами ECN и ключевыми словами конструктора ECN . Примерами типов ECN являются: #INTEGER(встроенный), #UTF8String(встроенный), #Age(простой определяемый пользователем), #Name(сложный определяемый пользователем). Примерами ключевых слов конструктора ECN являются: #SEQUENCE, #CHOICE, #SEQUENCE-OF, и #OPTIONAL(все встроенные).

В отличие от ASN.1, ECN позволяет пользователю языка определять синонимы ключевых слов конструктора ECN (например, #InterleavedSequence ::= #SEQUENCE). Таким образом, в ECN существуют как определяемые пользователем ключевые слова конструктора ECN, так и встроенные ключевые слова конструктора ECN.

С точки зрения ECN, каждый пользовательский тип ASN.1, встречающийся в спецификации ASN.1, имеет скрытый тип ECN, неявно связанный с ним. Официально этот скрытый тип ECN называется неявно сгенерированной структурой кодирования , но здесь мы будем называть его просто скрытым типом ECN типа ASN.1. Скрытые типы ECN являются особым видом пользовательских типов ECN (их определение ECN автоматически генерируется из пользовательского типа ASN.1, а не предоставляется пользователем), но они ведут себя как другие пользовательские типы ECN.

Скрытый тип ECN типа ASN.1 почти идентичен исходному типу ASN.1 (но немного упрощен) и является отправной точкой для процесса кодирования, указанного в ECN, который в конечном итоге генерирует ряд битов, представляющих любое заданное значение исходного типа ASN.1. Тип ASN.1 (или любая из его частей) не может быть напрямую указан для указания кодировки в ECN, но его скрытый тип ECN может. Типы ECN и ключевые слова конструктора ECN могут быть явно указаны в спецификации ECN и кодируются путем применения правил, содержащихся в спецификации ECN.

Грубо говоря, спецификация ECN делает две вещи: она говорит, как модифицировать скрытый тип ECN для создания нового ( цветного ; см. ниже) скрытого типа ECN, и она говорит, как тип ECN (а также каждый из его компонентов, если это сложный тип) должен быть закодирован. Последнее может применяться рекурсивно, в том смысле, что шаг кодирования для компонента типа ECN может привести к дальнейшей модификации на месте оставшейся части типа ECN, которая кодируется. Этот процесс может продолжаться любое количество циклов, пока конечный тип ECN не будет полностью закодирован, то есть все биты, представляющие значение исходного типа ASN.1, не будут сгенерированы.

Наконец, мы вводим концепцию объекта кодирования . Это очень важный элемент языка ECN, который относится к каждому отдельному правилу кодирования, которое является частью спецификации ECN и применяется к ключевому слову типа ECN или конструктора ECN, встроенному или определенному пользователем, встречающемуся в спецификации.

Механизмы

Первым шагом процесса кодирования является автоматическая генерация скрытых типов ECN из всех типов ASN.1, представленных в спецификации ASN.1. Скрытые типы ECN, соответствующие сложным пользовательским типам ASN.1, могут быть изменены с помощью механизма, называемого раскрашиванием , который заключается в замене имен типов некоторых их компонентов синонимами. Также возможно заменить встроенные ключевые слова конструктора ECN (например, #SEQUENCE, #OPTIONAL), встречающиеся в скрытом типе ECN, синонимами. В ECN есть несколько встроенных синонимов как для ключевых слов конструктора, так и для встроенных типов (например, #CONCATENATIONявляется синонимом #SEQUENCE, #INTявляется синонимом #INTEGER), но пользователь языка может определить как пользовательские типы, так и пользовательские ключевые слова конструктора как синонимы других. Целью этапа раскрашивания является подготовка скрытого типа ECN для следующего этапа, который представляет собой кодирование его компонентов, в случае, если необходимо закодировать по-другому различные вхождения одного и того же типа ECN или различные вхождения одного и того же ключевого слова конструктора ECN, присутствующего в скрытом типе ECN. Например, сложный скрытый тип ECN может содержать два списка ( #SEQUENCE-OF), но один список должен быть закодирован путем вставки поля счетчика перед первым элементом списка, а другой должен быть закодирован путем вставки завершающего шаблона после последнего элемента списка. Это можно сделать, например, заменив первое #SEQUENCE-OFключевое слово в скрытом типе ECN на , скажем, #CountBasedRepetition, заменив второе #SEQUENCE-OFключевое слово на , скажем, #TerminatingPatternBasedRepetition, и объявив эти два имени как определяемые пользователем синонимы ключевого слова конструктора ECN #SEQUENCE-OF. После того, как эти два разных ключевых слова конструктора были включены в скрытый тип ECN, каждый из двух списков может быть закодирован с помощью другого объекта кодирования.

Вторым шагом процесса кодирования является применение объекта кодирования к скрытому типу ECN. Значение, которое должно быть закодировано, будет одним из возможных значений типа ASN.1, определенных в спецификации ASN.1, и процесс кодирования выберет скрытый тип ECN этого типа ASN.1 и применит к нему соответствующий объект кодирования.

Возможны дальнейшие шаги, состоящие в рекурсивном применении объектов кодирования, которые работают путем замены типа ECN (или его части) другим типом ECN.

В ECN существует несколько видов объектов кодирования. Некоторые объекты кодирования полностью определяют фактическое кодирование на уровне бит простых типов ECN и являются наиболее простыми для понимания. Другие применяются к ключевым словам конструктора ECN, а не к типам ECN, и определяют некоторые структурные аспекты кодирования сложного типа ECN (или его части), созданного ключевым словом конструктора ECN (но не определяют его полную кодировку). Другие работают, заменяя тип ECN (или его часть) другим типом ECN, который затем должен быть закодирован путем применения к нему другого объекта кодирования.

Ниже перечислены наиболее важные виды кодируемых объектов в ECN:

  • некоторые объекты кодирования определяют кодировку типа ECN на уровне битов;
Эти объекты кодирования применяются в основном к простым типам ECN и имеют несколько параметров, определяющих кодирование значения на уровне битов, размер кодирования, любое предшествующее или конечное заполнение, любое выравнивание по границе октета или слова, любые инверсии битов и т. д.
  • некоторые объекты кодирования указывают, что тип ECN должен быть заменен на определенный пользователем тип ECN, который содержит предыдущий тип ECN в качестве одного из своих компонентов;
Тип замены должен быть указан в спецификации ECN, а не в спецификации ASN.1. Пользовательский тип ECN должен иметь имя, начинающееся с #, которое не должно совпадать с именем любого скрытого типа ECN.
  • некоторые объекты кодирования указывают, что тип ECN должен быть заменен на определенный пользователем тип ECN, и указывают, как сопоставить каждое значение первого типа со значением второго типа;
Тип замены должен быть указан в спецификации ECN, а не в спецификации ASN.1. Пользовательский тип ECN должен иметь имя, начинающееся с #, которое не должно совпадать с именем любого скрытого типа ECN.
  • некоторые объекты кодирования указывают, как представлять наличие или отсутствие компонента #SEQUENCEобъявленного типа #OPTIONAL; эти объекты кодирования могут применяться только к типам ECN, которые являются необязательными компонентами типа #SEQUENCE;
Вот несколько типичных способов, которыми эти объекты кодирования могут отображать наличие необязательного компонента:
  1. путем использования поля (обычно логического), значение которого указывает на наличие или отсутствие необязательного компонента и которое было вставлено в тип ECN другим объектом кодирования, примененным на более раннем этапе;
  2. полагаясь на определенную комбинацию битов, которая встречается в определенных точных положениях битов в кодировках всех возможных значений необязательного компонента, но никогда не встречается в кодировках любого из типов, которые могут следовать за необязательным компонентом в соответствии со спецификацией ECN;
  3. полагаясь на размер вложенной кодировки, чтобы определить, поместится ли кодировка необязательного компонента в оставшееся пространство.
  • некоторые объекты кодирования указывают, как представлять количество элементов списка ( #SEQUENCE-OF); эти объекты кодирования могут применяться только к типам ECN, которые являются #SEQUENCE-OFтипами;
Вот несколько типичных способов, которыми эти объекты кодирования могут представлять длину списка:
  1. путем использования поля, содержащего длину списка, и которое было вставлено в тип ECN другим объектом кодирования, примененным на более раннем этапе;
  2. полагаясь на определенную битовую комбинацию, которая встречается в определенных точных положениях бит в кодировках всех возможных значений повторяющегося компонента списка, но никогда не встречается в кодировках любого из типов, которые могут следовать за списком в соответствии со спецификацией ECN;
  3. полагаясь на размер охватывающей кодировки, чтобы определить, сколько экземпляров кодировки повторяющегося компонента поместится в оставшемся пространстве;
  4. путем выбора битовой строки, которая не соответствует кодировке ни одного значения повторяющегося компонента списка, и вставки этой битовой строки после последнего элемента списка;
  5. путем использования поля (обычно логического) внутри повторяющегося компонента, значение которого указывает, является ли данный элемент последним элементом списка.
  • некоторые объекты кодирования определяют, как указать, какая из альтернатив типа #CHOICEприсутствует, и могут применяться только к типам ECN, которые являются #CHOICEтипами;
Вот несколько типичных способов, с помощью которых эти объекты кодирования могут указывать, какая из альтернатив a #CHOICEприсутствует:
  1. путем использования поля, содержащего индекс альтернативы, и который был добавлен к типу ECN другим объектом кодирования, примененным на более раннем этапе;
  2. полагаясь на определенную комбинацию битов, которая встречается в определенных точных положениях битов в кодировках всех возможных значений каждой альтернативы и отличается для каждой альтернативы.
  • некоторые объекты кодирования указывают, что тип ECN должен быть закодирован путем применения к нему стандартного набора правил кодирования (например, PER).

Ссылки

  1. ^ "ITU-T Rec. X.680 / ISO/IEC 8824-1" . Получено 28.08.2008 .
  2. ^ "ITU-T Rec. X.692 / ISO/IEC 8825-3" . Получено 28.08.2008 .
  • Бесплатная публичная загрузка стандарта ECN с веб-сайта МСЭ
Получено с "https://en.wikipedia.org/w/index.php?title=Encoding_Control_Notation&oldid=1271202830"