The ZMODEM protocol differs considerably from other protocols.
The ZMODEM protocol shipped with SuperCom includes common ZMODEM features like Crash Recovery, Full Streaming, 32bit CRC, Batch File Transfer, File Options but also third party features added over the years like ZMODEM/8k block option, the ZMODEM/32k and the ZMODEM/64k extensions from ADONTEC® shipped with SuperCom.
On bad lines a file transfer may repeat blocks for a while and then break. Later one can continue from the point of failure without the need to retransmit the part of the file thats already there.
If the receiver can overlap serial I/O with disk I/O and the sender can check the reverse channel for data, then both partners agree to use this feature.
The 32 bit CRC offers a better block security than a simple checksum. Long packets (>128 Bytes) are not acceptable secured with a simple 8 bit checksum.
The ZMODEM specification allows to transmit more than one file within one session.
The sender of a file may include instruction for the receiver how to perform with the file under some circumstances. Using the file options the sender of the file can instruct the receiver to ignore files that are not present, to check date, time or size and accept only newer or bigger, to change the files name if the name already used, accept a file if the destination is absent, append the file to an existend file, ...
The standard block length of 1024 was acceptable for the low speed connections at 4800bps (bps=Bits Per Second), 9600bps or even 14400bps. As speed was growing the throughput could get even better if the data blocks were bigger.
The ZMODEM/8k extension increased the block length to 8192 bytes.
The 8k enhancement was a very usefull feature when data communication speed was increasing beyond 14400bps or 19200bps. Today data connections are often way beyond 56Kbps.
Data connections using serial interfaces often go from 230Kbps to 1Mbps. Digital communication via ISDN use 56Kbps/64Kbps/128Kbps. Intranet data connections are using the TCP/IP protocol with routers and switches at 10/100/1000Mbps. On the internet DSL is widely used offering transmit speeds around 256Kbps (e.g. DSL 1024/256).Connections through ISDN or TCP/IP can be considered as Error Free Channels1 thus data loss is nearly impossible2. Since the data transfer media is assumed error free increasing the block length will result to a lower number of blocks to transmit and thus less overhead which will improve the data throughput.
Full Streaming vs. Segmented Streaming
Full Streaming method is often used in ZMODEM over Error Free Channels. The definition of Error Free Channels usually assumes 100% error free connections but even 90% is sometimes acceptable.
With Full Streaming if the error free channel is less than 100% even one retry may drop throughput considerably, if the synchronization between the two parties is slow.
Segmented Streaming is used in case the receiver cannot handle streaming correctly, cannot overlapp I/O or due to high latency e.g. sat lines. The sender transmits a block and waits for the ACK preventing buffer overflow on the receiver side. This method requires a fast synchronization between the parties in order to stay on a high throughput level and close below Full Streaming.
If Segmented Streaming is combined with sufficiently large block length the number or ACK's gets much lower than with 1024 blocks and throughput comes very close to Full Streaming.
Even ZMODEM/32k currently limits the block length to 32k it can accept any value between 1024 and 32768. The lower limit is not really checked, thus allowing, on some circumstances, settings below 10243. The fall-back option to 128 block length still exists. Backward compatibility is important for a versatile communication software.
The 64k option can accept any block length between 1024 and 65535 (FFFFhex). The 64k option is currently shipped on request.
ZMODEM/32k was created by ADONTEC® in 2002 for better performance on high-speed error free connections like ISDN or TCP/IP networks (intranet, internet). ZMODEM/64k was added in 2007. Both extensions are backward compatible.
1If you hit on poor communication channel avoid any block length higher than 1024. It takes much longer to clear and repeat a large block than a small one and this will probably drop throughput. It is advised to use large blocks on error free channels only.
2 if the connection closes in the middle or someone withdraws the cable or due to small buffers used in the software or other kind of errors in the software implementing the protocol.
3 Values below 128 may produce timeout failures if the default timeout values not tuned.