YMODEM

редактировать
YMODEM
Протокол связи
Цельпротокол передачи файлов
Разработчик (и)Чак Форсберг
Представлен1985; 35 лет назад (1985)
На основеXMODEM
InfluencedZMODEM
Аппаратныемодемы

YMODEM - это используемый протокол передачи файлов между микрокомпьютерами, соединенными вместе с помощью модемов. В основном он использовался для передачи файлов в системы доски объявлений и обратно. YMODEM был разработан Чаком Форсбергом как расширение XMODEM и впервые был реализован в его программе CP/M YAM . Первоначально также известный как 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 для четкого обозначения тех версий, которые действительно поддерживали полный стандарт.

Содержание
  • 1 Функции
    • 1.1 XMODEM
    • 1.2 YMODEM
      • 1.2.1 Прервать
      • 1.2.2 CRC
      • 1.2.3 1k
      • 1.2.4 Нулевой пакет
  • 2 Поддержка потоковой передачи
  • 3 Ссылки
Возможности

XMODEM

Исходный XMODEM был очень простым протоколом, и именно в этом причина его успеха; он мог быть реализован практически на любой машине того времени, даже с очень ограниченными процессорами и хранилищем. Он работал, разбивая данные для отправки на 128-байтовые пакеты, добавляя 3-байтовый заголовок и 1-байтовый нижний колонтитул контрольной суммы, и отправляя полученные 132-байтовые пакеты. Для того, чтобы. Принимающий компьютер пересчитал контрольную сумму из 128 байтов данных, и если она совпала с контрольной суммой, отправленной в нижнем колонтитуле, он отправил обратно ACK, а если она не совпала, NAK. Когда отправитель получил ACK, он отправил следующий пакет, а NAKзаставил его повторно отправить последний.

Возник ряд проблем с протоколом. Использование простой контрольной суммы означало, что некоторые распространенные ошибки могли остаться незамеченными. Небольшой размер пакета и требование ждать ACKили NAKпривели к снижению производительности на высокоскоростных каналах связи или каналах со значительной задержкой. Наконец, поскольку передача не содержала подробностей о файле, каждый файл приходилось запускать вручную, что могло быть сложной задачей, когда передавалось много небольших файлов.

Решения этих проблем были разработаны в начале 1980-х годов. XMODEM-CRC заменил контрольную сумму на 16-битную циклическую проверку избыточности (CRC), которая была намного более устойчивой к распространенным ошибкам. XMODEM-1k увеличил размер пакета со 128 до 1024 байтов, улучшив производительность высокоскоростных соединений, в то время как другие, такие как WXMODEM и SEAlink, вместо этого представили системы с скользящим окном для борьбы как с производительностью, так и с задержкой, за счет некоторая сложность. Третьи, такие как TeLink и MODEM7, добавляли информацию о файлах, так что одна передача могла содержать несколько файлов, что позволяло отправлять пакеты файлов с помощью одной команды.

YMODEM

К сожалению, ни одна из этих расширенных версий не включала все эти функции. Чак Форсберг, автор CP / M «Еще одна программа модема», или YAM, решил написать единственный драйвер протокола, который поддерживал бы все эти параметры. Когда пользователи запускали передачу, они могли указать, какие параметры им нужны, в командной строке, например, говоря, что они хотят использовать CRC. Протокол был написан таким образом, чтобы попытаться использовать этот стиль, но с изящным откатом, чтобы соответствовать тем возможностям, которые реализовало удаленное программное обеспечение.

Прерывание

Одна проблема с исходным XMODEM заключалась в том, что не было определенного способа прервать передачу после начала. Обычным решением было посылать NAKкаждому последующему пакету, если пользователь запрашивал его. Поскольку протокол XMODEM определил ограничение в десять NAKдля прерывания отправки, и для отправки каждого пакета может потребоваться секунда, это означало, что была задержка в десять секунд, когда отправитель постоянно отправлял данные, которые просто игнорировались.

Некоторые реализации добавили возможность отправлять CANвместо ACKили NAKв конце полученного пакета, чтобы указать на прерывание.. К сожалению, была вероятность того, что CANможет быть сгенерирован шумом в линии и вызвать прерывание. Таким образом, YAM немного изменил это, чтобы потребовать двух последовательных CAN, которые немедленно выполнят "постепенное прерывание" на стороне отправителя.

CRC

Поддержка CRC была введена в XMODEM-CRC. Это было очень простое изменение исходного протокола; при запросе получатель попытается инициировать передачу, отправив начальный Cвместо NAK. Если бы удаленный отправитель поддерживал опцию CRC, он начал бы отправлять пакеты как обычно, но с 16-битным CRC в нижнем колонтитуле, а не с 1-байтовой контрольной суммой. YAM поддержал этот вариант без изменений.

1k

1024-байтовые пакеты были введены в XMODEM-1k. Эта версия не меняла триггерный символ получателя, поэтому отправитель не мог узнать, поддерживает ли получатель пакеты большего размера. Вместо этого XMODEM-1k был представлен как отдельный протокол на обоих концах соединения. Когда такое соединение было запущено, отправитель мог выбрать для отправки либо 1024 байта в пакете, либо 128, что указывает на большее значение с помощью символа STXв заголовке, а не обычного SOH. Обычно только последние несколько пакетов будут использовать меньшие пакеты, чтобы избежать отправки больших объемов заполнения. 1k также предполагает CRC для всех соединений. YAM поддерживал 1k без изменений.

Нулевой пакет

Для поддержки автоматической передачи почты FidoNet в MODEM7 появилась возможность отправлять имя файла в виде простого текста перед отправкой первого блока данных. Это было ненадежно, и TeLink улучшил это, поместив имя файла и, возможно, другие данные, такие как дата создания и длина файла, в полный 128-байтовый пакет. XMODEM начал передачу с пакета номер один, поэтому TeLink отправил этот пакет как номер ноль. Этот «нулевой пакет» или «нулевой блок» стал обычным явлением в других системах FidoNet, таких как SEAlink и другие.

YAM поддерживает формат нулевого пакета, но его игнорируют многие сторонние реализации YMODEM. Когда одна реализация попыталась отправить нулевой пакет неосведомленной версии, получатель, естественно, NAKпринял пакет, поскольку нулевой пакет является недопустимым. Тогда отправитель увидит NAKкак ошибку передачи и попытается отправить пакет еще раз, предприняв десять попыток, прежде чем потерпит неудачу.

По не совсем понятным причинам во многих реализациях YMODEM эта функция не реализована. Поскольку они не знали об этом, они отправили NAK, инициировав серию попыток повторной отправки, прежде чем потерпели неудачу. Это означало, что если пользователь решил использовать совместимый YMODEM с несовместимой версией, передача не удалась. Тем не менее, такие несовместимые версии были обычным явлением.

В результате YMODEM и YMODEM Batch часто отображались как два отдельных протокола. Дальнейшая путаница была создана из-за сходства между XMODEM-1k и этими несовместимыми YMODEM, которые были похожи до такой степени, что часто ошибочно указывались как одинаковые.

Поддержка потоковой передачи

YMODEM-g - это вариант потоковой передачи, используемый для безошибочных соединений. Он не ждет получения ACK перед отправкой следующего пакета. Протокол быстрее, чем YMODEM, потому что между пакетами не вводится задержка , но он не имеет возможности исправлять ошибки. Он зависит от того, что базовое соединение не содержит ошибок, что имеет место, например, для модемов, поддерживающих MNP.

Обычно передача YMODEM запускается получателем, отправляющим C, чтобы указать, что он хочет использовать 128-байтовый формат с CRC, или NAK, если он желает использовать исходную систему контрольных сумм. Когда требуется g-протокол, передача вместо этого запускается отправкой G. Если отправитель не поддерживает g-протокол, он считает это ошибкой и игнорирует ее, но если он поддерживает g, он начинает отправлять пакеты в непрерывном потоке. Он ожидает только одного ACKпосле получения последнего пакета, на что указывает наличие символа EOTв данных. YMODEM-g предполагает, что доступны пакеты размером 1 КБ.

Однако, несмотря на то, что этот протокол потенциально быстрее, чем ZMODEM, он по-прежнему использовался редко. Частично это было связано с отсутствием других функций, но также и с более серьезной проблемой. До появления 16550 UART существовал значительный риск переполнения буфера на последовательном порту. Хотя это может быть обнаружено YMODEM-g, это не может быть исправлено, поскольку повторная передача блока невозможна. Получатель должен будет отменить и перезапустить всю передачу с самого начала. ZMODEM, с другой стороны, имеет возможность возобновления передачи, что делает его более привлекательным.

Ссылки
Последняя правка сделана 2021-06-22 08:58:53
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте