ASN.1 - ASN.1

ASN.1
Notă de sintaxă abstractă One
Cybersecurity.png
stare În vigoare; înlocuiește X.208 și X.209 (1988)
Anul a început 1984
Ultima versiune (21.02)
februarie 2021
Organizare UIT-T
Standarde de bază ASN.1
Standarde conexe X.208 , X.209 , X.509 , X.680, X.681, X.682, X.683
Domeniu criptografie , telecomunicații
Site-ul web https://www.itu.int/rec/T-REC-X.680/

Abstract Syntax Notation One ( ASN.1 ) este un limbaj standard de descriere a interfeței pentru definirea structurilor de date care pot fi serializate și deserializate într-un mod multiplataforma. Este utilizat pe scară largă în rețelele de telecomunicații și computer , și mai ales în criptografie .

Dezvoltatorii de protocol definesc structurile de date în module ASN.1, care sunt în general o secțiune a unui document de standarde mai larg scris în limba ASN.1. Avantajul este că descrierea ASN.1 a codificării datelor este independentă de un anumit computer sau limbaj de programare. Deoarece ASN.1 poate fi citit de om și poate fi citit de mașină, un compilator ASN.1 poate compila module în biblioteci de cod, codecuri , care decodează sau codifică structurile de date. Unele compilatoare ASN.1 pot produce cod pentru a codifica sau decoda mai multe codificări, de exemplu, ambalate, BER sau XML .

ASN.1 este un standard comun al sectorului de standardizare a telecomunicațiilor al Uniunii Internaționale a Telecomunicațiilor ( UIT-T ) din Grupul de studiu 17 UIT-T și ISO / IEC , definit inițial în 1984 ca parte a CCITT X.409: 1984. În 1988, ASN.1 s-a mutat la propriul standard, X.208 , datorită aplicabilității largi. Versiunea revizuită în mod substanțial din 1995 este acoperită de seria X.680 . Cea mai recentă revizuire a seriei de recomandări X.680 este ediția 5.0, publicată în 2015.

Suport lingvistic

ASN.1 este o notație de declarație de tip de date. Nu definește modul de manipulare a unei variabile de acest tip. Manipularea variabilelor este definită în alte limbi, cum ar fi SDL (Specification and Description Language) pentru modelarea executabilă sau TTCN-3 (Testing and Test Control Notation) pentru testarea conformității. Ambele limbi acceptă în mod nativ declarațiile ASN.1. Este posibil să importați un modul ASN.1 și să declarați variabila oricăruia dintre tipurile ASN.1 declarate în modul.

Aplicații

ASN.1 este utilizat pentru a defini un număr mare de protocoale. Cele mai extinse utilizări ale sale continuă să fie telecomunicațiile, criptografia și biometria.

