Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ASN.1
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Zelepuk
Волей случая соприкоснулся с абревиатурой ASN.1. Посмотрел в гугле: ASN.1 (англ. Abstract Syntax Notation One) — в области телекоммуникаций и компьютерных сетей язык для описания абстрактного синтаксиса данных (ASN.1), используемый OSI.
Достатачно обстрактное понятие. Кто-нибудь может на пальцах рассказать зачем это нужно и как применяется.
XVR
ASN.1 описывает некоторую структуру данных. Способ ее передачи задается отдельно. Применяется это все например в CryptoAPI (Windows) - там в ASN.1 описанных структурах генерятся данные (как результат работы крипто примитивов).
Вот, тут есть пример (но не CryptoAPI)
Zelepuk
Цитата(XVR @ Feb 9 2012, 13:21) *
ASN.1 описывает некоторую структуру данных. Способ ее передачи задается отдельно. Применяется это все например в CryptoAPI (Windows) - там в ASN.1 описанных структурах генерятся данные (как результат работы крипто примитивов).
Вот, тут есть пример (но не CryptoAPI)


Спасибо за ответ!
Не могли бы вы немного пояснить(или дать источник где описывается), что подразумевается под "структурой данных" и зачем её описывать? Я пока могу рассуждать на уровне передачи байт в канале.
это некое кодирование?
пока тёмный лес...
XVR
Цитата(Zelepuk @ Feb 9 2012, 21:17) *
Не могли бы вы немного пояснить(или дать источник где описывается), что подразумевается под "структурой данных" и зачем её описывать?
Подразумевается, что вам надо передать не просто набор байтов, а некую более сложную сущность. Ну например вы хотите получить со своего прибора статистику работы, которая состоит из заголовка (структура из скажем 5 фиксированных полей) и самой статистики в виде массива пар - имя (в виде строки) и значение (в виде целого числа)

Этот формат можно описать в виде ASN.1, и передать в одной из кодировок (BER/PER/XER) в канал (UART например) в виде потока байтов

Цитата
Я пока могу рассуждать на уровне передачи байт в канале.
Это транспортный (не структурированный) уровень
Цитата
это некое кодирование?
Угу - это следующий уровень в иерархии представления данных
AlexandrY
Цитата(Zelepuk @ Feb 9 2012, 19:17) *
Спасибо за ответ!
Не могли бы вы немного пояснить(или дать источник где описывается), что подразумевается под "структурой данных" и зачем её описывать? Я пока могу рассуждать на уровне передачи байт в канале.
это некое кодирование?
пока тёмный лес...


Да в принципе это просто такой древний примитивный способ сжатия при передаче данных.
В общем случае все можно передавать текстом как в HTTP, применить сжатие типа gzip и парсить по схеме на основе XML.
Но раньше для примитивных систем это было слишком накладно и по объему данных и по вычислительным ресурсам.
И решили переменные типизировать во первых, а во вторых по разному в зависимости от типа их кодировать.
Вот и появились при передаче целые, с плавающей точкой, текстовые, двоичные и т.д. переменные.
Некая спецификация в нотации ASN.1 просто описывает какие типы переменных могут встретиться в потоке, а отдельный стандарт кодирования еще и описывает как они кодируются в битовом представлении. Типы переменных могут быть и более сложными вложенными структурами. Но сути не меняет, все с целью уменьшить расходы по расшифровке и уменьшить объем передачи.
Но с другой стороны обмен спецификацией в нотации ASN.1 между независимыми разработчиками облегчает написание совместимых протоколов.
Хотя опять же нужна еще договоренность о кодировании снизу и о семантике сверху.
ASN.1 в этом смысле немного архаичен поскольку частично берет на себя и семантику.

Т.е. это такой стандарт предшественник XML, JSON и проч.
Zelepuk
Цитата(XVR @ Feb 10 2012, 09:48) *
Подразумевается, что вам надо передать не просто набор байтов, а некую более сложную сущность. Ну например вы хотите получить со своего прибора статистику работы, которая состоит из заголовка (структура из скажем 5 фиксированных полей) и самой статистики в виде массива пар - имя (в виде строки) и значение (в виде целого числа)

Этот формат можно описать в виде ASN.1, и передать в одной из кодировок (BER/PER/XER) в канал (UART например) в виде потока байтов

Это транспортный (не структурированный) уровень
Угу - это следующий уровень в иерархии представления данных


спасибо, стало более понятней.
А существуют ли примеры протоколов где применяется ASN.1
Или лучше увидеть паспорт прибора, где описано как "забирать данные" по таким протоколам (как описание регистров в Modbus)
AlexandrY
Цитата(Zelepuk @ Feb 10 2012, 21:02) *
спасибо, стало более понятней.
А существуют ли примеры протоколов где применяется ASN.1
Или лучше увидеть паспорт прибора, где описано как "забирать данные" по таким протоколам (как описание регистров в Modbus)


Похоже вы не до конца поняли. wink.gif

ASN.1 это нотация, а не протокол.
Вы можете взять любой протокол в котором есть хоть какое-то различение кодирования данных в зависимости от типа и описать его с помощью ASN.1
Самый распространенный случай применения ASN.1 это синтаксис MIB файлов для SNMP менеджеров.
Когда говорят о протоколе, то интересуются прежде всего кодированием, а нотация в котором оно описывается большого значения не имеет.
Просто в народе иногда отождествляют кодирование и ASN.1
Zelepuk
Я с вашего позволения продолжу череду глупых вопросов по этой теме.
Например для реализации Modbus(где конечно нет кодирования), я просто собираю пакеты, отправляю, а затем принимаю на другой стороне и разбираю.
В случае с боле сложными протоколами, где применяется кодирование, какое место занимает ASN.1 в частности. Например в сети я нашёл декодер, где на входе должен быть некий файл описания (в файле описываются данные), а на выходе получаем *.c и *.h файлы.
Незнаю как применить полученные функции (в *.c файле)

лично мне интересно кодирование для IEC61850(протокол MMS)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.