Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Описание ZMODEM протокола.

Описание ZMODEM протокола

------ - - ----- ---- ----- - -
-- --- --- - - - -- - --- ---
-- - - - - - - - ---- - - -
-- - - - - - -- - - -
------ - - ----- ---- ----- - -
-------------------------------------------
Описание ZMODEM протокола
---------------------------

1.Пакеты.

Фреймы ZMODEM имеют отличие от блоков XMODEM протокола.
XMODEM блоки не используются по следующим причинам:
- размер блока ограничен 256 байтами;
- отсутствует поддержка переменной длинны блоков;
- искажения в линии могут приводить к искажению номера блока,
и сигналов;
- трудно определить начало и конец блока при потере
синхронизации.

2.ESC коды.

ZMODEM использует при передачи 8 битовые коды с ESC
последовательностями базирующимися на связи ZMODEM данных с ESC
символом ZDLE.
ESC коды позволяют иметь переменную длинну пакетов без
счетчика байт,что позволяет определить начало заголовка без
измерения времени,исключить повторения и ошибки.
Использование ESC кодов приводит к некоторому увеличению
длинны пакетов.В худчшем случае,когда файл состоит из одних
кодов ZDLE это 50%.
Символ ZDLE является специальным.Если в бинарных данных
обнаружен символ ZDLE то это префикс ZDLE за которым следует
ZDLEE (символ с инвертированным 6 битом).
Этот специальный символ выбран так-же для формирования
строки из пяти CAN для сигнала завершения работы ZMODEM .
Приемная программа декодирует любую последовательность ZDLE
следующим образом:
если байт с установленным 6 битом и сброшенным пятым равен
контрольному символу то инвертируется 6 бит.Это позволяет
устранить из передачи любые управляющие символы которые могут
быть посланы коммуникационной средой.Дополнительно приемник
распознает как ESC символы 0177 и 0377.
ZMODEM использует в качестве ESC ZDLE,020,0220,021,0221,
023, и 0223.Приемник игнорирует 021,0221,023,и 0223 символы в
потоке данных.

3.Заголовок.

Все фреймы ZMODEM начинаются с заголовка,который может быть
послан в бинарной ( BIN ) или шеснадцатиричной ( HEX ) моде.
ZMODEM использует единственый способ распознованиея BIN и HEX
заголовков.Любой из заголовков содержит одиу и туже
последовательность информации:
- байт типа;
- четыре байта данных или параметры зависящие от типа фрейма.

2.Тип фрейма это целое число начиная с 0 до минимального
значения передающей таблицы требуемой памяти.
3.В будущем расширении ZMODEM может использовать старшие биты
для индикации трех вариантов:
F0 - флаг наименее значимого байта;
P0 - наименее значимая позиция в файле;
P3 - наиболее значимая позиция в файле.

------T----T----T----T----¬
¦ Тип ¦ F3 ¦ F2 ¦ F1 ¦ F0 ¦
+-----+----+----+----+----+
¦ Тип ¦ P0 ¦ P1 ¦ P2 ¦ P3 ¦
L-----+----+----+----+-----

Рис1.Расположение флаговых байт в заголовке


3.1 Бинарный заголовок с 16-битовой CRC.

Бинарный заголовок передается от посылающей программы к
принимающей программе.ZDLE закодирован применительно к XON/XOFF
контролю.
Бинарный заголовок начинается с последовательности
ZPAD,ZDLE, ZBIN.Затем следует байт типа ,четыре флаговых байта
и два байта CRC-16,далее данные.

*,ZDLE,ZBIN,TYPE,F3/P0,F2/P1,F1/P2,F0/P3,CRC-1,CRC-2.


3.1 Бинарный заголовок с 32-битовой CRC.

Бинарный заголовок с 32-битовой CRC отличется заменой
символа ZBIN на ZBIN32 и наличием четырех символов CRC.

*,ZDLE,ZBIN32,TYPE,F3/P0,F2/P1,F1/P2,F0/P3,CRC-1,CRC-2,CRC-3,CRC-4


3.3 Шеснадцатиричный заголовок.

Шеснадцатиричный заголовок используется,когда следом
отсутствуют бинарные данные.Он имеет вид:

*,*,ZDLE,ZHEX,TYPE,F3/P0,F2/P1,F1/P2,F0/P3,CRC-1,CRC-2,CR,LF,XON