Protocoale care utilizează ASN.1
Protocol Specificație Reguli de codificare specificate sau personalizate Utilizări
Protocolul interledger https://interledger.org/rfcs/asn1/index.html Reguli de codare a octetului
NTCIP 1103 - Protocoale de gestionare a transporturilor NTCIP 1103 Reguli de codare a octetului Administrarea traficului, transportului și infrastructurii
Servicii de directoare X.500 Seria de recomandări ITU X.500 Reguli de codificare de bază, reguli de codificare distincte Certificate LDAP, TLS ( X.509 ), autentificare
Protocol ușor de acces la director (LDAP) RFC  4511 Reguli de codificare de bază
Standarde de criptografie PKCS Standarde de criptografie PKCS Reguli de codificare de bază și reguli de codificare distincte Taste asimetrice, pachete de certificate
X.400 Gestionarea mesajelor Seria de recomandări ITU X.400 Un concurent timpuriu pentru e-mail
EMV Publicații EMVCo Carduri de plată
T.120 Conferințe multimedia Seria de recomandări ITU T.120 Reguli de codificare de bază, reguli de codificare pachet Protocolul desktopului la distanță (RDP) Microsoft
Protocol simplu de gestionare a rețelei (SNMP) RFC  1157 Reguli de codificare de bază Gestionarea și monitorizarea rețelelor și computerelor, în special caracteristicile legate de performanță și fiabilitate
Protocol comun de gestionare a informațiilor (CMIP) Recomandarea UIT X.711 Un concurent al SNMP, dar mai capabil și nu la fel de popular
Sistem de semnalizare nr. 7 (SS7) Seria de recomandări ITU Q.700 Gestionarea conexiunilor telefonice prin rețeaua publică de telefonie cu comutare (PSTN)
Protocoale multimedia ITU din seria H Seriile de recomandări ITU H.200, H.300 și H.400 Voice over Internet Protocol (VOIP)
BioAPI Interworking Protocol (BIP) ISO / IEC 24708: 2008
Cadrul comun pentru formatele de schimb biometric (CBEFF) NIST IR 6529-A Reguli de codificare de bază
Contextele de autentificare pentru biometrie (ACBio) ISO / IEC 24761: 2019
Aplicații de telecomunicații suportate de computer (CSTA) https://www.ecma-international.org/activities/Communications/TG11/cstaIII.htm Reguli de codificare de bază
Comunicații dedicate pe distanță scurtă (DSRC) SAE J2735 Reguli de codificare pachet Comunicarea vehiculului
IEEE 802.11p (IEEE WAVE) IEEE 1609.2 Comunicarea vehiculului
Sisteme inteligente de transport (ETSI ITS) ETSI EN 302 637 2 (CAM) ETSI EN 302 637 3 (DENM) Comunicarea vehiculului
Sistem global pentru comunicații mobile (GSM) http://www.ttfn.net/techno/smartcards/gsm11-11.pdf Comunicații de telefonie mobilă 2G
Serviciu general de pachete radio (GPRS) / rate de date îmbunătățite pentru GSM Evolution (EDGE) http://www.3gpp.org/technologies/keywords-acronyms/102-gprs-edge Comunicații de telefonie mobilă 2.5G
Sistemul universal de telecomunicații mobile (UMTS) http://www.3gpp.org/DynaReport/25-series.htm Comunicații de telefonie mobilă 3G
Evoluție pe termen lung (LTE) http://www.3gpp.org/technologies/keywords-acronyms/98-lte Comunicații de telefonie mobilă 4G
5G https://www.3gpp.org/news-events/3gpp-news/1987-imt2020_workshop Comunicații de telefonie mobilă 5G
Protocol de alertă comună (CAP) http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html Reguli de codare XML Schimbul de informații despre alerte, cum ar fi Alerte de chihlimbar
Comunicații de legătură de date controler-pilot (CPDLC) Comunicații aeronautice
Space Link Extension Services (SLE) Comunicații de sisteme spațiale
Specificația mesajului de fabricație (MMS) ISO 9506-1: 2003 de fabricație
Transfer, acces și gestionare fișiere (FTAM) Un concurent mai timpuriu și mai capabil la Protocolul de transfer de fișiere, dar este rar folosit.
Protocolul Elemente de serviciu operațiuni la distanță (ROSE) Recomandările UIT X.880, X.881 și X.882 O formă timpurie de apel la procedură la distanță
Element de serviciu de control al asociației (ACSE) Recomandarea UIT X.227
Protocol de construire a rețelelor de automatizare și control (BACnet) ASHRAE 135-2020 Reguli de codificare BACnet Automatizarea și controlul clădirilor, cum ar fi cu alarme de incendiu, ascensoare, sisteme HVAC etc.
Kerberos RFC  4120 Reguli de codificare de bază Autentificare sigură
WiMAX 2 Rețele extinse
Rețea inteligentă Seria de recomandări ITU Q.1200 Telecomunicații și rețele de calculatoare
X2AP Reguli de codificare aliniate de bază aliniate

Codificări

ASN.1 este strâns asociat cu un set de reguli de codificare care specifică modul de reprezentare a unei structuri de date ca o serie de octeți. Regulile standard de codificare ASN.1 includ:

