# XMODEM

Das XMODEM (gelegentlich auch X-MODEM) ist ein einfaches Sende-und-warte-ARQ-Protokoll mit einer festen Paketlänge, welches eine gesicherte Datenübertragung regelt. Es wurde 1977 von dem IBM-Vertriebstechniker Ward Christensen entwickelt und ist Public domain.
XMODEM war das erste weitverbreitete Datenübertragungsprotokoll und trug wesentlich zur Ausbreitung der Mailboxen bei. Christensen selbst richtete 1978 mit dem CBBS (Computerized Bulletin Board System) die erste Mailbox zum Austausch von Nachrichten ein. Es wird üblicherweise auf dem seriellen Protokoll implementiert.

## Ursprung

Ward Christensen und Randy Suess hatten sich 1975 als Mitglieder von CACHE, einem lokalen Computerclub in Chicago, kennengelernt. Wie damals üblich nutzten sie Kompaktkassetten zur Datenspeicherung. Eine Variante, die Daten darauf zu transferieren, war es, einen 300 Baud Akustikkoppler für die Audioübertragung zum Kassettenspieler zu nutzen. Hierzu schrieb Ward Christensen im Januar 1977 ein einfaches Programm, um die Daten von der Floppy zur Kassette zu piepsen. Das Programm bildete Blöcke von 128 Byte, der Blockgröße von CP/M-Disketten, und einer einfachen Prüfsumme. Er veröffentlichte es unter dem Namen MODEM.ASM.
Später schrieb Dave Jaffe ein Programm namens BYE um entfernte Nutzer auf ein CP/M-System zugreifen zu lassen und es von dort bedienen zu können. Um dabei auch Dateien zwischen den Systemen übertragen zu können, wurde MODEM so angepasst, dass es keine Statusausgaben auf der Konsole ausgab. Somit wurde für den Zeitraum des Down- oder Uploads die Telefonverbindung rein für die Dateiübertragung genutzt und nicht gleichzeitig mit den Konsolenausgaben von MODEM gestört. Diese kleine Änderung führte zum neuen Namen XMODEM und war der Startschuss für eines der damals wohl am weitesten portierten Dateiübertragungsprotokolle, da es auf fast jede Hardware-Umgebung angepasst wurde und die systemübergreifende Übertragung von binären Computerdateien ermöglichte. Letzteres löste ein großes Problem, da die Systeme sonst keinen gemeinsamen Datenaustausch ermöglichten.

## Funktionsweise

XMODEM arbeitet blockorientiert, die zu übertragenden Daten werden in gleich große Einheiten (Blöcke) aufgeteilt. Die Blöcke haben immer eine Größe von 132 Byte und werden gegebenenfalls mit beliebigen Zeichen aufgefüllt. Quittungen bestehen aus einem einzigen Zeichen.
Blockaufbau :
| Offset | Länge | Inhalt |
| Inhalt ||
| 000 | 001 | ASCII-Zeichen Start Of Header (SOH, 01h) |
| 001 | 001 | Blocknummer |
| 002 | 001 | Einer-Komplement der Blocknummer |
| 003 | 128 | Daten |
| 131 | 001 | Prüfsumme. Die Prüfsumme ist hier die arithmetische Summe der Datenbytes modulo 256 und deshalb fehleranfällig; Doppelfehler an der gleichen Bitposition heben sich auf. |
Die Übertragung wird durch den Empfänger angestoßen, indem er ein NAK sendet. Eine fehlerfrei empfangene Checksumme wird mit Acknowledgement (ACK, 06h) bestätigt. Bei einer Prüfsumme ungleich der berechneten Prüfsumme ist ein Fehler aufgetreten. Der Block wird mit Negative Acknowledgement (NAK, 15h) abgelehnt und dann bis zu zehnmal neu versendet. Das Ende einer Übertragung wird vom Sender mit End Of Transmission (EOT, 04h) angezeigt. Auch dieses muss mit einem ACK bestätigt werden.
Anfang der 1980er Jahre wurde die Blockgröße erweitert (XMODEM 1K) und die Zyklische Redundanzprüfung zur Fehlerprüfung eingesetzt (XMODEM CRC). Die später entwickelten YMODEM- und ZMODEM-Protokolle behoben viele Schwächen der ersten XModem-Version.

## Bedeutungswandel des XMODEM

Nach seiner Spezifikation erlangte XMODEM schnell Bedeutung als einfache Möglichkeit, Dateien über serielle Verbindungen auszutauschen. Durch zwischengeschaltete Modems und analoge Telefonnetze konnten Dateien weltweit abgerufen werden. Mit der Verbreitung des Internets in den kommerziellen und privaten Sektor hinein, verlor diese Vorgehensweise in den späten 1990er Jahren ihre Bedeutung und verschwand aus der Wahrnehmung der entsprechenden Anwender. Informationen und Anwendungen, die früher in Mailboxen zu finden waren, werden heute in der Regel per HTTP abgerufen und entweder gleich am Browser gelesen bzw. als Download vom Web-Server geholt.
Weiterhin benutzt werden XMODEM sowie seine Varianten (XMODEM 1K, XMODEM CRC) und Nachfolger (YMODEM, ZMODEM) aber, um zum Beispiel Peripheriegeräte mit Systemaktualisierungen (so genannten Flash-Aktualisierungen) zu versorgen. Man schätzt hier die Einfachheit des Protokolls, das keine komplexen Betriebssysteminteraktionen erfordert, im Gegensatz beispielsweise zu FTP.
Variationen dieses Protokolls werden von einigen Unternehmen sogar dann verwendet, wenn statt der asynchronen, seriellen Schnittstelle (RS232, V.24) eine andere Technik wie USB oder der SSP-Anschluss eines Mikrocontrollers verwendet werden. Die mit Abstand häufigste Verwendung dürfte jedoch die Systemaktualisierung von Geräten sein, die ohnehin über eine serielle Schnittstelle verfügen. Dies sind zum Beispiel Modems, ISDN-Terminaladapter, einige Mobiltelefontypen oder Router.
XMODEM und Ähnliche können über die serielle Emulation des Bluetooth-Protokolls oder der IrDA-Infrarotschnittstelle verwendet werden, wo vorhanden. Dies bietet sich für die Dateiübertragung von und nach Handheld-Geräten aller Art an.
Eine Erweiterung zum XMODEM mit 32 KiB Blocklänge (XMODEM/32k) wurde 2002 von Fa. Adontec implementiert, um die Datenübertragungsrate bei fehlerfreien Hochgeschwindigkeits-Verbindungen wie ISDN oder TCP/IP-Netzen (Intranet, Internet) zu erhöhen. Eine Erweiterung mit 64 KiB Blocklänge (XMODEM/64k) wurde 2007 implementiert. Beide Erweiterungen sind rückwärtskompatibel.