layline.io Blog

ASN.1 Format Konfiguration.

ASN.1 ist nach wie vor ein beliebtes Datenformat. Lernen Sie, wie einfach es ist, jedes ASN.1-Format in layline.io zu konfigurieren.

May 11, 2022
Reading time: 5 min.

Einführung in ASN.1

In unserem letzten Artikel "/Damn that Data Format Hell/" haben wir darüber gesprochen, wie layline.io mit der Vielzahl komplexer struktureller Datenformate umgeht, indem es eine Grammatiksprache verwendet, die nahezu jedes dieser Formate beschreibt und es Ihnen ermöglicht, sofort mit den Daten zu arbeiten.

Wir haben auch besprochen, dass dies nicht für ALLE Formate funktioniert, mit denen Sie vielleicht arbeiten, aber vielleicht für 80% aller strukturierten Formate.

Es gibt jedoch auch Datenaustauschformate, die sich an einen eigenen Standard halten und eine eigene Grammatiksprache haben. Eines dieser Formate ist Abstract Syntax Notation One, auch bekannt als ASN.1. Die Grammatiknotation wird in verschiedenen Standardisierungsdokumenten beschrieben. Es würde den Rahmen dieses Artikels sprengen, sie zu beschreiben, aber Sie können sie mit dem unten angegebenen Link recherchieren.

layline.io Showcase

In diesem Artikel zeigen wir, wie unsere Anwender ASN.1-basierte Formate mit layline.io definieren können.

layline.io ist ein meinungsstarker Ereignisdatenprozessor. Er verpackt die Leistungsfähigkeit von reaktivem Stream-Management in ein Framework, das die Einrichtung, den Einsatz und die Überwachung von großen Event-Datenverarbeitungsanforderungen einfach und unkompliziert macht. layline.io bietet alles, was Sie von einer produktbasierten Lösung erwarten würden, einschließlich Upgrade-Fähigkeit, Ausfallsicherheit und Skalierbarkeit, neben anderen Features.

TD.57 - Verfahren zur Übertragung von Konten (TAP)