ASN.1 Reguli de codificare
Reguli de codificare Identificator de obiect OID-IRI
Valoarea descriptorului de obiecte
Specificație
Unitatea de serializare
Elemente codificate discernabile
fără precunoașterea specificațiilor
Octet aliniat
Reguli de notare de control de codificare definite
Descriere
Reguli de codificare de bază (BER) 2.1.1 /ASN.1/Basic-Encoding Codificare de bază de un singur tip ASN.1 UIT X.690 Octet da da Nu Primele reguli de codificare specificate. Codifică elementele ca secvențe de lungime-valoare (TLV). De obicei oferă mai multe opțiuni cu privire la modul de codare a valorilor datelor. Aceasta este una dintre regulile de codificare mai flexibile.
Reguli de codificare distincte (DER) 2.1.2.1 /ASN.1/BER-Derived/Distinguished-Encoding Codificare distinctă de un singur tip ASN.1 UIT X.690 Octet da da Nu Un subgrup restricționat al Regulilor de codificare de bază (BER). Utilizat în mod obișnuit pentru lucruri care sunt semnate digital deoarece, deoarece DER permite mai puține opțiuni pentru codificare și deoarece valorile codificate DER sunt mai susceptibile de a fi recodificate pe aceiași octeți exact, semnăturile digitale produse de o valoare abstractă dată vor să fie același în implementări și semnături digitale produse pe date codificate DER vor fi mai puțin susceptibile la atacuri bazate pe coliziune.
Reguli de codificare canonică (CER) 2.1.2.0 /ASN.1/BER-Derived/Canonical-Encoding Codificare canonică de un singur tip ASN.1 UIT X.690 Octet da da Nu Un subgrup restricționat al Regulilor de codificare de bază (BER). Folosește aproape toate aceleași restricții ca regulile de codificare distinctă (DER), dar diferența de remarcat este că CER specifică faptul că multe valori mari (în special șiruri) trebuie „tăiate” în elemente individuale ale șirurilor de caractere la 1000 de octeți sau Marcaj de 1000 de caractere (în funcție de tipul de date).
Reguli de codificare de bază ambalate (PER) aliniate 2.1.3.0.0 /ASN.1/Packed-Encoding/Basic/Aligned Codificare ambalată de un singur tip ASN.1 (aliniat de bază) UIT X.691 Pic Nu da Nu Codifică valorile pe biți, dar dacă biții codați nu sunt divizați în mod egal cu opt, biții de umplere sunt adăugați până când un număr integral de octeți codifică valoarea. Capabil să producă codificări foarte compacte, dar în detrimentul complexității și PER sunt foarte dependente de constrângerile plasate pe tipurile de date.
Reguli de codificare de bază pachet (PER) Nealiniat 2.1.3.0.1 /ASN.1/Packed-Encoding/Basic/Unaligned Codificare ambalată de un singur tip ASN.1 (de bază nealiniat) UIT X.691 Pic Nu Nu Nu O variantă a regulilor de codare de bază pachet (PER), dar nu tamponează valorile de date cu biți pentru a produce un număr integral de octeți.
Reguli de codificare Canonical Packed (CPER) aliniate 2.1.3.1.0 /ASN.1/Packed-Encoding/Canonical/Aligned Codificare ambalată de un singur tip ASN.1 (aliniat canonic) UIT X.691 Pic Nu da Nu O variantă a regulilor de codificare pachet (PER) care specifică un singur mod de codificare a valorilor. Regulile de codificare canonică ambalate au o relație similară cu regulile de codificare ambalate pe care regulile de codificare distinctă (DER) și regulile de codificare canonică (CER) le au cu regulile de codificare de bază (BER).
Regulile de codificare Canonical Packed (CPER) nealiniate 2.1.3.1.1 /ASN.1/Packed-Encoding/Canonical/Unaligned Codificare ambalată de un singur tip ASN.1 (canonic nealiniat) UIT X.691 Pic Nu Nu Nu O variantă a regulilor de codificare Canonical Packed Encoding (CPER), dar nu tamponează valorile de date cu biți pentru a produce un număr integral de octeți.
Reguli de codare XML de bază (XER) 2.1.5.0 /ASN.1/XML-Encoding/Basic Codificare XML de bază de un singur tip ASN.1 UIT X.693 Caracter da da da Codifică datele ASN.1 ca XML.
Reguli de codificare canonică XML (CXER) 2.1.5.1 /ASN.1/XML-Encoding/Canonical Codificare XML canonică de un singur tip ASN.1 UIT X.693 Caracter da da da
Reguli extinse de codare XML (EXER) 2.1.5.2 /ASN.1/XML-Encoding/Extended Codificare XML extinsă de un singur tip ASN.1 UIT X.693 Caracter da da da
Regulile de codificare a octetului (OER) 2.1.6.0 Codificare OER de bază de un singur tip ASN.1 UIT X.696 Octet Nu da Un set de reguli de codificare care codifică valori pe octeți, dar nu codifică etichete sau determinanți de lungime precum Regulile de codificare de bază (BER). Valorile datelor codificate utilizând regulile de codificare Octet arată adesea ca cele găsite în protocoalele „bazate pe înregistrări”. Regulile de codificare pentru octet (OER) au fost concepute pentru a fi ușor de implementat și pentru a produce codificări mai compacte decât cele produse de regulile de codificare de bază (BER). În plus față de reducerea efortului de dezvoltare a codificatoarelor / decodificatoarelor, utilizarea OER poate reduce utilizarea lățimii de bandă (deși nu la fel de mult ca regulile de codificare pachet), economisi cicluri CPU și latență mai mică de codare / decodare.
Reguli de codificare canonică (OER) 2.1.6.1 Codificare OER canonică de un singur tip ASN.1 UIT X.696 Octet Nu da
Reguli de codificare JSON (JER) UIT X.697 Caracter da da da Codifică datele ASN.1 ca JSON.
Reguli generice de codificare a șirurilor (GSER) 1.2.36.79672281.0.0 Reguli generice de codificare a șirurilor (GSER) RFC  3641 Caracter da Nu O specificație incompletă pentru regulile de codificare care produc valori citibile de om. Scopul GSER este de a reprezenta date codificate către utilizator sau de a introduce date de la utilizator, într-un format foarte simplu. GSER a fost inițial conceput pentru Lightweight Directory Access Protocol (LDAP) și este rar folosit în afara acestuia. Utilizarea GSER în protocoalele reale este descurajată, deoarece nu toate codurile de caractere șir acceptate de ASN.1 pot fi reproduse în ea.
Reguli de codificare BACnet ASHRAE 135 Octet da da da Codifică elemente ca secvențe de lungime-valoare (TLV), precum Regulile de codare de bază (BER).
Reguli de codificare specifice de semnalizare (SER) Document intern pentru cercetare și dezvoltare France Telecom Octet da da Utilizat în principal în protocoale legate de telecomunicații, cum ar fi GSM și SS7. Proiectat pentru a produce o codificare identică din ASN.1 pe care ar produce protocoale existente anterior nespecificate în ASN.1.
Reguli de codificare ușoare (LWER) Document intern de INRIA. Cuvânt de memorie da Provine dintr-un document intern produs de INRIA care detaliază „Sintaxa ușoară a arborelui plat” (FTLWS). Abandonat în 1997 datorită performanței superioare a Regulilor de codificare pachet (PER). Opțional, transmisie Big-Endian sau Little-Endian, precum și cuvinte de memorie pe 8 biți, 16 biți și 32 biți. (Prin urmare, există șase variante, deoarece există șase combinații ale acestor opțiuni.)
Reguli minime de codificare pe biți (MBER) Pic Propus în anii 1980. Înțeles să fie cât mai compact posibil, ca regulile de codificare pachet (PER).
Reguli de codificare NEMA Packed Pic O specificație incompletă a regulii de codificare produsă de NEMA. Este incomplet deoarece nu poate codifica și decoda toate tipurile de date ASN.1. Compact ca regulile de codificare pachet (PER).
Reguli de codare de mare viteză „Reguli de codare pentru rețelele de mare viteză” Definiția acestor reguli de codificare a fost un produs secundar al lucrărilor INRIA privind sintaxa greutății plate a arborelui plat (FTLWS).

Notare control codare

Recomandările ASN.1 oferă o serie de reguli de codificare predefinite. Dacă niciuna dintre regulile de codificare existente nu este adecvată, Notarea de control a codificării (ECN) oferă o modalitate prin care un utilizator își poate defini propriile reguli de codificare personalizate.

Relația cu codificarea PEM (Privacy-Enhanced Mail)

Codificarea PEM (Privacy-Enhanced Mail) nu este complet legată de ASN.1 și codecurile sale, cu toate acestea, datele ASN.1 codificate (care sunt adesea binare) sunt adesea codificate PEM. Acest lucru poate ajuta la transportul pe suporturi media care este sensibil la codificarea textuală, cum ar fi relele SMTP, precum și la copiere și lipire.

Exemplu

Acesta este un exemplu de modul ASN.1 care definește mesajele (structurile de date) ale unui protocol Foo fictiv :

FooProtocol DEFINITIONS ::= BEGIN

    FooQuestion ::= SEQUENCE {
        trackingNumber INTEGER,
        question       IA5String
    }

    FooAnswer ::= SEQUENCE {
        questionNumber INTEGER,
        answer         BOOLEAN
    }

END

Aceasta ar putea fi o specificație publicată de creatorii protocolului Foo. Fluxurile de conversație, schimburile de tranzacții și stările nu sunt definite în ASN.1, dar sunt lăsate pe seama altor notații și descrieri textuale ale protocolului.

