ASN1 и существующие протоколы
От: alexei_s  
Дата: 11.02.08 10:52
Оценка:
Здравствуйте!
Есть много(порядка 30) бинарных протоколов передачи данных. Каждый протокол описывает несколько пакетов. Пакеты битовые, т.е. скажем пакет из 6 байт: первые 3 бита — тип, 4 и 5 бит — получатель, 6-40 бит данные и т.п.
Осложняется еще тем, что архитектуры систем участвующик в обмене — разные(т.е. разные endians)
Поскольку таких пакетов будет много, хочу автоматизировать процесс работы с ними.
Облегчат ли работу с ними ASN1 компиляторы? Т.е. я думаю описать их в виде ASN1 нотации, сгенерить структуры С/С++, и автоматом получить сериализацию.
Основной вопрос: получится ли описать конкретные бинарные пакеты с пом. структур ASN1?

Может есть другие решения, какие мнения?
Re: ASN1 и существующие протоколы
От: Left2 Украина  
Дата: 11.02.08 11:19
Оценка:
_>Может есть другие решения, какие мнения?

Если пакетов немного и всё это не будет торчать наружу (протоколы внутренние для системы и снаружи писаться плагинов для них не будет) — то ASN.1 может оказаться оверкиллом. Может быть, проще окажется вообще описать протоколы на XML а потом написать кодогенератор на любом скриптовом языке. В своё время юхал кодогенерацию на JScript — написание кодогенератора заняло порядка 1 дня.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[2]: ASN1 и существующие протоколы
От: alexei_s  
Дата: 11.02.08 11:30
Оценка:
Здравствуйте, Left2, Вы писали:

_>>Может есть другие решения, какие мнения?


L>Если пакетов немного и всё это не будет торчать наружу (протоколы внутренние для системы и снаружи писаться плагинов для них не будет) — то ASN.1 может оказаться оверкиллом. Может быть, проще окажется вообще описать протоколы на XML а потом написать кодогенератор на любом скриптовом языке. В своё время юхал кодогенерацию на JScript — написание кодогенератора заняло порядка 1 дня.

Пакетов 5-10 на протокол, т.е. от 150 до 300 пакетов всего

Но ведь ANN.1 еще и сериализацию бесплатно делает
Re: ASN1 и существующие протоколы
От: AlexCrush Россия  
Дата: 11.02.08 12:13
Оценка:
Здравствуйте, alexei_s, Вы писали:

_>Основной вопрос: получится ли описать конкретные бинарные пакеты с пом. структур ASN1?



Врядли. ASN1 предполагает четкую двоичную структуру сообщения, а именно: сначала идет тип элемента, затем длина, затем сам элемент. И так для всего (по кр.мере BasicEncodingRules, BER; про другие (DER/XER) — не знаю). Врядли Ваши протоколы четко этому следуют.
Re[2]: ASN1 и существующие протоколы
От: alexei_s  
Дата: 11.02.08 13:19
Оценка:
Здравствуйте, AlexCrush, Вы писали:

AC>Здравствуйте, alexei_s, Вы писали:


_>>Основной вопрос: получится ли описать конкретные бинарные пакеты с пом. структур ASN1?



AC>Врядли. ASN1 предполагает четкую двоичную структуру сообщения, а именно: сначала идет тип элемента, затем длина, затем сам элемент. И так для всего (по кр.мере BasicEncodingRules, BER; про другие (DER/XER) — не знаю). Врядли Ваши протоколы четко этому следуют.


ясно, а так хотелось
Re: ASN1 и существующие протоколы
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.02.08 13:27
Оценка:
Здравствуйте, alexei_s, Вы писали:

_>Здравствуйте!

_>Есть много(порядка 30) бинарных протоколов передачи данных. Каждый протокол описывает несколько пакетов. Пакеты битовые, т.е. скажем пакет из 6 байт: первые 3 бита — тип, 4 и 5 бит — получатель, 6-40 бит данные и т.п.
_>Осложняется еще тем, что архитектуры систем участвующик в обмене — разные(т.е. разные endians)
_>Поскольку таких пакетов будет много, хочу автоматизировать процесс работы с ними.
_>Облегчат ли работу с ними ASN1 компиляторы? Т.е. я думаю описать их в виде ASN1 нотации, сгенерить структуры С/С++, и автоматом получить сериализацию.
_>Основной вопрос: получится ли описать конкретные бинарные пакеты с пом. структур ASN1?

Если ваши бинарные протоколы имели хоть какие-нибудь корни в ASN1, то где-то уже должны быть ASN1 описания для них. Тогда существует возможность использования ASN1 компиляторов. Раз у вас побитовое размещение полей, то речь идет об PER (packed encoding rules) и, к тому же, unaligned PER (т.е. без выравнивания отдельных полей под границу байта). AFAIK, большинство доступных ASN1 компиляторов могло с этим справляться.

Однако, если же протоколы самодельные, разработанные без оглядки на ASN1 (например, они были созданы для какой-нибудь самодельной железяки), тогда ASN1 может и не помочь. Но здесь нужно будет внимательно разбираться с тем, как спецификация ASN1 PER предписывает упаковывать разные типы данных.

Но закладываясь на ASN1 компилятор нужно еще иметь в виду, что из привязки к C++ не стандартизированны, т.е. каждый компилятор использует собственный набор C++ классов сериализации/десериализации данных. И выбрав конкретный ASN1 компилятор вы подсаживаетесь на "иглу" одного поставщика.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: ASN1 и существующие протоколы
От: alexei_s  
Дата: 11.02.08 14:10
Оценка:
Здравствуйте, eao197, Вы писали:

E>Однако, если же протоколы самодельные, разработанные без оглядки на ASN1 (например, они были созданы для какой-нибудь самодельной железяки), тогда ASN1 может и не помочь.


Да, именно так. Понял что АСН тут не поможет.
Может есть какие-то другие стандартные средства решения такой задачи?

Что хочется:

Описываем битовые пакеты на макро-языке.
Напускаем какой-то парсер — на выходе классы/структуры с++, и код сериализации/десериализации.
Re[3]: ASN1 и существующие протоколы
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.02.08 14:14
Оценка:
Здравствуйте, alexei_s, Вы писали:

_>Что хочется:


_>Описываем битовые пакеты на макро-языке.

_>Напускаем какой-то парсер — на выходе классы/структуры с++, и код сериализации/десериализации.

Я о таких не слышал.
Но правильный совет вам уже дал Left2 выше -- напишите генератор C++ кода на каком-нибудь из скриптовых языков (хоть JavaScript, хоть Perl/Python/Ruby). Выйдет и быстрее, и дешевле.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: ASN1 и существующие протоколы
От: Tonal- Россия www.promsoft.ru
Дата: 12.02.08 13:59
Оценка:
Здравствуйте, alexei_s, Вы писали:
_>Есть много(порядка 30) бинарных протоколов передачи данных. Каждый протокол описывает несколько пакетов. Пакеты битовые, т.е. скажем пакет из 6 байт: первые 3 бита — тип, 4 и 5 бит — получатель, 6-40 бит данные и т.п.
_>Осложняется еще тем, что архитектуры систем участвующик в обмене — разные(т.е. разные endians)
По моему твоя задача специально для Erlang-а.
Там есть бинарисы — битовыеп потоки, паттерн матчинг по ним (сопоставление с образцом), сериалиализация, независимость от архитектуры, прозрачная сетевая работа. См. например Re[2]: Ещё одно сравнение с участием Эрланга
Автор: Gaperton
Дата: 20.06.07
:

Вот такой код — кусочек разбора IP-датаграммы — это, наверно, реже в телеком-приложениях встречается:

-define(IP_VERSION, 4).
-define(IP_MIN_HDR_LEN, 5).

DgramSize = size(Dgram),
case Dgram of 
    &lt;&lt;?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16, 
      ID:16, Flgs:3, FragOff:13,
      TTL:8, Proto:8, HdrChkSum:16,
      SrcIP:32,
      DestIP:32, RestDgram/binary&gt;&gt; when HLen &gt;= 5, 4 * HLen =&lt; DgramSize -&gt;
            OptsLen = 4*(HLen - ?IP_MIN_HDR_LEN),
            &lt;&lt;Opts:OptsLen/binary, Data/binary&gt;&gt; = RestDgram,
    ...
end.

... << RSDN@Home 1.2.0 alpha rev. 789>>
Re[2]: ASN1 и существующие протоколы
От: alexei_s  
Дата: 12.02.08 17:57
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Здравствуйте, alexei_s, Вы писали:

_>>Есть много(порядка 30) бинарных протоколов передачи данных. Каждый протокол описывает несколько пакетов. Пакеты битовые, т.е. скажем пакет из 6 байт: первые 3 бита — тип, 4 и 5 бит — получатель, 6-40 бит данные и т.п.
_>>Осложняется еще тем, что архитектуры систем участвующик в обмене — разные(т.е. разные endians)
T>По моему твоя задача специально для Erlang-а.
T>Там есть бинарисы — битовыеп потоки, паттерн матчинг по ним (сопоставление с образцом), сериалиализация, независимость от архитектуры, прозрачная сетевая работа. См. например Re[2]: Ещё одно сравнение с участием Эрланга
Автор: Gaperton
Дата: 20.06.07
:

