При передаче данных по зашумленным телефонным линиям всегда существует вероятность, и она достаточно велика, что данные, переданные одним модемом (компьютером), будут приняты другим модемом в искаженном виде. Например, некоторые передаваемые байты могут изменить свое значение или даже просто исчезнуть.
Для того чтобы пользователь имел гарантии, что его данные переданы без ошибок, используются протоколы коррекции ошибок.
Общая форма передачи данных по протоколам с коррекцией ошибок следующая: данные передаются отдельными блоками (пакетами) по 16 - 20000 байт, в зависимости от качества связи. Каждый блок снабжается заголовком, в котором указана проверочная информация, например контрольная сумма блока. Принимающий компьютер самостоятельно подсчитывает контрольную сумму каждого блока и сравнивает ее с контрольной суммой из заголовка блока. Если эти две контрольные суммы совпали, принимающая программа считает, что блок передан без ошибок. В противном случае принимающий компьютер передает передающему запрос на повторную передачу этого блока.
Протоколы коррекции ошибок могут быть реализованы как на аппаратном уровне, так и на программном. Аппаратный уровень реализации более эффективен. Быстродействие аппаратной реализации протокола MNP примерно на 30% выше, чем программной.
Мы рассмотрим наиболее распространненные протоколы MNP1-10, V.24, V.24bis, Xmodem, Ymodem, Zmodem, Kermit, UUPC.
MNP (Microcom Network Protocols) - серия наиболее распространенных аппаратных протоколов, впервые реализованная на модемах фирмы Microcom. Эти протоколы обеспечивают автоматическую коррекцию ошибок и компрессию передаваемых данных.
На момент написания книги известны десять протоколов MNP1 - MNP10. Приведем их описания.
MNP1. Протокол коррекции ошибок, использующий асинхронный полудуплексный метод передачи данных. Это самый простой из протоколов MNP.
MNP2. Протокол коррекции ошибок, использующий асинхронный дуплексный метод передачи данных.
MNP3. Протокол коррекции ошибок, использующий синхронный дуплексный метод передачи данных между модемами (интерфейс модем - компьютер остается асинхронным).
Так как при асинхронной передаче используется десять бит на байт - восемь бит данных, стартовый бит и стоповый бит, а при синхронной только восемь, то в этом кроется возможность ускорить обмен данными на 20%.
MNP4. Протокол, использующий синхронный метод передачи, обеспечивает оптимизацию фазы данных, которая несколько улучшает неэффективные протоколы MNP2 и MNP3. Кроме того, при изменении числа ошибок на линии соответственно меняется и размер блоков передаваемых данных. При увеличении числа ошибок размер блоков уменьшается, увеличивая вероятность успешного прохождения отдельных блоков.
Эффективность этого метода состовляет около 20% по сравнению с простой передачей данных.
MNP5. Дополнительно к методам MNP4, MNP5 использует простой метод сжатия передаваемой информации. Символы часто встречающиеся в передаваемом блоке кодируются цепочками битов меньшей длины, чем редко встречающиеся символы. Дополнительно кодируются длинные цепочки одинаковых символов. Обычно при этом текстовые файлы сжимаются до 35% своей исходной длины. Вместе с 20% улучшениями в MNP4 это дает повышение эффективности до 50%.
Заметим, что если вы передаете уже сжатые (например, архиватором ARJ) данные, а в большинстве случаев это так и есть, дополнительного увеличения эффективности за счет сжатия данных модемом не происходит.
MNP6. Дополнительно к методам протокола MNP5 автоматически переключается между дуплексным и полудуплексным методами передачи в зависимости от типа информации. Протокол MNP6 также обеспечивает совместимость с протоколом V.29.
MNP7. По сравнению с ранними протоколами использует более эффективный метод сжатия данных.
MNP8. Нет информации.
MNP9. Использует протокол V.32 и соответствующий метод работы, обеспечивающий совместимость с низкоскоростными модемами.
MNP10 предназначен для обеспечения связи на сильно зашумленных линиях, таких, как линии сотовой связи, междугородные линии, сельские линии. Это достигается при помощи следующих методов:
При использовании модемов с аппаратной поддержкой протокола MNP, как правило, можно установить скорость работы последовательного порта вдвое выше скорости модема.
Все протоколы MNP совместимы между собой снизу вверх. При установлении связи происходит установка наивысшего возможного уровня MNP-протокола. Если же один из связывающихся модемов не поддерживает протокол MNP, то MNP-модем работает без MNP-протокола.
MNP-модем обеспечивает следующие режимы передачи данных:
Здесь мы приведем AT-команды, специфичные для модемов с аппаратной MNP коррекцией ошибок. У модемов без аппаратной поддержки MNP протоколов эти команды отсутствуют. На вашем модеме набор команд может несколько отличаться от представленного нами. Поэтому для получения более полных сведений обращайтесь к документации на ваш модем.
\An Устанавливает максимальный размер блока, используемый протоколом MNP при передаче данных. Для увеличения скорости обмена по хорошим линиям увеличте размер блока. Если связь неустойчива и возникает много ошибок, используйте более короткие блоки, так как это может уменьшить число повторных передач ошибочных блоков.
\A0 - максимальный размер блока - 64 байт.
\A1 - максимальный размер блока - 128 байт.
\A2 - максимальный размер блока - 192 байт.
\A3 - максимальный размер блока - 256 байт.
%An Определяет код, используемый командой \Cn при переходе из режима передачи данных с буферизацией и режима автоматической настройки в стандартный режим. Символ может иметь код от 0 до 127.
\Bn Команда вызывает передачу сигнала прерывания (BREAK). Длительность сигнала прерывания определяется параметром n (n от 1 до 9) в десятых долях секунды. Режим обработки прерывания определяется параметром команды \K.
\Cn Установка размера буфера для режимов передачи данных с буферизацией и для режима с автоматической настройкой.
\C0 - отменяет буферизацию и переходит в стандартный режим.
\C1 - устанавливает размер буфера 200 байт.
\C2 - разрешает переход в стандартный режим, если будет принят символ, определенный командой %An.
%Cn Управляет сжатием данных при передаче их по линии связи.
%C0 - запрещает сжатие данных (MNP5).
%C1 - разрешает сжатие данных (MNP5).
\En Управление эхо-печатью символов.
\E0 - запрещает эхо-печать символов.
\E1 - разрешает эхо-печать символов.
\Gn Устанавливает протокол обмена между модемами с использованием управляющих символов XON/XOFF. Осторожней используйте протокол XON/XOFF. Когда вы передаете двоичные файлы, после передачи символа XOFF передача данных приостановится до получения символа XON.
\G0 - отменяет протокол XON/XOFF.
\G1 - устанавливает протокол XON/XOFF.
\Jn Управляет скоростями передачи данных.
\J0 - разрешает использование различных скоростей передачи данных между модемами и между модемом и компьютером. Это позволяет повысить эффективность MNP протоколов.
\J1 - запрещает использование различных скоростей передачи данных между модемами и между модемом и компьютером.
\Kn Управляет процессом обработки прерывания после выполнения удаленным модемом команды \B. Подробности можно узнать из документации на ваш модем.
\Nn Устанавливает режим передачи данных.
\N0 - стандартный режим с буферизацией.
\N1 - режим прямой передачи.
\N2 - режим передачи с коррекцией ошибок и с буферизацией.
\N3 - режим передачи с коррекцией ошибок и автоматической настройкой.
\O Переводит модем из командного режима в режим передачи данных. Команда заставляет модем работать в режиме вызова независимо от того, является модем вызывающим или сам отвечает на вызов другого модема. В случае неудачи модем переходит в стандартный режим.
\P Команда производит запись телефонного номера в энергонезависимую память модема.
\Qn Команда устанавливает метод управления потоком между модемами и модемом и компьютером. В зависимости от возможностей оборудования такое управление может быть запрещено или разрешено. Если компьютер не поддерживает управление потоками данных, то такое управление запрещается; при этом скорость обмена данными через порт RS-232-C должна быть установлена равной или большей скорости обмена данными по линии. В противном случае допускается работа с различными скоростями. При пересылке двоичных данных рекомендуется использовать метод управления потоками данных с помощью сигналов CTS и RTS порта RS-232-C.
\Q0 - управление потоками данных запрещается.
\Q1 - определяет обмен данными с помощью протокола XON/XOFF, где посылка символа XOFF приостанавливает передачу данных до поступления символа XON, который возобновляет передачу.
\Q2 - устанавливает управление потоком данных с помощью сигналов CTS и RTS порта RS-232-C.
\S Запрашивает получение от модема его активной конфигурации. Это очень полезная команда, позволяющая определить текущее состояние модема.
\Tn Установка таймаута. Значение n меняется в интервале от 0 до 90 минут. Если в течение этого времени данные не передавались, связь разрывается. Значение n, равное 0, запрещает данную функцию.
\U Переводит модем из командного режима в режим передачи данных. При этом модем переключается в режим ответа независимо от того отвечает модем на звонок или сам вызывает другой модем.
\Vn Модификация сообщений от модема. При n = 0
результат представляется в стандартной форме, а
при n = 1 - в соответствии со стандартом MNP:
Стандартная форма |
|
Стандарт MNP |
|
CONNECT |
(1) |
CONNECT 0300/REL |
(20) |
CONNECT 1200 |
(5) |
CONNECT 1200/REL |
(22) |
CONNECT 2400 |
(10) |
CONNECT 2400/REL |
(23) |
%V Вывод информации, определенной фирмой - производителем модема.
\Xn Команда определяет, передавать или нет распознанные символы XON/XOFF между модемом и компьютером. При n = 0 символы не передаются, а при n = 1 - передаются.
\Y Производит переключение модема в режим передачи данных с коррекцией ошибок и буферизацией в момент, когда установлено соединение и модем находится в прямом или стандартном режиме. В случае неудачи модем возвращается в стандартный режим.
\Z Переключение модема из режима с коррекцией ошибок и буферизацией в стандартный режим в момент установления связи. Заметим, что даные, находящиеся в буфере, будут утеряны.
V.42. Протокол с коррекцией ошибок и преобразованием асинхронный-синхронный. Протокол использует метод компрессии, при котором определяется частота появления отдельных символьных строк и происходит их замена на последовательности символов меньшей длины (на токены). Этот метод компрессии носит название Lempel-Ziv. Данный метод компрессии обеспечивает 50% сжатие текстовых файлов. Вместе с 20% выигрышем от синхронного преобразования это увеличивает эффективность на 60%.
В отличие от протоколов нижнего уровня данные протоколы позволяют организовать прием и передачу файлов.
Этот протокол работает без коррекции ошибок. В результате при передаче файлов по телефонным линиям из-за шума принятый файл может сильно отличаться от передаваемого. Если вы передаете выполняемый файл, то ошибки при передаче могут стать роковыми - полученная программа не будет работать. Если же вы передаете короткие текстовые сообщения, то ошибки легко могут быть исправлены.
Наиболее распространены три разновидности протокола Xmodem:
Оригинальный протокол Xmodem разработал Вард Кристенсен (Ward Christensen) в 1977 году. Вард Кристенсен был одним из первых специалистов по протоколам обмена данными. В честь него этот протокол иногда называют также протоколом Кристенсена (Xmodem Christensen).
При передаче файлов с помощью протоколов Xmodem формат данных должен быть следующим: 8-битовые данные, один стоповый бит и отсутствие проверки на четность. Для передачи используется полудуплексный метод, т.е. данные могут передаваться в каждый момент времени только в одном направлении.
Протокол Xmodem Checksum передает данные пакетами по 128 байт. Вместе с пакетом передается его контрольная сумма. При получении пакета контрольная сумма вычисляется снова и сравнивается с суммой, вычисленной на передающей машине. Если эти две суммы совпадают, считается что пакет передан без ошибок.
Этот метод обеспечивает достаточно хорошую защиту от ошибок. Только один из 256 пакетов может содержать ошибки, хотя контрольная сумма правильная.
Более защищенным от ошибок является протокол Xmodem CRC (Cyclic Redundancy Check). Xmodem CRC - протокол с проверкой циклическим избыточным кодом. В нем 8-битовая контрольная сумма заменена на 16-битовый циклический избыточный код. Этот протокол гарантирует вероятность обнаружения ошибок, равную 99,9984%. Только один из 700 биллионов плохих пакетов будет иметь правильный CRC-код. Протокол Xmodem CRC также передает данные пакетами по 128 байт.
Если передача идет без ошибок, протокол 1К Xmodem увеличивает размер пакета с 128 до 1024 байт. При увеличении числа ошибок размер пакета снова уменьшается. Такое изменение длины пакета позволяет увеличить скорость передачи файлов.
В остальном протокол 1К Xmodem совпадает с протоколом Xmodem CRC.
Протокол Ymodem разработал Чак Форсберг (Chuck Forsberg) в 1984 - 1985 годах. Протокол Ymodem похож на протокол 1К Xmodem, но имеет одно отличие: протокол Ymodem может передавать или принимать за один заход несколько файлов.
Существует модификация протокола Ymodem - Ymodem G. Протокол Ymodem G предназначен для использования с модемами, автоматически осуществляющими коррекцию ошибок на аппаратном уровне. Например, MNP-модемы с аппаратной реализацией MNP. В этом протоколе упрощена защита от ошибок, так как ее выполняет сам модем. Не используйте этот протокол, если ваш модем не осуществляет аппаратную коррекцию ошибок.
Другой особенностью протокола Ymodem является то, что вместе с файлом передаются все его атрибуты. В результате как минимум имя файла и дата останутся неизменными.
Zmodem - это достаточно быстрый протокол передачи данных, использующий окна. Zmodem осуществляет передачу данных пакетами по несколько штук в окне. При этом принимающий данные компьютер не передает сигнал подтверждения или сигнал переспроса неправильного пакета, пока не получит все пакеты в окне.
Протокол Zmodem, так же как и протокол 1К Xmodem, может изменять длину пакета (блока) от 64 до 1024 байт в зависимости от качества линии.
Кроме того, протокол обладает следующей полезной особенностью: если при передаче файла произошел сбой на линии и вы не успели передать весь файл, то в следующий раз при передаче этого же файла он автоматически начнет передаваться с того места, где произошел обрыв связи. Таким образом, очень большие файлы вы можете передавать по частям.
Из всех протоколов верхнего уровня, описанных выше, этот протокол самый быстрый и удобный.
Особенностью протокола Bimodem является возможность одновременной пересылки двух файлов в разных направлениях. Кроме того, одновременно с передачей файлов вы можете побеседовать с оператором удаленного компьютера при помощи клавиатуры.
Широко известны две разновидности протокола Kermit - стандартный и Super Kermit. Этот протокол был разработан в Колумбийском университете в 1981 году для связи между различными типами компьютеров, включая большие компьютеры, мини-компьютеры и персональные компьютеры. В отличие от протоколов Xmodem и Ymodem он использует для передачи данных пакеты переменной длины с максимальным размером 94 байт.
Так же как и Ymodem, протокол Kermit может передавать или принимать несколько файлов за один сеанс.
Протокол Super Kermit предназначен специально для использования в сетях типа Telenet или Tymnet. Эти сети имеют очень большие задержки при передаче данных. Так что если ждать подтверждения для каждого пакета, это может привести к резкому снижению скорости обмена. В протоколе Super Kermit эта проблема решается следующим способом. Несколько пакетов передается за один раз (в одном окне). Все действия по контролю над ошибками остаются, за исключением того, что принимающий данные компьютер не передает сигнал подтверждения или сигнал на переспрос неправильного пакета, пока не получит все пакеты в окне.
В результате использования такого механизма происходит резкое сокращение времени задержки. Окно может содержать от одного до 31 пакета.
В дополнение Kermit изпользует также
предварительную компрессию данных для
увеличения эффективной скорости обмена данными.