Basic Encoding Rules

Home Hochschule Home Hochschule

Aufwärts ] >> ] Beispiele für BER ]

TLV-Approach

Für die Realisierung der Encoding Rules, insbesondere der Basic Encoding Rules, hat sich der sogenannte TLV-Ansatz durchgesetzt. Dabei wird jedes Element codiert in insgesamt drei Teile, einen Typ- (T), einen Length- (L) und einen Value-Wert (V). Graphisch dargestellt ergibt sich z.B. die Codierung einer Sequenz mit drei eingeschlossenen Komponenten wie in unterer Abbildung (für die PER spielt der TLV-Ansatz keine so ausgeprägte Rolle). 

Beispiel einer TLV-Codierung

Der äußere Rahmen definiert also die Struktur der SEQUENCE, die in ihrem Value (Wert) Teil insgesamt drei weitere Elemente enthält, jedes wieder unterteilt in Typ, Length und Value. 

Diese Herangehensweise mittels TLV bietet verschiedene Vorteile, z.B. können
Parameter für optional erklärt werden, ohne das dies den Empfänger "verunsichert",
übermittelte Parameter eine unterschiedliche Länge besitzen,
spätere Versionen eines Protokolls leicht abwärtskompatibel gehalten werden.

Die erste Form der Encoding Rules, die Basic Encoding Rules, sollen nachfolgend erläutert werden.

Einführung

Die Basic Encoding Rules (BER) nutzen also eine TLV-Form, um mittels ASN.1 spezifizierte Daten- oder Typstrukturen in eine Transfersyntax zu überführen. In den folgenden Abschnitten sollen die einzelnen Felder (TLV) im Hinblick auf die BER näher erläutert werden

Der Typ-Teil

Datentypen in ASN.1 werden nicht über den Namen identifiziert, sondern über ein sogenannten tag (dt. Zusatz, Merker). Das tag eines ASN.1-Typs ist entweder vom ASN.1-Standard festgelegt oder kann vom Benutzer selbst festgelegt werden. Ein komplettes tag besteht aus einer tag-Klasse, einem primitve/constructed-Bit und einer Nummer innerhalb einer tag-Klasse.

Die ASN.1-Standards unterscheiden dabei in insgesamt vier verschiedene tag-Klassen.

UNIVERSAL,
CONTEXT-SPECIFIC,
APPLICATION und 
PRIVATE.

Im einfachsten Fall wird der tag nur in einem Oktett codiert, dargestellt in der nächsten Abbildung.

Identifier Octet
8 7 6 5 4 3 2 1
Class P/C Number

Ein tag enthält also Informationen über die Klasse, darüber, ob das im Value-Feld enthaltene Element eine einfaches (atomic) oder zusammengesetztes (structured) Element ist und die Nummer des Sub-Typs innerhalb einer Klasse. 

Das Element class wird durch zwei Bit codiert und kann die in der folgenden Tabelle dargestellten Werte annehmen.

Codierung des class Elements

Class

Bit 8 Bit 7
Universal 0 0
Application  0 1
Context-specific 1 0
Private 1 1

Die Klasse UNIVERSAL ist dabei für Typen reserviert, die im ASN.1-Standard definiert sind und damit universelle Gültigkeit besitzen. Typen der Klasse APPLICATION sind nur für eine Anwendung gültig, für eigene Spezifikationen kann man Typen der Klasse PRIVATE definieren. Kontext-spezifische Typen unterliegen keinerlei Einschränkungen, ihre Bedeutung geht, wie es der Name bereits sagt, aus dem Kontext hervor.

Bit Nr. 6 (P/C) wird bezeichnet als primitive/constructed Bit, d.h. dieses Bit gibt an, ob der Value-Teil der codierten Struktur wiederum TLV-Elemente enthält (z.B. eine SEQUENCE) oder nur ein einfaches Element. Im ersten Fall wird Bit 6 auf "1",  im zweiten Fall auf "0" gesetzt.

Die Bits 5 bis 1 codieren den Sub-Typ des Elements, dabei stehen die Werte bis 30 zur Verfügung, der Wert 31 dient als Escape-Sequenz für größere tag-Werte. 

