Из Википедии, бесплатной энциклопедии
  (Перенаправлено с Ymodem )
Перейти к навигации Перейти к поиску

YMODEM - это протокол передачи файлов, используемый между микрокомпьютерами, соединенными вместе с помощью модемов . В основном он использовался для передачи файлов в системы досок объявлений и обратно . YMODEM был разработан Чаком Форсбергом как расширение XMODEM и впервые был реализован в его программе CP / M YAM . Первоначально также известный как YAM, он был официально назван "YMODEM" в 1985 году Уордом Кристенсеном , автором оригинального XMODEM.

YMODEM расширил XMODEM тремя способами, объединив функции, обнаруженные в других расширенных разновидностях XMODEM. Как и XMODEM-CRC, YMODEM заменил 8-битную контрольную сумму на 16 -битную проверку с помощью циклического избыточного кода (CRC), но сделал ее формой исправления по умолчанию вместо необязательной. Из TeLink он добавил заголовок «block 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 , а если она не совпала , 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, он начинает отправлять пакеты в непрерывном потоке. Он ожидает только одного ACK после получения последнего пакета, на что указывает наличие символа EOT в данных. YMODEM-g предполагает, что доступны пакеты размером 1 КБ.

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

Ссылки [ править ]

  • Ссылка на протокол XMODEM / YMODEM, автор Чак Форсберг , 10 октября 1985 г.
  • Ссылка на протокол XMODEM / YMODEM, автор Чак Форсберг , 18 июня 1988 г. (документ отформатирован 14 октября 1988 г.) (HTML-версия с проблемами текста)