High-Level Data Link Control

High-Level Data Link Control (HDLC) ist ein von der ISO normiertes Netzwerkprotokoll ISO/IEC 13239:2002. Es ist innerhalb des ISO/OSI-Modells in Schicht 2, der Sicherungsschicht, einzugliedern. HDLC basiert in seiner Grundstruktur auf dem SDLC-Protokoll von IBM, darüber hinaus gibt es das proprietäre Cisco-HDLC.

Eigenschaften

Der HDLC-Standard besteht aus:

  • Steuerung des Übertragungsabschnitts
  • Erkennen von Übertragungsfehlern und Reihenfolgefehlern durch Blocküberprüfung (CRC-16) und Sequenznummernkontrolle
  • Fehlerkorrektur durch Blockwiederholung
  • Flusskontrolle mit Sliding Window
  • Weitermelden von nicht korrigierbaren Fehlern und Protokollfehlern zur nächsthöheren Schicht (Vermittlungsschicht)

Cisco HDLC:

  • Wie HDLC, aber durch Einfügen eines proprietären Feldes (2 Byte zwischen den Feldern "Control" und "Information") wird das Layer-3-Protokoll der nachfolgenden Daten angegeben und eine Multiprotokoll-Umgebung möglich.
  • Kommunikation zwischen Cisco-HDLC und anderen HDLC-Geräten ist nicht möglich.

Das HDLC-Datenformat ist typisch für ein bitorientiertes Protokoll ohne die Möglichkeit der Authentifizierung. Es ermöglicht Punkt-zu-Punkt-Verbindungen und Punkt-zu-Multipunkt-Verbindungen.

Blockaufbau

Es besteht aus dem Opening flag (Blockbegrenzung) '01111110' (hexadezimal 0x7E), das mit 8 Bits dargestellt wird. Danach folgt das Address field (Adressfeld) mit nochmal 8 Bits oder alternativ ein erweitertes Adressfeld mit einem Vielfachen von 8 Bit, gekennzeichnet durch eine 0 an der Bitposition 1. An dritter Stelle kommt das Control field (Steuerfeld) mit 8 oder 16 Bits. Dann folgt das Information field (Datenfeld), das eine variable Länge (Vielfaches von 8 Bit) hat. Das Frame check sequence field (Blockprüfung) besteht aus 16 Bits und enthält eine Prüfsumme der übertragenen Daten (CCITT CRC-16), dessen Binärstellen nach der Berechnung und vor der Übertragung beim Sender mit 0xFFFF XOR-verknüpft werden. Alternativ kann das Schieberegister, welches zur CRC-Berechnung dient, auch vor der Berechnung mit Einsen gefüllt werden. Durch diese Modifikation entsteht eine robustere Prüfsumme, die auch gegen Anfügen und Löschen von Nullen schützt. Der Empfänger vergleicht nach der Division mit 0001 1101 0000 1111 statt mit 0. Zuletzt folgt das Closing flag (Blockbegrenzung) mit nochmals 8 Bits ('01111110').

FlagAddressControlInformationFrame Check SequenceFlag
01111110XXXXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX01111110

Um zu vermeiden, dass innerhalb des Datenbereichs oder der Prüfsumme das Opening flag bzw. Closing flag auftritt, wird Bitstopfen (bit stuffing) oder zero insertion angewandt. Dies bedeutet, dass innerhalb des Rahmens nach fünfmaligem Auftauchen der '1' eine '0' eingefügt wird, um eine Verwechslung mit einem Flag zu verhindern. Auf Empfängerseite wird eine '0' nach fünfmaligem Auftreten der '1' einfach wieder gelöscht.

Es gibt jedoch zwei Sonderzeichen, die verwendet werden können:

KodierungBedeutung
01111111frame abortion
111111111111111channel not active

Blocktypen

Es gibt drei verschiedene Dateneinheiten, die sich im Aufbau des control field (Steuerungs-Feldes) unterscheiden:

I-Rahmen (Information frames) - zur Datenübertragung

Bit 12345678
0Sende-SequenznummerPoll/Final BitEmpfangs-Sequenznummer

S-Rahmen (Supervisory frames) - zur Steuerung des Datenflusses

Bit 12345678
10Funktions-BitsPoll/Final BitEmpfangs-Sequenznummer

Die Funktions-Bits des S-Rahmens werden wie folgt kodiert:

KodierungBefehlBedeutung
00Receive-Readyzum Empfang weiterer Daten bereit; quittiert erfolgreichen Empfang der bisherigen Pakete
01Receive-Not-Readykeine weiteren Daten senden
10Rejectalle Daten ab der angegebenen Sequenznummer wiederholen
11Selective-Rejectden Datenrahmen mit der angegebenen Sequenznummer wiederholen

U-Rahmen (Unnumbered frames) - zur Steuerung der Verbindung

Bit 12345678
11Funktions-BitsPoll/Final-BitFunktions-Bits

Die ersten 2 und folgenden 3 Funktionsbits werden zu einem Command/Reply Code zusammengesetzt.

Funktions-

Bits

BefehlCommand(C)/

Reply Code(R)

BedeutungBefehlCommand(C)/

Reply Code(R)

Bedeutung
10 000SIMC/-Set Init.ModeRIM-/RRequest Init.Mode
11 000SARMC/-Set Async. Response ModeDM-/RDisconnected Mode
00 010DISCC/-DisconnectRD-/RRequest disconnect
10 001CMDR-/RCommand RejectFRMR-/RFrame Reject
00 000UIC/RUnnumbered Information 
00 100UPC/-Unnumbered Poll
00 110UA-/RUnnumbered Ack.
11 100SABMC/-Set Async. Balanced Mode
00 001SNRMC/-Set Normal Response Mode
11 101XIDC/RExchange Identification

Betriebsarten

HDLC kennt drei verschiedene Betriebsarten:

Normal Response Mode (NRM)
Primärstation → Sekundärstation (Halbduplex)
Asynchronous Response Mode (ARM)
Primärstation → Sekundärstation (Vollduplex)
Asynchronous Balanced Mode (ABM)
Beide Stationen gleichwertig (Vollduplex)

Im NRM sendet eine Leitstation an eine oder mehrere Folgestationen. Die Folgestationen senden der Leitstation nur auf Anfrage (Polling). In der Nachricht einer Folgestation signalisiert ein gesetztes Final Bit das Ende ihrer Übertragung. Im ARM, der in der Praxis nur selten eingesetzt wird, haben die Folgestationen zusätzlich die Möglichkeit, auch ohne Polling der Leitstation Daten an diese zu senden. Voraussetzung hierfür ist, dass die Leitung frei ist. Im ABM schließlich sind nur Punkt-zu-Punkt-Verbindungen zwischen genau zwei Stationen möglich. Der Datenaustausch erfolgt hier, im Gegensatz zu den ersten beiden Fällen, symmetrisch.

HDLC und Varianten finden Anwendung bei X.25, GSM, ISDN, Frame Relay und PPP.

Verwandte Protokolle und Varianten

Aufsetzend auf HDLC kann eine Übertragung zur Erhöhung des Datendurchsatzes auf mehrere physikalische Leitungen aufgeteilt werden. Während die einzelnen Verbindungen jeweils über eine HDLC gesichert werden, wird die Koordination dieser durch die Multilink-Procedure (MLP) durchgeführt. Eine vergleichbare Anwendung ist die Kanalbündelung im ISDN.

Siehe auch

Spezifikationen

  • C. Pignataro, M. Townsley: RFC4349 – High-Level Data Link Control (HDLC) Frames over Layer 2 Tunneling Protocol, Version 3 (L2TPv3). Februar 2006 (englisch).