Управление правильностью (помехозащищенностью) передачи информации выполняется с помощью помехоустойчивого кодирования. Различают коды, обнаруживающие ошибки, и корректирующие коды, которые дополнительно к обнаружению еще и исправляют ошибки. Помехозащищенность достигается с помощью введения избыточности. Устранение ошибок с помощью корректирующих кодов (такое управление называют Forward Error Control) реализуют в симплексных каналах связи. В дуплексных каналах достаточно применения кодов, обнаруживающих ошибки (Feedback or Backward Error Control), так как сигнализация об ошибке вызывает повторную передачу от источника.
В дуплексных каналах используют старт-стопное или оконное управление. При старт-стопном управлении передатчик прежде чем послать следующий пакет сообщения должен получить подтверждение правильности приема адресатом предыдущего пакета. Очевидно, что из-за ожидания подтверждений пакеты передаются с увеличенными задержками. При оконном управлении передатчик может послать группу из пакетов до получения подтверждения правильности приема первого пакета этой группы. Если подтверждение не получено, передатчик повторяет передачу пакетов, начиная с . Величина называется размером окна.
Простейшими способами обнаружения ошибок является дополнение передаваемого пакета контрольным кодом, в качестве которого можно использовать контрольную сумму — результат сложения по модулю всех кодов информационной части пакета, где — разрядность кодов. Используется также проверка на нечетность, при которой к каждому -разрядному коду добавляется контрольный бит, значение которого выбирается так, чтобы сумма числа единиц в двоичном коде стала четной. Однако эти способы недостаточно надежны, особенно при появлении пачек ошибок. Поэтому в качестве надежных обнаруживающих кодов применяют циклические коды. Примером корректирующего кода является код Хемминга.
К числу эффективных кодов, обнаруживающих одиночные, кратные ошибки и пачки ошибок, относятся циклические коды (CRC — Cyclic Redundance Code). Они высоконадежны и могут применяться при блочной синхронизации, при которой выделение, например, бита нечетности было бы затруднительно.
Один из вариантов циклического кодирования заключается в умножении исходного кода на образующий полином , а декодирование — в делении на . Если остаток от деления не равен нулю, то произошла ошибка. Сигнал об ошибке поступает на передатчик, что вызывает повторную передачу.
Образующий полином есть двоичное представление одного из простых множителей, на которые раскладывается число , где обозначает единицу в -м разряде, равно числу разрядов кодовой группы. Например, если и , то и образующий полином может быть или в двоичном коде .
Основной вариант циклического кода, широко применяемый на практике, отличается от предыдущего тем, что получение образующего полинома происходит по следующему алгоритму:
  1. к исходному кодируемому числу справа приписывается нулей, где — число битов в образующем полиноме, уменьшенное на единицу;
  2. над полученным числом выполняется операция , отличающаяся от деления тем, что на каждом шаге операции вместо вычитания выполняется поразрядная операция "исключающее ИЛИ";
  3. полученный остаток и есть CRC — избыточный -разрядный код, который заменяет в закодированном числе приписанные справа нулей, т.е.

На приемном конце над кодом выполняется операция . Если остаток не равен нулю, то при передаче произошла ошибка и нужна повторная передача кода .
Пример 1
Пусть = , образующий полином .
Так как , то . Выполнение операции расчета циклического кода показано на рис. 1.
Рис. 1.  Пример получения циклического кода
Положительными свойствами циклических кодов являются малая вероятность необнаружения ошибки и сравнительно небольшое число избыточных разрядов.
Общепринятое обозначение образующих полиномов дает следующий пример:

что эквивалентно коду . Этот полином используется в протоколе V.42 для кодирования кодовых групп в 240 разрядов с двумя избыточными байтами. В этом протоколе возможен и образующий полином для четырех избыточных байтов