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

XMODEM

XMODEM — это протокол передачи данных, разработанный в 1977 году Уордом Кристенсеном (Ward Christensen) для исправления ошибок при передаче файлов по асинхронным последовательным линиям связи. Относится к классу протоколов с автоматическим запросом повторения (ARQ) и использует метод остановки и ожидания (stop-and-wait). XMODEM стал одним из первых широко распространённых протоколов для передачи двоичных файлов через модемы и прямые соединения, заложив основу для последующих протоколов (YMODEM, ZMODEM).

История

Протокол XMODEM был создан в эпоху ранних компьютерных BBS (электронных досок объявлений) и любительских сетей. Уорд Кристенсен, один из пионеров компьютерной связи, разработал его для своей программы MODEM, работавшей под управлением операционной системы CP/M. Первая версия протокола, известная как «MODEM», была опубликована в 1977 году. Позднее, в 1978 году, Кристенсен и Рэнди Сьюсс (Randy Suess) использовали его в своей BBS — CBBS, первой в мире компьютерной доске объявлений.

Первоначально протокол не имел стандартизированного названия. Термин «XMODEM» закрепился позже, когда появились альтернативные протоколы (например, YMODEM). XMODEM был реализован в многочисленных терминальных программах для MS-DOS, CP/M и ранних версий Windows, таких как Kermit, Telix, Procomm Plus.

Принцип работы

XMODEM работает по асинхронному последовательному интерфейсу (RS-232) с типичной конфигурацией: 8 бит данных, 1 стоповый бит, без контроля чётности. Протокол использует метод «остановки и ожидания»: отправитель передаёт один блок данных (пакет) и ожидает от получателя подтверждения (ACK) или отрицательного подтверждения (NAK). Если получен NAK или истёк тайм-аут, отправитель повторяет передачу того же блока.

Формат пакета

Пакет XMODEM (стандартный, 128-байтный) имеет следующую структуру:

  1. Стартовый байт (SOH) — 0x01 (Start of Header). Обозначает начало нового пакета.
  2. Номер блока — однобайтовое число от 1 до 255. Нумерация циклическая: после 255 следует 0.
  3. Инвертированный номер блока — побитовое дополнение (255 — номер блока). Используется для проверки целостности заголовка.
  4. Данные — 128 байт полезной информации. Если передаваемый файл короче 128 байт в последнем блоке, оставшиеся байты заполняются символом SUB (0x1A, Ctrl-Z).
  5. Контрольная сумма — однобайтовая арифметическая сумма всех 128 байт данных (по модулю 256). В более поздних версиях (XMODEM-CRC) используется 16-битная циклическая избыточная проверка (CRC-16).

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

  1. Инициализация: Получатель отправляет символ NAK (0x15) каждые 10 секунд, пока не получит первый пакет.
  2. Передача: Отправитель, получив NAK, отправляет первый пакет (SOH, номер 1, инвертированный номер, 128 байт, контрольная сумма).
  3. Подтверждение: Получатель проверяет контрольную сумму и инвертированный номер. Если всё корректно, отправляет ACK (0x06) и ожидает следующий пакет. Если ошибка — отправляет NAK, и отправитель повторяет передачу того же пакета.
  4. Завершение: После передачи последнего блока отправитель отправляет символ EOT (0x04, End of Transmission). Получатель подтверждает ACK. Если получатель хочет отменить передачу, он отправляет CAN (0x18).

Версии и модификации

Со временем появилось несколько вариантов XMODEM, устранявших недостатки исходного протокола:

  • XMODEM-CRC: Использует 16-битную CRC (CRC-16) вместо однобайтовой контрольной суммы. Получатель сигнализирует о поддержке CRC, отправляя символ 'C' (0x43) вместо NAK при инициализации. Если отправитель не поддерживает CRC, он игнорирует 'C' и ждёт NAK.
  • XMODEM-1k: Увеличивает размер пакета до 1024 байт. Использует стартовый байт STX (0x02) вместо SOH. Увеличивает пропускную способность на линиях с низкой задержкой.
  • XMODEM-G: Отключает подтверждение на каждый пакет (режим «потоковой» передачи). Отправитель передаёт пакеты непрерывно, а получатель может только отменить передачу. Используется на линиях с очень низким уровнем ошибок (например, модемы с коррекцией ошибок MNP).

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

  • Низкая эффективность на линиях с большой задержкой: Из-за метода остановки и ожидания пропускная способность резко падает при увеличении задержки распространения сигнала (например, спутниковая связь).
  • Отсутствие контроля потока: Протокол не управляет скоростью передачи данных, полагаясь только на подтверждения.
  • Ограниченный размер пакета: 128 байт — малый размер для современных линий, что приводит к высоким накладным расходам на заголовки.
  • Нет поддержки передачи имени файла, даты, размера: Протокол передаёт только содержимое файла. Имя и метаданные должны быть согласованы заранее.
  • Циклическая нумерация блоков: После 255 блоков нумерация обнуляется, что может вызвать путаницу при передаче больших файлов (более 32 КБ в стандартной версии).

Применение

Несмотря на устаревание для современных высокоскоростных сетей, XMODEM и его производные применяются в следующих областях:

  • Встраиваемые системы: Загрузка прошивки в микроконтроллеры и ПЛИС через последовательный порт (UART). Простота реализации делает его популярным в средах с ограниченными ресурсами.
  • Терминальные программы: Поддержка XMODEM присутствует во многих эмуляторах терминала (PuTTY, Tera Term, HyperTerminal) для передачи файлов через последовательный порт.
  • Спутниковая связь и радиолюбительство: Используется в протоколах пакетной радиосвязи (например, AX.25) из-за устойчивости к помехам.
  • Исторические системы: Восстановление данных со старых компьютеров и BBS.

Влияние

XMODEM стал образцом для последующих протоколов. YMODEM (1985, Чак Форсберг) расширил XMODEM, добавив поддержку пакетов размером 1024 байта, передачу имени файла, даты и размера, а также возможность передачи нескольких файлов за один сеанс. ZMODEM (1986, Чак Форсберг) предложил потоковую передачу с возможностью возобновления прерванной передачи (crash recovery) и более эффективное управление потоком.

Источники

  • Christensen, W. (1977). XMODEM Protocol Description. Original documentation published on CP/M User Group.
  • Christensen, W., & Suess, R. (1978). CBBS — The First BBS. Byte Magazine.
  • Tanenbaum, A. S. (2010). Computer Networks (5th ed.). Pearson.
  • Stevens, W. R. (1994). TCP/IP Illustrated, Volume 1. Addison-Wesley.
  • RFC 908 — Reliable Data Protocol (содержит общие принципы ARQ, используемые в XMODEM).
  • Описание протокола XMODEM в документации к программе Telix (1986).

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

На главную BFOmetr →