Ein beliebter Bereich, in dem das ASN.1-Protokollformat eine wichtige Rolle spielt, ist das Telekommunikations-Roaming (https://www.gsma.com/aboutus/wp-content/uploads/2012/03/smsdataroamingexplained.pdf) und der damit verbundene TAP-Austauschprozess. TAP (Transferred Accounts Procedure) wickelt den finanziellen Abrechnungsprozess zwischen Mobilfunknetzen für deren Roaming-Teilnehmer ab.

Kurz und bündig: Wenn Sie Ihr Handy in einem Gastnetz (z.B. in einem anderen Land oder einfach in einem anderen Netz) benutzen, muss das Gastnetz Ihrem Heimatnetz die erbrachte Leistung in Rechnung stellen. Die Informationen darüber, wer sein Telefon in einem besuchten Netz benutzt hat, wie lange und wen er angerufen hat usw., werden in TAP- und RAP-Dateien ausgetauscht. Diese Dateitypen basieren beide auf ASN.1. Ihre Grammatik ist in der TD.57-Spezifikation genau definiert, die Sie hier finden können (https://www.gsma.com/aboutus/tap3-specifications-download).

Vereinfachtes TD.57 TAP-Verfahren
Vereinfachtes TD.57 TAP-Verfahren

Unser Beispiel: Konfiguration des TAP3.11-Dateiformats

In unserem Beispiel werden wir das recht komplexe Format von TAP3.11 konfigurieren, das in Zeile (1) in der obigen Abbildung zu sehen ist (zur Erinnerung: es könnte jedes andere ASN.1-basierte Format sein).

TAP3.11 Grammatik

So sieht der Anfang der offiziellen TAP3.11-Grammatik aus:

-- TD57_3.11.2
--
-- The following ASN.1 specification defines the abstract syntax for
--        Data Record Format Version 03
--                           Release 11
...

TAP-0311  DEFINITIONS IMPLICIT TAGS  ::=

BEGIN

DataInterChange ::= CHOICE
{
    transferBatch TransferBatch,
    notification  Notification,
...
}
...
TransferBatch ::= [APPLICATION 1] SEQUENCE
{
    batchControlInfo       BatchControlInfo            OPTIONAL, -- *m.m.
    accountingInfo         AccountingInfo              OPTIONAL,
    networkInfo            NetworkInfo                 OPTIONAL, -- *m.m.
    messageDescriptionInfo MessageDescriptionInfoList  OPTIONAL,
    callEventDetails       CallEventDetailList         OPTIONAL, -- *m.m.
    auditControlInfo       AuditControlInfo            OPTIONAL, -- *m.m.
...
}

ASN.1 Asset erstellen

Lassen Sie uns nun TAP3.11 mit layline.io einrichten. (Wir werden in diesem Artikel nicht erklären, wie man ein Projekt vollständig einrichtet. Wenn Sie daran interessiert sind, lesen Sie bitte die entsprechende Dokumentation in den Ressourcen-Links am Ende dieses Blogs).

In der Projekt-Asset-Ansicht (1) wählen Sie Formate (2) und dann ASN.1 Format (3).

Erzeuge ASN.1 Asset
Erzeuge ASN.1 Asset

Der Asset-Editor hat zwei Registerkarten "Konfiguration" und "Module". Auf der Registerkarte "Konfiguration" (1) benennen wir das Asset "TAP3.11" (2):

Benennung des neuen Assets
Benennung des neuen Assets

Nachrichtentypen definieren

TAP3.11 definiert eine Reihe von verschiedenen "Root"-Nachrichtentypen. In diesem Beispiel werden wir nur drei von ihnen identifizieren, um mit ihnen zu arbeiten:

Verfügbare Message Typen
Verfügbare Message Typen

In layline.io ordnen wir sie jeweils "Header", "Detail" und "Trailer" zu, was wie folgt aussieht (1):

Definieren von Nachrichtentypen in layline.io
Definieren von Nachrichtentypen in layline.io

Später werden wir die gelesenen Daten in der Debug-Ausgabe ausgeben. Da einige Daten BCD-kodiert sind (https://en.wikipedia.org/wiki/Binary-coded_decimal), verwenden wir aus Gründen der Lesbarkeit einen eingebauten Konverter, um sie zu dekodieren und lesbar zu machen:

BCD En-/Decoding
BCD En-/Decoding

Hinzufügen der TAP3.11-Grammatik

Wir sind nun bereit, die eigentliche TAP3.11-Grammatik hinzuzufügen. Wechseln Sie auf die Registerkarte Module (2) des ASN.1-Assets, das wir hinzugefügt haben (1).

Eine ASN.1-Grammatik kann sich aus mehreren Modulen zusammensetzen. In unserem Fall ist es nur ein einziges. Wir haben es hinzugefügt und es "TAP.311-Modul" genannt (3/4).

Hinzufügen eines ASN.1-Grammatik-Moduls
Hinzufügen eines ASN.1-Grammatik-Moduls

Die ursprüngliche ASN.1-Grammatik für TAP3.11 finden Sie in der schriftlichen Spezifikation:

GSMAs TD.57 TAP3.11 ASN.1 Grammatik Notation
GSMAs TD.57 TAP3.11 ASN.1 Grammatik Notation

Kopieren wir es und fügen es in unser ASN.1-Asset (1) ein (es sind etwa 1.422 Zeilen):

Einfügen von ASN.1-Grammatik in layline.io
Einfügen von ASN.1-Grammatik in layline.io

Interaktives Testen der ASN.1 Grammatik

layline.io bietet die Möglichkeit, sofort zu prüfen, ob das eingestellte Format mit den tatsächlichen Daten übereinstimmt. Sie können eine Beispieldatei (1) direkt in das Configuration Center (2) hochladen, um einen Cross-Check durchzuführen.

Hochladen einer ASN.1-Beispieldatei
Hochladen einer ASN.1-Beispieldatei

Wir machen Folgendes (2 oben):

Anzeigen der ASN.1-Beispieldatei
Anzeigen der ASN.1-Beispieldatei

layline.io wird sofort

  1. einen Parser für die ASN.1-Grammatik generieren
  2. Parsen der Beispieldatei
  3. Rückgabe des Ergebnisses (3 & 4)

Der Inhalt der Datei wird sowohl in einem Token-Baum (3) als auch in einer Hex-Dump-Anzeige (4) dargestellt. Sie können einzelne Token markieren (3), um den entsprechenden Dateiinhalt hervorgehoben zu sehen (4).

Wechseln Sie zur Registerkarte "Beispielnachrichten" (2), wo Sie eine besser lesbare Ansicht des Dateiinhalts erhalten:

Dekodierte ASN.1-Beispieldatei anzeigen
Dekodierte ASN.1-Beispieldatei anzeigen

Interaktives Testen bedeutet, dass Sie nun zur Grammatik zurückgehen, sie ändern und dann sofort sehen können, wie sich dies auf die Interpretation Ihrer Beispieldaten auswirkt.

Beispielprojekt

Wir haben ein komplettes Beispielprojekt mit Testdaten zusammengestellt, das in layline.io lauffähig ist. Das Beispiel liest und schreibt einfach eine TAP-Datei und gibt deren Inhalt in einem JSON-Format auf der Konsole aus:

Beispielprojekt TAP3 Workflow
Beispielprojekt TAP3 Workflow
Beispielprojekt Debug-Ausgabe
Beispielprojekt Debug-Ausgabe

Jede andere komplexe Operation an den Daten würde natürlich auch funktionieren und ist wahrscheinlich das, was in einem echten Projektkontext passieren würde. Für die Zwecke unseres Beispiels ist die obige Vorgehensweise jedoch ausreichend.

Das Beispielprojekt finden Sie unter den Ressourcenlinks am Ende dieses Artikels.

Zusammenfassung

Mit layline.io können Sie nicht nur komplexe, verteilte, skalierbare Ereignisverarbeitungsszenarien definieren, sondern auch mit nahezu beliebigen Datenformaten arbeiten. In diesem Beispiel haben wir gezeigt, wie man mit ASN.1 strukturierten Daten umgehen kann.

Die meisten anderen Lösungen unterstützen nur bestimmte Formate, da ihre Parser für einen bestimmten Anwendungsfall fest programmiert wurden. In layline.io gibt es buchstäblich Millionen von Anwendungsfällen. Deshalb sind die Formate auch nie fest kodiert, sondern konfigurierbar.

Es gibt viele populäre ASN.1-Protokolle auf der Welt, von denen wir hier einige auflisten möchten. Und es gibt - natürlich - auch unzählige benutzerdefinierte ASN.1-Protokolle.

Protokoll

  • Ericsson AIR / AXE10 / CCN / CCR / MTAS / R3 / R4 / R7 / R8 / R9 / R10 / R11 / R12 / R13 / SDP / Tele2 TIP
  • Huawei IMS
  • 4G UMTS / 5G IMS / 3GPP
  • MetaSolv GPRS
  • TD.35 NRTRDE - Near Real Time Roaming Data Exchange
  • TD.57 / TAP2 / TAP3 Transferred Account Procedure
  • Interledger Protocol
  • NTCIP 1103 - Transport Management Protocols
  • X.500 Directory Services
  • Lightweight Directory Access Protocol (LDAP)
  • PKCS Cryptography Standards
  • X.400 Message Handling
  • T.120 Multimedia conferencing
  • Simple Network Management Protocol (SNMP)
  • Common Management Information Protocol (CMIP)
  • Signalling System No. 7 (SS7)
  • ITU H-Series Multimedia Protocols
  • BioAPI Interworking Protocol (BIP)
  • Common Biometric Exchange Formats Framework (CBEFF)
  • Authentication Contexts for Biometrics (ACBio)
  • Computer-supported telecommunications applications (CSTA)
  • Dedicated short-range communications (DSRC)
  • IEEE 802.11p (IEEE WAVE)
  • Intelligent Transport Systems (ETSI ITS)
  • Global System for Mobile Communications (GSM)
  • General Packet Radio Service (GPRS) / Enhanced Data rates for GSM Evolution (EDGE)
  • Universal Mobile Telecommunications System (UMTS)
  • Long-Term Evolution (LTE)
  • Common Alerting Protocol (CAP)
  • Controller–pilot data link communications (CPDLC)
  • Space Link Extension Services (SLE)
  • Manufacturing Message Specification (MMS)
  • File Transfer, Access and Management (FTAM)
  • Remote Operations Service Element protocol (ROSE)
  • Association Control Service Element (ACSE)
  • Building Automation and Control Networks Protocol (BACnet)

Mehr

Es gibt hier noch viel mehr zu erzählen. Zum Beispiel, was ist layline.io überhaupt? In den untenstehenden Links können Sie mehr über layline.io erfahren und auch tiefer in die Dokumentation eintauchen, wie diese spezielle Grammatik in layline.io funktioniert.

Sie können auch eine kostenlose Kopie von layline.io von unserer Website herunterladen und mit einem Beispielprojekt arbeiten, das Sie ebenfalls herunterladen können.

Vielen Dank für die Lektüre!

Ressourcen

#Projektdateien
1Github: Simple ASN.1 Project (Input-Testdateien im Verzeichnis _test_files des Projekts)
#Dokumentation
1Dokumentation:Erste Schritte
2Dokumentation:Generic Format Asset?
3ASN.1 auf Wikipedia