Введение
Longitudinal Redundancy Check (LRC), или проверка продольной избыточности, – один из классических алгоритмов обнаружения ошибок при передаче и хранении цифровых данных. Суть метода состоит в вычислении контрольного байта для блока данных путём применения операции XOR (исключающее ИЛИ) ко всем байтам блока. Полученное значение (LRC-байт) добавляется к блоку и передаётся вместе с данными. На принимающей стороне аналогичная операция выполняется заново, и если результат совпадает с принятым LRC-байтом – блок считается переданным без ошибок.
LRC относится к классу методов контроля чётности. В отличие от однобитовой вертикальной проверки чётности (VRC), LRC применяется ко всему блоку, что повышает вероятность обнаружения пакетных ошибок (burst errors).
История и контекст
Проверка продольной избыточности сформировалась как стандартный инструмент в эпоху рулонных лент и накопителей на магнитных лентах (1960–1970-е годы), когда каждый байт записывался поперёк ленты (вертикально), а контрольный символ в конце блока суммировал ошибки вдоль ленты (продольно). Отсюда и название – «продольная» избыточность.
С развитием более мощных алгоритмов (CRC – Cyclic Redundancy Check) LRC постепенно вышел из широкого применения в телекоммуникациях, однако сохранился в ряде промышленных протоколов. В частности, Modbus ASCII до сих пор использует LRC как обязательный механизм контроля целостности фреймов.
Как это работает
Алгоритм вычисления LRC состоит из трёх шагов:
- Сложить все байты блока данных по модулю 256 (8-битное сложение без учёта переполнения).
- Взять двоичное дополнение результата: LRC = (256 − сумма) mod 256, что эквивалентно побитовому отрицанию плюс 1.
- Присоединить LRC-байт к блоку данных.
Проверка на приёмнике: сложить все байты блока включая LRC-байт. Если результат равен нулю – ошибок не обнаружено.
Ограничения LRC: если два бита в разных байтах, находящиеся на одинаковых позициях, повреждены одновременно (симметричная ошибка), XOR-операция обнулит их вклад, и ошибка останется невидимой. Для более надёжной защиты используется CRC-16 или CRC-32.
Где применяется
- Modbus ASCII: промышленный протокол для связи ПЛК и SCADA-систем использует LRC для защиты ASCII-фреймов.
- Последовательные интерфейсы RS-232/RS-485: в устаревших системах автоматизации производства.
- Системы хранения данных: исторически применялся на магнитных лентах и перфокартах.
- Банковские и платёжные протоколы: ряд стандартов ISO для банкоматов и терминалов использовал LRC.
- Медицинское оборудование: в некоторых устаревших устройствах мониторинга.
Преимущества и ограничения
Преимущества: чрезвычайно простая реализация (одна XOR-операция в цикле), минимальные накладные расходы (1 байт на блок любого размера), детерминированное время вычисления.
Ограничения: низкая помехозащищённость по сравнению с CRC; не обнаруживает симметричные ошибки в разных байтах одного блока; не исправляет ошибки (только обнаруживает); современные системы почти повсеместно заменили LRC на CRC-16 или CRC-32.
Связь с другими понятиями
LRC – один из простейших алгоритмов в семействе методов обнаружения ошибок, к которым также относятся CRC (Cyclic Redundancy Check), контрольные суммы (checksum) и коды с исправлением ошибок (ECC). В контексте передачи данных LRC дополняет VRC (Vertical Redundancy Check) – проверку чётности отдельных байт. В промышленной автоматизации LRC неразрывно связан с протоколом Modbus и системами АСУ ТП.