Открыть сервис

YMODEM

YMODEM — это протокол передачи данных, используемый для обмена файлами через последовательные каналы связи (например, через COM-порт, модем или эмулятор терминала). Относится к семейству протоколов, основанных на более раннем протоколе XMODEM, и представляет собой его усовершенствованную версию. YMODEM был разработан Чаком Форсбергом (Chuck Forsberg) в 1980-х годах как часть пакета программного обеспечения для передачи файлов по модему.

История

Протокол YMODEM был создан в ответ на ограничения оригинального протокола XMODEM, который был разработан Уордом Кристенсеном в 1977 году. XMODEM передавал файлы блоками фиксированного размера (обычно 128 байт) и не поддерживал передачу нескольких файлов за один сеанс, а также не включал информацию об имени файла, его размере или дате модификации. YMODEM, впервые реализованный в программе YAM (Yet Another Modem) Чаком Форсбергом, устранил эти недостатки.

Протокол получил распространение в среде BBS (Bulletin Board System) и среди пользователей модемной связи в 1980-х и начале 1990-х годов. Позднее он был вытеснен более быстрыми и надёжными протоколами, такими как ZMODEM, но остаётся актуальным для работы с устаревшим оборудованием, встроенными системами и при эмуляции терминалов.

Отличия от XMODEM

YMODEM является прямым развитием XMODEM и сохраняет с ним обратную совместимость на уровне базовой механики передачи. Основные усовершенствования:

  • Передача нескольких файлов: YMODEM поддерживает пакетную передачу (batch mode), позволяя передать несколько файлов за одно соединение без повторного установления связи.
  • Информация о файле: перед передачей данных отправляется заголовочный блок (блок 0), который содержит имя файла, его размер в байтах и метку времени (дату и время модификации). Это позволяет принимающей стороне автоматически создавать файл с правильным именем и размером.
  • Переменный размер блока: в отличие от XMODEM, где размер блока фиксирован (128 байт), YMODEM может использовать блоки размером 1024 байта (1 КБ), что значительно увеличивает скорость передачи на каналах с низким уровнем помех. При обнаружении ошибок протокол может автоматически переключаться на блоки размером 128 байт для повышения надёжности.
  • Контрольная сумма: YMODEM поддерживает как 8-битную контрольную сумму (CRC-8), так и 16-битную циклическую избыточную проверку (CRC-16), которая обеспечивает более высокую надёжность обнаружения ошибок, чем простая контрольная сумма XMODEM.

Процедура передачи

Инициализация

Передача по YMODEM начинается с того, что принимающая сторона отправляет символ «C» (ASCII 67) или NAK (ASCII 21), в зависимости от того, какой метод проверки ошибок используется (CRC или контрольная сумма). Отправитель, получив этот сигнал, начинает передачу.

Передача заголовка (блок 0)

Первым передаётся блок номер 0 (нулевой блок). Он имеет размер 128 байт и содержит:

  • Имя файла (строка, заканчивающаяся нулевым байтом).
  • Размер файла (в виде строки десятичных цифр, заканчивающейся нулевым байтом).
  • Метку времени (в формате Unix timestamp, опционально).
  • Оставшаяся часть блока заполняется нулями.

Если передаётся несколько файлов, после завершения передачи одного файла процедура повторяется для следующего. Окончание пакетной передачи сигнализируется отправкой блока 0 с пустым именем файла (только нулевой байт).

Передача данных

После успешного приёма блока 0 начинается передача блоков данных. Каждый блок данных состоит из:

  • Номера блока (1 байт, циклически повторяется от 1 до 255).
  • Дополнения номера блока (1 байт, равен 255 минус номер блока).
  • Данных (128 или 1024 байта).
  • Контрольной суммы (1 байт для 8-битной суммы или 2 байта для CRC-16).

Принимающая сторона подтверждает каждый блок символом ACK (ASCII 6) в случае успеха или NAK (ASCII 21) в случае ошибки. При получении NAK отправитель повторяет передачу того же блока. После определённого числа неудачных попыток (обычно 10) передача прерывается.

Завершение

После передачи последнего блока данных отправитель ждёт подтверждения. Затем, если передаётся несколько файлов, начинается передача следующего файла. Если файлов больше нет, отправитель передаёт пустой блок (EOT, символ ASCII 4), и принимающая сторона завершает сеанс.

Варианты и модификации

Существует несколько разновидностей YMODEM, которые отличаются деталями реализации:

  • YMODEM-g: модификация, в которой отправитель не ждёт подтверждения (ACK) после каждого блока, а передаёт данные непрерывно. Это увеличивает скорость, но требует канала с очень низким уровнем ошибок, так как при возникновении ошибки передача прерывается. YMODEM-g часто использовался в программах для прямого соединения компьютеров (null-modem).
  • YMODEM-1K: вариант, в котором размер блока данных по умолчанию составляет 1024 байта, а не 128. Это стандартное поведение для большинства реализаций YMODEM.
  • YMODEM с CRC-16: обязательное использование 16-битной контрольной суммы вместо 8-битной. Этот вариант стал стандартом де-факто.

Применение

YMODEM применялся и применяется в следующих областях:

  • BBS и модемная связь: в 1980-х и 1990-х годах YMODEM был одним из основных протоколов для загрузки и выгрузки файлов на BBS.
  • Эмуляторы терминалов: программы, такие как HyperTerminal (входит в состав Windows до версии 7), Telix, Procomm Plus, поддерживают YMODEM для передачи файлов через последовательный порт.
  • Встроенные системы и микроконтроллеры: YMODEM часто используется для прошивки микроконтроллеров и загрузки программного обеспечения в устройства с ограниченными ресурсами, так как он прост в реализации и не требует сложной инфраструктуры.
  • Системы резервного копирования и восстановления: в некоторых промышленных и серверных системах YMODEM применяется для передачи данных при аварийном восстановлении через консольный порт.

Критика и ограничения

Несмотря на свои улучшения по сравнению с XMODEM, YMODEM имеет ряд недостатков:

  • Низкая эффективность на каналах с высокими задержками: из-за необходимости подтверждения каждого блока (за исключением YMODEM-g) протокол неэффективен на каналах с высокой задержкой, таких как спутниковая связь.
  • Отсутствие сжатия: YMODEM не поддерживает сжатие данных на уровне протокола, что снижает скорость передачи на медленных каналах.
  • Устаревшая архитектура: протокол был разработан для условий модемной связи 1980-х годов и не оптимизирован для современных высокоскоростных каналов. Более современные протоколы, такие как ZMODEM, предлагают автоматическое сжатие, возобновление прерванной передачи и более высокую скорость.

См. также

Источники

  • Forsberg, Chuck. «YMODEM: A File Transfer Protocol». 1985.
  • Таненбаум, Э. С. «Компьютерные сети». 5-е издание. — СПб.: Питер, 2012.
  • RFC-подобные описания протокола в документации к программе YAM (Yet Another Modem).
  • Справочные материалы по эмуляторам терминалов (HyperTerminal, Telix).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →