Разумным компромиссом было сочтено применение циклического помехозащищенного кодирования с решающей обратной связью. Суть этого метода состоит в следующем. Вся "полезная" информация разбивается на "порции"
- кадры. Передача каждого кадра завершается передачей специальной контрольной последовательности кадра, подсчитанной по некоему, заранее определенному алгоритму. Этот рекуррентный алгоритм в процессе выдачи кадра модифицирует контрольную последовательность с помощью очередного выдаваемого байта. Удаленная сторона, принимая кадр, также подсчитывает контрольную последовательность по известному алгоритму. По окончании приема кадра производится сравнение подсчитанной контрольной последовательности с принятым в конце кадра ее значением. По результатам сравнения приемник решает гамлетовский вопрос: быть ли данному кадру, или его следует повторить. Результат решения этого вопроса приемник сообщает передатчику посредством некоей "квитанции". Отсюда другое название этого метода: метод автоматического повтора запроса (ARQ, Automatic Repeat reQuest).
Основная ответственность за надежность обнаружения ошибок при этом методе лежит на алгоритме вычисления контрольной последовательности кадра. Здесь используется аппарат циклического избыточного контроля (CRC, Cyclic Redundance Check). Циклическое кодирование базируется на математической теории групп, алгебре многочленов и теории колец. Оставив для другого раза теоретические основы циклического кодирования, стоит отметить его свойства, обусловившие выбор циклических кодов.
Главное - это то, что циклические коды обладают высокой надежностью коррекции ошибок при весьма невысокой избыточности. Особенно они эффективны при обнаружении пакетов ошибок. Например, для кадра размером в 256 байт и контрольной последовательности в 16 бит (CRC-16) минимальное кодовое расстояние = 3, т.е. одна разрешенная кодовая комбинация отличается от другой, разрешенной же, минимум 3 битами, причем не любыми, а расположенными на вполне определенных местах во всей 2064-битовой последовательности. Вероятность появления нераспознаваемой ошибки, т.е. того, что вследствие ошибок одна разрешенная комбинация перейдет в другую, не превосходит 10^(-14). При уменьшении размера кадра или при увеличении длины контрольной последовательности минимальное кодовое расстояние растет, что еще более уменьшит вероятность появления нераспознаваемой ошибки.
Другое немаловажное свойство - простота кодирования: рекуррентный характер алгоритма при минимальном расходе вычислительных ресурсов. Причем, существуют по крайней мере два алгоритма, дающих идентичный результат. Один - битовый, модификация результата в котором производится по каждому биту. Его удобно реализовывать на аппаратном уровне с помощью сдвигового регистра. Другой - байтово-табличный, в котором модификация результата производится после приема/передачи целого байта. Этот алгоритм больше подходит для реализации на программном уровне, поскольку требует некоторого объема памяти для хранения таблиц.
Данные принципы циклического помехозащищенного кодирования с решающей обратной связью положены в основу всех аппаратных и программных реализаций наиболее широко распространенных протоколов коррекции ошибок MNP2/MNP3 и V.42 CCITT.
2. Протоколы коррекции ошибок
Строго говоря, противопоставление протокола V.42 CCITT (the International Telegraph and Telephone Consultative Committee) и MNP (the Microcom Networking Protocol) не вполне корректно. Дело в том, что Рекомендация V.42 CCITT - единый стандарт (по традиции называемый "Рекомендация"), описывающий все рассматриваемые протоколы коррекции ошибок. То, что в обиходе называется MNP2 и MNP3, есть соответственно байт-ориентированный и бит-ориентированный режимы протокола, описанного в Дополнении A к Рекомендации V.42, а то, что называется протоколом
V.42, - протокол, описанный в основной части Рекомендации. Однако исторически сложилось так, что появление протоколов фирмы Microcom предшествовало выходу "Голубой Книги" CCITT с Рекомендацией V.42. Поэтому в дальнейшем применяется сложившаяся терминология, которая хоть и не вполне корректна, зато проста и компактна.
То, что по недоразумению называют протоколом MNP4, протоколом на самом деле не является. Это не более, чем модифицированная реализация протоколов MNP2 и MNP3. А посему, ввиду отсутствия предмета, упоминание MNP4 в дальнейшем изложении отсутствует.
Протокол коррекции ошибок определяет формат кадра, перечень допустимых типов кадров, логическую структуру кадра каждого типа и собственно протокол, т.е. порядок установки режима коррекции ошибок, выхода из режима и допустимого чередования кадров.
2.1. MNP2
Протокол коррекции ошибок MNP2 является знак-ориентированным протоколом типа BSC (Binary Synchronous Communications). Его наличие или отсутствие никак не затрагивает формат передачи байта по каналу: он подвергается асинхронно-синхронному преобразованию в соответствии с Рекомендацией V.14 CCITT. Каждый элемент кадра - байт - состоит из 8 информационных бит, передается по каналу последовательно, младшим битом вперед; выдача первого бита предваряется стартовым битом (0), служащим синхросигналом приемнику; после передачи последнего бита выдается стоповый бит (1). Если следующий байт не готов к выдаче, передается поток стоповых битов. Таким образом можно считать, что байт состоит как минимум из 10 бит, включая один стартовый и один стоповый биты (абстрагируясь от незначительных в данном контексте подробностей, связанных с выравниванием скоростей на коммуникационных интерфейсах передатчика и приемника).
Из этого обстоятельства есть два весьма существенных следствия. Во-первых, процедура входа в протокол прозрачна и не требует специального синхронного переключения обоих модемов в какой-то специфический режим работы асинхронно-синхронного преобразования данных. В любой момент модем может начать передачу символов, являющихся не самоценными данными, а служебным полем кадра протокола MNP2. Лишь бы приемник был готов на логическом уровне идентифицировать это обстоятельство. Во-вторых, реализация протокола может быть вынесена на уровень программного обеспечения компьютера, оставляя модем и вовсе в неведении относительно наличия протокола коррекции ошибок. Хорошо это или плохо - предмет отдельного разговора, но это дополнительная степень свободы, предоставляемая (или, вернее, не отнимаемая) протоколом.
Формат кадра MNP2 следующий:
- управляющее поле начального флага, включающее три байта: SYN, DLE и STX (16h, 10h, 2h);
- прозрачные пользовательские данные переменной длины;
- управляющее поле конечного флага, включающее 2 байта: DLE и ETX
(10h, 3h);
- двухбайтовая контрольная последовательность кадра, подсчитанная с помощью образующего полинома X^16 + X^15 + X^2 + 1.
Кодовая прозрачность управляющих полей обеспечивается байтом DLE, сигнализирующим о специальном значении следующего за ним байта. Если же этот байт встречается в пользовательских данных, то он должен дублироваться, чем обеспечивается прозрачность самих пользовательских данных. Иногда процедуру вставки байта DLE в пользовательские данные в протоколе типа BSC называют байтстаффингом. Поскольку протокол MNP2 - знак-ориентированный, в нем нет специального межкадрового заполнителя. Им служит банальный межбайтовый заполнитель - поток стоповых битов.
В протоколе MNP2 существуют 6 типов кадров: LR, LD, LT, LA, LN и LNA. Каждый тип кадра в поле прозрачных пользовательских данных имеет свою собственную логическую структуру, в которой кодируется признак типа кадра, а также присущие ему параметры и пользовательская информация.
2.2. MNP3
Протокол коррекции ошибок MNP3 является бит-ориентированным протоколом. Кадровый формат его радикальным образом отличается от вышеизложенного и полностью соответствует основной части Рекомендации V.42, включая асинхронно-синхронное преобразование байта, подсчет двухбайтовой контрольной последовательности кадра с точностью до образующего полинома, обеспечение прозрачности данных и межкадровый заполнитель. Все это подробнее будет рассмотрено ниже, в разделе, посвященном протоколу
V.42. Все же остальное - перечень типов кадров, их логическая структура и собственно протокол - полностью идентично протоколу MNP2. По сути MNP3 - это паллиатив между MNP2 и V.42.
При бесспорном снижении накладных расходов, обусловленном переходом на синхронный кадровый формат, MNP3 не достигает кондиций V.42, теряя в гибкости по сравнению с MNP2. Даже экономии вычислительных ресурсов невозможно добиться, отказываясь от реализации байт-ориентированного режима MNP. По той простой причине, что процедура входа в протокол MNP3 заключается в обмене сторонами кадрами LR в байт-ориентированном режиме. Только согласовав с помощью этого кадра применение в дальнейшем бит-ориентированного режима, стороны синхронно в него переключаются. Таким образом, все вычислительные процедуры, присущие MNP2 - формирование кадра специфического формата, вычисление контрольной последовательности по специфическому образующему полиному, байтстаффинг и пр. - все это необходимо реализовывать для установки протокола MNP3. И в этой связи совершенно непонятна логика разработчиков некоторых дорогостоящих модемов, в которых байт-ориентированный режим MNP считается устаревшим и не поддерживается (например, ZyXEL U-1496). Не говоря уже о том, что это является прямым нарушением Рекомендации V.42: "An error-correcting entity that supports framing mode 3 must also support framing mode 2." (CCITT, Blue Book, Volume VIII - Fascicle VIII.1, Data communication over the telephone network, Geneva 1989, p. 349).
В качестве заметки на полях, хотелось бы обратить внимание sysop'ов BBS, пользующих ZyXEL, на такое его поведение. Полагая, что столь неплохо зарекомендовавший себя модем умеет все делать сам, операторы станций не подключают драйверы, эмулирующие MNP2. И тем самым практически исключают из числа своих абонентов тех несчастных, модемы которых аппаратно не поддерживают протоколы коррекции ошибок и которые вынуждены уповать только на программную реализацию MNP2.