ASN.1
![]() | этой статьи Использование внешних ссылок может не следовать политике или руководящих принципам Википедии . ( Июль 2024 г. ) |
Абстрактный синтаксический нотация один | |
Статус | Действующий; Supersedes X.208 и X.209 (1988) |
---|---|
Год начался | 1984 |
Последняя версия | (02/21) Февраль 2021 г. |
Организация | Это-т |
Комитет | Учебная группа 17 |
Базовые стандарты | ASN.1 |
Связанные стандарты | X.208 , X.209 , X.409 , X.509 , X.680 , X.681 , X.682 , X.683 |
Домен | Криптография , телекоммуникации |
Веб -сайт | https://www.itu.int/rec/T-REC-X.680/ |
Абстрактная синтаксическая нотация One ( ASN.1 ) является стандартным языком описания интерфейса (IDL) для определения структур данных , которые могут быть сериализованы и десериализованы кроссплатформенным способом. Он широко используется в телекоммуникациях и компьютерных сетях , и особенно в криптографии . [ 1 ]
Разработчики протокола определяют структуры данных в модулях ASN.1, которые, как правило, являются разделом более широкого документа стандартов, написанного на языке ASN.1. Преимущество заключается в том, что описание кодирования данных ASN.1 не зависит от конкретного компьютера или языка программирования. Поскольку ASN.1 является как читаемым человеком , так и читаемой на человеке , компилятор ASN.1 может компилировать модули в библиотеки кода, кодеков , которые декодируют или кодируют структуры данных. Некоторые компиляторы ASN.1 могут создавать код для кодирования или декодирования нескольких кодировки, например, упаковка, BER или XML .
ASN.1 является совместным стандартом Международного сектора стандартизации по телекоммуникационным союзу телекоммуникаций (ITU-T) в исследовательской группе 17 ITU-T и Международной организации по стандартизации / Международной электротехнической комиссии (ISO / IEC), первоначально определенной в 1984 году как часть CCITT X.409 : 1984. [ 2 ] В 1988 году ASN.1 перешла к своему собственному стандарту X.208 из -за широкой применимости. Значительно пересмотренная версия 1995 года покрывается серией X.680 . [ 3 ] Последним пересмотром рекомендаций серии X.680 является издание 6.0, опубликованное в 2021 году. [ 4 ]
Языковая поддержка
[ редактировать ]ASN.1 - это обозначение объявления типа данных. Это не определяет, как манипулировать переменной такого типа. Манипуляция с переменными определяется на других языках, таких как SDL (спецификация и описание языка) для исполняемого моделирования или TTCN-3 (тестирование и нотация контроля тестирования) для тестирования соответствия. Оба эти языка изначально подтверждают объявления ASN.1. Можно импортировать модуль ASN.1 и объявить переменную любого из типов ASN.1, объявленных в модуле.
Приложения
[ редактировать ]ASN.1 используется для определения большого количества протоколов. Его наиболее обширное использование продолжает быть телекоммуникациями, криптографией и биометрией.
Протокол | Спецификация | Указанные или обычные правила кодирования | Использование |
---|---|---|---|
Протокол вмешательства | Спецификация ILPV4 | Правила кодирования октета | |
NTCIP 1103 - Протоколы управления транспортом | NTCIP 1103 | Правила кодирования октета | Трафик, транспорт и управление инфраструктурой |
X.500 Службы каталогов | Серия рекомендаций ITU X.500 | Основные правила кодирования, выдающиеся правила кодирования | Сертификаты LDAP, TLS ( X.509 ), аутентификация |
Протокол доступа к легким каталогам (LDAP) | RFC 4511 | Основные правила кодирования | |
Криптография PKCS | PKCS Криптография | Основные правила кодирования и выдающиеся правила кодирования | Асимметричные ключи, пакеты сертификатов |
X.400 Обработка сообщений | Серия рекомендаций ITU X.400 | Ранний конкурент по электронной почте | |
Эмв | EMVCO Publications | Платежные карты | |
T.120 Мультимедийные конференции | Серия рекомендаций ITU T.120 | Основные правила кодирования, упакованные правила кодирования | Microsoft Протокол удаленного рабочего стола (RDP) |
Простой протокол управления сетью (SNMP) | RFC 1157 | Основные правила кодирования | Управление и мониторинг сетей и компьютеров, особенно характеристики, относящиеся к производительности и надежности |
Информационный протокол общего управления (CMIP) | Рекомендация ITU X.711 | Конкурент SNMP, но более способный и не такой популярный | |
Система сигнализации № 7 (SS7) | Серия рекомендаций ITU Q.700 | Управление телефонными соединениями через общедоступную телефонную сеть (PSTN) | |
Это мультимедийные протоколы серии H | Серия рекомендаций ITU H.200, H.300 и H.400 | Голос над интернет -протоколом (VoIP) | |
биоапи (BIP) Протокол взаимодействия | ISO/IEC 24708: 2008 | ||
Общие биометрические форматы обмена (CBEFF) | NISTN IR 6529-A | Основные правила кодирования | |
Контексты аутентификации для биометрии (Acbio) | ISO/IEC 24761: 2019 | ||
Компьютерные телекоммуникационные приложения (CSTA) | [1] | Основные правила кодирования | |
Выделенная коммуникация с краткосрочной перспективой (DSRC) | SAE J2735 | Упакованные правила кодирования | Общение транспортного средства |
IEEE 802.11p (IEEE WAVE) | IEEE 1609.2 | Общение транспортного средства | |
Интеллектуальные транспортные системы (ETSI ITS) | Найдите EN 302 637 2 (CAM) Найдите EN 302 637 3 (DENM) |
Неоплачиваемые правила упакованного кодирования | Общение транспортного средства |
Глобальная система мобильной связи (GSM) | [2] | 2G сообщества мобильных телефонов | |
Общий пакетный радио служба (GPRS) / повышенные скорости передачи данных для GSM Evolution (Edge) | [3] | 2,5 г связи с мобильными телефонами | |
Универсальная мобильная телекоммуникационная система (UMTS) | [4] | 3G -мобильные связи | |
Долгосрочная эволюция (LTE) | [5] | 4G сообщества мобильных телефонов | |
5G | [6] | 5G Communications Mobile Phone | |
Протокол общего оповещения (CAP) | [7] | Правила кодирования XML | Обмен информацией о предупреждении, такую как янтарные оповещения |
Связь передачи данных контроллера - пилот (CPDLC) | Авиационная коммуникация | ||
Услуги расширения космической ссылки (SLE) | Космические системы коммуникации | ||
Спецификация производственных сообщений (MMS) | ISO 9506-1: 2003 | Производство | |
Передача файлов, доступ и управление (FTAM) | Ранний и более способный конкурент для протокола передачи файлов, но его редко используется. | ||
Протокол элемента удаленного операционного сервиса (роза) | Рекомендации ITU X.880, X.881 и X.882 | Ранняя форма удаленной процедуры вызов | |
Элемент службы управления ассоциацией (ACSE) | Рекомендация ITU X.227 | ||
Протокол сетей автоматизации и управления зданиями (BACNET) | Ашра 135-2020 | Правила кодирования Bacnet | Автоматизация и управление зданиями, например, с пожарной сигнализацией, лифтами, систем HVAC и т. Д. |
Kerberos | RFC 4120 | Основные правила кодирования | Безопасная аутентификация |
Wimax 2 | Широкие сети | ||
Интеллектуальная сеть | Серия рекомендаций ITU Q.1200 | Телекоммуникации и компьютерные сети | |
X2ap | Базовые выровненные правила упакованного кодирования | ||
Законное перехват (LI) интерфейс передачи передач | Etsi TS 102 232-1 | Законное перехват |
Кодировки
[ редактировать ]ASN.1 тесно связан с набором правил кодирования, в которых указывается, как представлять структуру данных как серию байтов. Стандартные правила кодирования ASN.1 включают в себя:
Правила кодирования
|
Идентификатор объекта | Значение дескриптора объекта | Спецификация
|
Единица сериализации
|
Кодированные элементы
различимый без предвидение спецификация |
Октет выровнен
|
Кодирование управления
Определены правила обозначения |
Описание | |
---|---|---|---|---|---|---|---|---|---|
Усеянный | Является | ||||||||
2.1.1 | /ASN.1/Basic-Encoding | Основное кодирование одного типа ASN.1 | Это X.690 | Октет | Да | Да | Нет | Первые указанные правила кодирования. Кодирует элементы в виде последовательностей значения длина тега (TLV). Обычно предоставляет несколько вариантов относительно того, как должны быть закодированы значения данных. Это одно из самых гибких правил кодирования. | |
2.1.2.1 | /ASN.1/BER‑Derived/ |
Выдающееся кодирование одного типа ASN.1 | Это X.690 | Октет | Да | Да | Нет | Ограниченное подмножество основных правил кодирования (BER). Обычно используется для вещей, которые связаны с цифровой подписью, потому что, поскольку DER разрешает меньше вариантов кодирования, и потому что кодируемые DER значения с большей вероятностью будут повторно кодированы на одних и тех же байтах, цифровые подписи, создаваемые данным абстрактным значением, будут Будьте одинаковы в разных реализациях, и цифровые подписи, произведенные по кодируемым DER данных, будут менее подвержены атакам, основанным на столкновении. | |
2.1.2.0 | /ASN.1/ |
Каноническое кодирование одного типа ASN.1 | Это X.690 | Октет | Да | Да | Нет | Ограниченное подмножество основных правил кодирования (BER). Использует почти все те же ограничения, что и выдающиеся правила кодирования (DER), но примечательное отличие состоит в том, что CER указывает, что многие большие значения (особенно строки) должны быть «разбиты» в отдельные элементы подстроения в 1000-байтовых или 1000-характер (в зависимости от типа данных). | |
2.1.3.0.0 | /ASN.1/ |
Упакованное кодирование одного типа ASN.1 (базовый выровнен) | Что X.691 | Кусочек | Нет | Да | Нет | Кодирует значения на битах, но если кодируемые биты не имеют равномерного делителя на восьми, добавляются биты задорки до тех пор, пока не кодирует интегральное количество октетов. Способный производить очень компактные кодирования, но за счет сложности, и PER сильно зависит от ограничений, наложенных на типы данных. | |
2.1.3.0.1 | /ASN.1/ |
Упакованное кодирование одного типа ASN.1 (базовый невыполненный) | Что X.691 | Кусочек | Нет | Нет | Нет | Вариант выравниваемых базовых правил упакованного кодирования (PER), но он не закладывает значения данных с битами для создания целого числа октетов. | |
2.1.3.1.0 | /ASN.1/ |
Упакованное кодирование одного типа ASN.1 (Canonical выровнен) | Что X.691 | Кусочек | Нет | Да | Нет | Вариант упакованных правил кодирования (PER), который указывает один способ кодирования значений. Правила канонического упакованного кодирования имеют аналогичное отношение к правилам упакованного кодирования, которые имеют выдающиеся правила кодирования (DER) и правила канонического кодирования (CER) для основных правил кодирования (BER). | |
2.1.3.1.1 | /ASN.1/ |
Упакованное кодирование одного типа ASN.1 (каноническая невыполненная) | Что X.691 | Кусочек | Нет | Нет | Нет | Вариант выровненных канонических правил упакованного кодирования (CPER), но он не закладывает значения данных с битами для создания неотъемлемого числа октетов. | |
2.1.5.0 | /ASN.1/XML‑Encoding/ |
Основное XML -кодирование одного типа ASN.1 | Что X.693 | Характер | Да | Да | Да | Кодирует данные ASN.1 как XML. | |
2.1.5.1 | /ASN.1/XML‑Encoding/ |
Каноническое XML -кодирование одного типа ASN.1 | Что X.693 | Характер | Да | Да | Да | ||
2.1.5.2 | /ASN.1/XML‑Encoding/ |
Расширенное кодирование XML одного типа ASN.1 | Что X.693 | Характер | Да | Да | Да | ||
2.1.6.0 | Основное кодирование OER одного типа ASN.1 | Что X.696 | Октет | Нет | Да | Набор правил кодирования, которые кодируют значения на окте, но не кодируют теги или детерминанты длины, такие как основные правила кодирования (BER). Значения данных, кодируемые с использованием правил кодирования октета, часто выглядят как те, которые встречаются в протоколах «на основе записей». Правила кодирования октета (OER) были разработаны для того, чтобы быть простым в реализации и для создания кодировки более компактных, чем те, которые создаются основными правилами кодирования (BER). В дополнение к сокращению усилий по разработке кодеров/декодеров, использование OER может уменьшить использование полосы пропускания (хотя и не так много, как правила упакованного кодирования), сохранить циклы ЦП и более низкую задержку кодирования/декодирования. | |||
2.1.6.1 | Каноническое кодирование OER одного типа ASN.1 | Что X.696 | Октет | Нет | Да | ||||
Что X.697 | Характер | Да | Да | Да | Кодирует данные ASN.1 как JSON. | ||||
1.2.36. |
Общие правила кодирования строки (GSER) | RFC 3641 | Характер | Да | Нет | Неполная спецификация для правил кодирования, которые производят читаемые на человеку значения. Цель GSER - представлять кодированные данные пользователю или входные данные от пользователя в очень простом формате. GSER был первоначально разработан для легкого протокола доступа к каталогам (LDAP) и редко используется вне его. Использование GSER в фактических протоколах не рекомендуется, поскольку не все кодировки строк символов, поддерживаемые ASN.1, могут быть воспроизведены в нем. | |||
Бакет
Правила кодирования |
Ашра 135 | Октет | Да | Да | Да | Кодирует элементы в виде последовательностей значения до длина тега (TLV), таких как основные правила кодирования (BER). | |||
Сигнализация специфичная
Правила кодирования (БЫТЬ) |
Внутренний документ France Telecom R & D | Октет | Да | Да | Используется в основном в протоколах, связанных с телекоммуникациями, такими как GSM и SS7. Разработан для получения идентичного кодирования от ASN.1, который ранее существующие протоколы, не указанные в ASN.1, будут производить. | ||||
Легкий вес
Правила кодирования (Lwer) |
Внутренний документ INRIA. | Слово памяти | Да | Происходит из внутреннего документа, создаваемого Inria , детализирующей «синтаксис легкого веса плоского дерева» (FTLWS). Заброшены в 1997 году из -за превосходной производительности переполненных правил кодирования (PER). Необязательно большие или маленькие трансмиссии, а также 8-битные, 16-битные и 32-битные слова памяти. (Следовательно, есть шесть вариантов, поскольку существует шесть комбинаций этих вариантов.) | |||||
Минимальный бит
Правила кодирования (Mber) |
Кусочек | Предложено в 1980 -х годах. Предназначен для того, чтобы быть максимально компактным, например, правила упакованного кодирования (PER). | |||||||
Нема упакована
Правила кодирования |
Кусочек | Неполная спецификация правила кодирования, создаваемая NEMA. Это неполно, потому что он не может кодировать и декодировать все типы данных ASN.1. Компактный, как правила упакованного кодирования (PER). | |||||||
Высокоскоростной
Правила кодирования |
«Правила кодирования для высокоскоростных сетей» | Определение этих правил кодирования было побочным продуктом работы INRIA над синтаксисом легкого веса плоского дерева (FTLWS). |
Кодирование управления нотацией
[ редактировать ]Рекомендации ASN.1 предоставляют ряд предопределенных правил кодирования. Если ни одно из существующих правил кодирования не подходит, нотация управления кодированием (ECN) предоставляет пользователю возможность определить свои собственные правила кодирования.
Отношение к кодированию почты (PEM)
[ редактировать ]Кодирование почтовой (PEM) с усиленной конфиденциальностью (PEM) полностью не связано с ASN.1, и его кодеки, но кодируемые данные ASN.1, которые часто являются бинарными, часто кодируют PEM, чтобы их можно было передавать в виде текстовых данных, например, на реле SMTP. , или через буферы копирования/вставки.
Пример
[ редактировать ]Это пример модуля ASN.1, определяющий сообщения (структуры данных) фиктивного протокола Foo :
FooProtocol DEFINITIONS ::= BEGIN
FooQuestion ::= SEQUENCE {
trackingNumber INTEGER,
question IA5String
}
FooAnswer ::= SEQUENCE {
questionNumber INTEGER,
answer BOOLEAN
}
END
Это может быть спецификация, опубликованная создателями Foo Protocol. Разговорные потоки, обмену транзакции и состояния не определены в ASN.1, а оставлены на другие обозначения и текстовое описание протокола.
Предполагая сообщение, которое соответствует протоколу FOO и будет отправлено принимающей стороне, это конкретное сообщение ( блок данных протокола (PDU)):
myQuestion FooQuestion ::= {
trackingNumber 5,
question "Anybody there?"
}
ASN.1 поддерживает ограничения на значения и размеры, а также расширяемость. Вышеуказанная спецификация может быть изменена на
FooProtocol DEFINITIONS ::= BEGIN
FooQuestion ::= SEQUENCE {
trackingNumber INTEGER(0..199),
question IA5String
}
FooAnswer ::= SEQUENCE {
questionNumber INTEGER(10..20),
answer BOOLEAN
}
FooHistory ::= SEQUENCE {
questions SEQUENCE(SIZE(0..10)) OF FooQuestion,
answers SEQUENCE(SIZE(1..10)) OF FooAnswer,
anArray SEQUENCE(SIZE(100)) OF INTEGER(0..1000),
...
}
END
Это изменение ограничивает отслеживание, чтобы иметь значение от 0 до 199, а инклюзивные и вопросники имеют значение от 10 до 20 инклюзивных. Размер массива вопросов может составлять от 0 до 10 элементов, причем ответы массивы от 1 до 10 элементов. Поле Anarray представляет собой массив целых чисел с фиксированной длиной 100 целых числа, которые должны быть в диапазоне от 0 до 1000. Маркер расширяемости «...» означает, что спецификация сообщения Foohistory может иметь дополнительные поля в будущих версиях спецификации; Системы, соответствующие одной версии, должны иметь возможность принимать и передавать транзакции из более поздней версии, хотя они могут обрабатывать только поля, указанные в предыдущей версии. Хорошие компиляторы ASN.1 будут генерировать исходный код (в C, C ++, Java и т. Д.), который автоматически проверяет, что транзакции попадают в эти ограничения. Транзакции, которые нарушают ограничения, не должны быть приняты или представлены или представлены заявлению. Управление ограничениями в этом уровне значительно упрощает спецификацию протокола, поскольку приложения будут защищены от нарушений ограничений, снижения риска и затрат.
Чтобы отправить сообщение MyQuestion через сеть, сообщение сериализуется (кодируется) в качестве ряда байтов, использующих одно из правил кодирования . Спецификация протокола Foo должна явно называть один набор правил кодирования, чтобы пользователи протокола Foo знали, какой из них они должны использовать и ожидать.
Пример, закодированный в der
[ редактировать ]Ниже приведена структура данных, показанная выше, как Myquestion, кодируемое в формате Der (все числа находятся в шестнадцатеричной):
30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
DER - это кодирование типа - длиной - поэтому приведенная выше последовательность может быть интерпретирована со ссылкой на стандартную последовательность, целое число и IA5String, следующим образом:
30 — type tag indicating SEQUENCE 13 — length in octets of value that follows 02 — type tag indicating INTEGER 01 — length in octets of value that follows 05 — value (5) 16 — type tag indicating IA5String (IA5 means the full 7-bit ISO 646 set, including variants, but is generally US-ASCII) 0e — length in octets of value that follows 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f — value ("Anybody there?")
Пример, закодированный в Xer
[ редактировать ]В качестве альтернативы можно кодировать ту же структуру данных ASN.1 с правилами кодирования XML (XER) для достижения большей читаемости человека «по проволоке». Затем он появится в следующих 108 октетах (количество пространств включает в себя пространства, используемые для вдавления):
<FooQuestion>
<trackingNumber>5</trackingNumber>
<question>Anybody there?</question>
</FooQuestion>
Пример, закодированный в первом
[ редактировать ]В качестве альтернативы, если используются правила упакованного кодирования , следующие 122 бита (16 октетов составляют 128 бит, но здесь будут произведены только 122 бита, а последние 6 бит просто прописываются):
01 05 0e 83 bb ce 2d f9 3c a0 e9 a3 2f 2c af c0
В этом формате теги типа для требуемых элементов не кодируются, поэтому их нельзя проанализировать, не зная ожидаемых схем, используемых для кодирования. Кроме того, байты для значения IA5String упакованы с использованием 7-битных единиц вместо 8-битных единиц, поскольку кодер знает, что кодирование значения байта IA5String требует всего 7 бит. Однако байты длины все еще кодируются здесь, даже для первого целочисленного тега 01 (но для каждого упаковка может также опустить его, если он знает, что допустимый диапазон значений подходит на 8 бит, и он может даже уплотнять байт единого значения 05 с меньшим количеством чем 8 бит, если он знает, что разрешенные значения могут соответствовать только в меньшем диапазоне).
Последние 6 бит в кодированных за один из них наполнены нулевыми битами в 6 наименее значимых битах последнего байта C0: эти дополнительные биты не могут быть переданы или использованы для кодирования чего -то еще, если эта последовательность вставлена как часть более длительного неровности На последовательность.
Это означает, что невыполненные данные по сути являются упорядоченным потоком битов, а не упорядоченным потоком байтов, как с выровненными за каждого, и что это будет немного сложнее декодировать программным обеспечением на обычных процессорах, потому что это потребует дополнительного контекстуального бита. Сдвиг и маскировка, а не прямое адресация байтов (но то же самое замечание было бы верно для современных процессоров и единиц памяти/хранения, минимально адресуемое блок которого превышает 1 октет). Однако современные процессоры и сигнальные процессоры включают аппаратную поддержку для быстрого внутреннего декодирования битовых потоков с автоматической обработкой вычислительных единиц, которые пересекают границы адресуемых единиц хранения (это необходимо для эффективной обработки в кодеках данных для сжатия/декомпрессии или с некоторым шифрованием/ Алгоритмы дешифрования).
Если потребуется выравнивание на границах октета, выравнивается на энкодер:
01 05 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
(В этом случае каждый октет прокладывается индивидуально с нулевыми битами на их неиспользованных наиболее значительных битах).
Инструменты
[ редактировать ]Большинство инструментов, поддерживающих ASN.1, выполняют следующее:
- анализировать файлы ASN.1,
- генерирует эквивалентное объявление на языке программирования (например, C или C ++),
- генерирует функции кодирования и декодирования на основе предыдущих объявлений.
Список инструментов, поддерживающих ASN.1, можно найти на веб-странице инструмента ITU-T .
Онлайн -инструменты
[ редактировать ]- ASN1 Play
- Веб -инструмент ASN1 (очень ограниченный)
- Игровая площадка ASN1 (песочница)
- ASN.1 JavaScript Декодер
Сравнение с аналогичными схемами
[ редактировать ]ASN.1 аналогичен по назначению и используется с буферами протокола Google и Apache Thrift , которые также являются языками описания интерфейса для кроссплатформенной сериализации данных. Как и эти языки, у него есть схема (в ASN.1, называемой «модуль») и набор кодировки, обычно кодировки типа - длины - В отличие от них, ASN.1 не обеспечивает единую и легко полезную реализацию с открытым исходным кодом и публикуется в качестве спецификации, которая будет реализована сторонним поставщиком. Однако ASN.1, определенная в 1984 году, предшествует их много лет. Он также включает в себя более широкий спектр основных типов данных, некоторые из которых устарели и имеют больше вариантов для расширяемости. Одно сообщение ASN.1 может включать данные из нескольких модулей, определенных в нескольких стандартах, даже стандарты определяют годы.
ASN.1 также включает в себя встроенную поддержку ограничений на значения и размеры. Например, модуль может указать целочисленное поле, которое должно быть в диапазоне от 0 до 100. Длина последовательности значений (массив) также может быть указана как в виде фиксированной длины, либо в диапазоне разрешенной длины. Ограничения также могут быть указаны как логические комбинации наборов основных ограничений.
Значения, используемые в качестве ограничений, могут быть либо литералами, используемыми в спецификации PDU, либо значениями ASN.1, указанными в другом месте в файле схемы. Некоторые инструменты ASN.1 предоставит эти значения ASN.1 доступными для программистов в сгенерированном исходном коде. Используемые в качестве константы для определения протокола, разработчики могут использовать их в логической реализации протокола. Таким образом, все константы PDU и протокола могут быть определены в схеме, и все реализации протокола в любом поддерживаемом языке опираются на эти ценности. Это избегает необходимости вручить константы протокола кода в исходном коде их реализации. Это значительно помогает развивать протокол; Константы протокола могут быть изменены в схеме ASN.1, и все реализации обновляются просто путем отменения, способствуя быстрому и низкому циклу развития риска.
Если инструменты ASN.1 должным образом реализуют ограничения в сгенерированном исходном коде, это действует для автоматической проверки данных протокола во время работы программы. Как правило, инструменты ASN.1 будут включать ограничения, проверяющие процедуры сгенерированной сериализации / десериализации, повышение ошибок или исключений, если встречаются данные о неэффективных данных. Это сложно реализовать все аспекты ограничений ASN.1 в компиляторе ASN.1. Не все инструменты поддерживают весь спектр возможных выражений ограничений. XML схема и схема JSON поддерживают аналогичные концепции ограничений. Поддержка инструментов для ограничений варьируется. Компилятор Microsoft XSD.Exe игнорирует их.
ASN.1 визуально похож на увеличенную форму Backus-NAUR (ABNF), которая используется для определения многих интернет-протоколов, таких как HTTP и SMTP . Однако на практике они совершенно разные: ASN.1 определяет структуру данных, которая может быть кодирована различными способами (например, JSON, XML, BINARY). ABNF, с другой стороны, определяет кодирование («синтаксис») в то же время, что определяет структуру данных («семантика»). ABNF, как правило, используется чаще для определения текстовых протоколов, читаемых на человеке и, как правило, не используется для определения кодировки типа-длины-
Многие языки программирования определяют специфичные для языка форматы сериализации. Например, модуль Python "Pickle" и модуль Ruby "Marshal". Эти форматы, как правило, специфичны для языка. Они также не требуют схемы, которая облегчает их использование в специальных сценариях хранения, но неуместно для протоколов связи.
JSON и XML также не требуют схемы, что делает их простыми в использовании. Они также являются кроссплатформенными стандартами, которые широко популярны для протоколов связи, особенно в сочетании со схемой JSON или схемой XML .
Некоторые инструменты ASN.1 способны переводить между схемой ASN.1 и XML (XSD). Перевод стандартизирован ITU. Это позволяет определить протокол в ASN.1, а также автоматически в XSD. Таким образом, возможно (хотя, возможно, неразборчиво) иметь в проекте, схема XSD, составленную с помощью инструментов ASN.1, производящих исходный код, который сериализует объекты на/из JSON Wireformat. Более практическое использование состоит в том, чтобы позволить другим субпроектам потреблять схему XSD вместо схемы ASN.1, возможно, подходящие инструменты для языка субпроектов, причем XER используется в качестве протокола WireFormat.
Более подробную информацию см. Сравнение форматов сериализации данных .
Смотрите также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Введение в ASN.1» . ITU . Архивировано из оригинала 2021-04-09 . Получено 2021-04-09 .
- ^ «База данных рекомендаций ITU-T» . ITU . Получено 2017-03-06 .
- ^ ITU -T x.680 - Спецификация базовых обозначений
- ^ Эта статья основана на материале, взятых из ASN.1 в свободном онлайн-словаре вычислений до 1 ноября 2008 года, и включенного в рамках «реликвизионных» условий GFDL , версия 1.3 или более поздней версии.
- ^ ITU -T X.690 - Основные правила кодирования (BER)
- ^ ITU -T X.690 - Различные правила кодирования (DER)
- ^ ITU -T X.690 - Правила канонического кодирования (CER)
- ^ Jump up to: а беременный в дюймовый ITU -T X.691 - Правила упакованного кодирования (PER)
- ^ Jump up to: а беременный в ITU -T X.693 - Правила кодирования XML (XER)
- ^ Jump up to: а беременный ITU -T X.696 - Правила кодирования октета (OER)
- ^ ITU -T X.697 - Правила кодирования объекта JavaScript (JER)
- ^ RFC 3641 - Общие правила кодирования строки (GSER)
Внешние ссылки
[ редактировать ]- Руководство по непрофессионалам по подмножеству ASN.1, Ber и Der - хорошее введение для начинающих
- Веб -сайт ITU -T - Введение в ASN.1
- Введение видео к ASN.1
- Учебное пособие ASN.1 по базовым концепциям ASN.1
- Учебное пособие ASN.1 на ASN.1
- Компилятор с открытым исходным кодом ASN.1-> C ++; Включает некоторые спецификации ASN.1. , Онлайн-компилятор ASN.1-> C ++
- Декодер ASN.1 позволяет декодировать кодируемые сообщения ASN.1 в вывод XML.
- Асн.1 Синтаксис Проверка и энкодер/декодер проверяют синтаксис схемы ASN.1 и кодирует/декодирует сообщения.
- ASN.1 Encoder/Decoder сообщений 3GPP кодирует/декодирует сообщения ASN.1 3GPP и позволяет легко редактировать эти сообщения.
- Бесплатные книги об ASN.1
- Список инструментов ASN.1 в проекте Ivmaiasn
- Обзор правил кодирования октета (OER)
- Обзор правил кодирования JSON (JER)
- Утилита узла TypeScript для разбора и проверки сообщений ASN.1