Все байты в заголовке должны быть представлены как
шеснадцатиричные цыфры.

3.4 Бинарный подпакет данных.

Бинарный подпакет данных следует за бинарным заголовком.
Подпакет содержит от 0 до 1024 байт данных.Длинну подпакета
рекомендуется выбирать в соответствии со скоростью передачи:
256 при скорости менее 2400 бод;
512 при скорости около 2400 бод;
1024 при скорости более 4800 бод.
Байт ZDLE кодируется при передачи.В конце подпакета следуют
два или четыре ZDLE,а затем CRC всего подпакета.

4 Протокол передачи.

Как и в XMODEM передача прекращается при отсутствии
заголовка в течении времени ( обычн 1 мин ).

4.1 Стартовая секция.

В стартовой секции посылается имя файла и опции.
В начале посылающая программа может послать строку "rz",CR
переводя принимающую программу в командный режим.Это сообщение
может выдаваться на экран.
Затем может быть послан ZRQINIT.В ответ на что обычно
принимающая программа посылает ZRINIT без задержки или
ZCHALLENGE для проверки посылающей программы.
Если принимающая программа принимает ZRINIT,это индикация
того,что посылающая программа не активна.
Посылающая программа может послать опцию ZSINIT,чтобы
заставить принимающую программу определить Attn
последовательность.
Если ZSINIT заголовок содержит ESCCTL или ESC8,то
используется HEX заголовок и приемник активизирует ESC
моду,прежде чем читать следующие данные подпакета.

4.2 Передача файла.

Передатчик посылает ZFILE заголовок с опциями
преобразования,управления и передачи.Затем посылается ZCRCW
подпакет содержащий имя файла,длинну,модифицированную дату и
другую информацию идентичную с Ymodem.
Приемник может ответить ZSKIP заголовком,который заставит
передатчик перейти к следующему файлу.
ZRPOS заголовок от приемника активизирует передачу данных
файла с позиции заданной в ZRPOS.
Передатчик посылает ZDATA бинарный заголовок с позицией
файла.
Приемник сравнивает положение файла с указателем в ZDATA с
количеством успешно принятых байт.Если оно не совпадает то
посылается ZRPOS с правильным значением.
Данные подпакета завершаются ZCRCG и CRC за которыми
немедленно следует следующий пакет.
Если подпакет завершается ZCRCW то передатчик ждет ответа
прежде,чем посылать следующий фрейм,что позволяет приемнику
записать буфер,прежде чем следующие данные будут приняты.
Нулевая длинна файла может быть использована в качестве не
рабочего пакета для предупреждения приемника,что данные не
будут посланы немедленно.
При отсутствии фатальной ошибки,передатчик возможно
достигнет конца файла.Если обнаружен конец файла то фрейм
завершается ZCRCE заголовком,который не извлекается в случае
ошибки.
Передатчик посылает ZEOF заголовок с завершающим смещением в
файле равным количеству байт в файле.Приемник сравнивает это
число с количеством принятых байт.Если приемник принял все
байты он закрывает файл.Если файл закрыт успешно,то приемник
отвечает ZRINIT.Если приемник не принял все байты,то ZEOF
игнорируется.Если приемник не может закрыть файл,то посылается
ZFERR.
Если ZTSPARS опция используется,то приемник перемещается к
позиции в файле заданной ZDATA.

4.3 Заключительная секция.

Передатчик завершает секцию заголовком ZFIN.Приемник
подтверждает это своим ZFIN.
Когда передатчик принимает подтверждающий заголовок,он
посылает два символа "оо".Приемник ожидает "о" и затем выходит
независимо от того приняты они или нет.

4.4 Аварийная секция.

Если приемник принимает данные непрерывным потоком,то
сперва посылается Attn последовательность с требованием
прекратить передачу данных,а затем cancel
последовательность.Cancel последовательность состоит из восьми
CAN символов и десяти BS.Zmodem требует пять CAN,другие нужны
для уверенности.
{ 24,24,24,24,24,24,24,24,8,8,8,8,8,8,8,8,8,8 }

5.Виды потоков.

5.1 Поток по образцу.