Presupunând un mesaj care respectă Protocolul Foo și care va fi trimis părții destinatar, acest mesaj special ( unitatea de date de protocol (PDU)) este:

myQuestion FooQuestion ::= {
    trackingNumber     5,
    question           "Anybody there?"
}

ASN.1 acceptă constrângeri privind valorile și dimensiunile și extensibilitatea. Specificațiile de mai sus pot fi schimbate în

FooProtocol DEFINITIONS ::= BEGIN

    FooQuestion ::= SEQUENCE {
        trackingNumber INTEGER(0..199),
        question       IA5String
    }

    FooAnswer ::= SEQUENCE {
        questionNumber INTEGER(10..20),
        answer         BOOLEAN
    }

    FooHistory ::= SEQUENCE {
        questions SEQUENCE(SIZE(0..10)) OF FooQuestion,
        answers   SEQUENCE(SIZE(1..10)) OF FooAnswer,
        anArray   SEQUENCE(SIZE(100))  OF INTEGER(0..1000),
        ...
    }

END

Această modificare constrânge trackingNumbers să aibă o valoare cuprinsă între 0 și 199 inclusiv, iar questionNumbers să aibă o valoare între 10 și 20 inclusiv. Dimensiunea matricei de întrebări poate fi între 0 și 10 elemente, iar matricea de răspunsuri între 1 și 10 elemente. Câmpul anArray este o matrice de 100 de elemente cu lungime fixă ​​de numere întregi care trebuie să fie cuprinsă între 0 și 1000. Marcatorul de extensibilitate „...” înseamnă că specificația mesajului FooHistory poate avea câmpuri suplimentare în versiunile viitoare ale specificației; sistemele conforme cu o versiune ar trebui să poată primi și transmite tranzacții dintr-o versiune ulterioară, deși pot procesa doar câmpurile specificate în versiunea anterioară. Compilatoarele ASN.1 bune vor genera (în C, C ++, Java etc.) cod sursă care va verifica automat dacă tranzacțiile se încadrează în aceste constrângeri. Tranzacțiile care încalcă constrângerile nu trebuie acceptate sau prezentate cererii. Gestionarea constrângerilor din acest strat simplifică semnificativ specificațiile protocolului, deoarece aplicațiile vor fi protejate împotriva încălcărilor constrângerilor, reducând riscul și costurile.

Pentru a trimite mesajul myQuestion prin rețea, mesajul este serializat (codificat) ca o serie de octeți utilizând una dintre regulile de codificare . Specificația protocolului Foo ar trebui să denumească în mod explicit un set de reguli de codificare de utilizat, astfel încât utilizatorii protocolului Foo să știe pe care ar trebui să-l folosească și să se aștepte.

Exemplu codificat în DER

Mai jos este structura de date prezentată mai sus ca FooQuestion codificată în format DER (toate numerele sunt în hexazecimal):

30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

DER este o codificare tip-lungime-valoare , astfel încât secvența de mai sus poate fi interpretată, cu referire la tipurile standard SEQUENCE, INTEGER și IA5String, după cum urmează:

30 — type tag indicating SEQUENCE
13 — length in octets of value that follows
  02 — type tag indicating INTEGER
  01 — length in octets of value that follows
    05 — value (5)
  16 — type tag indicating IA5String 
     (IA5 means the full 7-bit ISO 646 set, including variants, 
      but is generally US-ASCII)
  0e — length in octets of value that follows
    41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f — value ("Anybody there?")

Exemplu codificat în XER

Alternativ, este posibil să codificați aceeași structură de date ASN.1 cu XML Encoding Rules (XER) pentru a obține o mai mare lizibilitate umană „prin fir”. Apare apoi ca următorii 108 octeți, (numărul de spații include spațiile utilizate pentru indentare):

