Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Кодирование управления Notation (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), определяемые пользователем простой типов (например, Age ::= INTEGER(0..200), Color ::= ENUMERATED { green, yellow, red }), а также сложные типы , определяемые пользователем (например, Name ::= SEQUENCE { first UTF8String, middle UTF8String, last UTF8String }). Есть и другие аспекты ASN.1, которые также отражены в ECN, но мы не будем их здесь обсуждать.

В языке 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, который в конечном итоге генерирует серию битов, представляющих любое заданное значение. оригинального типа АСН.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типами;
Вот несколько типичных способов, которыми эти объекты кодирования могут указывать, какая из альтернатив #CHOICEприсутствует:
  1. путем использования поля, содержащего индекс альтернативы, которое было добавлено к типу ECN другим объектом кодирования, примененным на более раннем этапе;
  2. опираясь на конкретный битовый шаблон, который встречается в определенных точных битовых местоположениях в кодировках всех возможных значений каждой альтернативы и отличается для каждой альтернативы.
  • некоторые объекты кодирования указывают, что тип ECN должен быть закодирован путем применения к нему стандартного набора правил кодирования (например, PER).

Ссылки [ править ]

  1. ^ «Рекомендация МСЭ-Т X.680 / ISO / IEC 8824-1» . Проверено 28 августа 2008 .
  2. ^ «Рекомендация МСЭ-Т X.692 / ISO / IEC 8825-3» . Проверено 28 августа 2008 .

Внешние ссылки [ править ]