ASN.1 - ASN.1
Soyut Sözdizimi Gösterimi Bir | |
Durum | Yürürlükte; X.208 ve X.209'un (1988) yerini alır |
---|---|
Yıl başladı | 1984 |
En son sürüm | (02/21) Şubat 2021 |
organizasyon | ITU-T |
Temel standartlar | ASN.1 |
İlgili standartlar | X.208 , X.209 , X.509 , X.680, X.681, X.682, X.683 |
İhtisas | kriptografi , telekomünikasyon |
İnternet sitesi | https://www.itu.int/rec/T-REC-X.680/ |
Abstract Syntax Notation One ( ASN.1 ), platformlar arası bir şekilde serileştirilebilen ve seri durumdan çıkarılabilen veri yapılarını tanımlamak için standart bir arayüz tanımlama dilidir . Telekomünikasyon ve bilgisayar ağlarında ve özellikle kriptografide yaygın olarak kullanılmaktadır .
Protokol geliştiricileri, veri yapılarını genellikle ASN.1 dilinde yazılmış daha geniş standartlar belgesinin bir bölümü olan ASN.1 modüllerinde tanımlar. Avantajı, veri kodlamasının ASN.1 açıklamasının belirli bir bilgisayardan veya programlama dilinden bağımsız olmasıdır. ASN.1 hem insan tarafından hem de makine tarafından okunabilir olduğundan, bir ASN.1 derleyicisi modülleri , veri yapılarının kodunu çözen veya kodlayan kod, codec bileşenleri kitaplıklarında derleyebilir . Bazı ASN.1 derleyicileri, örneğin paketlenmiş, BER veya XML gibi çeşitli kodlamaları kodlamak veya kodunu çözmek için kod üretebilir .
ASN.1, ITU-T Çalışma Grubu 17'deki Uluslararası Telekomünikasyon Birliği Telekomünikasyon Standardizasyon Sektörünün ( ITU-T ) ve orijinal olarak 1984'te CCITT X.409:1984'ün bir parçası olarak tanımlanan ISO / IEC'nin ortak bir standardıdır . 1988'de ASN.1 , geniş uygulanabilirliği nedeniyle kendi standardı olan X.208'e taşındı . Büyük ölçüde revize edilmiş 1995 versiyonu, X.680 serisi kapsamındadır . X.680 serisi tavsiyelerin en son revizyonu, 2015 yılında yayınlanan 5.0 Sürümüdür.
Dil desteği
ASN.1 bir veri tipi bildirim gösterimidir. Böyle bir türdeki bir değişkenin nasıl değiştirileceğini tanımlamaz. Değişkenlerin manipülasyonu, yürütülebilir modelleme için SDL (Specification and Description Language) veya uygunluk testi için TTCN-3 (Test ve Test Kontrol Notasyonu) gibi diğer dillerde tanımlanmıştır . Bu dillerin her ikisi de yerel olarak ASN.1 bildirimlerini destekler. Bir ASN.1 modülünü içe aktarmak ve modülde bildirilen ASN.1 türlerinden herhangi birinin değişkenini bildirmek mümkündür.
Uygulamalar
ASN.1 çok sayıda protokolü tanımlamak için kullanılır. En kapsamlı kullanım alanları telekomünikasyon, kriptografi ve biyometri olmaya devam ediyor.
Protokol | Şartname | Belirtilen veya Geleneksel Kodlama Kuralları | kullanır |
---|---|---|---|
Interledger Protokolü | https://interledger.org/rfcs/asn1/index.html | Sekizli Kodlama Kuralları | |
NTCIP 1103 - Taşıma Yönetimi Protokolleri | NTCIP 1103 | Sekizli Kodlama Kuralları | Trafik, Ulaşım ve Altyapı Yönetimi |
X.500 Dizin Hizmetleri | ITU X.500 Tavsiye Serisi | Temel Kodlama Kuralları, Seçkin Kodlama Kuralları | LDAP, TLS ( X.509 ) Sertifikaları, Kimlik Doğrulama |
Basit Dizin Erişim Protokolü (LDAP) | RFC 4511 | Temel Kodlama Kuralları | |
PKCS Şifreleme Standartları | PKCS Şifreleme Standartları | Temel Kodlama Kuralları ve Seçkin Kodlama Kuralları | Asimetrik Anahtarlar, sertifika paketleri |
X.400 Mesaj İşleme | ITU X.400 Tavsiye Serisi | E-posta için erken bir rakip | |
EMV | EMVCo Yayınları | Ödeme kartları | |
T.120 Multimedya konferansı | ITU T.120 Tavsiye Serisi | Temel Kodlama Kuralları, Paketli Kodlama Kuralları | Microsoft'un Uzak Masaüstü Protokolü (RDP) |
Basit Ağ Yönetim Protokolü (SNMP) | RFC 1157 | Temel Kodlama Kuralları | Ağları ve bilgisayarları, özellikle performans ve güvenilirlikle ilgili özellikleri yönetme ve izleme |
Ortak Yönetim Bilgi Protokolü (CMIP) | ITU Tavsiyesi X.711 | SNMP'ye rakip ama daha yetenekli ve neredeyse o kadar popüler değil | |
7 Numaralı Sinyalizasyon Sistemi (SS7) | ITU Q.700 Tavsiye Serisi | Genel Anahtarlamalı Telefon Ağı (PSTN) üzerinden telefon bağlantılarını yönetme | |
İTÜ H-Serisi Multimedya Protokolleri | ITU H.200, H.300 ve H.400 Öneri Serileri | İnternet Protokolü Üzerinden Ses (VOIP) | |
BioAPI Birlikte Çalışma Protokolü (BIP) | ISO/IEC 24708:2008 | ||
Ortak Biyometrik Değişim Formatları Çerçevesi (CBEFF) | NIST IR 6529-A | Temel Kodlama Kuralları | |
Biyometri (ACBio) için Kimlik Doğrulama Bağlamları | ISO/IEC 24761:2019 | ||
Bilgisayar destekli telekomünikasyon uygulamaları (CSTA) | https://www.ecma-international.org/activities/Communications/TG11/cstaIII.htm | Temel Kodlama Kuralları | |
Özel kısa menzilli iletişim (DSRC) | SAE J2735 | Paketlenmiş Kodlama Kuralları | Araç iletişimi |
IEEE 802.11p (IEEE DALGA) | IEEE 1609.2 | Araç iletişimi | |
Akıllı Ulaşım Sistemleri (ETSI ITS) | ETSI EN 302 637 2 (CAM) ETSI EN 302 637 3 (DENM) | Araç iletişimi | |
Mobil İletişim için Küresel Sistem (GSM) | http://www.ttfn.net/techno/smartcards/gsm11-11.pdf | 2G Cep Telefonu İletişimi | |
Genel Paket Radyo Hizmeti (GPRS) / GSM Evrimi (EDGE) için Gelişmiş Veri hızları | http://www.3gpp.org/technologies/keywords-acronyms/102-gprs-edge | 2.5G Cep Telefonu İletişimi | |
Evrensel Mobil Telekomünikasyon Sistemi (UMTS) | http://www.3gpp.org/DynaReport/25-series.htm | 3G Cep Telefonu İletişimi | |
Uzun Vadeli Evrim (LTE) | http://www.3gpp.org/technologies/keywords-acronyms/98-lte | 4G Cep Telefonu İletişimi | |
5G | https://www.3gpp.org/news-events/3gpp-news/1987-imt2020_workshop | 5G Cep Telefonu İletişimi | |
Ortak Uyarı Protokolü (CAP) | http://docs.oasis-open.org/emergency/cap/v1.2/CAP-v1.2-os.html | XML Kodlama Kuralları | Amber Uyarıları gibi Uyarı Bilgilerini Değiştirme |
Kontrolör-pilot veri bağlantısı iletişimi (CPDLC) | havacılık iletişimi | ||
Uzay Bağlantısı Uzatma Hizmetleri (SLE) | Uzay sistemleri iletişimi | ||
Üretim Mesajı Spesifikasyonu (MMS) | ISO 9506-1:2003 | Üretme | |
Dosya Aktarımı, Erişimi ve Yönetimi (FTAM) | Dosya Aktarım Protokolü için erken ve daha yetenekli bir rakip, ancak artık nadiren kullanılıyor. | ||
Uzaktan İşlemler Hizmet Öğesi protokolü (ROSE) | ITU Tavsiyeleri X.880, X.881 ve X.882 | Uzak prosedür çağrısının erken bir şekli | |
İlişkilendirme Kontrol Hizmet Öğesi (ACSE) | ITU Tavsiyesi X.227 | ||
Bina Otomasyonu ve Kontrol Ağları Protokolü (BACnet) | ASHRAE 135-2020 | BACnet Kodlama Kuralları | Yangın alarmları, asansörler, HVAC sistemleri vb. ile bina otomasyonu ve kontrolü. |
Kerberos | RFC 4120 | Temel Kodlama Kuralları | Güvenli kimlik doğrulama |
WiMAX 2 | Geniş Alan Ağları | ||
Akıllı Ağ | ITU Q.1200 Tavsiye Serisi | Telekomünikasyon ve bilgisayar ağları | |
X2AP | Temel Hizalanmış Paket Kodlama Kuralları |
kodlamalar
ASN.1, bir veri yapısının bir dizi bayt olarak nasıl temsil edileceğini belirten bir dizi kodlama kuralıyla yakından ilişkilidir. Standart ASN.1 kodlama kuralları şunları içerir:
Kodlama Kuralları | Nesne Tanımlayıcı | OID-IRI | Açıklama | ||||||
---|---|---|---|---|---|---|---|---|---|
Temel Kodlama Kuralları (BER) | 2.1.1 | /ASN.1/Temel-Kodlama | Tek bir ASN.1 türünün Temel Kodlaması | İTÜ X.690 | sekizli | Evet | Evet | Numara | İlk belirtilen kodlama kuralları. Öğeleri etiket-uzunluk-değer (TLV) dizileri olarak kodlar. Tipik olarak, veri değerlerinin nasıl kodlanacağına dair birkaç seçenek sunar. Bu, daha esnek kodlama kurallarından biridir. |
Seçkin Kodlama Kuralları (DER) | 2.1.2.1 | /ASN.1/BER-Türetilen/Seçkin-Kodlama | Tek bir ASN.1 türünün ayırt edici kodlaması | İTÜ X.690 | sekizli | Evet | Evet | Numara | Temel Kodlama Kurallarının (BER) kısıtlı bir alt kümesi. Genellikle dijital olarak imzalanmış şeyler için kullanılır, çünkü DER daha az kodlama seçeneğine izin verdiğinden ve DER ile kodlanmış değerlerin tam olarak aynı baytlarda yeniden kodlanma olasılığı daha yüksek olduğundan, belirli bir soyut değer tarafından üretilen dijital imzalar uygulamalar arasında aynı olacak ve DER ile kodlanmış veriler üzerinden üretilen dijital imzalar, çarpışma tabanlı saldırılara karşı daha az duyarlı olacaktır. |
Kanonik Kodlama Kuralları (CER) | 2.1.2.0 | /ASN.1/BER-Türetilen/Kanonik Kodlama | Tek bir ASN.1 türünün kurallı kodlaması | İTÜ X.690 | sekizli | Evet | Evet | Numara | Temel Kodlama Kurallarının (BER) kısıtlı bir alt kümesi. Ayırt Edici Kodlama Kuralları (DER) ile hemen hemen aynı kısıtlamaların hepsini kullanır, ancak dikkate değer fark, CER'nin birçok büyük değerin (özellikle dizelerin) 1000 bayt veya 1000 karakterlik işaret (veri türüne bağlı olarak). |
Temel Paketlenmiş Kodlama Kuralları (PER) Hizalanmış | 2.1.3.0.0 | /ASN.1/Packed-Encoding/Temel/Hizalanmış | Tek bir ASN.1 türünün paketlenmiş kodlaması (temel hizalanmış) | İTÜ X.691 | Biraz | Numara | Evet | Numara | Bitlerdeki değerleri kodlar, ancak kodlanan bitler sekize eşit olarak bölünemiyorsa, tam sayı sekizli değeri kodlayana kadar dolgu bitleri eklenir. Çok kompakt kodlamalar üretebilir, ancak karmaşıklık pahasına ve PER, veri türlerine yerleştirilen kısıtlamalara büyük ölçüde bağımlıdır. |
Temel Paketlenmiş Kodlama Kuralları (PER) Hizalanmamış | 2.1.3.0.1 | /ASN.1/Packed-Encoding/Temel/Hizasız | Tek bir ASN.1 türünün paketlenmiş kodlaması (temel hizalanmamış) | İTÜ X.691 | Biraz | Numara | Numara | Numara | Aligned Basic Packed Encoding Rules (PER)'in bir türevidir, ancak tam bir sekizli sayısı üretmek için veri değerlerini bitlerle doldurmaz. |
Kanonik Paketlenmiş Kodlama Kuralları (CPER) Hizalanmış | 2.1.3.1.0 | /ASN.1/Packed-Encoding/Kanonik/Hizalanmış | Tek bir ASN.1 türünün paketlenmiş kodlaması (kurallı hizalanmış) | İTÜ X.691 | Biraz | Numara | Evet | Numara | Değerleri kodlamanın tek bir yolunu belirten Paketli Kodlama Kurallarının (PER) bir çeşidi. Kurallı Paketlenmiş Kodlama Kuralları, Ayırt Edici Kodlama Kuralları (DER) ve Kurallı Kodlama Kuralları'nın (CER) Temel Kodlama Kuralları (BER) ile sahip olduğu Paketli Kodlama Kuralları ile benzer bir ilişkiye sahiptir. |
Kanonik Paketlenmiş Kodlama Kuralları (CPER) Hizalanmamış | 2.1.3.1.1 | /ASN.1/Packed-Encoding/Kanonik/Hizasız | Tek bir ASN.1 türünün paketlenmiş kodlaması (kurallı hizalanmamış) | İTÜ X.691 | Biraz | Numara | Numara | Numara | Hizalanmış Kurallı Paketlenmiş Kodlama Kurallarının (CPER) bir çeşididir, ancak tam bir sekizli sayısı üretmek için veri değerlerini bitlerle doldurmaz. |
Temel XML Kodlama Kuralları (XER) | 2.1.5.0 | /ASN.1/XML-Kodlama/Temel | Tek bir ASN.1 türünün temel XML kodlaması | İTÜ X.693 | Karakter | Evet | Evet | Evet | ASN.1 verilerini XML olarak kodlar. |
Kanonik XML Kodlama Kuralları (CXER) | 2.1.5.1 | /ASN.1/XML-Kodlama/Kanonik | Tek bir ASN.1 türünün kurallı XML kodlaması | İTÜ X.693 | Karakter | Evet | Evet | Evet | |
Genişletilmiş XML Kodlama Kuralları (EXER) | 2.1.5.2 | /ASN.1/XML-Kodlama/Genişletilmiş | Tek bir ASN.1 türünün genişletilmiş XML kodlaması | İTÜ X.693 | Karakter | Evet | Evet | Evet | |
Sekizli Kodlama Kuralları (OER) | 2.1.6.0 | Tek bir ASN.1 türünün temel OER kodlaması | İTÜ X.696 | sekizli | Numara | Evet | Oktetlerdeki değerleri kodlayan, ancak Temel Kodlama Kuralları (BER) gibi etiketleri veya uzunluk belirleyicilerini kodlamayan bir kodlama kuralları kümesi. Octet Kodlama Kuralları kullanılarak kodlanan veri değerleri, genellikle "kayıt tabanlı" protokollerde bulunanlara benzer. Sekizli Kodlama Kuralları (OER), uygulanması kolay olacak ve Temel Kodlama Kuralları (BER) tarafından üretilenlerden daha kompakt kodlamalar üretecek şekilde tasarlanmıştır. OER kullanımı, kodlayıcı/kod çözücü geliştirme çabasını azaltmanın yanı sıra bant genişliği kullanımını azaltabilir (Paket Kodlama Kuralları kadar olmasa da), CPU döngülerinden tasarruf sağlayabilir ve kodlama/kod çözme gecikmesini azaltabilir. | ||
Kanonik Kodlama Kuralları (OER) | 2.1.6.1 | Tek bir ASN.1 türünün kurallı OER kodlaması | İTÜ X.696 | sekizli | Numara | Evet | |||
JSON Kodlama Kuralları (JER) | İTÜ X.697 | Karakter | Evet | Evet | Evet | ASN.1 verilerini JSON olarak kodlar. | |||
Genel Dize Kodlama Kuralları (GSER) | 1.2.36.79672281.0.0 | Genel Dize Kodlama Kuralları (GSER) | RFC 3641 | Karakter | Evet | Numara | İnsan tarafından okunabilir değerler üreten kodlama kuralları için eksik bir belirtim. GSER'in amacı, kullanıcıya kodlanmış verileri veya kullanıcıdan gelen verileri çok basit bir biçimde sunmaktır. GSER, başlangıçta Basit Dizin Erişim Protokolü (LDAP) için tasarlanmıştır ve bunun dışında nadiren kullanılır. ASN.1 tarafından desteklenen tüm karakter dizisi kodlamaları içinde yeniden üretilemediğinden, GSER'in gerçek protokollerde kullanılması önerilmez. | ||
BACnet Kodlama Kuralları | ASHRAE 135 | sekizli | Evet | Evet | Evet | Öğeleri, Temel Kodlama Kuralları (BER) gibi etiket-uzunluk-değer (TLV) dizileri olarak kodlar. | |||
Sinyalleme Özel Kodlama Kuralları (SER) | Fransa Telekom Ar-Ge Dahili Belgesi | sekizli | Evet | Evet | Öncelikle GSM ve SS7 gibi telekomünikasyonla ilgili protokollerde kullanılır. ASN.1'de belirtilmeyen önceden var olan protokollerin üreteceği aynı kodlamayı ASN.1'den üretecek şekilde tasarlanmıştır. | ||||
Hafif Kodlama Kuralları (LWER) | INRIA'nın dahili belgesi. | Hafıza Kelimesi | Evet | INRIA tarafından üretilen "Düz Ağaç Hafif Sözdizimi" (FTLWS) ayrıntılarını veren dahili bir belgeden kaynaklanır . Paketlenmiş Kodlama Kurallarının (PER) üstün performansı nedeniyle 1997'de terk edildi. İsteğe bağlı olarak Big-Endian veya Little-Endian iletiminin yanı sıra 8-bit, 16-bit ve 32-bit bellek word'leri. (Bu nedenle, bu seçeneklerin altı kombinasyonu olduğundan altı varyant vardır.) | |||||
Minimum Bit Kodlama Kuralları (MBER) | Biraz | 1980'lerde önerildi. Paketlenmiş Kodlama Kuralları (PER) gibi mümkün olduğunca kompakt olması gerekiyordu. | |||||||
NEMA Paketli Kodlama Kuralları | Biraz | NEMA tarafından üretilen eksik bir kodlama kuralı belirtimi. Tüm ASN.1 veri türlerini kodlayamadığı ve kodunu çözemediği için eksiktir. Paketlenmiş Kodlama Kuralları (PER) gibi kompakt. | |||||||
Yüksek Hızlı Kodlama Kuralları | "Yüksek Hızlı Ağlar İçin Kodlama Kuralları" | Bu kodlama kurallarının tanımı, INRIA'nın Düz Ağaç Hafif Ağırlık Sözdizimi (FTLWS) üzerindeki çalışmasının bir yan ürünüydü. |
Kodlama Kontrol Notasyonu
ASN.1 önerileri, önceden tanımlanmış bir dizi kodlama kuralı sağlar. Mevcut kodlama kurallarının hiçbiri uygun değilse, Kodlama Kontrol Notasyonu (ECN) , kullanıcının kendi özelleştirilmiş kodlama kurallarını tanımlaması için bir yol sağlar.
Gizliliği Artırılmış Posta (PEM) Kodlaması ile İlişkisi
Gizliliği Artırılmış Posta (PEM) kodlaması, ASN.1 ve kodekleriyle tamamen ilgisizdir, ancak kodlanmış ASN.1 verileri (genellikle ikili olan) genellikle PEM kodludur. Bu, kopyalama ve yapıştırmanın yanı sıra SMTP geçişleri gibi metinsel kodlamaya duyarlı medya üzerinden aktarıma yardımcı olabilir.
Örnek
Bu, hayali bir Foo Protokolünün mesajlarını (veri yapıları) tanımlayan örnek bir ASN.1 modülüdür :
FooProtocol DEFINITIONS ::= BEGIN FooQuestion ::= SEQUENCE { trackingNumber INTEGER, question IA5String } FooAnswer ::= SEQUENCE { questionNumber INTEGER, answer BOOLEAN } END
Bu, Foo Protocol'ün yaratıcıları tarafından yayınlanan bir spesifikasyon olabilir. Konuşma akışları, işlem değiş tokuşları ve durumlar ASN.1'de tanımlanmamıştır, ancak protokolün diğer gösterimlerine ve metinsel açıklamasına bırakılmıştır.
Foo Protokolüne uygun ve alıcı tarafa gönderilecek bir mesaj varsayarsak, bu özel mesaj ( protokol veri birimi (PDU)) şöyledir:
myQuestion FooQuestion ::= { trackingNumber 5, question "Anybody there?" }
ASN.1, değerler ve boyutlar ile genişletilebilirlik üzerindeki kısıtlamaları destekler. Yukarıdaki spesifikasyon şu şekilde değiştirilebilir:
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
Bu değişiklik, traceNumbers öğelerini 0 ile 199 dahil arasında bir değere sahip olacak şekilde ve soruNumbers öğelerini 10 ile 20 arasında bir değere sahip olacak şekilde kısıtlar. Soru dizisinin boyutu 0 ile 10 eleman arasında, cevaplar dizisi 1 ile 10 eleman arasında olabilir. anArray alanı, 0 ila 1000 aralığında olması gereken tamsayılardan oluşan sabit uzunluklu 100 elemanlı bir dizidir. '...' genişletilebilirlik işareti, FooHistory mesaj belirtiminin, belirtimin gelecekteki sürümlerinde ek alanlara sahip olabileceği anlamına gelir; bir sürümle uyumlu sistemler, yalnızca önceki sürümde belirtilen alanları işleyebilmekle birlikte, sonraki bir sürümden işlemleri alabilmeli ve iletebilmelidir. İyi ASN.1 derleyicileri, işlemlerin bu kısıtlamalar dahilinde olup olmadığını otomatik olarak kontrol edecek (C, C++, Java, vb.'de) kaynak kodu üretecektir. Kısıtlamaları ihlal eden işlemler başvurudan kabul edilmemeli veya başvuruya sunulmamalıdır. Bu katmandaki kısıtlama yönetimi, protokol spesifikasyonunu önemli ölçüde basitleştirir, çünkü uygulamalar kısıtlama ihlallerinden korunarak risk ve maliyeti düşürür.
myQuestion mesajını ağ üzerinden göndermek için, mesaj kodlama kurallarından biri kullanılarak bir dizi bayt olarak serileştirilir (kodlanır) . Foo protokolü belirtimi, Foo protokolünün kullanıcılarının hangisini kullanmaları ve beklemeleri gerektiğini bilmeleri için kullanılacak bir dizi kodlama kuralına açıkça ad vermelidir.
DER'de kodlanmış örnek
Aşağıda, DER biçiminde kodlanmış FooQuestion olarak yukarıda gösterilen veri yapısı verilmiştir (tüm sayılar onaltılıktır):
30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
DER, bir tür-uzunluk-değer kodlamasıdır, bu nedenle yukarıdaki dizi, standart SEQUENCE, INTEGER ve IA5String türlerine göre aşağıdaki gibi yorumlanabilir:
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?")
XER'de kodlanmış örnek
Alternatif olarak, "kablo üzerinden" daha fazla insan tarafından okunabilirlik elde etmek için aynı ASN.1 veri yapısını XML Kodlama Kuralları (XER) ile kodlamak da mümkündür . Daha sonra aşağıdaki 108 sekizli olarak görünecektir (boşluk sayısı, girinti için kullanılan boşlukları içerir):
<FooQuestion>
<trackingNumber>5</trackingNumber>
<question>Anybody there?</question>
</FooQuestion>
PER olarak kodlanmış örnek (hizalanmamış)
Alternatif olarak, Paketli Kodlama Kuralları kullanılırsa, aşağıdaki 122 bit (16 sekizli 128 bite eşittir, ancak burada yalnızca 122 bit bilgi taşır ve son 6 bit yalnızca dolgudur) üretilecektir:
01 05 0e 83 bb ce 2d f9 3c a0 e9 a3 2f 2c af c0
Bu biçimde, gerekli öğeler için tür etiketleri kodlanmaz, bu nedenle kodlamak için kullanılan beklenen şemalar bilinmeden ayrıştırılamaz. Ek olarak, kodlayıcı bir IA5String bayt değerini kodlamanın yalnızca 7 bit gerektirdiğini bildiğinden, IA5String değerine ilişkin baytlar 8 bitlik birimler yerine 7 bitlik birimler kullanılarak paketlenir. Bununla birlikte, uzunluk baytları, ilk tamsayı etiketi 01 için bile burada hala kodlanmıştır (ancak bir PER paketleyici, izin verilen değer aralığının 8 bit'e uyduğunu bilirse bunu ihmal edebilir ve hatta tek değerli bayt 05'i daha az ile sıkıştırabilir. 8 bitten fazla, izin verilen değerlerin yalnızca daha küçük bir aralığa sığabileceğini biliyorsa).
Kodlanmış PER'deki son 6 bit, son bayt c0'ın en az anlamlı 6 bitindeki boş bitlerle doldurulur: bu dizi, daha uzun hizalanmamış bir dizinin parçası olarak eklenirse, bu ekstra bitler iletilemez veya başka bir şeyi kodlamak için kullanılamaz. PER dizisi.
Bu, hizalanmamış PER verilerinin, hizalanmış PER'deki gibi sıralı bir bayt akışı değil, esasen sıralı bir bit akışı olduğu ve ek bağlamsal bit gerektireceğinden, olağan işlemcilerde yazılım tarafından kod çözmenin biraz daha karmaşık olacağı anlamına gelir. kaydırma ve maskeleme ve doğrudan bayt adresleme değil (ancak aynı açıklama, minimum adreslenebilir birimi 1 sekizliden büyük olan modern işlemciler ve bellek/depolama birimleri için de geçerli olacaktır). Bununla birlikte, modern işlemciler ve sinyal işlemcileri, adreslenebilir depolama birimlerinin sınırlarını aşan bilgi işlem birimlerinin otomatik olarak işlenmesiyle bit akışlarının hızlı dahili kodunun çözülmesi için donanım desteği içerir (bu, sıkıştırma/açma için veri kodeklerinde veya bazı şifreleme/ şifre çözme algoritmaları).
Oktet sınırlarında hizalama gerekliyse, hizalanmış bir PER kodlayıcı şunları üretecektir:
01 05 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f
(bu durumda, her sekizli, kullanılmayan en önemli bitlerinde boş bitlerle ayrı ayrı doldurulur).
Aletler
ASN.1'i destekleyen araçların çoğu aşağıdakileri yapar:
- ASN.1 dosyalarını ayrıştırın,
- bir programlama dilinde (C veya C++ gibi) eşdeğer bildirimi oluşturur,
- önceki bildirimlere dayalı olarak kodlama ve kod çözme işlevlerini oluşturur.
ASN.1'i destekleyen araçların bir listesi ITU-T Aracı web sayfasında bulunabilir .
Çevrimiçi araçlar
Benzer şemalarla karşılaştırma
ASN.1, platformlar arası veri serileştirme için arayüz tanımlama dilleri olan protokol arabellekleri ve Apache Thrift için amaç ve kullanım açısından benzerdir . Bu diller gibi, bir şemasına (ASN.1'de "modül" olarak adlandırılır) ve bir dizi kodlamaya, tipik olarak tür-uzunluk-değer kodlamalarına sahiptir. Bunların aksine, ASN.1 tek ve kolayca kullanılabilen bir açık kaynak uygulaması sağlamaz ve üçüncü taraf satıcılar tarafından uygulanacak bir belirtim olarak yayınlanır. Ancak 1984 yılında tanımlanan ASN.1, onlardan çok daha eskidir. Ayrıca, bazıları eski olan ve genişletilebilirlik için daha fazla seçeneğe sahip olan çok çeşitli temel veri türleri içerir. Tek bir ASN.1 mesajı, birden çok standartta tanımlanmış birden çok modülden, hatta yıllar arayla tanımlanmış standartlardan bile veri içerebilir.
ASN.1 ayrıca değerler ve boyutlar üzerindeki kısıtlamalar için yerleşik destek içerir. Örneğin, bir modül, 0 ila 100 aralığında olması gereken bir tamsayı alanı belirtebilir. Bir değerler dizisinin (bir dizi) uzunluğu, sabit bir uzunluk veya izin verilen bir uzunluk aralığı olarak da belirtilebilir. Kısıtlamalar, temel kısıtlama kümelerinin mantıksal kombinasyonları olarak da belirtilebilir.
Kısıtlama olarak kullanılan değerler, PDU belirtiminde kullanılan değişmez değerler veya şema dosyasının başka bir yerinde belirtilen ASN.1 değerleri olabilir. Bazı ASN.1 araçları, bu ASN.1 değerlerini, oluşturulan kaynak kodunda programcılar için kullanılabilir hale getirecektir. Tanımlanan protokol için sabitler olarak kullanılan geliştiriciler, bunları protokolün mantık uygulamasında kullanabilir. Böylece tüm PDU'lar ve protokol sabitleri şemada tanımlanabilir ve desteklenen herhangi bir dilde protokolün tüm uygulamaları bu değerlerden yararlanır. Bu, geliştiricilerin uygulamalarının kaynak kodunda kod protokolü sabitlerini teslim etme ihtiyacını ortadan kaldırır. Bu, protokol geliştirmeye önemli ölçüde yardımcı olur; protokolün sabitleri ASN.1 şemasında değiştirilebilir ve tüm uygulamalar basitçe yeniden derlenerek güncellenir, bu da hızlı ve düşük riskli bir geliştirme döngüsünü destekler.
ASN.1 araçları, oluşturulan kaynak kodundaki kısıtlamaları doğru şekilde uygularsa, bu, program çalışması sırasında protokol verilerini otomatik olarak doğrulamak için hareket eder. Genel olarak ASN.1 araçları, oluşturulan serileştirme/seri hale getirme rutinlerini kontrol eden kısıtlamaları, sınır dışı verilerle karşılaşılırsa hataları veya istisnaları artırmayı içerecektir. Bir ASN.1 derleyicisinde ASN.1 kısıtlamalarının tüm yönlerini uygulamak karmaşıktır. Tüm araçlar, olası kısıtlama ifadelerinin tamamını desteklemez. XML şeması ve JSON şemasının her ikisi de benzer kısıtlama kavramlarını destekler. Bunlardaki kısıtlamalar için araç desteği değişir. Microsoft'un xsd.exe derleyicisi bunları yok sayar.
ASN.1, HTTP ve SMTP gibi birçok İnternet protokolünü tanımlamak için kullanılan Artırılmış Backus-Naur formuna (ABNF) görsel olarak benzerdir . Ancak pratikte oldukça farklıdırlar: ASN.1, çeşitli şekillerde kodlanabilen bir veri yapısını tanımlar (örn. JSON, XML, ikili). ABNF ise kodlamayı ("sözdizimi") tanımlarken aynı zamanda veri yapısını ("anlambilim") tanımlar. ABNF, metinsel, insan tarafından okunabilir protokolleri tanımlamak için daha sık kullanılma eğilimindedir ve genellikle tür-uzunluk-değer kodlamalarını tanımlamak için kullanılmaz.
Birçok programlama dili, dile özgü serileştirme biçimlerini tanımlar. Örneğin, Python'un "turşu" modülü ve Ruby'nin "Mareşal" modülü. Bu biçimler genellikle dile özgüdür. Ayrıca, geçici depolama senaryolarında kullanımlarını kolaylaştıran, ancak iletişim protokolleri için uygun olmayan bir şema gerektirmezler.
JSON ve XML benzer şekilde bir şema gerektirmez ve bu da kullanımlarını kolaylaştırır. Bununla birlikte, her ikisi de platformlar arası standartlardır ve özellikle bir XML şeması veya JSON şemasıyla birleştirildiğinde iletişim protokolleri için yaygın olarak popülerdir .
Bazı ASN.1 araçları, ASN.1 ve XML şeması (XSD) arasında çeviri yapabilir. Çeviri ITU tarafından standardize edilmiştir. Bu, bir protokolün ASN.1'de ve ayrıca XSD'de otomatik olarak tanımlanmasını mümkün kılar. Bu nedenle, bir projede, nesneleri JSON kablo formatına/formatından seri hale getiren kaynak kodu üreten ASN.1 araçları tarafından derlenen bir XSD şemasına sahip olmak (belki de kötü niyetli olsa da) mümkündür. Daha pratik bir kullanım, diğer alt projelerin bir ASN.1 şeması yerine bir XSD şemasını kullanmasına izin vermektir; bu, belki de, protokol kablo formatı olarak kullanılan XER ile, seçilen alt proje dili için araçların kullanılabilirliğine uygundur.
Daha fazla ayrıntı için bkz . Veri serileştirme biçimlerinin karşılaştırılması .
Ayrıca bakınız
Referanslar
Dış bağlantılar
- ASN.1, BER ve DER'in Alt Kümesine Yönelik Layman Kılavuzu Yeni başlayanlar için iyi bir giriş
- ITU-T web sitesi - ASN.1'e Giriş
- ASN.1'e bir video tanıtımı
- ASN.1 Temel ASN.1 kavramları üzerine Eğitim Eğitimi
- ASN.1 ile ilgili ASN.1 Eğitimi Eğitimi
- Açık kaynaklı bir ASN.1->C++ derleyicisi; Bazı ASN.1 özelliklerini içerir. , Çevrimiçi bir ASN.1->C++ Derleyicisi
- ASN.1 kod çözücü ASN.1 kodlu mesajların XML çıktısına kodunun çözülmesine izin verir.
- ASN.1 sözdizimi denetleyicisi ve kodlayıcı/kod çözücü Bir ASN.1 şemasının sözdizimini kontrol eder ve mesajları kodlar/kodlarını çözer.
- ASN.1 3GPP mesajlarının kodlayıcı/kod çözücüsü ASN.1 3GPP mesajlarını kodlar/kodlarını çözer ve bu mesajların kolayca düzenlenmesini sağlar.
- ASN.1 hakkında ücretsiz kitaplar
- IvmaiAsn projesindeki ASN.1 araçlarının listesi
- Octet Kodlama Kurallarına (OER) Genel Bakış
- JSON Kodlama Kurallarına (JER) Genel Bakış
- ASN.1 mesajlarını ayrıştırmak ve doğrulamak için bir TypeScript düğüm yardımcı programı