Все вкусно конечно и заманчиво, но к сожалению у нас c++ only
Re[3]: ASN1 и существующие протоколы
От: Tonal- Россия www.promsoft.ru
Дата: 12.02.08 18:19
Оценка:
Здравствуйте, alexei_s, Вы писали:
T>>По моему твоя задача специально для Erlang-а.
_>Все вкусно конечно и заманчиво, но к сожалению у нас c++ only
Тогда писать/находить библиотеку разбора + возможно препроцессоры/генераторы.
Если протоколы несложные, то и библиотека пишеться быстро.
... << RSDN@Home 1.2.0 alpha rev. 789>>
Re[2]: ASN1 и существующие протоколы
От: Ka3a4oK  
Дата: 12.02.08 21:12
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Здравствуйте, alexei_s, Вы писали:

_>>Есть много(порядка 30) бинарных протоколов передачи данных. Каждый протокол описывает несколько пакетов. Пакеты битовые, т.е. скажем пакет из 6 байт: первые 3 бита — тип, 4 и 5 бит — получатель, 6-40 бит данные и т.п.
_>>Осложняется еще тем, что архитектуры систем участвующик в обмене — разные(т.е. разные endians)
T>По моему твоя задача специально для Erlang-а.
T>Там есть бинарисы — битовыеп потоки, паттерн матчинг по ним (сопоставление с образцом), сериалиализация, независимость от архитектуры, прозрачная сетевая работа. См. например Re[2]: Ещё одно сравнение с участием Эрланга
Автор: Gaperton
Дата: 20.06.07
:

T>

T>Вот такой код — кусочек разбора IP-датаграммы — это, наверно, реже в телеком-приложениях встречается:
T>

T&gt;-define(IP_VERSION, 4).
T&gt;-define(IP_MIN_HDR_LEN, 5).

T&gt;DgramSize = size(Dgram),
T&gt;case Dgram of 
T&gt;    &lt;&lt;?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16, 
T&gt;      ID:16, Flgs:3, FragOff:13,
T&gt;      TTL:8, Proto:8, HdrChkSum:16,
T&gt;      SrcIP:32,
T&gt;      DestIP:32, RestDgram/binary&gt;&gt; when HLen &gt;= 5, 4 * HLen =&lt; DgramSize -&gt;
T&gt;            OptsLen = 4*(HLen - ?IP_MIN_HDR_LEN),
T&gt;            &lt;&lt;Opts:OptsLen/binary, Data/binary&gt;&gt; = RestDgram,
T&gt;    ...
T&gt;end.
T&gt;


Ммммм... вкусняшка
Вопросы:
— это натив?
— насколько это быстро(оптимально)?
— интегрируется ли с С++ на уровне объектных модулей(интересует майкрософт вижуал с++)?
— длл написать можно?
— для бинарисов этих подерживается прямой/обратный порядок бит в байте?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: ASN1 и существующие протоколы
От: dotidot Россия  
Дата: 13.02.08 06:27
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:


KK>Ммммм... вкусняшка

KK>Вопросы:
KK>- это натив?
это натураль!
KK>- насколько это быстро(оптимально)?
эрланг — это не быстро. но зато масштабируемо.

KK>- интегрируется ли с С++ на уровне объектных модулей(интересует майкрософт вижуал с++)?

KK>- длл написать можно?

о. это не простой вопрос, можно посмотреть здесь
Автор: eao197
Дата: 21.05.07
на тему мнений того как из эрланга народ взаимодействует с другим миром.
Re[3]: ASN1 и существующие протоколы
От: Tonal- Россия www.promsoft.ru
Дата: 13.02.08 14:33
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:
KK>Ммммм... вкусняшка
KK>Вопросы:
KK>- это натив?
VM

KK>- насколько это быстро(оптимально)?

Довольно быстро.

KK>- интегрируется ли с С++ на уровне объектных модулей(интересует майкрософт вижуал с++)?

Нет.

KK>- длл написать можно?

Да.
Причём существует несколько разноуровневых интерфейсов для интеграции.

KK>- для бинарисов этих подерживается прямой/обратный порядок бит в байте?

http://erlang.org/doc/reference_manual/expressions.html#6.16

Посмотри/поспрошай в месном декларативном форуме — там довольно много и часто обсуждается.
... << RSDN@Home 1.2.0 alpha rev. 789>>
Re[4]: ASN1 и существующие протоколы
От: Ka3a4oK  
Дата: 13.02.08 19:08
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Здравствуйте, Ka3a4oK, Вы писали:

KK>>Ммммм... вкусняшка
KK>>Вопросы:
KK>>- это натив?
T>VM

Не, ну как можно битиками ворочать в VM Это же кощунство...
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: ASN1 и существующие протоколы
От: alexei_s  
Дата: 18.02.08 07:02
Оценка: 38 (1)
Нашел два решения, для задач такого рода (парсеры бинарных протоколов):

BinPAC: здесь
PADS: A Domain-Specific Language for Processing Ad Hoc Data: здесь
Re[2]: ASN1 и существующие протоколы
От: alexei_s  
Дата: 18.02.08 07:28
Оценка:
Здравствуйте, alexei_s, Вы писали:

_>PADS: A Domain-Specific Language for Processing Ad Hoc Data: здесь

офф. сайт здесь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.