Ваша программа представляет собой систему для кодирования, передачи с возможными ошибками и декодирования сообщений с коррекцией ошибок. Давайте разберём её по частям.
- Назначение: Кодирует 4-битный блок данных в 7-битный код с проверочными битами.
- Как работает:
- Принимает байт, но использует только младшие 4 бита.
- Сдвигает данные на 3 бита влево (освобождая место для контрольных битов).
- Выполняет деление на полином
11 << 3(в двоичном виде11000), что соответствует циклическому избыточному коду (CRC). - Объединяет исходные данные с остатком от деления.
- Разбивает байт на два 4-битных полубайта и кодирует каждый с помощью
rcrEncode.
- Назначение: Декодирует 7-битный код обратно в 4-битные данные с коррекцией ошибок.
- Как работает:
- Для каждого байта в входных данных:
- Проверяет наличие ошибок с помощью того же полинома.
- Если найден остаток (синдром ошибки), пытается исправить ошибку.
- Если ошибок больше одной, помечает данные как невалидные.
- Объединяет два полубайта обратно в один байт.
- Для каждого байта в входных данных:
- Исправляет одиночные битовые ошибки на основе синдрома ошибки.
- Вносит случайные ошибки в данные:
- 10% шанс на 3 ошибки
- 20% шанс на 2 ошибки
- 70% шанс на 1 ошибку
- Основная функция обработки сообщения:
- Кодирует каждый байт сообщения.
- Вносит ошибки в случайно выбранную позицию.
- Декодирует сообщение с попыткой исправления ошибок.
- Есть 5% шанс "потери" всего сообщения (имитация сбоя).
- Используется для передачи сообщений между сервисами:
Username- имя пользователяMessagePart- часть сообщенияTimestamp- метка времениSequenceNumber- порядковый номер частиTotalParts- общее количество частейError- поле для ошибок (опционально)
- Обрабатывает HTTP запросы:
- Принимает JSON с данными в формате
DATA. - Обрабатывает сообщение через
coding.ProcessMessage. - В случае ошибки возвращает информацию об ошибке.
- В случае успеха возвращает обработанные данные.
- Отправляет результат в транспортный уровень (другой сервис).
- Принимает JSON с данными в формате
- Альтернативный обработчик для работы с сегментами сообщений.
- Настраивает маршруты:
/code- основной эндпоинт для обработки сообщений/swagger/*any- документация Swagger
- Запускает сервер на порту 8020.
- Клиент отправляет сообщение на сервер в формате JSON.
- Сервер кодирует сообщение, вносит случайные ошибки (с определённой вероятностью), затем пытается декодировать с коррекцией ошибок.
- Если сообщение невозможно восстановить (слишком много ошибок), сервер возвращает ошибку.
- Есть 5% шанс, что сообщение будет "потеряно" (имитация сбоя передачи).
- Результат (успешный или с ошибкой) отправляется обратно клиенту и в транспортный уровень.
- Коррекция ошибок: Используется метод, похожий на циклический избыточный код (CRC) с возможностью исправления одиночных ошибок.
- Вероятностная модель ошибок: Ошибки вносятся с разной вероятностью (1, 2 или 3 ошибки в байте).
- Swagger документация: API документировано с помощью Swagger.
- Микросервисная архитектура: Сервер общается с транспортным уровнем через HTTP.
- Клиент отправляет:
{"username":"user1", "message_part":"test", ...} - Сервер:
- Кодирует "test" в 7-битные блоки
- Вносит ошибки в случайный байт
- Пытается декодировать
- Если успешно - возвращает декодированное сообщение
- Если ошибка - возвращает информацию об ошибке
Программа демонстрирует принципы помехоустойчивого кодирования и декодирования с возможностью исправления ошибок, что полезно в системах передачи данных с ненадёжными каналами связи.