zHz00 Untitled

пятница, 18 марта 2022
04:38 Незнакомый потолок
Пусть надо передать пакет по физическому каналу связи от устройства А до устройства Б. Длина пакета известна. Устройство Б принимает байты, пока буфер не заполнится, а потом начинает разбор пакета.

Но это идеальный случай. Канал связи реальный, и в нём могут происходить сбои. Когда произошёл сбой, в буфере оказывается мусор. Заполнили буфер -- попытались разобрать -- выбросили. Заполнили ещё раз. Но из-за изначальной ошибки у нас начало пакета оказывается в середине буфера, а не в начале. Поэтому сколько буфер не выбрасывай, начало очередного пакета мы не найдём. Это потеря синхронизации.

Такая ситуация обязательно должна быть предусмотрена разработчиками. Алгоритма разрешения тут два:
1. Сброс буфера по тайм-ауту. Если слишком долго нет очередного байта, то делается вывод о том, что пауза между пакетами попала на середину буфера. Надо выбросить неполный буфер и начать приём сначала.
2. Поиск синхронизации по сигнатуре. Сигнатура -- это фиксированные, заранее известные байты, которые всегда следуют в начале любого пакета. Если сигнатура обнаруживается в середине пакета, а в начале пакета её нет, то у нас пропала синхронизация. Надо, опять-таки, выбросить текущий буфер, а принятую только что сигнатуру записать в начало.

@темы: Программирование, Борьба с техникой

URL
Бедный старик Толкиен. Знал бы он, что с ним сделют корей...
Усталость.
Сегодня по статистике на Rax.Ru увидел, что ко мне на htt...
сегодня.. ...На улице шумят листья и дети. Второй этаж ...
На 300 открытых екранах по всей стране матч смотрели боле...
[*]Бразильский веб дизайн [*]Энди Уорхолл: His Art and ...

18.03.2022 в 20:37

18.03.2022 в 20:37
3. Проследить чтобы в буфер гарантированно помещалось 2-3 пакета. Искать начало пакета по сигнатуре.
URL

18.03.2022 в 21:03

18.03.2022 в 21:03
Xersareeth, да. Особенно это может быть эффективно при пакетах переменной длины.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail