2046 lines
61 KiB
Plaintext
2046 lines
61 KiB
Plaintext
|
|
|
|
|
|
The ZMODEM Asynchronous Inter Application File Transfer Protocol
|
|
|
|
Chuck Forsberg
|
|
|
|
Omen Technology Inc
|
|
|
|
|
|
Chuck Forsberg
|
|
Omen Technology Inc
|
|
17505-V Northwest Sauvie Island Road
|
|
Portland Oregon 97231
|
|
Voice: 503-621-3406
|
|
Modem (Telegodzilla): 503-621-3746 Speed 1200,300
|
|
Compuserve: 70715,131
|
|
UUCP: ...!tektronix!reed!omen!caf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 0 rev051486 Printed 5-16-86 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 0 rev051486 Printed 5-16-86 2
|
|
|
|
|
|
|
|
1. INTENDED AUDIENCE
|
|
|
|
This document is intended for systems programmers and other technically
|
|
qualified people who choose and implement asynchronous file transfer
|
|
protocols over dial-up networks and related environments.
|
|
|
|
|
|
2. ACKNOWLEDGMENTS
|
|
|
|
Encouragement and suggestions by Stuart Mathison, Thomas Buck, John Wales,
|
|
Ward Christensen, and Irv Hoff are gratefully acknowledged.
|
|
|
|
|
|
3. RELATED DOCUMENTS
|
|
|
|
The following files should be available for reference while studying this
|
|
document:
|
|
|
|
YMODEM.DOC Describes the XMODEM and YMODEM file transfer protocols
|
|
|
|
ZMODEM.H Provides definitions for the manifest constants referenced
|
|
herein.
|
|
|
|
rz.c, sz.c, rbsb.c Unix source code for operating ZMODEM programs.
|
|
|
|
rz.1, sz.1 Manual pages for rz and sz.
|
|
|
|
zm.c, zmodem.h Operating system independent ZMODEM subroutines, header
|
|
file.
|
|
|
|
|
|
4. ROSETTA STONE
|
|
|
|
Here are some definitions which reflect the current vernacular in the
|
|
computer media. The attempt here is identify the file transfer protocol
|
|
rather than specific programs.
|
|
|
|
Frame A ZMODEM frame consists of a header packet and 0 or more data
|
|
packets.
|
|
|
|
XMODEM refers to the original 1979 file transfer etiquette introduced by
|
|
Ward Christensen's 1979 MODEM2 program. It's also called the
|
|
MODEM or MODEM2 protocol. Some who are unaware of MODEM7's
|
|
unusual batch file mode call it MODEM7. Other aliases include
|
|
"CP/M Users's Group" and "TERM II FTP 3". This protocol is
|
|
supported by every serious communications program because of its
|
|
universality, simplicity, and reasonable performance.
|
|
|
|
XMODEM/CRC replaces XMODEM's 1 byte checksum with a two byte Cyclical
|
|
Redundancy Check (CRC-16), giving modern error detection
|
|
protection.
|
|
|
|
|
|
|
|
Chapter 4 rev051486 Printed 5-16-86 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 4 rev051486 Printed 5-16-86 3
|
|
|
|
|
|
|
|
YMODEM refers to the XMODEM/CRC protocol with the throughput and/or batch
|
|
transmission enhancements described in YMODEM.DOC.
|
|
|
|
ZMODEM Zmodem is a second generation streaming protocol for text and
|
|
binary file transmission between applications running on
|
|
microcomputers and mainframes.
|
|
|
|
|
|
5. WHY DEVELOP ZMODEM?
|
|
|
|
Since its development half a decade ago, the Ward Christensen MODEM
|
|
protocol has enabled a wide variety of computer systems to interchange
|
|
data. There is hardly a communications program that doesn't at least
|
|
claim to support this protocol, now called XMODEM.
|
|
|
|
Advances in computing, modems and networking have spread the XMODEM
|
|
protocol far beyond the micro to micro environment for which it was
|
|
designed. These application have exposed some weaknesses:
|
|
|
|
+ The user interface is suitable for computer hobbyists. Three or four
|
|
commands must be keyboarded to transfer each file.
|
|
|
|
+ The short block length causes throughput to suffer when used with
|
|
timesharing systems, packet switched networks, satellite circuits,
|
|
and buffered (error correcting) modems.
|
|
|
|
+ The 8 bit checksum and unprotected transactions allow undetected
|
|
errors and disrupted file transfers.
|
|
|
|
+ Only one file can be sent per command. The file name has to be given
|
|
twice, first to the sending program and then again to the receiving
|
|
program.
|
|
|
|
+ The transmitted file accumulates as many as 127 extraneous bytes.
|
|
|
|
+ The modification date and other file attributes are lost.
|
|
|
|
+ XMODEM requires complete 8 bit transparency, all 256 codes. XMODEM
|
|
will not operate over some networks that need flow control.
|
|
|
|
A number of other protocols have been developed over the years, but none
|
|
have displaced XMODEM to date.
|
|
|
|
+ Lack of public domain documentation and example programs have kept
|
|
proprietary protocols such as MNP, Blast, and others tightly bound to
|
|
the fortunes of their suppliers.
|
|
|
|
+ Hardware and/or software complexity discourages the widespread
|
|
application of BISYNC, SDLC, HDLC, X.25, and X.PC protocols.
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 5 rev051486 Printed 5-16-86 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 5 rev051486 Printed 5-16-86 4
|
|
|
|
|
|
|
|
+ Link level protocols such as X.25, X.PC, and MNP do not manage
|
|
application to application file transfers.
|
|
|
|
+ The Kermit protocol was developed to allow file transfers in
|
|
environments hostile to XMODEM. The performance compromises
|
|
necessary to accomodate non transparent environments limit Kermit's
|
|
efficiency. Even with completely transparent channels, Kermit
|
|
control character quoting limits the efficiency of binary file
|
|
transfers to about 75 per cent.[1]
|
|
|
|
Kermit Sliding Windows ("SuperKermit") improves throughput over
|
|
networks at the cost of increased complexity. SuperKermit state
|
|
transitions are encoded in a special language "wart" which requires a
|
|
C compiler. The SuperKermit C code requires full duplex
|
|
communications and the ability to check for the presence of
|
|
characters in the input queue, precluding its implementation on some
|
|
operating systems.
|
|
|
|
A number of submodes are used in various Kermit programs, including
|
|
different methods of transferring binary files. Two Kermit programs
|
|
will mysteriously fail to operate with each other if these submodes
|
|
are not matched.
|
|
|
|
A number of extensions to the XMODEM protocol have been made under the
|
|
collective name YMODEM.
|
|
|
|
+ YMODEM-k uses 1024 byte blocks to reduce the overhead from transmission
|
|
delays by 87 per cent compared to XMODEM, but network delays can still
|
|
degrade performance. Some networks may not be transmit the 1024 byte
|
|
packets unmodified.
|
|
|
|
+ The handling of files that are not a multiple of 1024 or 128 bytes is
|
|
awkward, especially if the file length is not known, or changes during
|
|
transmission.
|
|
|
|
+ YMODEM-g provides efficient batch file transfers, preserving the exact
|
|
file length and file modification date. YMODEM-g is essentially
|
|
insensitive to network delays. Because it does not support error
|
|
recovery, YMODEM-g is usually used hardwired or with a reliable link
|
|
level protocol. IF YMODEM-g detects a CRC error, data transfers are
|
|
aborted. YMODEM-g is easy to implement because it closely resembles
|
|
XMODEM-CRC.
|
|
|
|
Another XMODEM "extension" is protocol cheating, referred to as "Turbo
|
|
Download" and OverThruster. [2] These sometimes improve XMODEM throughput
|
|
|
|
|
|
__________
|
|
|
|
1. Some Kermit programs support run length encoding.
|
|
|
|
|
|
|
|
|
|
Chapter 5 rev051486 Printed 5-16-86 4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 5 rev051486 Printed 5-16-86 5
|
|
|
|
|
|
|
|
at the expense of error recovery.
|
|
|
|
The ZMODEM Protocol is proposed as a means of addressing the weaknesses
|
|
described above while maintaining as much of XMODEM's simplicity and prior
|
|
art as possible.
|
|
|
|
|
|
|
|
6. ZMODEM Protocol Design Criteria
|
|
|
|
The design of a file transfer protocol is an engineering compromise
|
|
between conflicting requirements:
|
|
|
|
6.1 Ease of Use
|
|
|
|
+ ZMODEM allows either program to initiate file transfers, passing
|
|
commands and/or modifiers to the other program.
|
|
|
|
+ File names need be entered only once, menu selections are possible.
|
|
|
|
+ Wild Card names may be used with batch transfers.
|
|
|
|
+ Minimum keystrokes required to initiate transfers.
|
|
|
|
+ ZRQINIT packet sent by sending program can trigger automatic downloads.
|
|
|
|
+ ZMODEM can step down to YMODEM if the other end does not support
|
|
ZMODEM.[1]
|
|
|
|
6.2 Throughput
|
|
|
|
ZMODEM is designed for optimum performance with minimum degradation caused
|
|
by delays introduced by packet switched networks and timesharing systems.
|
|
|
|
ZMODEM is optimized for best throughput when line hits occur infrequently.
|
|
This assumption markedly reduces code complexity and memory requirements.
|
|
ZMODEM protocol features enhance rapid error recovery compared to network
|
|
compatible XMODEM implementations.
|
|
|
|
It is assumed that many transfers will originate from a timesharing system
|
|
connected to a packet switched network. ZMODEM provides features to allow
|
|
for simple, efficient implementation on timesharing hosts.
|
|
|
|
|
|
|
|
__________________________________________________________________________
|
|
|
|
2. Omen Technology Trademark
|
|
|
|
1. Provided the transmission medium accomodates YMODEM.
|
|
|
|
|
|
|
|
|
|
Chapter 6 rev051486 Printed 5-16-86 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 6 rev051486 Printed 5-16-86 6
|
|
|
|
|
|
|
|
File transfers begin immediately regardless of which program is started
|
|
first, without the 10 second delay associated with XMODEM.
|
|
|
|
|
|
6.3 Integrity and Robustness
|
|
|
|
All packets are protected with 16 bit CRC. Proprietary alogrithyms[2] are
|
|
not needed for reliable transfers.
|
|
|
|
A security challenge guards againgst Trojan Horse messages.
|
|
|
|
6.4 Ease of Implementation
|
|
|
|
ZMODEM accomodates a wide variety of systems:
|
|
|
|
+ Microcomputers that cannot overlap disk and serial i/o
|
|
|
|
+ Microcomputers that cannot overlap serial send and receive
|
|
|
|
+ Computers and/or networks requiring XON/XOFF flow control
|
|
|
|
+ Computers that cannot check the serial input queue for the presence of
|
|
data without having to wait for the data to arrive.
|
|
|
|
Although ZMODEM provides "hooks" for multiple "threads", ZMODEM is not
|
|
intended to replace link level protocols such as X.25.
|
|
|
|
ZMODEM accomodates network and timesharing system delays by continuously
|
|
transmitting data unless the receiver interrupts the sender to request
|
|
retransmission of garbled data. ZMODEM in effect uses the entire file as
|
|
a window.[3]
|
|
|
|
ZMODEM provides a general purpose application to application file transfer
|
|
protocol which may be used directly or with with reliable link level
|
|
protocols such as X.25, MNP, Fastlink, etc.
|
|
|
|
|
|
7. ZMODEM BASICS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__________
|
|
|
|
2. Unique to Professional-YAM, PowerCom, etc.
|
|
|
|
3. Streaming strategey is discussed in a coming chapter.
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 6
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 7
|
|
|
|
|
|
|
|
7.1 Packetization
|
|
|
|
ZMODEM frames somewhat different from X/YMODEM blocks. X/YMODEM blocks
|
|
are not used for the following reasons:
|
|
|
|
+ Block numbers are limited to 256
|
|
|
|
+ No provision for variable length blocks
|
|
|
|
+ Line hits corrupt protocol signals, causing failed file transfers. In
|
|
particular, modem errors sometimes generate false block numbers, false
|
|
EOTs and false ACKs. False ACKs are the most troublesome as they cause
|
|
the sender to lose synchronization with the receiver.
|
|
|
|
State of the art X/YMODEM programs such as Professional-YAM and
|
|
PowerCom overcome some of these weaknesses with clever proprietary
|
|
code, but a stronger protocol is desired.
|
|
|
|
+ It is difficult to determine the beginning and ends of X/YMODEM blocks
|
|
when line hits cause a loss of synchronization. This precludes rapid
|
|
error recovery.
|
|
|
|
7.2 Link Escape Encoding
|
|
|
|
ZMODEM acheives data transparency by extending the 8 bit character set
|
|
(256 codes) with escape sequences based on the ZMODEM data link escape
|
|
character ZDLE.[1]
|
|
|
|
Link Escape coding permits variable length data packets without the
|
|
overhead of a separate byte count. It allows the beginning of frames to
|
|
be detected without special timing techniques, facilitating rapid error
|
|
recovery.
|
|
|
|
Link Escape coding does add some overhead. The worst case, a file
|
|
consisting entirely of ZDLE characters, would incur a 50% overhead.
|
|
|
|
The ZDLE character is special. ZDLE represents a control sequence of some
|
|
sort. If a ZDLE character appears in the data sent within a binary
|
|
packet, it is prefixed with ZDLE, then sent as ZDLEE.
|
|
|
|
The value for ZDLE is octal 030 (ASCII CAN). This particular value was
|
|
chosen to allow a string of CAN characters to abort a ZMODEM session,
|
|
compatible with X/YMODEM session abort.
|
|
|
|
|
|
|
|
__________
|
|
|
|
1. This and other constants are defined in the zmodem.h include file.
|
|
Please note that constants with a leading 0 are octal constants in C.
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 7
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 8
|
|
|
|
|
|
|
|
Since CAN is not used for normal terminal operations, communications
|
|
programs can monitor the data flow for ZDLE. The following characters can
|
|
be scanned to detect the ZRQINIT packet, the invitation to automatically
|
|
download commands or files.
|
|
|
|
Two successive CAN characters will abort a ZMODEM session. Experience
|
|
with YMODEM file transfers suggests that this does not impair the
|
|
robustness of the protocol. A minimum of 8 CAN are sent, so the ZMODEM
|
|
subroutines can be modified to require more successive CAN characters to
|
|
signal an abort.
|
|
|
|
The receiving program will decode any sequence of ZDLE followed by a byte
|
|
with bit 6 set and bit 5 reset (upper case letter, either parity) to the
|
|
equivalent control character by inverting bit 6. This allows the
|
|
transmitter to escape any control character that cannot be sent by the
|
|
communications medium. The ZMODEM software currently escapes ZDLE, 021,
|
|
0221, 023, and 0223. In addition, the receiver recognizes escapes for
|
|
0177 and 0377 should these characters need to be escaped.
|
|
|
|
7.3 Header Packet Information
|
|
|
|
All ZMODEM frames begin with a header packet which may be sent in binary
|
|
or HEX form. ZMODEM uses a single routine to recognize binary and hex
|
|
header packets. Either form of the header packet contains the same raw
|
|
information:
|
|
|
|
+ A type byte[2] Future extensions to ZMODEM may use the high order bits
|
|
of the type byte to indicate thread selection.
|
|
|
|
+ Four bytes of data indicating flags and/or numeric quantities depending
|
|
on the packet type
|
|
|
|
Figure 1. Order of Bytes in Header Packet
|
|
|
|
|
|
TYPE: packet Type
|
|
F0: Flags least significant byte
|
|
P0: file Position least significant
|
|
P3: file Position most significant
|
|
|
|
TYPE F3 F2 F1 F0
|
|
--------------
|
|
TYPE P0 P1 P2 P3
|
|
|
|
|
|
|
|
__________
|
|
|
|
2. The packet types are cardinal numbers beginning with 0 to minimize
|
|
state transition table memory requirements.
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 8
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 9
|
|
|
|
|
|
|
|
7.4 Binary Header Packet
|
|
|
|
A binary header packet is only sent by the sending program to the
|
|
receiving program.
|
|
|
|
A binary header packet begins with the sequence ZPAD, ZDLE, ZBIN.
|
|
|
|
The frame type byte is ZDLE encoded.
|
|
|
|
The four position/flags bytes are ZDLE encoded.
|
|
|
|
A two byte CRC of the frame type and position/flag bytes is ZDLE encoded.
|
|
|
|
0 or more binary data packets will follow depending on the frame type.
|
|
|
|
The function zsbhdr transmits a binary header packet. The function
|
|
zgethdr receives a binary or hex header packet.
|
|
|
|
Figure 2. Binary Header Packet
|
|
* * ZDLE TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2
|
|
|
|
|
|
7.5 HEX Header Packet
|
|
|
|
The receiver sends responses in hex header packets. The sender also uses
|
|
hex header packets when they are not followed by binary data packets.
|
|
|
|
Hex encoding is required to support XON/XOFF flow control. The hex header
|
|
receiving routine ignores flow control characters.
|
|
|
|
Use of Kermit style encoding for control and paritied characters was
|
|
considered and rejected because of increased possibility of interacting
|
|
with some timesharing systems's line edit functions. Use of HEX packets
|
|
from the receiving program allows control characters to be used to
|
|
interrupt the sender when errors are detected. Except for header packet
|
|
types that imply data packets to follow, a HEX header packet may be used
|
|
in place of a binary header packet.
|
|
|
|
A hex header packet begins with the sequence ZPAD, ZPAD, ZDLE, ZHEX. The
|
|
zgethdr routine synchronizes in the ZPAD-ZDELE sequence. The extra ZPAD
|
|
allows other parts of the program to detect a ZMODEM packet and then call
|
|
zgethdr to receive the packet.
|
|
|
|
The type byte, the four position/flag bytes, and the CRC thereof are sent
|
|
in hex using the character set 01234567890abcdef. Upper case hex digits
|
|
are not allowed; they false trigger X/YMODEM programs.
|
|
|
|
A carriage return, line feed, and XON are appended to the HEX header
|
|
packet but are not considered to be part of it. The CR/LF aids debugging
|
|
from printouts. The XON releases the sender from spurious XOFF flow
|
|
control characters generated by line noise, a common occurrence.
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 9
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 7 rev051486 Printed 5-16-86 10
|
|
|
|
|
|
|
|
0 or more ASCII Encoded data packets will follow depending on the frame
|
|
type.
|
|
|
|
The function zshhdr sends a hex header packet.
|
|
|
|
Figure 3. HEX Header Packet
|
|
* * ZDLE TYPE F3/P0 F2/P1 F1/P2 F0/P3 CRC-1 CRC-2 CR LF XON
|
|
|
|
(TYPE, F3...F0, CRC-1, and CRC-2 are each sent as two hex digits.)
|
|
|
|
|
|
7.6 Binary Data Packets
|
|
|
|
Binary data packets immediately follow the associated binary header
|
|
packet. A binary data packet contains 0 to 1024 bytes of data.
|
|
Recommended length values are 256 bytes below 4800 bps, 1024 above 4800
|
|
bps or when the data link is known to be relatively error free.
|
|
|
|
No padding is used with binary data packets. The data bytes are ZDLE
|
|
encoded and transmitted. A ZDLE and frameend are then sent, followed by
|
|
two ZDLE encoded CRC bytes. The CRC accumulates the data bytes and
|
|
frameend.
|
|
|
|
The function zsbdata sends a binary data packet. The function zrbdata
|
|
receives a binary data packet.
|
|
|
|
7.7 ASCII Encoded Data Packet
|
|
|
|
The format of ASCII Encoded data packets is not currently specified.
|
|
These would be used for server commands, etc.
|
|
|
|
|
|
8. PROTOCOL TRANSACTION OVERVIEW
|
|
|
|
As with the XMODEM recommendation, ZMODEM timing is receiver driven. The
|
|
transmitter should not time out at all, except to abort the program if no
|
|
packets are received for an extended period of time, say one minute.[1]
|
|
|
|
To start a ZMODEM file transfer session, the sending program is called
|
|
with the names of the desired file(s) and option(s).
|
|
|
|
The sending program sends the string "rz\r" to invoke the receiving
|
|
program from a possible command mode. The "rz" followed by carriage
|
|
return activates a ZMODEM receive program or command if it were not
|
|
already active.
|
|
|
|
|
|
__________
|
|
|
|
1. Special considerations apply when sending commands.
|
|
|
|
|
|
|
|
|
|
Chapter 8 rev051486 Printed 5-16-86 10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 8 rev051486 Printed 5-16-86 11
|
|
|
|
|
|
|
|
The sender may then display a message intended for human consumption, such
|
|
as a list of the files requested, etc.
|
|
|
|
Then the sender sends a ZRQINIT packet. The ZRQINIT packet causes a
|
|
previously started receive program to send its ZRINIT packet without
|
|
delay.
|
|
|
|
In an interactive or conversational mode, the receiving application may
|
|
monitor the data stream for ZDLE. The following characters may be scanned
|
|
for B000000 indicating a ZRQINIT packet, a command to download a command
|
|
or data.
|
|
|
|
The sending program awaits a command from the receiving program to start
|
|
file transfers. If a "C", "G", or NAK is received, an XMODEM or YMODEM
|
|
file transfer is indicated, and file transfer(s) use the X/YMODEM
|
|
protocol. Note: With ZMODEM and YMODEM Batch, the sending program
|
|
provides the file name, but not with XMODEM.
|
|
|
|
When the ZMODEM receive program starts, it immediately sends a ZRINIT
|
|
packet to initiate ZMODEM file transfers, or a ZCHALLENGE packet to verify
|
|
the sending program. The receive program resends its packet at repsonse
|
|
time intervals for a suitable period of time (40 seconds typical) before
|
|
falling back to X/YMODEM protocol. If the receiving program receives a
|
|
ZRQINIT packet, it resends the ZRINIT packet. If the sending program
|
|
receives the ZCHALLENGE packet, it places the data in ZP0...ZP3 in an
|
|
answering ZACK packet.
|
|
|
|
If the receiving program receives a ZRINIT packet, it is an echo
|
|
indicating that the sending program is not operational.
|
|
|
|
Eventually the sending program correctly receives the ZRINIT packet.
|
|
|
|
The sender may then respond with an optional ZSINIT frame to set the
|
|
receiving program's Attention string. The receiver sends a ZACK packet in
|
|
response, containing the serial number of the receiving program, or 0.
|
|
|
|
The sender then sends a ZFILE header with ZMODEM Conversion, Management,
|
|
and Transport options[2] followed by a ZCRCW data packet containing the
|
|
file name, file length, modification date, and other information identical
|
|
to that used by YMODEM Batch.
|
|
|
|
The receiving program should insure the pathname and options are
|
|
compatible with its operating environment and local security requirements.
|
|
|
|
|
|
|
|
|
|
__________
|
|
|
|
2. See below, under ZFILE packet type.
|
|
|
|
|
|
|
|
|
|
Chapter 8 rev051486 Printed 5-16-86 11
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 8 rev051486 Printed 5-16-86 12
|
|
|
|
|
|
|
|
If the receiver has a file with the same name and length,
|
|
it may respond with a ZCRC packet, which requires the
|
|
sender to permorm a 16 bit CRC on the file and transmit the
|
|
CRC in ZP0...ZP1 of a ZCRC packet. The receiver uses this
|
|
information to determine whether to accept the file or skip
|
|
it. This sequence is triggered by the ZMCRC Management
|
|
Option.
|
|
|
|
The receiver may then respond with a ZSKIP packet, which causes the
|
|
sender to process the next file (if any) in the batch.
|
|
|
|
A ZRPOS packet from the receiver initiates transmission of the file data
|
|
starting at the offset in the file specified in the ZRPOS packet.
|
|
Normally the receiver specifies the data transfer begin begin at offset 0
|
|
in the file.
|
|
The receiver may start the transfer further down in the
|
|
file. This allows a file transfer interrupted by a loss
|
|
or carrier or system crash to be completed on the next
|
|
connection without requiring the entire file to be
|
|
retransmitted.[3] If downloading a file from a timesharing
|
|
system that becomes sluggish, the transfer can be
|
|
interrupted and resumed later with no loss of data.
|
|
|
|
The sender sends a ZDATA binary header packet (with file position)
|
|
followed by one or more data packets.
|
|
|
|
The receiver compares the file position in the ZDATA header with the
|
|
number of characters successfully received to the file. If they do not
|
|
agree, a ZRPOS error response is generated to force the sender to the
|
|
right position within the file.[4]
|
|
|
|
A data packet terminated by ZCRCGO and CRC does not elicit a response
|
|
unless an error is detected; more data packet(s) follow immediately.
|
|
|
|
ZCRCQ data packets expect a ZACK response (with the file
|
|
offset) if no error, otherwise a ZRPOS response (with the
|
|
last good file offset). Another data packet continues
|
|
immediately. ZCRCQ packets are not used if the receiver
|
|
does not indicate FDX ability with the CANFDX bit.
|
|
|
|
ZCRCW data packets expect a response before the next frame is sent. If
|
|
the receiver does not indicate overlapped I/O capability with the
|
|
|
|
|
|
__________
|
|
|
|
3. This does not apply to files that have been translated.
|
|
|
|
4. If the ZMSPARS option is used, the receiver instead seeks to position
|
|
in the ZDATA packet.
|
|
|
|
|
|
|
|
|
|
Chapter 8 rev051486 Printed 5-16-86 12
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 8 rev051486 Printed 5-16-86 13
|
|
|
|
|
|
|
|
CANOVIO bit, or by setting a buffer size, the sender uses the ZCRCW to
|
|
allow the receiver to write its buffer before sending more data.
|
|
|
|
A zero length data frame may be used as a sending idle
|
|
packet to prevent the receiver from timing out in case
|
|
data is not immediately available to the sender.
|
|
|
|
In the absence of fatal error, the sender eventually encounters end of
|
|
file. If the end of file is encountered within a frame, the frame is
|
|
closed with a ZCRCE data packet which does not elicit a response
|
|
except in case of error.
|
|
|
|
The sender sends a ZEOF packet with the file ending offset equal to
|
|
the number of characters in the file. The receiver compares this
|
|
number with the number of characters received. If the receiver has
|
|
received all of the file, it closes the file. If the file close was
|
|
satisfactory, the receiver responds with ZRINIT. If the receiver has
|
|
not received all the bytes of the file, the receiver sends ZRPOS with
|
|
the current file offset, forcing the sender to resend the missing
|
|
data. (If the receiver cannot properly close the file, a ZFERR packet
|
|
is sent.)
|
|
|
|
After all files are processed, any further protocol
|
|
errors should not prevent the sending program from
|
|
returning with a success status.
|
|
|
|
The sender closes the session with a ZEXIT header packet. The
|
|
receiver acknowledges this with its own ZEXIT packet.
|
|
|
|
When the sender receives the acknowledging packet, it sends two
|
|
characters, "OO" (Over and Out) and exits to the operating system or
|
|
application that invoked it. The receiver waits briefly for the "O"
|
|
characters, then exits whether they were received or not.
|
|
|
|
8.1 Session Cancel Packet
|
|
|
|
The Cancel packet consists of two ZPAD characters, eight CAN
|
|
characters, and an optional ten backspace characters. First, the
|
|
Attn sequence is executed if the receiving program has been receiving
|
|
data in streaming mode. The ZPAD characters allow sending programs
|
|
that sample the reverse data stream to check for a single character
|
|
code indicating a packet from the receiver. The trailing backspace
|
|
characters attempt to erase the effects of the other characters if
|
|
they are received by a command interpreter.
|
|
|
|
static char canistr[] = {
|
|
ZPAD,ZPAD,24,24,24,24,24,24,24,24,8,8,8,8,8,8,8,8,8,8,0 };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 9 rev051486 Printed 5-16-86 13
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 9 rev051486 Printed 5-16-86 14
|
|
|
|
|
|
|
|
9. ZMODEM STREAMING TECHNIQUES
|
|
|
|
ZMODEM allows choices of several data streaming methods selected
|
|
according to the limitations of the sending environment, receiving
|
|
environment, and transmission channel(s).
|
|
|
|
|
|
9.1 Full Streaming with Sampling
|
|
|
|
If the computers can overlap serial I/O with disk I/O, and if the
|
|
sender can sample the reverse channel for the presence of data
|
|
without having to wait, full streaming can be used with no Attn
|
|
sequence required. The sender begins data transmission with a ZDATA
|
|
header and continuous ZCRCG data packets. When the receiver detects
|
|
an error, it executes the Attn sequence and then sends a ZRPOS packet
|
|
to force the sender back to the correct position within the file. At
|
|
the end of each transmitted packet, the sender checks for the
|
|
presence of an error packet from the receiver. To do this, the
|
|
sender may sample the reverse data stream for the presence of a ZPAD
|
|
character.
|
|
|
|
Such a program would sample the reverse channel for ZPAD. If seen,
|
|
an empty ZCRCW data packet is sent (in case the receiver was still
|
|
reading packets) and then the receiver's response packet is read and
|
|
acted upon. The code fragment in sz.c beginning at NOTDEF_DOS would
|
|
perform this function.
|
|
|
|
|
|
9.2 Full Streaming with Interrupt
|
|
|
|
The method above cannot be used if if the reverse data stream cannot
|
|
be sampled without entering an I/O wait. An alternate method is to
|
|
instruct the receiver to interrupt the sending program when an error
|
|
is detected.
|
|
|
|
The receiver can interrupt the sender with a control character, break
|
|
signal, or combination thereof, as specified in the ZSINIT frame sent
|
|
by the sending program.
|
|
|
|
When the sending program "catches" this interrupt, it reads a HEX
|
|
packet (normally ZRPOS) from the receiver and takes appropriate
|
|
action. The Unix sb.c program uses a setjmp/longjmp call and the
|
|
getinsync() function to read the receiver's error packet and take
|
|
appropriate action.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 9 rev051486 Printed 5-16-86 14
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 9 rev051486 Printed 5-16-86 15
|
|
|
|
|
|
|
|
9.3 Full Streaming with a Sliding Window
|
|
|
|
If none of the above methods is applicable, hope is not yet lost. If
|
|
the sender can buffer responses from the receiver, the sender can use
|
|
ZCRCQ packets to get ACKs from the receiver without interrupting the
|
|
transmission of data. After a sufficient number of ZCRCQ packets
|
|
have been sent, the sender can read one of the one or more packets
|
|
that should have arrived in it's receive interrupt buffer.
|
|
|
|
A problem with this method is the probability of wasting an excessive
|
|
amount of time responding to the receiver's error packet.
|
|
|
|
9.4 No Streaming
|
|
|
|
If the receiver cannot overlap serial and disk I/O, it uses the
|
|
ZRINIT frame to specify a buffer length which the sender will not
|
|
overflow. The sending program sends a ZCRCW packet and waits for an
|
|
ZACK packet before sending the next segment of the file.
|
|
|
|
If the sending program supports reverse data stream sampling or
|
|
interrupt, error recovery will be faster (on average) than a protocol
|
|
(such as YMODEM) that sends "monolithic" blocks.
|
|
|
|
|
|
10. ATTENTION SEQUENCE
|
|
|
|
The receiving program sends the Attn sequence whenever it detects an
|
|
error and needs to interrupt the sending program.
|
|
|
|
The default Attn string value is empty (no Attn sequence). The
|
|
receiving program resets Attn to the empty default before each
|
|
transfer session.
|
|
|
|
The sender speficies the Attn sequence in its optional ZSINIT frame.
|
|
The Attn string is terminated with a null.
|
|
|
|
Two meta-characters perform special functions:
|
|
|
|
+ \335 (octal) Sends a break signal
|
|
|
|
+ \336 (octal) Pauses one second
|
|
|
|
|
|
11. PACKET/FRAME TYPES
|
|
|
|
The numeric values for the values shown in boldface are given in
|
|
zmodem.h.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 16
|
|
|
|
|
|
|
|
11.1 ZRQINIT
|
|
|
|
Sent once by the sending program, to trigger the receiving program to
|
|
send its ZRINIT packet. This aviods the aggravatimg startup delay
|
|
associated with XMODEM and Kermit transfers.
|
|
|
|
ZF0 contains ZCOMMAND if the program is attempting to send a command,
|
|
0 otherwise.
|
|
|
|
11.2 ZRINIT
|
|
|
|
Sent by the receiving program. ZF0 and ZF1 contain the bitwise or
|
|
of the receiver capability flags:
|
|
#define CANFDX 1 /* Rx can send and receive FDX */
|
|
#define CANOVIO 2 /* Rx can receive during disk I/O */
|
|
#define CANBRK 4 /* Rx can send a break signal */
|
|
#define CANCRY 8 /* Receiver can decrypt */
|
|
|
|
ZP0 and ZP1 contain the size of the receiver's buffer in bytes, or 0
|
|
if nonstop I/O is allowed.
|
|
|
|
11.3 ZSINIT
|
|
|
|
Sender sends capability flags (currently all 0) (none currently
|
|
defined) followed by a binary data packet terminated with ZCRCW. The
|
|
data packet contains the null terminated Attn sequence, maximum
|
|
length 32 bytes including the terminating null.
|
|
|
|
11.4 ZACK
|
|
|
|
Acknowedgement to ZSINIT header packet, ZCHALLENGE header packet, or
|
|
ZCRCW data packet. ZP0 to ZP3 contain file offset. Response to
|
|
ZCHALLENGE contains the same 32 bits as received.
|
|
|
|
11.5 ZFILE
|
|
|
|
This packet denotes the beginning of a file transmission attempt.
|
|
ZF0, ZF1, and ZF2 may contain options. A value of 0 in each of these
|
|
bytes implies no special treatment. If options are specified to the
|
|
reciever, they override options specified to the sender with the
|
|
exception of the ZCBIN option, which overrides any other Conversion
|
|
Option.
|
|
|
|
|
|
11.5.1 ZF0: Conversion Option
|
|
If the receiver does not recognize the Conversion Option, an
|
|
application dependent default conversion may apply.
|
|
|
|
ZCBIN "Binary" transfer - inhibit conversion unconditionally
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 17
|
|
|
|
|
|
|
|
ZCNL Convert received end of line to local end of line convention.
|
|
The suported end line conventions are CR/LF (most ASCII based
|
|
operating systems except Unix and Macintosh), and NL (Unix).
|
|
Neither of these two end of line conventions violate the
|
|
permissible ASCII definitions for Carriage Return and Line
|
|
Feed/New Line.
|
|
|
|
ZCRECOV Recover interrupted file transfer; start transfer at location
|
|
corresponding to the receiver's end of file. This option does
|
|
not apply if the source file is shorter. Files that have been
|
|
converted (e.g., ZCNL) or subject to a single ended Transport
|
|
Option cannot have their transfers recovered.
|
|
|
|
11.5.2 ZF1: Management Option
|
|
If the receiver does not recognize the Management Option, the file
|
|
should be transferred normally.
|
|
|
|
ZMNEW Compare the source and destination files. Transfer file if
|
|
source newer or different length
|
|
|
|
ZMCRC Compare the source and destination files. Transfer if
|
|
different file length or CRC
|
|
|
|
ZMAPND Append source file contents to existing destination file (if
|
|
any)
|
|
|
|
ZMCLOB Replace existing destination file (if any)
|
|
|
|
ZTSPARS Special processing for sparse file; each file segment is
|
|
transmitted as a separate frame, where the frames are not
|
|
necessarily contiguous.
|
|
|
|
11.5.3 ZF2: Transport Option
|
|
If the receiver does not implement the particular transport option,
|
|
the file is copied without conversion for later processing.
|
|
|
|
ZTLZW Lempel-Ziv compression. Transmitted data will be identical to
|
|
that produced by compress 4.0 operating on a computer with VAX
|
|
byte ordering, using 12 bit encoding.
|
|
|
|
ZTCRYPT Encryption. An initial null terminated string identifies the
|
|
key. Details to be determined.
|
|
|
|
ZTRLE Run Length encoding Details to be determined.
|
|
|
|
A ZCRCW data packet follows with file name, file length, modification
|
|
date, and other information described in a later chapter.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 17
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 18
|
|
|
|
|
|
|
|
11.6 ZSKIP
|
|
|
|
Sent by the receiver in response to ZFILE, makes the sender skip to
|
|
the next file.
|
|
|
|
11.7 ZNAK
|
|
|
|
Indicates last packet header was garbled. (See also ZRPOS).
|
|
|
|
11.8 ZABORT
|
|
|
|
Sent by receiver to terminate batch file transfers when requested by
|
|
the user. Sender initiates a ZFIN sequence.[1]
|
|
|
|
11.9 ZFIN
|
|
|
|
Sent by sending program to terminate a ZMODEM session. Receiver
|
|
responds with ZFIN.
|
|
|
|
11.10 ZRPOS
|
|
|
|
Sent by receiver to force file transfer to resume at file offset
|
|
given in ZP0...ZP3.
|
|
|
|
11.11 ZDATA
|
|
|
|
ZP0...ZP3 contain file offset. One or more data packets follow.
|
|
|
|
11.12 ZEOF
|
|
|
|
Sender reports End of File. ZP0...ZP3 contain the ending file
|
|
offset.
|
|
|
|
11.13 ZFERR
|
|
|
|
Error in reading or writing file, protocol equivalent to ZABORT.
|
|
|
|
11.14 ZCRC
|
|
|
|
Request (receiver) and response (sender) for file CRC. ZP0 and ZP1
|
|
contain 16 bit file CRC.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__________
|
|
|
|
1. Or ZCOMPL in case of server mode.
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 18
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 19
|
|
|
|
|
|
|
|
11.15 ZCHALLENGE
|
|
|
|
Request to echo a random number in ZP0...ZP3 in a ZACK frame. Sent
|
|
by the receiving program to the sending program to verify that it is
|
|
connected to an operating program, and was not activated by spurious
|
|
data or a Trojan Horse message.
|
|
|
|
11.16 ZCOMPL
|
|
|
|
Request now completed.
|
|
|
|
11.17 ZCAN
|
|
|
|
This is a pseudo frame type returned by gethdr() in response to a
|
|
Cancel sequence.
|
|
|
|
11.18 ZFREECNT
|
|
|
|
Sending program requests a ZACK frame with ZP0...ZP3 containing the
|
|
number of free bytes on the current file system. A value of 0
|
|
represents an indefinite amount of free space.
|
|
|
|
11.19 ZCOMMAND
|
|
|
|
ZCOMMAND is only sent as a binary header packet. ZP0...ZP2 contain a
|
|
unique cardinal number to differentiate this command from other
|
|
commands[2]. ZF0 contains 0 or ZCACK1.
|
|
|
|
|
|
A ZCRCW data packet follows, with the ASCII text command string
|
|
terminated with a NULL character. If the command is intended to be
|
|
executed by the operating system hosting the receiving program (e.g.,
|
|
"shell escape"), it must have "!" as the first character. Otherwise
|
|
the command is meant to be executed by the application program which
|
|
received the command.
|
|
|
|
If ZF0 contained ZCACK1, the receiver immediately responds with a
|
|
ZCOMPL header. Otherwise, the receiver responds with a ZCOMPL header
|
|
when the operation is completed.
|
|
|
|
The exit status of the completed command is stored in ZP0...ZP3 (0 if
|
|
ZCACK1). A 0 exit status implies nominal completion of the command.
|
|
|
|
If the command caused a file to be transmitted, the command sender
|
|
will see a ZRQINIT frame from the other computer attempting to send
|
|
|
|
|
|
__________
|
|
|
|
2. Currently unused.
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 19
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 11 rev051486 Printed 5-16-86 20
|
|
|
|
|
|
|
|
data.
|
|
|
|
The sender examines ZF0 of the received ZRQINIT packet to determine
|
|
it is not an echo of its own ZRQINIT packet. It is illegal for the
|
|
sending program to command the receiving program to send a command.
|
|
|
|
|
|
|
|
12. TRANSACTION EXAMPLE
|
|
|
|
12.1 A simple file transfer
|
|
|
|
A simple transaction, one file, no errors, no CHALLENGE, overlapped
|
|
I/O:
|
|
|
|
Sender Receiver
|
|
|
|
"rz\r"
|
|
ZRQINIT(0)
|
|
ZRINIT
|
|
ZFILE
|
|
ZRPOS
|
|
ZDATA data ...
|
|
ZEOF
|
|
ZRINIT
|
|
ZFIN
|
|
ZFIN
|
|
OO
|
|
|
|
|
|
12.2 Challenge and Command Download
|
|
|
|
|
|
Sender Receiver
|
|
|
|
"rz\r"
|
|
ZRQINIT(ZCOMMAND)
|
|
ZCHALLENGE(rnd)
|
|
ZACK(same-rnd)
|
|
ZRINIT
|
|
ZCOMMAND
|
|
(Perform Command)
|
|
ZCOMPL
|
|
ZFIN
|
|
ZFIN
|
|
OO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 13 rev051486 Printed 5-16-86 20
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 13 rev051486 Printed 5-16-86 21
|
|
|
|
|
|
|
|
13. ZFILE FRAME FILE INFORMATION
|
|
|
|
ZMODEM sends the same file information with the ZFILE frame data that
|
|
YMODEM Batch sends in its block 0.
|
|
|
|
N.B.: Only the pathname (file name) part is
|
|
s required for batch
|
|
transfers.
|
|
|
|
Pathname The pathname (conventionally, the file name) is sent as a
|
|
null terminated ASCII string. This is the filename format used
|
|
by the handle oriented MSDOS(TM) functions and C library fopen
|
|
functions. An assembly language example follows:
|
|
DB 'foo.bar',0
|
|
No spaces are included in the pathname. Normally only the file
|
|
name stem (no directory prefix) is transmitted unless the sender
|
|
has selected YAM's f option to send the full relative pathname.
|
|
The source drive designator (A:, B:, etc.) is not sent.
|
|
|
|
Filename Considerations:
|
|
|
|
+ File names should be translated to lower case unless the
|
|
sending system supports upper/lower case file names. This
|
|
is a convenience for users of systems (such as Unix) which
|
|
store filenames in upper and lower case.
|
|
|
|
+ The receiver should accommodate file names in lower and
|
|
upper case.
|
|
|
|
+ The rb(1) program on Unix systems normally translates the
|
|
filename to lower case unless one or more letters in the
|
|
filename are already in lower case.
|
|
|
|
+ When transmitting files between different operating
|
|
systems, file names must be acceptable to both the sender
|
|
and receiving operating systems.
|
|
|
|
If directories are included, they are delimited by /; i.e.,
|
|
"subdir/foo" is acceptable, "subdir\foo" is not.
|
|
|
|
Length The file length and each of the succeeding fields are
|
|
optional.[1] The length field is stored as a decimal string
|
|
counting the number of data bytes in the file.
|
|
|
|
With ZMODEM, the receiver uses the file length only for display
|
|
(progress reporting) purposes; the actual length is determined
|
|
|
|
|
|
__________
|
|
|
|
1. Fields may not be skipped.
|
|
|
|
|
|
|
|
|
|
Chapter 13 rev051486 Printed 5-16-86 21
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 13 rev051486 Printed 5-16-86 22
|
|
|
|
|
|
|
|
by the data transfer.
|
|
|
|
Modification Date A single space separates the modification date from
|
|
the file length.
|
|
|
|
The mod date is optional, and the filename and length may be
|
|
sent without requiring the mod date to be sent.
|
|
|
|
The mod date is sent as an octal number giving the time the
|
|
contents of the file were last changed measured in seconds from
|
|
Jan 1 1970 Universal Coordinated Time (GMT). A date of 0
|
|
implies the modification date is unknown and should be left as
|
|
the date the file is received.
|
|
|
|
This standard format was chosen to eliminate ambiguities arising
|
|
from transfers between different time zones.
|
|
|
|
Two Microsoft blunders complicate the use of modification dates
|
|
in file transfers with MSDOS(TM) systems. The first is the lack
|
|
of timezone standardization in MS-DOS. A file's creation time
|
|
can not be known unless the timezone of the system that wrote
|
|
the file[2] is known. Unix solved this problem (for planet
|
|
Earth, anyway) by stamping files with Universal Time (GMT).
|
|
Microsoft would have to include the timezone of origin in the
|
|
directory entries, but does not. Professional-YAM gets around
|
|
this problem by using the z parameter which is set to the number
|
|
of minutes local time lags GMT. For files known to originate
|
|
from a different timezone, the -zT option may be used to specify
|
|
T as the timezone for an individual file transfer.
|
|
|
|
The second problem is the lack of a separate file creation date
|
|
in DOS. Since some backup schemes used with DOS rely on the
|
|
file creation date to select files to be copied to the archive,
|
|
back-dating the file modification date could interfere with the
|
|
safety of the transferred files. For this reason,
|
|
Professional-YAM does not modify the date of received files with
|
|
the header information unless the d parameter is non zero.
|
|
|
|
|
|
Mode A single space separates the file mode from the modification
|
|
date. The file mode is stored as an octal string. Unless the
|
|
file originated from a Unix system, the file mode is set to 0.
|
|
rb(1) checks the file mode for the 0x8000 bit which indicates a
|
|
Unix type regular file. Files with the 0x8000 bit set are
|
|
assumed to have been sent from another Unix (or similar) system
|
|
|
|
|
|
__________
|
|
|
|
2. Not necessarily that of the transmitting system!
|
|
|
|
|
|
|
|
|
|
Chapter 13 rev051486 Printed 5-16-86 22
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 13 rev051486 Printed 5-16-86 23
|
|
|
|
|
|
|
|
which uses the same file conventions. Such files are not
|
|
translated in any way.
|
|
|
|
|
|
Serial Number A single space separates the serial number from the
|
|
file mode. The serial number of the transmitting program is
|
|
stored as an octal string. Programs which do not have a serial
|
|
number should omit this field, or set it to 0. The receiver's
|
|
use of this field is optional.
|
|
|
|
The file information is terminated by a null. If only the pathname
|
|
is sent, the pathname will be terminated by two nulls. The length of
|
|
the file information packet, including the trailing null, must not
|
|
exceed 1024 bytes; a typical length is less than 64 bytes.
|
|
|
|
|
|
14. PERFORMANCE RESULTS
|
|
|
|
14.1 Throughput
|
|
|
|
Between two single task PC-XT computrers, on a Telenet link through
|
|
the local Telenet, SuperKermit gave 72 ch/sec throughput at 1200
|
|
baud. YMODEM-k yielded 85 chars/sec, and ZMODEM provided 113 chat
|
|
sec. ZMODEM was not measured, but would have given much less.
|
|
|
|
14.2 Error Recovery
|
|
|
|
Some tests of ZMODEM protocol performance have been made. A PC-AT
|
|
with SCO SYS V Xenix or DOS 3.1 was connected to a PC with DOS 2.1
|
|
either directly at 9600 bps or with unbuffered dial-up 1200 bps
|
|
modems. The ZMODEM software was configured to use 1024 byte packet
|
|
lengths above 2400 bps, 256 otherwise.
|
|
|
|
Because no time delays are necessary in normal file transfers, per
|
|
file negotiations are much faster than with YMODEM, the only observed
|
|
impidiment being the time required by the program(s) to update
|
|
logging files.
|
|
|
|
During a file transfer, a short line hit seen by the receiver usually
|
|
induces a CRC error. The interrupt packet is usually seen by the
|
|
sender before the next packet is sent, and the resultant loss of data
|
|
throughput averages about half a packet. At 1200 bps this is would
|
|
be about .75 second lost per hit. At 10-5 error rate, this would
|
|
degrade throughput by about 9 per cent. The throughput degradation
|
|
increases with the channel delay, as the packets in transit through
|
|
the channel are discarded on error.
|
|
|
|
A longer noise burst that affects both the receiver and the sender's
|
|
reception of the interrupt packet usually causes the sender to remain
|
|
silent until the receiver times out in 10 seconds. If the round trip
|
|
channel delay exceeds the receiver's 10 second timeout, recovery from
|
|
|
|
|
|
|
|
Chapter 14 rev051486 Printed 5-16-86 23
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 14 rev051486 Printed 5-16-86 24
|
|
|
|
|
|
|
|
this type of error may become difficult.
|
|
|
|
Noise affecting only the sender is usually ignored, with one common
|
|
exception. Spurious XOFF characters generated by noise stop the
|
|
sender until the receiver times out and sends an interrupt packet
|
|
which concludes with an XON.
|
|
|
|
In summation, ZMODEM performance in the presence of errors resembles
|
|
that of X.PC and SuperKermit. Short bursts cause minimuml data loss.
|
|
Long bursts (such as pulse dialing noises) often require a timeout
|
|
error to restore the flow of data.
|
|
|
|
|
|
15. PACKET SWITCHED NETWORK CONSIDERATIONS
|
|
|
|
Flow control is necessary for printing messages and directories, and
|
|
for streaming file transfer protocols including Kermit Sliding
|
|
Windows and ZMODEM. A non transparent flow control is incompatible
|
|
with XMODEM and YMODEM transfers. XMODEM and YMODEM protocols
|
|
require complete transparency of all 256 8 bit codes to operate
|
|
properly.
|
|
|
|
The most desireable flow control (when X.25 or hardware CTS is
|
|
unavailable) does not "eat" any characters at all. When the PAD's
|
|
buffer almost fills up, an XOFF should be emitted. When the buffer
|
|
is no longer nearly full, send an XON. Otherwise, the network should
|
|
neither generate nor eat XON or XOFF control characters.
|
|
|
|
On Telenet, this can be met by setting CCIT X3 5:1 and 12:0 at both
|
|
ends of the network. For best throughput, parameter 64 (advance ACK)
|
|
should be set to something like 4. Packets should be sent when the
|
|
packet is a full 128 bytes, or after a moderate delay (3:0,4:10,6:0).
|
|
|
|
For YMODEM, PAD buffering should guarantee that a minimum of 1040
|
|
characters can be sent in a burst without loss of data or generation
|
|
of flow control characters. Failure to provide this buffering will
|
|
generate excessive retries with YMODEM.
|
|
|
|
Figure 4. Flow Control Compatibility
|
|
|
|
Connectivity Interactive XMODEM KERMIT ZMODEM
|
|
|
|
Direct Connection YES YES YES YES
|
|
Network, no flow control NO YES (1) (1)
|
|
Network, transparent f.c. YES YES YES YES
|
|
Network, semi-transparent f.c. YES NO YES YES
|
|
Network, 7 bit YES NO YES(2) NO(3)
|
|
|
|
(1) Cannot operate in streaming mode. Kermit is very slow because of
|
|
96 byte max packet size. ZMODEM can adjust burst length to maximum
|
|
for faster transfers.
|
|
|
|
|
|
|
|
Chapter 15 rev051486 Printed 5-16-86 24
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 15 rev051486 Printed 5-16-86 25
|
|
|
|
|
|
|
|
(2) Parity bits must be encoded, slowing binary transfers.
|
|
|
|
(3) Extension possible for encoding data to 7 bits.
|
|
|
|
|
|
|
|
16. PERFORMANCE COMPARISION TABLES
|
|
|
|
|
|
"Round Trip Delay Time" includes the time for the last byte in a
|
|
packet to propagate through the operating systems and network to the
|
|
receiver, plus the time for the receiver's response to that packet to
|
|
propogate back to the sender.
|
|
|
|
The figures shown below are calculated for round trip delay times of
|
|
40 milliseconds and 5 seconds. Shift registers in the two computers
|
|
and a pair of 212 modems generate a round trip delay time on the
|
|
order of 40 milliseconds. Operation with busy timesharing computers
|
|
and networks can easily generate round trip delays of five seconds.
|
|
Because the round trip delays cause visible interruptions of data
|
|
transfer when using XMODEM protocol, the subjective effect of these
|
|
delays is greatly exaggerated, especially when the user is paying for
|
|
connect time.
|
|
|
|
A 102400 byte binary file with randomly distributed codes is sent at
|
|
1200 bps 8 data bits, 1 stop bit. The calculations assume no
|
|
transmission errors. For each of the protocols, only the per file
|
|
functions are considered. Processor and I/O overhead are not
|
|
included. YM-k refers to YMODEM with 1024 byte packets. YM-g refers
|
|
to the YMODEM "g" option. ZMODEM uses 256 byte packets for this
|
|
example. SuperKermit uses maximum packet size, 8 bit transparent
|
|
transmission, no run length compression.
|
|
|
|
For comparison, a straight "dump" of the file contents with no file
|
|
management or error checking takes 853 seconds.
|
|
|
|
Figure 5. Protocol Overhead Information
|
|
|
|
Protocol XMODEM YM-k YM-g ZMODEM S-Kermit
|
|
|
|
Protocol Round Trips 803 103 5 5 5
|
|
Trip Time at 40ms 32s 4s 0 0 0
|
|
Trip Time at 5s 4015s 515s 25s 25s 25
|
|
|
|
Overhead Characters 4803 603 503 3600 38280
|
|
|
|
Transfer Time at 0s 893s 858s 857s 883s 1172s
|
|
Transfer Time at 40ms 925s 862s 857s 883s 1172s
|
|
Transfer Time at 5s 5761s 1373s 882s 918s 1197s
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 16 rev051486 Printed 5-16-86 25
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 16 rev051486 Printed 5-16-86 26
|
|
|
|
|
|
|
|
Figure 6. Transmission Time Comparision
|
|
(5 Second Round Trip)
|
|
|
|
************************************************** XMODEM
|
|
************ YMODEM-K
|
|
********** SuperKermit (Sliding Windows)
|
|
******* YMODEM-G
|
|
******* ZMODEM
|
|
|
|
Figure 7. Y/ZMODEM Header Information usage
|
|
|
|
|
|
Program Batch Length Date Mode S/N YMODEM-g ZMODEM
|
|
Unix rb/sb yes yes yes yes no sb only no
|
|
Unix rz/sz yes yes yes yes no sz only yes
|
|
VMS rb/sb yes yes no no no no no
|
|
Pro-YAM yes yes yes no yes yes yes
|
|
CP/M YAM yes no no no no no no
|
|
KMD/IMP yes yes- no no no no no
|
|
MEX no no no no no no no
|
|
|
|
|
|
17. MORE INFORMATION
|
|
|
|
More information may be obtained by calling Telegodzilla at
|
|
503-621-3746.
|
|
|
|
UUCP sites can obtain the nroff/troff source to this file with
|
|
uucp omen!/usr/caf/public/zmodem.mm /tmp
|
|
A continually updated list of available files is stored in
|
|
/usr/spool/uucppublic/FILES.
|
|
|
|
The following L.sys line calls site "omen" yia UUCP. Telegodzilla
|
|
uses Pro-YAM in host operation.
|
|
|
|
In response to "Name Please:" uucico gives the Pro-YAM "link" command
|
|
as a user name. The password (Giznoid) controls access to the Xenix
|
|
system connected to the IBM PC's other serial port. Communications
|
|
between Pro-YAM and Xenix use 9600 bps; YAM converts this to the
|
|
caller's speed.
|
|
|
|
Finally, the calling uucico logs in as uucp.
|
|
|
|
omen Any ACU 1200 1-503-621-3746 e:--e: link d: Giznoid n:--n: uucp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 18 rev051486 Printed 5-16-86 26
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 18 rev051486 Printed 5-16-86 27
|
|
|
|
|
|
|
|
18. ZMODEM PROGRAMS
|
|
|
|
A demonstration version of Professional-YAM is available as
|
|
YAMDEMO.ARC on TeleGodzilla.. This file must be unpacked with the
|
|
"ARC" program, version 5 or later. A copy of ARC is available as
|
|
"ARC.EXE" or "ARC510.COM" on TeleGodzilla.
|
|
|
|
|
|
This may be used to test ZMODEM and YMODEM implementations. A
|
|
flash-up tree structured help file and processor are provided in
|
|
YAMHELP.LQR.
|
|
|
|
|
|
|
|
19. YMODEM PROGRAMS
|
|
|
|
Unix programs supporting the YMODEM protocol are available on
|
|
Telegodzilla in the "upgrade" subdirectory as RBSB.SHQ (a SQueezed
|
|
shell archive). Most Unix like systems are supported, including V7,
|
|
Sys III, 4.2 BSD, SYS V, Idris, Coherent, and Regulus.
|
|
|
|
A version for VAX-VMS is available in VRBSB.SHQ, in the same
|
|
directory.
|
|
|
|
Irv Hoff has added YMODEM 1k packets and YMODEM batch transfers to
|
|
the KMD and IMP series programs, which replace the XMODEM and
|
|
MODEM7/MDM7xx series respectively. Overlays are available for a wide
|
|
variety of CP/M systems.
|
|
|
|
Many other programs, including MEX and MEX-PC also support some of
|
|
the YMODEM extensions.
|
|
|
|
Questions about YMODEM, the Professional-YAM communications program,
|
|
and requests for evaluation copies may be directed to:
|
|
|
|
Chuck Forsberg
|
|
Omen Technology Inc
|
|
17505-V Sauvie Island Road
|
|
Portland Oregon 97231
|
|
Voice: 503-621-3406
|
|
Modem (Telegodzilla): 503-621-3746
|
|
Usenet: ...!tektronix!reed!omen!caf
|
|
Compuserve: 70715,131
|
|
Source: TCE022
|
|
|
|
Yours very truly,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chapter 19 rev051486 Printed 5-16-86 27
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CONTENTS
|
|
|
|
|
|
1. INTENDED AUDIENCE................................................ 2
|
|
|
|
2. ACKNOWLEDGMENTS.................................................. 2
|
|
|
|
3. RELATED DOCUMENTS................................................ 2
|
|
|
|
4. ROSETTA STONE.................................................... 2
|
|
|
|
5. WHY DEVELOP ZMODEM?.............................................. 3
|
|
|
|
6. ZMODEM Protocol Design Criteria.................................. 5
|
|
6.1 Ease of Use............................................... 5
|
|
6.2 Throughput................................................ 5
|
|
6.3 Integrity and Robustness.................................. 6
|
|
6.4 Ease of Implementation.................................... 6
|
|
|
|
7. ZMODEM BASICS.................................................... 6
|
|
7.1 Packetization............................................. 7
|
|
7.2 Link Escape Encoding...................................... 7
|
|
7.3 Header Packet Information................................. 8
|
|
7.4 Binary Header Packet...................................... 9
|
|
7.5 HEX Header Packet......................................... 9
|
|
7.6 Binary Data Packets....................................... 10
|
|
7.7 ASCII Encoded Data Packet................................. 10
|
|
|
|
8. PROTOCOL TRANSACTION OVERVIEW.................................... 10
|
|
8.1 Session Cancel Packet..................................... 13
|
|
|
|
9. ZMODEM STREAMING TECHNIQUES...................................... 14
|
|
9.1 Full Streaming with Sampling.............................. 14
|
|
9.2 Full Streaming with Interrupt............................. 14
|
|
9.3 Full Streaming with a Sliding Window...................... 15
|
|
9.4 No Streaming.............................................. 15
|
|
|
|
10. ATTENTION SEQUENCE............................................... 15
|
|
|
|
11. PACKET/FRAME TYPES............................................... 15
|
|
11.1 ZRQINIT................................................... 16
|
|
11.2 ZRINIT.................................................... 16
|
|
11.3 ZSINIT.................................................... 16
|
|
11.4 ZACK...................................................... 16
|
|
11.5 ZFILE..................................................... 16
|
|
11.6 ZSKIP..................................................... 18
|
|
11.7 ZNAK...................................................... 18
|
|
11.8 ZABORT.................................................... 18
|
|
11.9 ZFIN...................................................... 18
|
|
11.10 ZRPOS..................................................... 18
|
|
11.11 ZDATA..................................................... 18
|
|
|
|
|
|
|
|
- i -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11.12 ZEOF...................................................... 18
|
|
11.13 ZFERR..................................................... 18
|
|
11.14 ZCRC...................................................... 18
|
|
11.15 ZCHALLENGE................................................ 19
|
|
11.16 ZCOMPL.................................................... 19
|
|
11.17 ZCAN...................................................... 19
|
|
11.18 ZFREECNT.................................................. 19
|
|
11.19 ZCOMMAND.................................................. 19
|
|
|
|
12. TRANSACTION EXAMPLE.............................................. 20
|
|
12.1 A simple file transfer.................................... 20
|
|
12.2 Challenge and Command Download............................ 20
|
|
|
|
13. ZFILE FRAME FILE INFORMATION..................................... 21
|
|
|
|
14. PERFORMANCE RESULTS.............................................. 23
|
|
14.1 Throughput................................................ 23
|
|
14.2 Error Recovery............................................ 23
|
|
|
|
15. PACKET SWITCHED NETWORK CONSIDERATIONS........................... 24
|
|
|
|
16. PERFORMANCE COMPARISION TABLES................................... 25
|
|
|
|
17. MORE INFORMATION................................................. 26
|
|
|
|
18. ZMODEM PROGRAMS.................................................. 27
|
|
|
|
19. YMODEM PROGRAMS.................................................. 27
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- ii -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LIST OF FIGURES
|
|
|
|
|
|
Figure 1. Order of Bytes in Header Packet............................ 8
|
|
|
|
Figure 2. Binary Header Packet....................................... 9
|
|
|
|
Figure 3. HEX Header Packet.......................................... 10
|
|
|
|
Figure 4. Flow Control Compatibility................................. 24
|
|
|
|
Figure 5. Protocol Overhead Information.............................. 25
|
|
|
|
Figure 6. Transmission Time Comparision.............................. 26
|
|
|
|
Figure 7. Y/ZMODEM Header Information usage.......................... 26
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- iii -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The ZMODEM Asynchronous Inter Application File Transfer Protocol
|
|
|
|
Chuck Forsberg
|
|
|
|
Omen Technology Inc
|
|
|
|
|
|
ABSTRACT
|
|
|
|
|
|
|
|
The ZMODEM file transfer protocol greatly simplifies file transfers
|
|
compared to XMODEM. In addition to supporting a transparent user
|
|
interface, ZMODEM provides Personal Computer and other users an efficient,
|
|
accurate, robust file transfer method.
|
|
|
|
ZMODEM provides especially efficient file transfers with timesharing
|
|
systems, satellite relays, and wide area packet switched networks. A
|
|
choice of buffering and windowing modes allow ZMODEM to operate
|
|
efficiently on systems that cannot support some other streaming protocols.
|
|
|
|
ZMODEM provides advanced file management features including AutoDownload,
|
|
remote file compare, aborted transfer recovery, selective file transfers,
|
|
and security verified command downloading.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|