17 Атрибутов Хорошего Протокола Передачи Данных

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В этом тексте я напишу атрибуты хорошего простого канального Master-Slave протокола для пакетного обмена информацией между устройствами на общей шине таких как RS485, CAN, LoRa, BLE или поверх TCP, UDP. Несмотря на то, что есть канальные протоколы ModeBus, CANOpen, J1913, DLMS, RDS, UBX, ASN.1, NEC, Pelco-D, yModem, многие российские компании просто не могут себе позволить купить на них лицензию и спецификацию и всё же колхозят свой собственный протокол для взаимодействия между своими электронными платами. Тут представлены общие атрибуты таких доморощенных протоколов.

1--M2M протокол должен быть бинарным*

Это сделает трафик компактнее и проще в обработке на стороне firmware. 

2--Должна быть преамбула*

Преамбула нужна, чтобы конечный автомат мог выхватывать пакеты из потока байтов.

3--Преамбула должна быть параметризируемая*

Преамбулу следует параметризировать так как должна быть предусмотрена возможность туннелирования пакетов одного и того же протокола. Это особенно полезно когда физика трансивера за раз может отправить только N байт, а сам пакет M байт. При этом N<M. В этом случает маленькими пакетами передается большой пакет как поток байтов.

4--Должен быть порядковый номер пакета*

Это позволит на стороне приемника определить потерю непрерывности потока.

5--Должно быть поле, которое отвечает за длину полезных данных*

Это позволит сделать протокол универсальным и сделает возможность передавать данные разной длинны.

6--Передавать многобайтовые поля в заголовках следует в Big Endian

Так проще анализировать сырые пакеты в текстовом редакторе или на осциллографе.

7--В пакете должна быть контрольная сумма*

Это позволит проверить, что пакет не повредился в процессе передачи из-за радиопомех помех или дребезга контактов. 

8--В заголовке должен быть бит честности данных

Это вспомогательная защита целостности данных хоть и менее надежная, чем с контрольная сумма.

9--Контрольная сумма должна быть в конце пакета

Это позволит проще вычислять СRС, захватывая как данные так и заголовок.

10--Должен быть идентификатор типа полезных данных

Это позволит приемнику быстрее понять как интерпретировать полезные данные внутри пакета.

11--Должно быть подтверждение принятого пакета*

Так Master Node(а) поймет, что Slave Node(а) точно съела пакет

12--Должна быть повторная отправка в случае отсутствия подтверждения*

Это повысит надежность передачи данных.

13--В заголовке должна быть TimeStamp отправки пакета

Для отладки хронологии диалога и оценки быстродействия обработки. Есть аппаратные способы прослушивать трафик в той же RS485.  

14--Спецификацию протокола следует делать в формате общих электронных таблиц*

Делать спеки протоколов в doc это уже архаично. Электронные таблицы идеально подходят для представления структуры массива. Любой пакет это по факту обыкновенный массив. В электронных таблицах можно сортировать пакеты, быстро искать нужный пакет, раскрашивать поля, проверять полноту, находить свободные идентификаторы, и даже авто генерировать парсеры в виде С-кода для синтаксического разбора пакетов.

15--Должно быть шифрование PayLoad(а)*

В случае ответственных задач имеет смысл запилить шифрование полезных данных пакета ,чтобы нелегальные узлы не могли наблюдать за работой системы и подключать к общей шине свою телеметрию и телематику.

16--Пакетная синхронизация должна производится по преамбуле

Раз приняли преамбулу и CRC валидная значит пришел новый пакет.

17--Пакетная синхронизация должна производится по TimeOut

Также можно делать пакетную синхронизацию по TimeOut(у). То есть после продолжительного молчания на шине сбрасывать конечный автомат приема и ждать новой преамбулы.

Вывод
Это основные требования к реализации кибернетики очередного обобщенного компанейского бинарного протокола передачи данных. Это протокол для M2M взаимодействий.

Если вам известны еще атрибуты хорошего протокола передачи данных, то пишите их в комментарии. Также пишите про те стандартные протоколы с которыми вам приходилось сталкиваться и делитель впечатлениями от работы с разными протоколами.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас в компании есть собственный протокол передачи данных?
66.67% да 2
33.33% нет 1
Проголосовали 3 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы добавляете в заголовок пакета порядковый номер пакета?
50% да 1
50% нет 1
Проголосовали 2 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какой порядок байт вы используете в многобайтовых полях бинарного протокола?
50% Big Endian 1
50% Little Endian 1
Проголосовали 2 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы добавляете в заголовок пакета TimeStamp?
50% да 1
50% нет 1
Проголосовали 2 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы используете электронные таблицы для составления спецификаций бинарных протоколов?
100% да 2
0% нет 0
Проголосовали 2 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы используете CRC для защиты данных бинарного протокола?
100% да 2
0% нет 0
Проголосовали 2 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы добавляете шифрование в бинарные протоколы?
0% да 0
100% нет 2
Проголосовали 2 пользователя. Воздержавшихся нет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вам приходилось делать туннелирование протокола?
100% да 1
0% нет 0
Проголосовал 1 пользователь. Воздержавшихся нет.
Источник: https://habr.com/ru/post/682292/


Интересные статьи

Интересные статьи

Всем привет! Меня зовут Евгений, я занимаюсь разработкой и проектированием в Ozon. Больше всего работаю с MS SQL и C#, но попадаются и другие СУБД и языки программирования.Ozon как продукт быстро раст...
Статья посвящена альтернативным версиям Qt-драйверов для работы с базами данных. По большому счету отличий от нативных Qt-драйверов не так много, всего пара: 1) Поддержка...
В этой статье описаны шаги по установке базы данных SAP HANA в домашних условиях. Основное отличие этого материала заключается в том, что мы не будем использовать традици...
Казалось бы, валидация данных — это одна из базовых задач в программировании, которая встретится и в начале изучения языка вместе с "Hello world!", и в том или ином виде будет...
Предлагаю ознакомиться с расшифровкой доклада 2017 года Игорь Стрыхарь «ClickHouse – визуально быстрый и наглядный анализ данных в Tabix». Веб-интерфейс для ClickHouse в проекте Tabix. Основные...