Если приемник может перенаправить последовательный в/в на
диск и если передатчик может использовать обратный канал для
контроля наличия данных без ожидания,то можно использовать
полный поток без ответной Attn последовательности.Передатчик
начинает передавать с ZDATA заголовка и продолжает ZCRCG
подпакетом данных.Когда приемник обнаруживает ошибку он
посылает Attn последовательность и затем посылает ZRPOS
заголовок с корректной позицией в файле.
В конце каждого передаваемого подпакета данных передатчик
проверяет присутствие заголовка ошибок от приемника.Обнаружив
его передатчик выбирает из данных обратного канала ZPAD или CAN
и выполняет требуемые действия.
Другие символы инкримируют счетчик,который сбрасывается
когда передатчик ждет заголовок от приемника.Если счетчик
переполняется передатчик посылает следующий подпакет как ZCRCW
и ждет ответа.
ZPAD индицирует ошибку приемника.CAN это попытка
пользователя остановить передачу.Если один из этих символов
будет обнаружен,то посылается пустой пакет ZCRCE.Обычно
приемник посылает ZRPOS или другой ошибочный заголовок,который
заставляет передатчик прекратить передачу и выполнить команду.
Если ZPAD или CAN не обнаружен в течении таймаута,то
посылается ZRPOS заголовок.Затем читается ответный заголовок и
выполняется команда.
ZRPOS заголовок сбрасывает текущее смещение в файле на
корректную позицию.Если возможно,то передатчик должен очистить
выходной буфер и/или сеть от не переданных данных.Приемник
должен так-же сбросить буфер,прежде чем начнется передача
корректных данных.Следующие передаваемые данные должны быть
ZCRCW фреймом для гарантированного полного заполнения сетевой
памяти.
Если приемник дает ZACK заголовок с адресом,который не
совпадает с адресом передатчика,он игнорируется и передатчик
ждет другой заголовок.ZFIN,ZABORT или ZTIMEOUT завершают
секцию.ZSKIP завершает процесс для данного файла.

5.2 Полный поток с обратным прерыванием.

Выше описанный метод не может быть использован если нет
возможности принимать обратный поток данных.Алтернативный метод
заставляет приемник прерывать передатчик,когда обнаружена
ошибка.
Приемник может прервать передатчик контрольным символом,
break сигналом и/или их комбинацией как указано в Attn
последовательности.После этого приемник посылает ZRPOS
заголовок, заставляя передатчик повторно передать потерянные
данные.
Когда передатчику отвечают прерыванием он читает заголовок и
выполняет действия описанные в предыдущем парагрофе.

5.3 Полный поток со скользящими окнами.

Если не один из описанных методов не применим,то не все
потеряно.Если передатчик может буферизировать ответы премника,
то передатчик может использовать ZCRCQ подпакеты,чтобы получить
ACK от приемника без прерывания передаваемых данных.После
достаточного количества ZCRCQ передатчик может прочитать
заголовки, которые поступили.
Проблема этого метода вероятно состоит в черезмерном
количестве ответов.Это может привести к переполнению приемного
буфера передатчика прежде чем будет послан ZRPOS.

5.4 Сегментированный поток.

Если приемник не может перенаправить выходной поток на диск,
тогда используется ZRINIT фрейм определенной длинны который не
переполняет буфер.Передающая программа посылает ZCRCW подпакет
и ждет ZACK заголовок прежде чем послать следующий сегмент
файла.
Если передающая программа может принимать обратный поток
данных,тогда можно снова передавать большие блоки.

6. Attention последовательности.

Принимающая программа посылант Attn последоватеельности
всякий раз когда обнаруживает ошибку или необходимо прервать
передачу.
По умолчанию строка Attn пуста.Принимающая программа
обнуляет Attn строку перед каждой секцией.
Передатчик определяет Attn последовательность в своих опциях
ZSINIT фрейма.Attn строка завершается нулем.
Два символа несут специальную функцию:
335q - break сигнал
336q - пауза на одну секунду.

7.Типы фреймов.

ZRQINIT

Посылается передающей программой.Посылка заставляет принима-
ющую программу послать свой ZRINIT заголовок.Это позволяет
избежать начальной задержки как в Xmodem или Kermit.Передающая
программа может повторить посылку если ответ не получен сразу.

ZRINIT

Посылается принимающей программой.ZF0 и ZF1 содержат битовое
поле указательных флагов приемника:

CANCRY 008 приемник может шивровать
CANFDX 001 пр-к может послать и принять FDX
CANOVIO 002 пр-к может принимать данные во время дискового в/в
CANBRK 004 пр-к может послать break сигнал
CANCRY 010 пр-к может шивровать
CANLZW 020 пр-к может распаковывать
CANFC32 040 пр-к может использовать 32 битовую кс
ESCCTL 100 пр-к ждет управляющий символ к ESC
ESC8 200 пр-к ждет восемь бит к ESC

