The XMODEM protocol is one of the oldest file transfer protocol invented to move files between computers. Developed in 1977 by Ward Christensen, XMODEM was simple and easy to program and it became extremely popular.
XMODEM was offering a block length of 128 bytes and a 8-bit checksum followed at the end of each block.
With XMODEM a file were transferred one packet at a time. The protocol is completely receiver controlled. When each data packet received, the packet's checksum was calculated and compared to the one received. If the two checksum matched, the receiver replied with the
<ACK> (ASCII 6) message to inform the sender to transmit the next packet in sequence. If the calculated checksum was not equal to the one received the receiver transmits
<NAK> (ASCII 21) message instead. When the sender reads a
<NAK> message it re-send the data packet.
Since the 8-bit checksum used was simple, errors within the data packet could go unnoticed. To avoid this the protocol changed by John Mahr in order to be able to transmit a 16-bit CRC. The intention for XMODEM/CRC was to remain backwards compatible with XMODEM. This was accomplished by using the character
'C' instead of the
<NAK> (SYN character). So it's the receiver that decides which block check to be used by the sender.
According to the above, XMODEM/CRC differs from standard XMODEM only in the two byte CRC used instead of the 8-bit checksum and the SYN character. Block length remains at 128 bytes. Both protocols are receiver driven.
The standard block length of 128 was acceptable for the low speed connections. As computer power and communication speed was growing the throughput could get even better if the data blocks were bigger. The 1k feature described in the YMODEM protocol increased the block length of XMODEM/CRC to 1024 bytes. This feature named by some as XMODEM-1k. The XMODEM-1k implementation is driven by the sender and assumes that the receiver can handle it. A fact that is not-normal to XMODEM. If the receiver does not know about it, the communication will fail.
The 1k enhancement was a very usefull feature as the data communication speed was increasing beyond 14400bps or 19200bps. Today data connections are often far 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.
The XMODEM/32k limits the block length to 32k. It will accept any supported value between 128 and 32k.
XMODEM/32k is based on XMODEM/CRC and expects the 16-bit CRC. It also accepts requests for 8-bit checksum in order to support third party software that don't do 16-bit CRC.
The 64k option limits the block length to 64k. It will accept any supported value between 128 and 64k.
XMODEM/64k is based on XMODEM/CRC and expects the 16-bit CRC. It also accepts requests for 8-bit checksum in order to support third party software that don't do 16-bit CRC.
XMODEM/32k was created by ADONTEC® in 2002 for better performance on high-speed error free connections like ISDN or TCP/IP networks (intranet, internet). XMODEM/64k was added in 2007. XMODEM/8k, XMODEM/2k, XMODEM/1k, XMODEM/05k and XMODEM/01k added in 2008 to offer a more complete range.
The details of these extensions are described within the Extended XMODEM specification.
The Extended XMODEM is backwards compatible. A XMODEM or XMODEM/CRC sender will start with the nearest option it knows. A protocol module that calls itself Extended XMODEM is able to communicate with XMODEM, XMODEM/CRC and the rest of the group within Extended XMODEM. The XMODEM-1K is not receiver driven and not within the Extended XMODEM. Users requiring a 1k or 2k block length can use XMODEM/1k or XMODEM/2k. For smaller data packets XMODEM/01k (128 bytes) or XMODEM/05k (512 bytes).
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.
Get the protocol specification.