<FooQuestion>
    <trackingNumber>5</trackingNumber>
    <question>Anybody there?</question>
</FooQuestion>

Exemplu codificat în PER (nealiniat)

Alternativ, dacă sunt folosite reguli de codificare ambalate , următorii 122 de biți (16 octeți însumează 128 de biți, dar aici doar 122 de biți transportă informații și ultimii 6 biți sunt doar umplutură) vor fi produși:

01 05 0e 83 bb ce 2d f9 3c a0 e9 a3 2f 2c af c0

În acest format, etichetele de tip pentru elementele solicitate nu sunt codate, deci nu pot fi analizate fără a cunoaște schemele așteptate utilizate pentru a codifica. În plus, octeții pentru valoarea IA5String sunt ambalate utilizând unități de 7 biți în loc de unități de 8 biți, deoarece codificatorul știe că codificarea unei valori de octeți IA5String necesită doar 7 biți. Cu toate acestea, octeții de lungime sunt încă codați aici, chiar și pentru prima etichetă întreagă 01 (dar un pachet PER ar putea să-l omită dacă știe că intervalul de valori permise se potrivește pe 8 biți și ar putea chiar compacta octetul de valoare unică 05 cu mai puțin mai mult de 8 biți, dacă știe că valorile permise se pot încadra numai într-un interval mai mic).

Ultimii 6 biți din PER-ul codificat sunt umpluți cu biți nul în cei 6 biți cel mai puțin semnificativi ai ultimului octet c0: acești biți suplimentari nu pot fi transmiși sau folosiți pentru codificarea altceva dacă această secvență este inserată ca parte a unui PER secvență.

Aceasta înseamnă că datele PER nealiniate sunt în esență un flux ordonat de biți și nu un flux ordonat de octeți, cum ar fi cu PER aliniat, și că va fi puțin mai complex să se decodeze prin software pe procesoarele obișnuite, deoarece va necesita un bit contextual suplimentar. deplasarea și mascarea și nu adresarea directă a octetului (dar aceeași remarcă ar fi adevărată cu procesoarele moderne și unitățile de memorie / stocare a căror unitate minimă de adresare este mai mare de 1 octet). Cu toate acestea, procesoarele moderne și procesoarele de semnal includ suport hardware pentru decodarea internă rapidă a fluxurilor de biți, cu gestionarea automată a unităților de calcul care depășesc limitele unităților de stocare adresabile (acest lucru este necesar pentru procesarea eficientă a codecurilor de date pentru compresie / decompresie sau cu o anumită criptare / algoritmi de decriptare).

Dacă ar fi necesară alinierea la limitele octetului, un codificator PER aliniat ar produce:

01 05 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

(în acest caz, fiecare octet este umplut individual cu biți nuli pe biții lor cei mai semnificativi neutilizați).

Instrumente

Majoritatea instrumentelor care susțin ASN.1 fac următoarele:

  • analizați fișierele ASN.1,
  • generează declarația echivalentă într-un limbaj de programare (cum ar fi C sau C ++),
  • generează funcțiile de codificare și decodare pe baza declarațiilor anterioare.

O listă de instrumente care susțin ASN.1 poate fi găsită pe pagina web a Instrumentului ITU-T .

Instrumente online

Comparație cu scheme similare

ASN.1 este similar ca scop și utilizare cu tampoanele de protocol și Apache Thrift , care sunt, de asemenea, limbaje de descriere a interfeței pentru serializarea datelor pe mai multe platforme. La fel ca aceste limbi, are o schemă (în ASN.1, numită „modul”) și un set de codificări, de obicei codificări tip-lungime-valoare. Spre deosebire de acestea, ASN.1 nu oferă o singură implementare open-source simplă și ușor de utilizat și este publicată ca o specificație care urmează să fie implementată de furnizori terți. Cu toate acestea, ASN.1, definit în 1984, le precedă cu mulți ani. De asemenea, include o varietate mai largă de tipuri de date de bază, dintre care unele sunt învechite și are mai multe opțiuni de extensibilitate. Un singur mesaj ASN.1 poate include date din mai multe module definite în mai multe standarde, chiar și standarde definite la ani distanță.

