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-байтный) имеет следующую структуру:
- Стартовый байт (SOH) — 0x01 (Start of Header). Обозначает начало нового пакета.
- Номер блока — однобайтовое число от 1 до 255. Нумерация циклическая: после 255 следует 0.
- Инвертированный номер блока — побитовое дополнение (255 — номер блока). Используется для проверки целостности заголовка.
- Данные — 128 байт полезной информации. Если передаваемый файл короче 128 байт в последнем блоке, оставшиеся байты заполняются символом SUB (0x1A, Ctrl-Z).
- Контрольная сумма — однобайтовая арифметическая сумма всех 128 байт данных (по модулю 256). В более поздних версиях (XMODEM-CRC) используется 16-битная циклическая избыточная проверка (CRC-16).
¶Процесс передачи
- Инициализация: Получатель отправляет символ NAK (0x15) каждые 10 секунд, пока не получит первый пакет.
- Передача: Отправитель, получив NAK, отправляет первый пакет (SOH, номер 1, инвертированный номер, 128 байт, контрольная сумма).
- Подтверждение: Получатель проверяет контрольную сумму и инвертированный номер. Если всё корректно, отправляет ACK (0x06) и ожидает следующий пакет. Если ошибка — отправляет NAK, и отправитель повторяет передачу того же пакета.
- Завершение: После передачи последнего блока отправитель отправляет символ 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 →


