Der Aufbau der Blöcke
Die CCITT-Empfehlung X.25 schreibt für die ISO Prozedur HDLC (high
level data link control) die Variante LAP B (link
access procedure balanced) vor. Die Dateneinheiten in HDLC werden als
Blöcke (frames) bezeichnet, die den folgenden Aufbau haben:
... |
flag |
Adresse |
Steuerfeld |
Datenfeld |
FCS |
flag |
... |
Hierbei bedeuten
flag |
Blockbegrenzung. Länge 1 Byte: 01111110. Zwischen zwei
Blöcken muß mindestens ein flag stehen. Werden keine Blöcke gesendet, so werden
ununterbrochen Flags geschickt, so daß beide Stationen auf diese Weise ständig
synchronisiert sind. |
Adresse |
Man unterscheidet zwischen Adressen des Senders und des Empfängers. Bei
Befehlen wird als Adresse die des Empfängers angegeben, bei Meldungen die des Senders. |
Steuerfeld |
Gibt den Blocktyp an, der unten genauer beschreiben wird. |
Datenfeld |
Enthält die Benutzerdaten, die von der Schicht 3 übergeben werden. Die
Länge des Datenfelds kann zwischen 0 und 131 Bytes betragen. |
FCS |
Das Blockprüffeld (frame checking sequence) besteht aus zwei Bytes,
welche der Sicherung der Datenübertragung dienen. Es wird ein CRC-Prüfverfahren
verwendet, das den gesamten Block überprüft. |
Die Sicherung der Datenblöcke wird durch eine CRC-Kodierung erreicht. Darüber hinaus
ist auch die Reihenfolge der Blöcke zu sichern. Dieses wird durch ein Fensterverfahren
realisiert, welches zugleich für die Flußkontrolle benutzt werden kann.
Im HDLC-Protokoll werden drei Blockformate verwendet, von denen eines dem Transport von
Daten dient, eines zur Steuerung der Datenübermittlung verwendet wird, und eines die
Steuerung der Verbindung zwischen den Endgeräten regelt. Die Befehle und Meldungen haben
das folgende Format:
|
Bit |
Steuerfeld |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
I-Block |
0 |
N(S) |
P |
N(R) |
S-Block |
1 |
0 |
S |
S |
P/F |
N(R) |
S-Block: RR |
1 |
0 |
0 |
0 |
P/F |
N(R) |
S-Block: RNR |
1 |
0 |
1 |
0 |
P/F |
N(R) |
S-Block: REJ |
1 |
0 |
0 |
1 |
P/F |
N(R) |
U-Block |
1 |
1 |
M |
M |
P/F |
M |
M |
M |
U-Block: DM |
1 |
1 |
1 |
1 |
P/F |
0 |
0 |
0 |
U-Block: SABM |
1 |
1 |
1 |
1 |
P |
1 |
0 |
0 |
U-Block: DISC |
1 |
1 |
0 |
0 |
P |
0 |
1 |
0 |
U-Block: UA |
1 |
1 |
0 |
0 |
F |
1 |
1 |
0 |
U-Block: CMDR / FRMR |
1 |
1 |
1 |
0 |
F |
0 |
0 |
1 |
N(S) |
Sendefolgenummer: (Wertigkeit: Bit 2 niedrigstes Bit) |
N(R) |
Empfangsfolgenummer: (Wertigkeit: Bit 6 niedrigstes Bit) |
S |
Bits für Steuerung |
M |
Legt die Steuerungsfunktion fest |
P/F |
Sendeaufruf bei Befehlen (Polling=1)
Ende-Anzeige bei Meldungen (Finish=1) |
Die I-Blöcke (Informationsblöcke) werden zum Übertragen von Daten
benutzt, wie sie an der Schnittstelle zur Schicht 3 übergeben werden. Ist P/F=1, so hat
die Gegenstelle auf den übermittelten Block (z.B. durch eine Quittung) zu reagieren. N(S)
gibt den aktuellen Sendefolgezähler an, d.h. die Nummer dieses Blocks. N(R) quittiert den
korrekten Empfang aller bisher empfangenen Blöcke bis zum Block mit der Nummer N(R)-1.
Die S-Blöcke (Steuerungsblock, supervisory
block) steuern die Datenübermittlung. Mit ihnen können drei Befehle
übermittelt werden.
| Der Befehl RR (Receive Ready) teilt die
Empfangsbereitschaft dieser Station mit; zugleich wird der korrekte Empfang aller Blöcke
bis einschließlich Block N(R)-1 quittiert. Ist P=1, so muß die Gegenstelle ihren Zustand
(durch RR oder RNR) mitteilen. |
| Der Befehl RNR (Receive Not Ready) teilt
einer Gegenstelle mit, daß die Station nicht empfangsbereit ist; zugleich werden die
Blöcke bis einschließlich Block N(R)-1 quittiert. Dieser Befehl wird durch Senden eines
UA-, RR-, REJ- oder SABM-Blocks wieder aufgehoben. |
| Der Befehl REJ (Reject) fordert die
Gegenstelle auf, alle I-Blöcke ab der Nummer N(R) noch einmal zu übertragen. Ehe nicht
der Block mit der Nummer N(R) eingetroffen ist, darf kein weiterer REJ-Block ausgesendet
werden. |
Die U-Blöcke (unnumerierter Block, unnumbered block)
dienen nur dem Auf- und Abbau von Verbindungen. Da hier in der Regel ein Block zur
Übertragung der gewünschten Information ausreicht, sind keine Folgenummern vorgesehen.
Es gibt fünf verschiedene Befehle:
| Der Befehl SABM (Set Asynchronous Balanced Mode)
fordert die Gegenstelle auf, in die Datenübertragungsphase des gleichberechtigten
Spontanbetriebs überzugehen. Die Antwort auf diesen Befehl ist UA; zusätzlich werden
alle internen Zähler (N(R), N(S)) auf null gesetzt. |
| Der Befehl DISC (Disconnect) hält die
Übermittlung an; die Gegenstation hat mit UA zu antworten, und die Station geht in den
Zustand abgebrochen über. |
| Die Meldung UA (Unnumbered Acknowledge)
bestätigt SABM- und DISC-Befehle, mit deren Ausführung (z.B. Nullsetzen von Zählern,
Senden von Datenblöcken) bis zum Eintreffen dieser Nachricht gewartet wird. |
| Die Meldung DM (Disconnected Mode) wird
gesendet, wenn sich eine Station im Zustand abgebrochen befindet und zur Zeit nicht in
einen anderen Zustand wechseln kann. |
| Die Meldung CMDR (Command Reject) oder FRMF
(Frame Reject) zeigt einen Fehler an, der nicht durch
Blockwiederholung behebbar ist, da das Prüffeld korrekt ist, aber einer der folgenden
Fehler erkannt wurde: |
| ungültige Kodierung im Steuerfeld,
|
| Datenblock zu lang,
|
| empfangene Folgenummer N(R) ist ungültig,
|
| ein U- oder S-Block hat eine falsche Länge.
|
Dieser Meldung ist ein Datenfeld der Länge 3 Bytes beigegeben, in
welchem die Gründe für die Rückweisung beschrieben sind.
Der Protokollablauf gliedert sich in den Verbindungsauf- und -abbau und die Datenphase.
Für die Verbindungsauf- und -abbauphasen werden eine Zeitüberwachung (mit der Zeit T1)
und ein Zähler (N2) benötigt. Für die Datenphase werden zusätzlich die Zähler V(S),
VO(S), V(R), sowie die maximale Anzahl von Bits je Block (N3) und die maximale Anzahl
ausstehender Blöcke (K) verwendet.
V(S) |
Sendefolgezähler; enthält die Nummer, mit der der nächste Datenblock zu
senden ist. V(S) wird nach Senden eines Datenblocks um 1 (mod 8) erhöht. |
VO(S) |
Folgenummer N(R) des letzten von der Gegenstation empfangenen Blocks. Der
Abstand zwischen V(S) und VO(S) (mod 8) darf niemals größer als sieben werden, damit
niemals mehr als sieben unbestätigte Blöcke ausstehen. |
V(R) |
Empfangsfolgezähler N(S) des nächsten erwarteten Datenblocks. Trifft ein
fehlerfreier Block mit der Nummer N(S)=V(R) ein, so wird N(S) um 1 (mod 8) inkrementiert. |
K |
Maximale Anzahl unquittierter Datenblöcke (z.B. 7). |
T1 |
Timer für die Zeitüberwachung. |
N2 |
Höchste Anzahl von Wiederholungen bei Zeitablauf. |
N3 |
Höchste Anzahl von Bits in einem Block. |
|