Abstract Syntax Notation One, in sigla ASN.1, è un linguaggio di descrizione d'interfacce (IDL) usato per definire strutture dati che possono essere serializzate e deserializzate tra piattaforme diverse. Presentato negli anni '80 e normato nel 1990 nello standard ISO 8824 e ripreso nel 2000 all'interno della raccomandazione CCITT X.208,[1] è largamente usato nelle telecomunicazioni, nelle reti informatiche, e soprattutto in crittografia.[2]

Descrizione

modifica

Le particolarità che rendono l'ASN.1 importante sono:

  • è una notazione internazionalmente standardizzata indipendente dall'implementazione, dalla piattaforma e dal linguaggio, per specificare strutture dati ad alto livello di astrazione.
  • è supportato da regole che determinano la precisa organizzazione dei bit, per rappresentare i valori della struttura dati, quando questi devono essere trasferiti su una rete di computer, utilizzando codifiche non necessariamente verbose.
  • è supportato da strumenti disponibili per numerose piattaforme e diversi linguaggi di programmazione che mappano la notazione ASN.1 in definizioni di strutture dati nel linguaggio di programmazione scelto e che supportano la conversione automatica tra i valori delle strutture dati nella memoria e l'organizzazione dei bit definita per il trasferimento sulla linea di comunicazione.
  • gestisce la coesistenza di sistemi di versione 1 e versione 2 sviluppati e costituiti anche a diversi anni di distanza. Questo avviene grazie ai tipi estensione che permettono di "lasciare aperto" il codice, non richiedendo la presenza di determinati dati o l'assenza degli stessi.
  • gestisce un gran numero di strutture dati che sono generalmente molto più complete rispetto a quelle dei normali linguaggi di programmazione, come la dimensione degli interi, la nomenclatura delle strutture e la specifica del tipo di carattere.

Sintassi

modifica

La semantica e la sintassi di ASN.1 è varia, ma non complicata. Ogni struttura è definita secondo un preciso schema, le variabili o le altre strutture sono definite man mano che il codice viene scritto. Si parte dalla struttura base e la si amplia legando sequenze diverse che specificano le variabili usate.

I dati sono contraddistinti da un tipo ("data type") e da un valore ("data value"):

  • un tipo è una classe che descrive una collezione di valori.
  • un valore è un particolare elemento di informazione, ovvero una particolare istanza di un tipo.

Una dichiarazione in questa notazione consta di quattro tipi differenti di unità lessicali:

  • parole, costituite da lettere maiuscole e minuscole, cifre e trattini, che differenziano i tipi di variabili e le sequenze.
  • numeri, costituiti da cifre.
  • stringhe di caratteri, esadecimali e binarie.
  • punteggiatura.

Per individuare immediatamente il tipo di oggetto al quale la parola si riferisce, usa la seguente convenzione:

  • nome di un tipo, la parola inizia con una lettera maiuscola (es. Nameoftype), per i tipi di base si usano le asn1_dat, che come tali vanno interamente in maiuscolo (es. INTEGER).
  • nome di un valore (un'istanza di un tipo), la parola inizia con una lettera minuscola (es. nameofvalue).
  • nome di un modulo, la parola inizia con la lettera maiuscola (es. Module).
  • valori, non esistono particolari convenzioni.

Le assegnazioni di tipi avvengono tramite produzione, utilizzando il simbolo "::=".

I moduli indicano una collezione di descrizioni ASN.1:

[module]DEFINITIONS [tags] ::= BEGIN
[linkage]
[declarations]
END

Il campo tags è opzionale e indica se i tags nel modulo sono impliciti o espliciti. I tags sono utili, qualora più elementi componenti la struttura complessiva appartengano allo stesso tipo semplice, in quanto permettono a un ricevente di riconoscere univocamente il tipo cui appartiene il valore ricevuto. Non viene praticamente più utilizzato, ma si sfrutta l'assegnazione automatica.

Il termine linkage indica quali tipi, valori e macro sono esportati e quali importati da altri moduli.

Declarations contiene tutte le dichiarazioni relative al modulo.

Quello che rende veramente utile questo tipo di linguaggio è la sua maneggevolezza dovuta al fatto che è studiato per funzionare come la pila ISO/OSI, ovvero all'interno del codice le sequenze sono create lasciando degli "holes". Gli "holes" non sono nient'altro che strutture non definite direttamente dal programmatore, ma che vengono riempite, man mano che il codice viene eseguito, dal livello superiore o inferiore della pila. Si può quindi scrivere una specifica generica con all'interno "holes" che verranno riempiti da utenti che a loro volta inseriranno "holes", creando quindi un codice che si adatta alle caratteristiche dell'utente e al suo tipo di utilizzo.

Il linguaggio ASN.1 è utilizzato in diversi standard e in diversi ambiti, normalmente viene utilizzata una codifica base (BER) che non tiene conto della ridondanza dei bit e della presenza di bit non utilizzati. ASN.1 è incentrato sullo sfruttamento di questa notazione nel campo delle telecomunicazioni, lavorando con un tipo di codifica a pacchetto (PER).

La codifica PER Packed Encoding Rules

modifica

La codifica PER è separata dalla specifica di un protocollo, è quello che viene creato dal compilatore ASN.1. Dopo aver scritto la specifica in linguaggio ASN.1 questa viene passata al compilatore. Il compilatore può creare un'uscita con diversi tipi di codifica (BER, XER, DER, PER) in base alle richieste di utilizzo. Quindi nella codifica PER vengono utilizzate regole da applicare all'organizzazione dei bit, per creare una struttura dati il più possibile concreta senza campi inutili, che permetta la pacchettizzazione per trasmettere l'informazione più velocemente. Non utilizza tags impostati manualmente, perché occuperebbero spazio sulla PDU, ma tags automatici.

Ci sono due varianti di questa codifica:

  • ALIGNED: la struttura dei bit è organizzata in modo che ci sia allineamento tra i byte inserendo bit ridondanti.
  • UNALIGNED: è un tipo di struttura più pacchettizzata in quanto ogni bit utilizzato è un bit utile, d'informazione.

Note

modifica
  1. ^ (ENFRES) X.208 : Specification of Abstract Syntax Notation One (ASN.1), su International Telecommunication Union - official website.
  2. ^ (EN) Introduction to ASN.1, su ITU. URL consultato il 9 aprile 2021 (archiviato dall'url originale il 9 aprile 2021).
Controllo di autoritàLCCN (ENsh2001003087 · J9U (ENHE987007534823805171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica

📚 Artikel Terkait di Wikipedia

Management Information Base

MIB vengono definiti utilizzando un sottoinsieme della notazione Abstract Syntax Notation One (ASN.1) chiamato "Structure of Management Information Version

Lista di standard ISO

ISO 8802-x IEEE 802-x LAN/MAN Standards Committee ISO/IEC 8824 Abstract Syntax Notation One (ASN.1) ISO/IEC 8825 ASN.1 regole di codifica ISO 8859 codifica

Sigle nelle telecomunicazioni

Protocol ASAP As Soon As Possible ASK Amplitude-shift keying ASN.1 Abstract Syntax Notation one AWGN Additive White Gaussian Noise BBC Bolck Check Character