Netzwerk-Grundlagen, Teil 1

30.11.2004 von PROF. DR. Stephan Euler
Die einfachste Form eines Netzwerks ist die direkte Verbindung zwischen zwei Computern. Sie eignet sich gut, um die grundlegenden Standards und Anforderungen bei der Datenübertragung zu erläutern.

Das einfachste Modell für eine Übertragung ist eine Leitung, auf der ein Signal zwei Zustände annehmen kann. Dieses Signal bewegt sich mit der Ausbreitungsgeschwindigkeit vom Sender zum Empfänger. Die Dauer eines einzelnen Zustandes bestimmt die erreichbare Übertragungsrate. Bei einer Dauer dt kann man pro Sekunde 1/dt Zustände übermitteln.

Bei einer elektrischen Leitung werden die beiden Zustände beispielsweise durch zwei verschiedene Spannungen realisiert. Die beiden Zustände seien als low und high bezeichnet. Über diese Leitung sollen Daten übertragen werden. Dazu muss eine Zuordnung der Bits zu den Zuständen getroffen werden - die Kodierung. Die nahe liegende Vereinbarung ist, für den Wert 1 das Signal high und für 0 low zu übertragen. Bild 1 zeigt für eine Folge von 0-1-Werten die Zustände in zeitlicher Folge. Aus den im Folgenden genannten Gründen nennt man diese Art der Kodierung Non-Return to Zero (NRZ).

Serie: Netzwerk-Grundlagen

Teil 1

Übertragungsgrundlagen

Teil 2

Fehlererkennung

Teil 3

Sichere Übertragung

Diesen und weitere Artikel zum Thema finden Sie im neuen tecCHANNEL-Compact "Netzwerk-Know-How". Sie können die Ausgabe versandkostenfrei in unserem Online-Shop bestellen.

Probleme bei der Übertragung

Einen etwas allgemeineren Fall zeigt Bild 2. Folgen mehrere gleiche Werte aufeinander, bleibt das Signal auf einem festen Pegel und es findet kein Wechsel mehr statt. Wenn beispielsweise der Sender eine lange Folge von Nullen schickt, sieht der Empfänger für die entsprechende Zeitdauer einen konstanten Pegel. Dann kann es schwierig werden, exakt zu zählen, wie viele Nullen geschickt wurden.

Falls Sender und Empfänger keine gemeinsame Zeitbasis haben, können kleine Abweichungen in der Zeitmessung zwischen beiden dazu führen, dass der Empfänger zu wenige oder zu viele Nullen zählt. Im Normalfall - das heißt, wenn keine zu langen Folgen mit konstanten Werten auftreten - kann der Empfänger kleine Abweichungen kompensieren, indem er die Signalwechsel nutzt, um sich immer wieder auf den Sender zu synchronisieren (Taktregenerierung).

Andererseits können Taktfehler weit reichende Folgen haben, wenn man zum Beispiel die Übertragung eines Stroms von Bytes betrachtet. Sobald ein Bit verloren geht, verschiebt sich für alle nachfolgenden Werte die Zuordnung der Bits zu den Bytes, so dass sich komplett andere Byte-Werte ergeben.

Kodierung als Lösung

Es ist daher sinnvoll dafür zu sorgen, dass auch bei konstanten Werten Signalwechsel stattfinden. Ein Ansatz dazu ist die Kodierung Non-Return to Zero Inverted (NRZI). Dabei gilt die Regel, dass bei einer 1 der Pegel sich ändert, das heißt von low auf high oder von high auf low springt. Dadurch wird aus der Folge 0 1 1 1 1 die Signalfolge low high low high low. NRZI löst das Problem von vielen aufeinander folgenden Einsen, hilft aber nicht bei langen Folgen von Nullen.

Ein weitergehender Ansatz ist die Manchester-Kodierung. Man kann sich dabei die Übertragung mit doppelter Rate vorstellen, das heißt für jeden Wert stehen zwei Zeiteinheiten zur Verfügung. Dann überträgt man die Folge low-high für 0 und high-low für 1. So ist gewährleistet, dass für jeden übertragenen Wert mindestens ein Signalwechsel stattfindet. Nachteil ist, dass jetzt für jeden Wert zwei Zeiteinheiten gebraucht werden oder, umgekehrt, in der gleichen Zeit nur halb so viele Werte übertragen werden können. Von den vier möglichen Signalfolgen werden nur noch zwei verwendet.

Es gibt eine ganze Reihe weiterer Schemata für die Kodierung, die auf diesen Ideen beruhen. Der verbreitete 4B5B-Code überträgt 4 Bit mit 5 Signalwerten. Die Zuordnung ist dabei so gewählt, dass nie mehr als 3 Nullen hintereinander kommen. Zusammen mit einer NRZI-Kodierung ermöglicht der Code bei nur geringem Mehraufwand (20 %) eine deutliche Verbesserung der Taktregenerierung.

In diesem Zusammenhang wird oft das Maß Baud (Bd) benutzt. Die Einheit ist benannt nach dem französischen Ingenieur Baudot 1 ,der den Baudot-Code - den Vorläufer des ASCII-Codes - entwickelte. Die Anzahl der pro Sekunde erfolgten Übertragungen bezeichnet man als Baudrate. Wenn mit jeder Übertragung genau ein Bit dargestellt wird, entspricht die Baudrate dem Maß Bit/s. Anderseits sind bei der Manchester-Kodierung zwei Übertragungen pro Bit notwendig. Damit ist die Baudrate doppelt so hoch wie die Anzahl der Bits pro Sekunde. Können bei der Übertragung mehr als nur zwei Zustände unterschieden werden, ist umgekehrt die Baudrate kleiner als die Zahl der Bits pro Sekunde.

Rahmenerstellung

Die Übertragung von Bits ist stets auch bis zu einem gewissen Grad fehleranfällig. Neben den bereits besprochenen Synchronisationsfehlern können einzelne Bits falsch dekodiert werden. Solche Fehler sind in einem kontinuierlichen Datenstrom nicht zu erkennen. Es ist daher wichtig, den Datenstrom zu strukturieren und durch Zusatzinformationen unempfindlich gegen Störungen zu machen. Weiterhin ist bei Rechnernetzen die kontinuierliche Übertragung eher die Ausnahme. Bei typischen Anwendungen (zum Beispiel Surfen im Internet) wechseln sich Phasen von Datenübertragungen - aus Sicht des Kommunikationskanals - mit Ruhephasen ab. Daher muss der Beginn einer neuen Übertragung kenntlich gemacht werden.

Aus diesen Gründen werden mehrere Bits oder Bytes zusammengefasst, um entsprechende Informationen ergänzt und als Einheit übertragen. Man spricht dann von Rahmen oder Frames. Dabei ist zwischen Byte-orientierten und Bit-orientierten Protokollen zu unterscheiden, je nach dem, ob Bytes oder Bits als kleinste Bausteine für einen Frame zum Einsatz kommen.

Bei klassischen Kommunikationsanwendungen wie Telefonie ist die Übertragungsrate fest, so dass sich der Datenstrom gut in eine Reihe gleich großer Rahmen aufteilen lässt. Wenn eventuell am Ende der Übertragung ein Rahmen nicht mehr komplett gefüllt wird, kann man problemlos mit Nullen auffüllen. Die dadurch entstehende kleine Pause stört nicht. Demgegenüber ist die Rechnerkommunikation durch starke Schwankungen in der Übertragungsrate gekennzeichnet. Außerdem ist das Auffüllen des letzten Rahmens beispielsweise beim Kopieren einer Datei nicht akzeptabel. Daher werden in der Regel Rahmenformate für eine variable Anzahl von Daten eingesetzt. Hierzu muss der Sender dem Empfänger mitteilen, wie viele Daten im aktuellen Rahmen enthalten sind. Zwei Verfahren werden dazu benutzt: Verwendung einer Endmarkierung oder explizite Angabe der Anzahl der Daten. Zusammengefasst lassen sich daher folgende Methoden der Rahmenbildung unterscheiden:

Im Folgenden diskutieren wir am Beispiel von Byte-orientierten Protokollen die beiden Verfahren zur Erstellung von Rahmen mit einer variablen Anzahl von Daten-Bytes.

Markierungszeichen

Bei der Übertragung von Texten verwendet man die im ASCII-Standard definierten Steuerzeichen zum Aufbau von Rahmen. Ein einfacher Rahmen könnte dann folgende Form haben (Beispiel nach [5]):

[DLE] [STX] [Daten] [DLE] [ETX]

Die zeitliche Abfolge ist bei dieser Darstellung von links nach rechts, das heißt, das am weitesten links stehende Element wird zuerst gesendet. Das Zeichen DLE (Data Link Escape, ASCII Code 127) markiert den Beginn einer Steuersequenz. Anfang und Ende werden durch STX (Start of TeXt, ASCII Code 2) beziehungsweise ETX (End of TeXt, ASCII Code 3) gekennzeichnet. Eingebettet zwischen diesen beiden Steuersequenzen liegen die Nutzdaten.

Dieses Verfahren funktioniert bei der Übertragung von Textdaten problemlos. Bei beliebigen Binärdaten - Gleitkommazahlen, Bilder oder Ähnliches - besteht allerdings die Möglichkeit, dass die Endsequenz DLE ETX auch in den Nutzdaten auftritt:

[DLE] [STX] [...] [DLE] [ETX] [...] [DLE] [ETX]

Der Empfänger würde dann vorzeitig das Ende des Rahmens erkennen. Ein ähnliches Problem ist bei der Programmierung in C und verwandten Sprachen die Darstellung des Zeichens " als Teil einer Zeichenkette. Eine Lösung besteht in der Einfügung eines zusätzlichen Zeichens. Man kann etwa in den Daten vor jedem DLE ein zweites DLE einfügen:

[DLE] [STX] [...] [DLE] [DLE] [ETX] [...] [DLE] [ETX]

Durch dieses so genannte Zeichenstopfen (engl. character stuffing) wird sichergestellt, dass innerhalb des Datenfeldes nie ein einzelnes DLE erscheint. Vielmehr folgen stets zwei oder - allgemein betrachtet - eine gerade Anzahl von DLE-Zeichen aufeinander. Der Empfänger muss dann nur aus jedem Paar von DLE-Zeichen eines entfernen, um die gesendete Byte-Folge zu rekonstruieren.

Zeichenzähler

Die zweite Methode zur Rahmenerzeugung beruht auf der Angabe der Anzahl der nachfolgenden Daten. Im einfachsten Fall wird ein Feld mit einem Zähler vor den Daten eingefügt:

[DLE] [STX] [Anzahl] [Daten]

In dem Anzahlfeld steht, wie viele Bytes Daten in diesem Rahmen noch kommen werden. Die Größe des Nutzfeldes ist dann durch die Größe des Anzahlfeldes beschränkt. Steht nur ein Byte für die Größenangabe zur Verfügung, so kann das Nutzfeld maximal 256 Bytes lang sein. In dieser einfachsten Form ist die Übertragung recht fehleranfällig. Tritt ein Fehler im Anzahlfeld auf, berechnet der Empfänger die Rahmengröße falsch. Es kann unter Umständen lange dauern, bis der Empfänger sich wieder auf einen korrekten Rahmenanfang synchronisiert. Man verwendet daher in der Regel den Zeichenzähler nur in Kombination mit anderen Methoden.

Ausblick

Im nächsten Teil der Serie widmen wir uns der Fehlererkennung. Dazu erläutern wir unter anderem Begriffe wie Parität, zweidimensionale Parität und zyklische Redundanzprüfung.

Serie: Netzwerk-Grundlagen

Teil 1

Übertragungsgrundlagen

Teil 2

Fehlererkennung

Teil 3

Sichere Übertragung

Diesen und weitere Artikel zum Thema finden Sie im neuen tecCHANNEL-Compact "Netzwerk-Know-How". Sie können die Ausgabe versandkostenfrei in unserem Online-Shop bestellen.