ESCape from AlcaTraz
Dieser Artikel wurde von Falk Hartmann geschrieben.
Falk ist leitet die Softwareentwicklung bei der Firma ubigrate. Sein besonderes Interesse gilt der modellgetriebenen Entwicklung in den Bereichen intelligente Geräte und Geräteintegration.
Das Multiplexing verschiedener Informationen innerhalb eines Datenstromes (z.B. einer Datei, einer Netzwerkverbindung usw.) ist eine häufig unvermeidliche Aufgabe, die zuweilen unüberlegt gelöst wird und deshalb jede Menge lustiger merkwürdiger Implementierungen hervorgerufen hat. Es gibt definitiv sowohl gute als auch fragwürdige Gründe für derartige Vermischungen, obwohl jede eigentlich als Verletzung des Separation of Concerns Prinzips betrachtet werden kann. Ein typischer “guter” Grund ist z.B. das Multiplexing zusammengehöriger Daten, welche allein nicht verwertbar sind, wie z.B. Daten und Metadaten. Die Verbreitung von XML beweist sicher auch die Notwendigkeit, Multiplexing zwischen Daten und Metadaten zuzulassen.
Ein anderer Grund kann die begrenzte Verfügbarkeit von Kommunikationskanälen sein. Beispiele dafür sind z.B. serielle Verbindungen (RS232), welche standardmäßig nur einen Datenkanal zulassen – sollen mehrere “virtuelle” Kanäle zur Verfügung gestellt werden, müssen deren Daten vor der Übertragung auf dem physischen Datenkanal vermischt und nachher getrennt werden. Analog schalten viele Protokolle, welche sowohl Daten als auch Kommandos über eine Netzwerkverbindung übertragen (wie z.B. Telnet, nicht aber FTP), zwischen einem virtuellen Kommando- und einem virtuellen Datenkanal um. Eine Einführung virtueller Datenkanäle in einem physischen Kanal erfordert in der Regel eine Kennung im physischen Kanal, die virtuelle Kanäle unterscheidet. Ist diese Kennung in den Daten selbst enthalten, wird ein sogenannter Escaping-Mechanismus notwendig, welcher die Kennung in den Daten “versteckt”. Im folgenden soll an einigen Beispiele die Bandbreite der möglichen Herangehensweisen illustriert werden.
Telnet (im Sinne des RFC 854) benutzt ein Steuerzeichen namens IAC (Interpret as Command, 0xff) um vom Datenkanal in den Kommandokanal zu schalten. Da Telnet ursprünglich auf dem 7-bittigen ASCII-Zeichensatz basiert, kann IAC nie innerhalb der Daten auftreten, ein Escaping, also eine Umschreibung des Zeichens für den Fall, daß dieses im Datenkanal auftaucht, ist damit nicht notwendig.
XML benutzt zwei verschiedene Umschaltungen zwischen Metadaten-Ebene und Daten-Ebene. Das Zeichen <
schaltet auf die Metadaten-Ebene, taucht es in den eigentlichen Daten auf, muß es durch &lt;
ersetzt werden. Innerhalb dieser Metadaten-Ebene kann auf Attributnamen folgend wieder durch ="
oder ='
in die Daten-Ebene (in Form des Attributwertes) zurückgeschaltet werden. Das Beenden des Attributwertes durch "
oder '
schaltet in die Metadaten-Ebene zurück.
Die interessantesten Umschaltmechanismen finden sich im Bereich serieller Verbindungen. So existiert der sogenannte AT C-MUX oder GSM07.10-Standard – verfasst durch das 3rd Generation Partnership Project (3GPP) – welcher das Betreiben mehrere sogenannter Data Link Connections auf einer seriellen Verbindung erlaubt. Ein typischer Einsatzfall dieses Standards sind Kombinationen aus GPRS-Modem und GPS-Empfänger, welche mit nur einer seriellen Verbindung auskommen sollen.
Aber auch auf der Ebene der einzelnen seriellen Verbindung existieren Umschaltmechanismen. Den interessanten Weg hat hier wohl das AT-Protokoll (eingeführt durch Hayes zur Ansteuerung von Modems) gewählt. Aus dem Kommandomodus, in dem sich die serielle Verbindung mit dem Modus normalerweise befindet, gelangt man durch Wählen in den sogenannten Online-Modus. Aus diesem kann man durch die dreimalige Übertragung des Escape-Zeichens (normalerweise +
, also +++
) zwischen zwei Wartezeiten (sogenannten Escape-Sicherungszeiten) in den Kommandomodus zurückschalten. Taucht diese Escape-Sequenz in den Daten auf, sollte zwischen zwei der Escape-Zeichen eine Pause von standardmäßig 1 Sekunde (sic!) eingelegt werden, um sicherzustellen, daß die Escape-Sequenz nicht als solche aufgefasst wird.