2009-11-14 3 views
4

Я передаю данные между устройствами, и я должен запрограммировать протокол как массив байтов.Советы по построению байтового протокола

Любые советы при создании протоколов на низкоуровневом уровне? .. Например:

  • Используйте 2-байтовый заголовок, чтобы отправить длину сообщения перед байтами данных.
  • Используйте схему проверки CRC/данных. (Как это сделать? Любые простые контрольные суммы?)

ответ

1
  1. Подумайте мудро и обо всех случаях, прежде чем устанавливать структуру.
  2. Сделайте заголовок немного большим, даже если он отправляет в него нулевые байты.
  3. Разделить заголовок на несколько частей. Это, конечно, зависит от ваших требований, например, от байта управления, байта длины сообщения, байт формата ... и т. Д.

О контрольной сумме, зависит от базового протокола. Но вы можете реализовать его самостоятельно. Шифрование, хеш, хруст, флип, 2 с. Дополните сообщение и сохраните результат в одном байте проверки.

2

Это зависит от характеристик QoS (качества обслуживания) базового транспортного уровня.

Если базовый канал является надежным, то CRC, вероятно, является избыточным (предполагается, что некоторая проверка целостности выполняется на нижнем уровне протокола).

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

Конечно, вы всегда можете использовать HEADER (Unique Sequence + payload length + CRC) с низкой вероятностью появления в вашей полезной нагрузке, но тогда вам нужно применить скремблер над своей полезной нагрузкой, чтобы свести к минимуму вероятность дублирования вашего HEADER и т. Д. .


Если вы хотите построить протокол для ненадежного потока байт ориентированного procotol, то зачем изобретать велосипед? Почему бы не использовать что-то вроде PPP?

0

Подумайте, можете ли вы иметь удобочитаемый протокол
Тогда рассмотрят, если вы можете использовать сжатие, а не сырой bianry

0

Значительная часть зависит от , что предусмотрено в нижних слоях. Вот примеры, объясняющие, почему я считаю значимыми:

  • Я когда-то принимал участие в реализации протокола ITU H.223. Хуже всего, что поток данных может быть даже байт или бит потока, а нижние слои предоставлены НИЧЕГО рядом с сырыми битами. Протокол имел несколько возможных уровней в зависимости от надежности и функциональности транспортных средств для верхних уровней.

  • Другим примером является протокол ITU H.225 через TCP, где транспорт является надежным, но это поток байтов. Таким образом, он ДОЛЖЕН быть хорошей логикой делимитации сообщений.

  • Ну, UDP на основе SIP. Дейтаграммы. Очень полезно. Но многие проблемы были связаны с надежностью обмена сообщениями. Таким образом, последовательность и отслеживание запросов/ответов (транзакция, нога ...) были очень значительными.

  • ОК, по некоторым причинам мы использовали протокол RPC. Хорошо, если ты ленив. Некоторые ограничения связаны с логикой приложений, но я бы рекомендовал посмотреть на это, даже просто чтобы узнать.

  • НАСА IPC было предметом, о котором я смотрел не так давно. Хорошо, очень просто связано с верхними слоями. Но это централизованное ограничение.

Еще одним ключевым моментом является: Вы должны разработать протокол, глядя сначала на ваших потребностях (анализ требований верхнего слоя). Что бы вы дали знания CRC-32 - лучший способ защитить целостность данных по анализу, если вам действительно нужно это сделать (например)?

Ну, я думаю, что эти упоминания могут помочь вам подумать о предмете с несколько иной точки зрения.

Смежные вопросы