UNIVERSAL Class Tags (Auswahl)
UNIVERSAL 0 End of Content (EOC)
UNIVERSAL 1 Boolean type
UNIVERSAL 2 Integer type
UNIVERSAL 3 Bit-string type
UNIVERSAL 4 Octet-string type
UNIVERSAL 6 Object identifier type
UNIVERSAL 16 Sequence and Sequence-of types
UNIVERSAL 17 Set and Set-of types
UNIVERSAL 31 ContinuedNumber type

Falls der Wert eines tags größer ist als 30 dann sind im ersten Okett Bit 5 bis 1 auf "1" gesetzt. In den nachfolgenden Oktetts ist das MSB dann auf "1" gesetzt, wenn noch weitere Oktett folgen. Dieser Fall ist dargestellt in der folgenden Abbildung.

Einsatz eines langen tag

Der Length-Teil

In den BER existieren drei verschiedene Formen der Längencodierung, die Kurzform, die Langform und die unbestimmte Form.

Kurzform

Die kurze Form der Längencodierung besteht aus einem Oktett, wobei das MSB auf "0" gesetzt ist und die Bits 7 bis 1 die Länge der Daten in Value-Feld bestimmen; demzufolge ist es möglich, in der Kurzform maximal 127 Byte Daten im Value-Feld zu transportieren.

Kurzform der Länge

Langform

In der Langform ist das MSB auf "1" gesetzt, Bit 7 bis 1 codieren die Anzahl der nachfolgenden Oktett, die insgesamt die Anzahl der Oktett im Value-Feld bestimmen. 

Langform der Länge

Das Element N ist dabei begrenzt auf einen maximalen Wert von 126, der Wert 127 ist reserviert für zukünftige Erweiterungen. Die Langform sollte für die meisten Zwecke vollkommen ausreichen, wenn N=126 dann stehen insgesamt 1008 Bit zur Codierung der Länge zur Verfügung, d.h. die Anzahl an Oktett kann maximal 2.74306*E303 betragen, eine Zahl größer als die Anzahl der Sterne in unserer Galaxy. Wollte man das längstmögliche Value-Feld über eine Leitung übermitteln, die mit einer Übertragungsgeschwindigkeit von einem Tera-Bit/Sekunde arbeitet, dann würde die Übermittlung ca. 100 Millionen Jahre dauern. Man sieht also, die Langform bietet ausreichend Codierungsmöglichkeiten.

Die unbestimmte Form

Wozu gibt es noch die unbestimmte Form, wo doch die Kurz- und die Langform eigentlich ausreichend Codierungsmöglichkeiten bieten? Der Vorteil der unbestimmten Form liegt darin, daß der Sender zu Beginn der Codierung/ Übertagung nicht die genaue Länge der zu übertragenden Elemente wissen muß, d.h. die Übertragung kann beginnen obwohl noch nicht alle Daten vorhanden oder gezählt worden sind. Dabei ist zu beachten, daß die unbestimmte Form nur genutzt werden darf, wenn das Value-Feld wieder TLV Elemente enthält (also z.B. für eine SEQUENCE). 

Im Falle der unbestimmten Form ist das MSB des ersten Oktett auf "1" gesetzt und Bit 7 bis 1 auf "0". Die Codierung des MSB entspricht der Langform, eine Länge von Null ergibt aber keinen Sinn, deshalb ist die Zuordnung zur unbestimmten Form eindeutig. Diesem ersten Oktett folgen dann die kompletten TLV-Codierungen der einzelnen Elemente; abgeschlossen durch einen Delimiter, zwei zu Null gesetzten Oktett, dargestellt in Abbildung-4.

Unbestimmte Form der Länge

Der Value-Teil

Der Value-Teil enthält den eigentlichen Wert des Elements, dies läßt sich wahrscheinlich am besten mit verschiedenen Beispielen erläutern, die auf der nächsten Seite folgen.

 

Top Home 31.07.01 Inhalt: lkiessli@htwm.de  Design:  Signet der Arbeitsgruppe Internet