ASN.1 - ASN.1
| Notă de sintaxă abstractă One | |
| 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.
| 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:
| Reguli de codificare | Identificator de obiect | OID-IRI | 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
- Un ghid laic pentru un subset de ASN.1, BER și DER O introducere bună pentru începători
- Site-ul ITU-T - Introducere în ASN.1
- O introducere video la ASN.1
- Tutorial ASN.1 Tutorial despre conceptele de bază ASN.1
- ASN.1 Tutorial Tutorial despre ASN.1
- Un compilator open source ASN.1-> C ++; Include câteva specificații ASN.1. , Un compilator ASN.1 on-line> C ++
- Decodor ASN.1 Permite decodarea mesajelor codificate ASN.1 în ieșire XML.
- Verificator de sintaxă ASN.1 și codificator / decodor Verifică sintaxa unei scheme ASN.1 și codifică / decodează mesajele.
- Codificator / decodor ASN.1 al mesajelor 3GPP Codifică / decodează mesajele ASN.1 3GPP și permite editarea ușoară a acestor mesaje.
- Cărți gratuite despre ASN.1
- Lista instrumentelor ASN.1 la proiectul IvmaiAsn
- Prezentare generală a regulilor de codare a octetului (OER)
- Prezentare generală a regulilor de codificare JSON (JER)
- Un utilitar de nod Typescript pentru a analiza și valida mesajele ASN.1