ASN.1

✍ dations ◷ 2025-09-18 11:12:58 #ASN.1

在电信和计算机网络领域,ASN.1(Abstract Syntax Notation One) 是一套标准,是描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。

ASN.1是ISO和ITU-T的联合标准,最初是1984年的CCITT X.409:1984的一部分。由于其广泛应用,1988年ASN.1移到独立标准X.208,1995年进行全面修订后变成X.680系列标准。

ASN.1本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达)。标准的ASN.1编码规则有基本编码规则(BER,Basic Encoding Rules)、规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Distinguished Encoding Rules)、压缩编码规则(PER,Packed Encoding Rules)和XML编码规则(XER,XML Encoding Rules)。为了使ASN.1能够描述一些原先没有使用ASN.1定义,因此不适用上述任一编码规则的数据传输和表示的应用和协议,另外制订了ECN来扩展ASN.1的编码形式。ECN可以提供非常灵活的表明方法,但还没有得到普遍应用。

ASN.1与特定的ASN.1编码规则一起通过使用独立于计算机架构和编程语言的方法来描述数据结构,为结构化数据的交互提供了手段,特别是在网络环境的应用程序。

应用层协议如X.400(email)、X.500和LDAP(目录服务)、H.323(VoIP)和SNMP使用 ASN.1 描述它们交互的协议数据单元。在UMTS的接入和非接入层也有广泛的应用。ASN.1的其他应用领域参见此处。

这里列举了很多ASN.1的自由或者商业的工具。

FooProtocol 结构的定义系使用 ASN.1 表示法:

FooProtocol DEFINITIONS ::= BEGIN    FooQuestion ::= SEQUENCE {        trackingNumber INTEGER,        question       IA5String    }    FooAnswer ::= SEQUENCE {        questionNumber INTEGER,        answer         BOOLEAN    }END

ASN.1没有定义的谈话流动。 这是协议的文本描述。

假设消息,符合与foo的协议将被发送到接收方。这种特定的消息(PDU):

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

要通过网络发送上述消息,需要编码成位元字串(string of bits)。ASN.1定义了不同的算法来完成这项任务,被称为编码规则。有很多,最简单的一个是DER.

Foo协议规范应明确名称一套编码规则的使用,Foo的协议,使用者 知道他们应该使用哪一个。

下面显示DER编码格式(皆16进制)的数据结构:

30 -- 標籤說明 SEQUENCE13 -- octets長度02 -- 標籤說明 INTEGER01 -- octets長度05 -- value16 -- 標籤說明 IA5String0e -- octets長度41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f -- value ("Anybody there?" in ASCII)

(Note: DER uses a pattern of type-length-value(英语:Type-length-value) triplets)

人们实际上得到的是21个octets:

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

ASN.1 的范围与 DER 结束于此. It is possible to transmit the encoded message to the party by any means (utilizing TCP or any other protocol). The party should be able to decode the octets back using DER.

另外,它是可能的编码用XER (ASN.1) 来获取更多人类可读性 "over the wire". 可以产生下列的 108 octets:

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

PER 范例(未对齐)

另外,采用压缩编码规则(Packed Encoding Rules), 会产生下列 122 bits (小于16 octets):

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

标准下载

(从ITU-T网站免费下载(页面存档备份,存于互联网档案馆))

描述ASN.1记法的标准:

描述ASN.1编码规则的标准

ASN.1标准列表

本条目部分或全部内容出自以GFDL授权发布的《自由线上电脑词典》(FOLDOC)。

相关

  • 吞并奥地利德奥合并(德语:Anschluss ,意指联合或政治联盟,也称为Anschluss Österreichs;同样指德奥合并),是1938年3月11日纳粹德国与奥地利第一共和国统一,组成大德意志的事件。一个历史渊源
  • 堂郎语堂郎语,语言使用者自称“tʰo55lo33 zɑ33”,是彝语支下的一种语言,使用于云南省丽江市玉龙纳西族自治县太安乡红麦村、水井村等数个村落。堂郎语长时间和白语接触,也被纳西语不
  • 皮埃尔·伐里农皮埃尔·伐里农(Pierre Varignon,1654年-1722年12月23日),耶稣会神父,法国数学家。生于卡昂,卒于巴黎。他的贡献主要在静力学。他是首个说明力距的概念和计算的人。他是法国应用微
  • 古斯塔夫·罗德尔古斯塔夫·罗德尔(Gustav Rodel,1915年10月24日-1995年2月6日),是第二次世界大战时期德国空军的战斗机飞行员。在罗德尔的飞行员生涯中总共执行过980次任务,共击落98架敌机,
  • 科兹梅尼乡坐标:46°14′0″N 25°56′0″E / 46.23333°N 25.93333°E / 46.23333; 25.93333科兹梅尼乡(罗马尼亚语:Comuna Cozmeni, Harghita),是罗马尼亚的乡份,位于该国中部,由哈尔吉塔县
  • 查理·威尔逊 (德克萨斯州政治人物)查理·威尔森(Charles Nesbitt Wilson,1933年6月1日-2010年2月10日),全名查尔斯·内斯比特·威尔森,美国德克萨斯州政治人物,曾代表民主党担任德州美国众议员24年,因担任国会议员期
  • 邵齐焘邵齐焘(1718年-1768年),字荀慈,号叔山,江苏常熟人。生于康熙五十七年(1718年),少年聪明,好读书。乾隆七年(1742年)进士,授翰林院庶吉士。官至编修。四十岁不到即罢官归里。主讲常州龙城书
  • 社会主义女权主义社会主义女权主义(Socialist feminism)或社会主义女权主义是女权主义的一个分支,它侧重于关注女性生活中的公共领域与私人领域,并认为只能通过致力于终结经济和文化上对女性压迫
  • Creepypasta列表Creepypasta是与恐怖有关的传说或图片,被复制粘贴在互联网上。这些互联网条目通常是简短的,用户生成的,旨在吓唬读者的超自然故事。下面是Creepypasta的部分列表。瘦长人(Slender Man),这是家长为了吓小朋友,使他们不敢在晚上外出游玩而制作出来。据说瘦长人有一张空白、没有表情和特征的脸孔,还穿一套全黑色的西装和结上黑色的领带。这经典形象出自2009年SomethingAwful改图比赛。当有小朋友在晚上外出、甚至到森林的时候,瘦长人就会出现并抓着小朋友的手,然后再伤害他们。随着故事角
  • 安妮·德维涅安妮·德维涅(法语:Annie Desvignes,法语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Gentium Alternative","TITUS Cyberbit Basic","Arial Unicode MS","IPAPANNEW","Chrysanthi Uni