ZP0 и ZP1 содержат размер приемного буфера в байтах или 0 если
разрешена передача без остановки.

ZSINIT

Передатчик посылает флаги для бинарного пакета данных
завершающихся ZCRCW.ZF0 содержит:

TESCCTL 0100 передатчик ожидает управляющий символ к ESC
TESC8 0200 передатчик ожидает восемь бит к ESC

Подпакет данных содержит завершающуюся нулем Attn после-
довательность максимальной длинны 32 байта включая ноль.

ZACK

Подтверждение ZSINIT фрейма,ZCHALLENGE,ZCRCQ или ZCRW
подпакетов данных.ZP0..ZP3 содержат смещение в файле.Ответ
на ZCHALLENGE содержит то-же 32 битовое число,что и было
принято в ZCHALLENGE.

ZFILE

Этот фрейм отмечает начало попытки передачи файла.
ZF0,ZF1 и ZF2 могут содержать опции.Значение 0 в каждом
из этих байт означает специальную обработку.Опции указанные
для приемника замещают опции указанные для передатчика за
исключением ZCBIN.ZCBIN для передатчика замещается любой
другой опцией преобразования доступной приемнику,исключая
ZCRESUM.ZCBIN от приемника замещает любые другие опции и
посылается передатчику.

ZF0 - опции преобразования.

Если приемник не распознает опции преобразования,то
могут быть применены умалчиваемые опции.

ZCBIN бинарная передача ( безусловный запрет
преобразований )
ZCNL преобразование конца строки CR/LF и NUL
ZCRECOV восстановление ( результат прерванной передачи файла )
ZCREVOV используется для добавления данных к файлу.Если
назначенный файл существует и он не длиннее исходного
происходит добавление в указанный файл и передача
начинается с указанного смещения.

ZF1 - опции управления

Если приемник не распознает опции управления,то файл
должен передаваться обычным образом.

ZMSKNOLOC бит инструктирует приемник пропускать файл если
приемник не имеет файла с таким же именем.
ZMNEWL файл передается если он отсутствует.Иначе пере-
даваемый файл переписывает существующий если он
более новый или длиннее.
ZMCRC сравнивается исходный и существующий файл.Пере-
дается если CRC не совпадает.
ZMAPND добавляет исходный файл к существующему ( если есть )
ZMCLOB замещает существующий файл.
ZMDIF передается файл если он отсутствует.Иначе пере-
писывается если имеет отличную длинну и дату.
ZMPROT защита приемного файла.Файл передается только в
случае отсутствия.
ZMNEW передает файл если он отсутствует иначе переписывает
если он более новый.

ZF2 - транспортные опции.

Если приемник не распознает транспортые опции файл копи-
руется без преоразований:

ZTLZW lempel-ziv сжатие.
ZTCRYPT зашифровано.
ZTRLE длинна кодируется.

ZF3 - расширенные опции.

ZTSPARS

специальный процес для разряженных файлов.Каждый файловый
сегмент передается как отдельный фрейм,причем фреймы не
должны быть непрерывными.Передатчик должен заканчивать
каждый сегмент ZCRCW и ожидать ZACK для уверенности,что
данные не потеряны.ZTSPARS и ZCNL не могут быть использованы
в этом случае.

ZSKIP

посылается приемником в ответ на ZFILE,заставляя передатчик
перейти к следующему файлу.

ZNAK

индицирует,что последний заголовок был искажен.

ZABORT

посылается приемником для завершения,когда требует
пользователь.Передатчик отвечает ZFIN.

ZRPOS

посылается приемником для указания передатчику смещения в
файле в ZP0..ZP3.

ZDATA

ZP0..ZP3 указывает смещение в файле.Затем следует один или
более подпакетов данных.

ZEOF

Передатчик сообщает о конце файла.ZP0..ZP3 указывает
смещение в файле.

ZFERR

ошибка чтения или записи.Эквивалент ZABORT.

ZCRC

требование приемника и ответ передатчика для вычисления CRC,
которая передается в ZP0..ZP3.

ZCHALLENGE

требование передатчика послать эхом случайное число в
ZP0..ZP3 в ZACK фрейме.Посылается приемной программой к
передающей для проверки,что связь действует.

