WikiDer > YMODEM
Протокол связи | |
Цель | протокол передачи файлов |
---|---|
Разработчики) | Чак Форсберг |
Введено | 1985 |
На основе | XMODEM |
Под влиянием | ZMODEM |
Аппаратное обеспечение | модемы |
YMODEM это протокол передачи файлов используется между микрокомпьютеры соединены вместе с использованием модемы. В основном он использовался для передачи файлов в и из системы досок объявлений. YMODEM был разработан Чак Форсберг как расширение XMODEM и впервые был реализован в его CP / M СЛАДКИЙ КАРТОФЕЛЬ программа. Первоначально также известный как YAM, он был официально назван "YMODEM" в 1985 году. Уорд Кристенсен, автор оригинального XMODEM.
YMODEM расширил XMODEM тремя способами, объединив функции, обнаруженные в других расширенных вариантах XMODEM. Как и XMODEM-CRC, YMODEM заменил 8-битный контрольная сумма с 16-битным циклическая проверка избыточности (CRC), но сделал это формой исправления по умолчанию вместо необязательной. Из TeLink он добавил заголовок «блок 0», который отправлял имя файла и размер, что позволяло пакетную передачу (несколько файлов в одном сеансе) и избавляло от необходимости добавлять набивка в конце файла. Наконец, YMODEM позволил увеличить размер блока с исходных 128 байт данных до 1024, как в XMODEM-1k, что значительно повысило пропускную способность более быстрых модемов.
Форсберг построил стандарт со всеми этими функциями в качестве параметров среды выполнения, позволяя одному драйверу протокола возвращаться к XMODEM-CRC или даже XMODEM при подключении к системам, отличным от YAM. Он считал, что программисты захотят реализовать как можно больше этих функций на любой платформе. Он был встревожен, обнаружив, что большинство реализаций на самом деле предоставляют не более 1 КБ блока с CRC-16, не имея возможности реализовать «блок 0», продолжая использовать имя YMODEM. Результатом стал выпуск множества взаимно несовместимых реализаций YMODEM и использование названия YMODEM Batch чтобы четко указать те версии, которые поддерживают полный стандарт.
Функции
XMODEM
Оригинал XMODEM был очень простым протоколом, и в этом причина его успеха; он мог быть реализован практически на любой машине того времени, даже с очень ограниченными процессорами и хранилищем. Он работал, разбивая данные для отправки на 128-байтовые пакеты, добавляя 3-байтовый заголовок и 1-байтовый контрольная сумма нижний колонтитул и отправка полученных 132-байтовых пакетов по порядку. Принимающий компьютер пересчитал контрольную сумму из 128 байтов данных, и, если она совпала с контрольной суммой, отправленной в нижнем колонтитуле, он отправил обратно ACK, и если он не совпадает, НАК. Когда отправитель получил ACK он отправил следующий пакет, а НАК заставил его повторно отправить последний.
С протоколом возник ряд проблем. Использование простой контрольной суммы означало, что некоторые распространенные ошибки могли остаться незамеченными. Небольшой размер пакета и необходимость ждать ACK или же НАК привело к снижению производительности на каналах с более высокой скоростью или каналах со значительной задержкой. Наконец, поскольку передача не содержала подробностей файла, каждый файл приходилось запускать вручную, что могло быть утомительной работой при передаче большого количества небольших файлов.
Решения этих проблем были разработаны в начале 1980-х годов. XMODEM-CRC заменил контрольную сумму на 16-битную циклическая проверка избыточности (CRC), который был намного более устойчивым к распространенным ошибкам. XMODEM-1k увеличил размер пакета со 128 до 1024 байтов, улучшив производительность высокоскоростных соединений, в то время как другие, такие как WXMODEM и SEAlink, вместо этого были представлены раздвижное окно системы для борьбы с производительностью и задержкой за счет некоторой сложности. Третьи, такие как TeLink и MODEM7, добавляли информацию о файлах, так что одна передача могла содержать несколько файлов, что позволяло отправлять пакеты файлов с помощью одной команды.
YMODEM
К сожалению, ни одна из этих расширенных версий не включала все этих функций. Чак Форсберг, автор CP / M «Еще одна программа модема», или YAM, решила написать драйвер единого протокола, который поддерживал бы все эти параметры. Когда пользователи запускали передачу, они могли указать, какие параметры они хотят в командной строке, например, говоря, что они хотят использовать CRC. Протокол был написан таким образом, чтобы попытаться использовать этот стиль, но изящно откатиться, чтобы соответствовать тем возможностям, которые реализовало удаленное программное обеспечение.
Прервать
Одна из проблем с исходным XMODEM заключалась в том, что не было определенного способа прервать начатую передачу. Нормальным решением было отправить НАКs для каждого последующего пакета, если пользователь запросил его. Поскольку протокол XMODEM определил ограничение в десять НАКs, чтобы прервать отправку, и для отправки каждого пакета может потребоваться секунда, это означало, что имелась задержка в десять секунд, когда отправитель постоянно отправлял данные, которые просто игнорировались.
В некоторых реализациях добавлена возможность отправки МОЖЕТ вместо ACK или же НАК в конце полученного пакета, чтобы указать на прерывание. К сожалению, была вероятность, что МОЖЕТ может быть вызван линейным шумом и вызвать прерывание. Таким образом, YAM немного изменил это, чтобы потребовать два МОЖЕТs подряд, что немедленно выполнит "постепенное прерывание" на стороне отправителя.
CRC
Поддержка CRC была введена в XMODEM-CRC. Это было очень простое изменение исходного протокола; по запросу получатель попытается инициировать передачу, отправив начальный C вместо НАК. Если бы удаленный отправитель поддерживал опцию CRC, он начал бы отправлять пакеты как обычно, но с 16-битным CRC в нижнем колонтитуле, а не с 1-байтовой контрольной суммой. YAM поддержал этот вариант без изменений.
1к
1024-байтовые пакеты были введены в XMODEM-1k. Эта версия не меняла триггерный символ получателя, поэтому отправитель не мог узнать, поддерживает ли получатель пакеты большего размера. Вместо этого XMODEM-1k был представлен как отдельный протокол на обоих концах соединения. Когда такое соединение было запущено, отправитель мог выбрать отправку либо 1024 байта в пакете, либо 128 байтов, указав большее значение с помощью STX символ в заголовке, а не обычный SOH. Обычно только последние несколько пакетов будут использовать меньшие пакеты, чтобы избежать отправки больших объемов заполнения. 1k также предполагал CRC для всех соединений. YAM поддерживал 1k без изменений.
Нулевой пакет
Для поддержки автоматических переводов FidoNet mail, в MODEM7 появилась возможность отправлять имя файла в виде обычного текста перед отправкой первого блока данных. Это было ненадежно, и TeLink улучшил это, поместив имя файла и, возможно, другие данные, такие как дата создания и длина файла, в полный 128-байтовый пакет. XMODEM начал передачу с пакета номер один, поэтому TeLink отправил этот пакет как номер ноль. Этот «нулевой пакет» или «нулевой блок» стал обычным явлением в других системах FidoNet, таких как SEAlink и другие.
YAM поддерживал формат нулевого пакета, но его игнорировали многие сторонние реализации YMODEM. Когда одна реализация попыталась отправить нулевой пакет неосведомленной версии, получатель, естественно, НАК пакет, поскольку нулевой пакет является недопустимым. Тогда отправитель увидит НАК как ошибку передачи и попробуйте отправить пакет еще раз, сделав это десять раз, прежде чем потерпеть неудачу.
По причинам, которые не совсем ясны, многие реализации YMODEM не реализовали эту функцию. Поскольку они не знали об этом, они отправили НАК, инициируя серию попыток повторной отправки до отказа. Это означало, что если пользователь решил использовать совместимый YMODEM с несовместимой версией, передача не удалась. Тем не менее, такие несовместимые версии были обычным явлением.
В результате YMODEM и YMODEM Batch часто отображались как два отдельных протокола. Дальнейшая путаница была вызвана схожестью между XMODEM-1k и этими несовместимыми YMODEM, которые были похожи до такой степени, что часто ошибочно указывались как одинаковые.
Поддержка потоковой передачи
YMODEM-g - вариант потоковой передачи, используемый для безошибочных соединений. Он не ждет ACK быть полученным перед отправкой следующего пакета. Протокол быстрее, чем YMODEM, потому что нет задержка вводится между пакетами, но не имеет возможности исправлять ошибки. Он зависит от отсутствия ошибок в базовом соединении, что характерно для модемов, поддерживающих MNP например.
Обычно передача YMODEM запускается получателем, отправляющим C чтобы указать, что он хочет использовать 128-байтовый формат с CRC, или НАК если он желает использовать исходную систему контрольных сумм. Когда требуется протокол g, передача вместо этого запускается отправкой грамм. Если отправитель не поддерживает g-протокол, он считает это ошибкой и игнорирует ее, но если он поддерживает g, он начинает отправлять пакеты в непрерывном потоке. Он ожидает только одного ACK после получения последнего пакета, на что указывает наличие EOT символ в данных. YMODEM-g предполагает, что доступно 1 Кб пакетов.
Однако, несмотря на то, что этот протокол потенциально быстрее, чем ZMODEM он по-прежнему использовался редко. Частично это было связано с отсутствием других функций, но также и с более серьезной проблемой. До появления 16550 UART, существовал значительный риск переполнение буфера на Серийный порт. Хотя это может быть обнаружено YMODEM-g, это не может быть исправлено, поскольку повторная передача блока невозможна. Получатель должен будет отменить и перезапустить всю передачу с самого начала. ZMODEM с другой стороны, есть возможность возобновления передачи, что сделало его более привлекательным.
Рекомендации
- Ссылка на протокол XMODEM / YMODEM, автор - Чак Форсберг, 10 октября 1985 г.
- Ссылка на протокол XMODEM / YMODEM, автор - Чак Форсберг, 18 июня 1988 г. (документ переформатирован 14 октября 1988 г.) (HTML-версия с текстовыми проблемами)