обнаружение/исправление/восстановление ошибок в последовательных протоколах

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

Поэтому мне интересно, есть ли какие-то рекомендации по передовому опыту в разработке последовательных протоколов. (Пожалуйста, либо укажите факт, который легко проверить, либо сослайтесь на авторитетный источник, если вы делаете заявление. ) Также приветствуются общие рекомендации для веб-сайтов/книг.

В частности, мне приходится иметь дело с такими проблемами, как

  • разбор потока байтов на пакеты
  • проверка правильности пакета (например, легко с помощью CRC)
  • определение разумных типов ошибок, которые могут возникнуть (например, в последовательном потоке «точка-точка» вероятны спорадические одиночные ошибки и отброшенные серии байтов, но дополнительные фантомные байты маловероятны; тогда как при записи, хранящейся во флэш-памяти или на диске типы преобладающих ошибок разные)
  • исправление ошибок или восстановление (если я обнаружу ошибку в пакете, могу ли я ее исправить? Если нет, могу ли я пересинхронизироваться с границей следующего пакета?)
  • как сделать пакеты переменной длины устойчивыми к исправлению/восстановлению ошибок.

Какие-либо предложения?


person Community    schedule 09.12.2009    source источник


Ответы (2)


Разграничение пакетов

Для синхронизации с границами пакетов обычно используется байт или последовательность байтов, определяющая границу пакета, которая не может находиться внутри самого пакета. Если пакетные данные содержат этот идентификатор, вам нужно «убежать» от него (т. е. байтового материала).

Примеры:

Проверка пакетов

Различные варианты:

Исправление ошибок и т. д.

Хорошие вопросы. У меня не было большого опыта в этом.

person Community    schedule 06.01.2010
comment
ух ты! Я только что попробовал это сегодня, и это работает очень хорошо. большое спасибо! - person Jason S; 08.01.2010

Рассматривали ли вы FEC (прямое исправление ошибок)?

Эта процедура очень часто используется в протоколах связи «физического» уровня, таких как WDM (мультиплексирование с разделением по длине волны) / OTN (оптическая транспортная сеть).

person Community    schedule 09.12.2009