ZCOMPL

требование завершения.

ZCAN

этот фрейм есть псевдокоманда возвращаемая gethdr() в ответ
на Abort последовательность.

ZFREECNT

вызывающая программа требует ZACK фрейм с ZP0..ZP3 содержащим
количество свободных байт в файловой системе.Ноль означает
неопределенное количество.

ZCOMMAND

посылается в бинарном фрейме.ZF0 содержит ноль или ZACK1.
Затем следует ZCRCW подпакет данных с ASCII текстовой коман-
дной строкой завершающейся нулем.Эта команда предназначена
для выполнения OS и должна иметь '!' в качестве первого
символа.Иначе команда предназначена для принимающей программы.
Если обнаружена неверная команда,то приемник отвечает ZCOMPL
с указанием в ZP0..ZP3 кода ошибки.Если ZF0 содержит ZACK1,
то приемник отвечает ZCOMPL с 0 статусом.
В других случаях приемник отвечает ZCOMPL,когда операция
завершена.Значение выходного кода команды сохраняется в
ZP0..ZP3.0-нормальное завершение.
Если команда вызывает передачу файла,то передатчик обнаружит
ZRQINIT фрейм от другого компьютора пытающегося послать файл.
Передатчик проверяет ZF0 принятого ZRQINIT для проверки своего
ZRQINIT.Есть ли неверная команда для принимающей программы.
Если приемная программа не воспринимает команду DownLoad,
она может вывести эту команду на дисплей через стандартный
error выход и затем вернуть ZCOMPL.

8.2 Примеры.

8.2.1. Пример передачи файла.

Передатчик Приемник
----------------------------------------------
"rz",
ZRQINIT(0)
ZRINIT
ZFILE
ZRPOS
----------------------------------------------¬
¦ ZDATA date ... ¦
¦ [ZACK,ZNAK] ¦
L----------------------------------------------
ZEOF
ZRINIT
ZFIN
ZFIN
"OO"

8.2.2. Пример кодировщика данных передатчика.


ZSend_Byte( current_byte )

registers current_byte ;
{
static last_byte ;

switch( current_byte & 0X7F )
{
case 13 : if ( last_byte & 0X7F ) != '@' goto send;
case 16 :
case 17 :
case 19 :
case 24 : Send_Byte( ZDLE );
current_byte ^= 0X40;
send:
default : Send_Byte( last_byte = current_byte );
}

} // ZSend_Byte


8.3 Содержание фрейма ZFILE.

Имя файла

при этом pathname преобразуется в filename и посылается как
завершенная нулем ASCII строка следующего вида:
- буквы должны быть преобразованы в маленькие;
- приемник должен принимать большие и маленькие буквы;
- когда передача осуществляется между различными ОС
имя файла должно быть приемлемо для обоих.

Длинна

длинна файла сохраняется как цифровая строка содержащая
количество байт в файле.Zmodem использует длинну файла
только для оценки.Она может быть использована для оценки
времени передачи и сравнения с количеством свободного места
на диске.Файл может увеличиваться в момент передачи,но все
данные будут посланы.

Модифицированная дата

Отделяется пробелом от длинны.Модифицированная дата посы-
лается как восьмеричное число времени в секундах от 1.1.70
до времени последней модификации файла.Нулевая дата озна-
чает,что дата неизвестна и принимается равной текущей.

Файлова мода

Отделяется пробелом от даты.Файловая мода сохраняется как
восьмериченое число.rs(1) проверяет файловую моду на
0x8000 бит,который определяет unix тип файла.Такие файлы
посылаются от другой unix системы.Такой файл не передается
иначе.

Серийный номер

Отделяется пробело от моды.Серийный номер передается как
восьмеричное число.Программа которая не имеет номера,
устанавливает этот параметр равным нулю.

*Оставшееся количество файлов

Это поле содержит десятичное число файлов,для отправки,
включая текущий.

*Оставшееся количество байт

Это поле содержит десятичное число оставшегося количества
байт включая текущий файл.

Тип файла

Кодируется десятичным числом.Приемник использует это поле
для оптимизации.
0 - последовательный файл не специального типа;
1 - другой тип.

Информация завершается нулем.Если только имя файла пере-
дается,то двумя нулями.Длинна информации должна быть
меньше 1к.Типичная длинна 64 байта.

  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте