ISDN-Technik: Packetstruktur (Schicht 2)
Das LAPD, das Schicht-2-Protokoll von ISDN, ist eine Variante des HDLC-Protokolls. HDLC ist ein genormtes Schicht-2-Protokoll. Zunächst legt HDLC die Art und Weise der Übertragung eines Datenpakets fest. Darüberhinaus werden auch noch gewisse Typen von Datenpaketen definiert.
Nicht nur ISDN sondern auch verschiedene andere Protokolle verwenden verschiedene Varianten von HDLC. Darunter zum Beispiel:
- LAPB (X.25 Schicht 2, X.25 ist ein Datenprotokoll, das in Deutschland unter den Markennamen Datex-P und BTX vermarktet wurde)
- MTP2 (Schicht 2 des Signalisierungssystems Nr. 7)
- PPP (Point-to-Point-Protokoll, es wird für Internet-Verbindung über Modems verwendet)
Rahmenkennzeichnung und Bitstuffing
[Bearbeiten]Die erste Aufgabe der Schicht 2 ist es, Datenpakete zu übertragen und entgegenzunehmen. Die Betonung liegt dabei auf "Pakete", denn die Schicht 1, die Bitübertragungsschicht, die zur physikalischen Übertragung der Daten verwendet wird, kann nur einen Bitstrom übertragen; über die Art der Daten oder die logische Strukturierung derselben weiß sie nichts.
Die übertragende Schicht 2 bekommt also eingangsseitig Datenpakete übergeben und muss daraus einen kontinuierlichen Bitstrom für die Übertragungsschicht erzeugen. Die empfangene Schicht 2 muss aus dem kontinuierlichen Bitstrom der Übertragungsschicht die Datenpakete extrahieren.
Aber wie kann nun die empfangene Schicht 2 die logische Struktur der Daten erkennen? Woher soll sie wissen, wann die Übertragung eines Datenpakets abgeschlossen ist und wann die Übertragung des nächsten Datenpakets beginnt?
Dazu fügt die sendende Schicht 2 vor jedem zu übertragenden Paket eine festgelegte Bitfolge an, um den Beginn eines neuen Pakets zu kennzeichnen. Ebenso fügt sie nach jedem übertragenen Paket eine festgelegte Bitfolge an, um das Ende des Pakets zu kennzeichnen. Wenn nach dem Ende eines Pakets zunächst kein weiteres übertragen werden muss, dann wird ein festgelegtes Bitmuster als "Pausenfüller" übertragen (bei einer S2m-Verbindung) oder der Sender wird abgeschaltet (auf dem S0-Bus).
Die Bitmuster, die als Kennzeichnung sowohl eines Paketanfangs als auch eines Paketendes eingefügt werden, sind 01111110 (hexadezimal: 0x7e). Dieses Bitmuster heißt Flag-Sequenz oder einfach Flag.
Nun kann es vorkommen, dass in den zu übertragenden Daten ebenfalls die Bitkombination 01111110 vorkommt. In diesem Fall würden die Daten eine Flag-Sequenz simulieren, so dass der Empfänger fälschlicherweise das Datenpaket als beendet und vollständig ansehen würde. Um das zu verhindern, überträgt der Sender immer dann, wenn er 5 Einsen nacheinander gesendet hat, zunächst eine Null, bevor der Übertragungsprozess weiter geht. Das unterlässt der Sender nur, wenn er eine Flag-Sequenz senden soll. Dann werden tatsächlich 6 aufeinander folgende Einsen gesendet. Der Empfänger macht genau das Gegenteil. Wenn er fünf direkt aufeinander folgende Einsen empfängt, dann entscheidet das nächste Bit über die Funktion dieser Sequenz. Ist das nächste Bit eine Null, dann wird sie entfernt, weil diese vom Sender nur eingefügt wurde, damit keine Flag-Sequenz simuliert wird. Ist das nächste Bit eine Eins, dann handelt sich um eine Flag-Sequenz. Der oben beschriebene Vorgang heißt auch Bitstuffing ("Bit-Stopfen"). Neben der Flag-Sequenz ist auch noch eine Abort-Sequenz (Abbruch-Sequenz) durch 01111111 (hexadezimal: 0x7f) definiert. Wenn der Empfänger also sechs aufeinanderfolgende Einsen empfangen hat, dann muss er auch das nächste Bit noch prüfen, um Flag-Sequenzen und Abort-Sequenzen unterscheiden zu können. Die Abort-Sequenz ist eine spezielle Paketende-Kennzeichnung, mit der der Sender dem Empfänger mitteilt, dass er das soeben empfangene Paket ignorieren soll.
Die Schicht 2 im LAPB-Protokoll muss Übertragungsfehler erkennen können. Die sendende Schicht 2 fügt jedem Datenpaket dazu eine Prüfsumme an. Die empfangene Schicht 2 berechnet dann die Prüfsumme der empfangenen Daten und vergleicht sie mit der empfangenen Prüfsumme und verwirft gegebenenfalls das Paket als fehlerhaft. Für die Prüfsummenberechnung wird das CRC-Verfahren mit dem Generatorpolynom x16+x12+x5+1 verwendet. Die Prüfsumme ist 16 Bit lang, sie wird an das Datenpaket vor der abschließenden Flag-Sequenz angehängt. Vom Bitstuffing ist sie genau so wie der Nutzanteil des Datenpakets betroffen.
Die zu übertragenden Pakete bestehen per Konvention immer aus einer ganzen Anzahl von Oktetten. Das niederwertigste Bit eines Oktetts wird immer zuerst übertragen, das höchstwertigste zuletzt. Wenn Pakete empfangen werden, die nicht aus einer ganzen Zahl von Oktetten bestehen, werden sie als fehlerhaft angesehen und verworfen.
Die oben beschriebenen Aufgaben werden i.A. in Hardware implementiert. Insbesondere das Bitstuffing ist für einen Mikroprozessor nur mit hohen Aufwand zu erledigen, da dieser in der Regel nur ganze Bytes effektiv verarbeiten kann. In Hardware können die beschriebenen Prozeduren aber im wesentlichen durch ein Schieberegister mit ein wenig zusätzlicher Logik realisiert werden. Das trifft auch auf die Prüfsummenberechnung zu. Im Handel sind unzählige HDLC-Controller in den verschiedensten Ausstattungen erhältlich.
Paketaufbau
[Bearbeiten]Jedes LAPD-Datenpaket wird mit zwei Oktetten zur Adressierung eingeleitet. Die Adressierung erfolgt über die beiden Zahlenwerte SAPI und TEI.
Der TEI bezeichnet immer ein einzelnes physikalisches Endgerät. Wenn ein Endgerät ein Datenpaket verschickt, dann schreibt es immer seinen eigenen TEI in das Paket, so dass das Netz weiß, von welchem Endgerät das Paket geschickt wurde. Umgekehrt verschickt das Netz Pakete an ein gewisses Endgerät, indem es dessen TEI in das Paket hineinschreibt. Wenn ein Endgerät ein Paket mit einem anderen TEI empfängt, dann verwirft es dieses Paket.
Über den SAPI wird ein bestimmtes Modul in einem Endgerät identifiziert. Für den SAPI mit dem Wert 0 wird i.A. eine logische Verbindung mit Flusskontrolle aufgebaut, die Datenpakete der Schicht 3 transportiert. Für den SAPI mit dem Wert 63 werden Pakete ungesichert verschickt, die zur Verwaltung der TEI-Werte dienen. Andere SAPI-Werte werden von ISDN nicht benutzt, die Pakete anderer Protokolle (z.B. X.25) werden aber mit anderen SAPIs versendet.
Bit 8 | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 |
---|---|---|---|---|---|---|---|
SAPI | C/R | 0 | |||||
TEI | 1 |
Das C/R-Feld kennzeichnet, ob das Paket eine Anweisung (Command) für den Empfänger enthält oder ob es eine Antwort (Response) auf eine zuvor erhaltene Anweisung enthält. Das Netz kennzeichnet eine Anweisung, indem es dieses Bit setzt. Ein Endgerät kennzeichnet eine Antwort, indem es dieses Bit setzt. (Netz und Endgerät verhalten sich hier also genau entgegengesetzt!).
Pakettypen
[Bearbeiten]Die beiden Oktetts mit den Adressierungswerten SAPI und TEI werden unmittelbar von einem Steuerfeld gefolgt. Dieses besteht aus ein oder zwei Oktetts. Es bezeichnet den Pakettyp. Man unterteilt die möglichen Pakettypen nach Aufgabengebiet in I-Frames, S-Frames und U-Frames. I-Frames transportieren Informationen über eine gesicherte Verbindung. Diese Informationen kommen von der Schicht 3 und werden von der Schicht 2 nicht weiter betrachtet, insbesondere werden sie von der Schicht 2 nicht ausgewertet. S-Frames kümmern sich um die Flusskontrolle gesicherter Verbindungen und U-Frames übertragen ungesicherte Informationen.
Bit 8 |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Pakettyp |
---|---|---|---|---|---|---|---|---|
N(S) | 0 | I-Frame | ||||||
N(R) | P | (2. Oktett) | ||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | RR (receive ready, S-Frame) |
N(R) | P/F | (2. Oktett) | ||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | RNR (receive not ready, S-Frame) |
N(R) | P/F | (2. Oktett) | ||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | REJ (reject, S-Frame) |
N(R) | P/F | (2. Oktett) | ||||||
0 | 1 | 1 | P | 1 | 1 | 1 | 1 | SABME (set asynchronous balanced mode extended, U-Frame) |
0 | 1 | 0 | P | 0 | 0 | 1 | 1 | DISC (disconnect, U-Frame) |
0 | 1 | 1 | F | 0 | 0 | 1 | 1 | UA (unnumbered acknowledgement, U-Frame) |
0 | 0 | 0 | P | 0 | 0 | 1 | 1 | UI (unnumbered information, U-Frame) |
0 | 0 | 0 | F | 1 | 1 | 1 | 1 | DM (disconnected mode, U-Frame) |
1 | 0 | 0 | F | 0 | 1 | 1 | 1 | FRMR (frame reject, U-Frame) |
1 | 0 | 1 | P/F | 1 | 1 | 1 | 1 | XID (exchange identification, U-Frame) |
Den Pakettyp kann eine Schicht-2-Instanz erkennen, indem sie zunächst das niederwertigste Bit des ersten Steuerfeld-Oktetts auswertet. Ist es eine null, so handelt es sich um einen I-Frame. Ist es hingegen eine 1, so muss der Pakettyp aufgrund obiger Tabelle ermittelt werden.
Neben dem Pakettyp sind im ersten Oktett und (falls vorhanden) im zweiten Oktett noch folgende Informationen kodiert:
- die Sendesequenznummer N(S) wird für die Flusskontrolle benötigt,
- die Empfangssequenznummer N(R) wird ebenfalls für die Flusskontrolle benötigt,
- das Poll/Final-Bit.
Die beiden Sequenznummern werden im Kapitel der Flusskontrolle näher erläutert.
Das Poll/Final-Bit (P/F) wird dann, wenn das Paket ein Kommando ist (siehe C/R-Bit oben), als Poll-Bit verwendet. Ist das Poll-Bit gesetzt, dann erwartet der Sender eines Pakets eine Antwort vom Empfänger.
Das Poll/Final-Bit (P/F) wird dann, wenn das Paket eine Antwort ist (siehe C/R-Bit oben), als Final-Bit verwendet. Ist das Final-Bit gesetzt, dann ist das Paket als Antwort auf ein zuvor (mit gesetzten Poll-Bit) empfangenes Kommando zu verstehen.
Manche Pakettypen dürfen nur als Kommando geschickt werden, in dem Fall ist in der Tabelle nur P statt P/F eingetragen. Andere Pakettypen dürfen nur als Antwort geschickt werden, dann ist nur ein F in der Tabelle eingetragen.
Auf die Verwendung des P/F-Bits wird in den nachfolgenden Abschnitten noch eingegangen. Auch werden die einzelnen Pakettypen sowie die Verwendung derselben in den nächsten Abschnitten noch erklärt. Der Pakettyp XID wird in ISDN nicht verwendet, er ist hier nur der Vollständigkeit halber aufgeführt.