ASN.1 include, de asemenea, suport încorporat pentru constrângeri asupra valorilor și dimensiunilor. De exemplu, un modul poate specifica un câmp întreg care trebuie să fie cuprins între 0 și 100. Lungimea unei secvențe de valori (o matrice) poate fi, de asemenea, specificată, fie ca lungime fixă, fie ca interval de lungimi permise. Constrângerile pot fi, de asemenea, specificate ca combinații logice de seturi de constrângeri de bază.

Valorile utilizate ca constrângeri pot fi fie literale utilizate în specificația PDU, fie valori ASN.1 specificate în altă parte în fișierul schemă. Unele instrumente ASN.1 vor face aceste valori ASN.1 disponibile programatorilor în codul sursă generat. Utilizați ca constante pentru protocolul definit, dezvoltatorii le pot utiliza în implementarea logică a protocolului. Astfel, toate PDU-urile și constantele protocolului pot fi definite în schemă, iar toate implementările protocolului în orice limbaj acceptat se bazează pe acele valori. Acest lucru evită nevoia ca dezvoltatorii să transmită constante de protocol de cod în codul sursă de implementare. Acest lucru ajută în mod semnificativ dezvoltarea protocolului; constantele protocolului pot fi modificate în schema ASN.1 și toate implementările sunt actualizate pur și simplu prin recompilare, promovând un ciclu de dezvoltare rapid și cu risc scăzut.

Dacă instrumentele ASN.1 implementează corect verificarea constrângerilor în codul sursă generat, aceasta acționează pentru a valida automat datele protocolului în timpul funcționării programului. În general, instrumentele ASN.1 vor include constrângeri care verifică rutinele de serializare / deserializare generate, ridicând erori sau excepții dacă se întâlnesc date în afara limitelor. Este complex să implementați toate aspectele constrângerilor ASN.1 într-un compilator ASN.1. Nu toate instrumentele acceptă întreaga gamă de expresii de constrângeri posibile. Schema XML și schema JSON acceptă ambele concepte de constrângeri similare. Suportul instrumentelor pentru constrângerile acestora variază. Compilatorul Microsoft xsd.exe le ignoră.

ASN.1 este similar din punct de vedere vizual cu forma Augmented Backus-Naur (ABNF), care este utilizată pentru a defini multe protocoale Internet precum HTTP și SMTP . Cu toate acestea, în practică, acestea sunt destul de diferite: ASN.1 definește o structură de date, care poate fi codificată în diferite moduri (de exemplu, JSON, XML, binar). ABNF, pe de altă parte, definește codificarea („sintaxa”) în același timp, definește structura datelor („semantica”). ABNF tinde să fie utilizat mai frecvent pentru definirea protocoalelor textuale, care pot fi citite de om și, în general, nu este utilizat pentru definirea codificărilor tip-lungime-valoare.

Multe limbaje de programare definesc formate de serializare specifice limbajului. De exemplu, modulul „murat” al lui Python și modulul „Marshal” al lui Ruby. Aceste formate sunt, în general, specifice limbii. De asemenea, nu necesită o schemă, ceea ce le face mai ușor de utilizat în scenarii de stocare ad hoc, dar neadecvate pentru protocoalele de comunicații.

În mod similar, JSON și XML nu necesită o schemă, ceea ce le face ușor de utilizat. Cu toate acestea, ambele sunt standarde multi-platformă și sunt în general populare pentru protocoalele de comunicații, în special atunci când sunt combinate cu o schemă XML sau o schemă JSON .

Unele instrumente ASN.1 sunt capabile să traducă între ASN.1 și schema XML (XSD). Traducerea este standardizată de UIT. Acest lucru face posibil ca un protocol să fie definit în ASN.1 și, de asemenea, automat în XSD. Astfel, este posibil (deși poate prost sfătuit) să aveți într-un proiect o schemă XSD care este compilată de instrumentele ASN.1 care produc cod sursă care serializează obiecte către / de la JSON wireformat. O utilizare mai practică este aceea de a permite altor subproiecte să consume o schemă XSD în loc de o schemă ASN.1, probabil potrivind disponibilitatea instrumentelor pentru limbajul de alegere al subproiectelor, cu XER folosit ca protocolul wireformat.

Pentru mai multe detalii, consultați Compararea formatelor de serializare a datelor .

Vezi si

Referințe

linkuri externe