Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201148
  • 博文数量: 5
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-07 16:10
文章分类

全部博文(5)

文章存档

2009年(1)

2008年(4)

我的朋友

分类: C/C++

2008-03-13 17:32:23

ASN.1即抽象语法符号,用来定义应用程序数据和表示协议数据单元的抽象语言。优点是独立于机器、语言及应用程序的内部表示。适用于描述现代通信中复杂的、变化的、可扩展的数据结构。比如3G和VoIP均采用了ASN.1。
      ASN.1分两大部分:语法规则和编码规则。
语法规则
1. ASN.1定义示例
Age  ::= INTEGER (0..120)
User ::= SEQUENCE {
         name    IA5String (SIZE(1..128)),
         age     Age DEFAULT 18,
         address  IA5String OPTIONAL,
         ...
       }
 
2. 简单类型
基本类型
字符串类型
对象类型
其它类型
 
3. 构造类型
SEQUENCE,对应于C语言中的struct
SEQUENCE OF,对应于数组
SET,类似于SEQUENCE,但不考虑分量顺序
SET OF,集合类型,每一分量类型相同,不考虑顺序
 
4. 类型定义
语法:   typereference ::= Type
示例:
1) Counter      ::= INTEGER
2) UserAccount ::= SEQUENCE {
    username PrintableString,
    password PrintableString,
    account INTEGER
}
 
5. 赋值
语法: valuereference Type ::= Value
示例:
1) current Counter  ::= 1234
2) myAccount UserAccount ::= {
    username “tly”,
    password “guesswhat”,
    account 2345
}
编码规则
1. BER
1) 三种情况及其格式:
a.简单类型(Primitive),定长;
Identifier  |  Length  |  Content
b.构造类型(Constructed),定长;
Identifier  |  Length  |  I | L | C | I | L | C | ...
c.构造类型(Constructed),不定长;
Identifier  |  Length  |  I | L | C | I | L | C | EOC|
 
2) Identifier编码
格式:   8     7     6     5    4    3    2    1
            Class    | P/C |     Tag    number
分两种情况:
a.Tag number < 31
b.Tag number >= 31
 
3) Length及Content编码
分三种情况:
a.短形(L < 128),定长
b.长形(L >= 128),定长
c.不定长,仅用于构造类型
 
4) 示例
a.INTEGER 49
0000 0010   0000 0001   0011 0001
 
b.UserAccount ::= SEQUENCE {
    username IA5String,
    account INTEGER
}
myAccount UserAccount ::= {
    username “john”,
    account 129
}
 
0011 0000  0000 1010
0001 0110  0000 0011
0100 1010  0110 1111
0110 1000  0110 1110
0000 0010  0000 0010
0000 0000  1000 0001
 
2. DER
为确保编码的唯一性,出现了CER和DER两种编码方案,它们均为BER子集。其中DER只使用定长编码,CER基于不定长编码。
 
3. PER
在PER中,tag从不传送,length和value如果双方都知道,也不需传送。因此,其编码更精简,效率更高。
1) 格式
preamble  |   length   |  contents
preamble:只出现在ENUMERATED、SEQUENCE、SET、CHOICE四种数据结构的编码中。用来记录结构中有无扩展项(extension)、选择项(optional)或缺省项(default);
length: 对STRING、SEQUENCE OF、SET OF等数据类型进行编码时,需对其长度按对齐方式进行编码;
contents: 若数据是基本结构类型,如:BOOLEAN、INTERGER、REAL、BITSTRING等,即可直接进行编码;若数据是复合结构类型,如 SEQUENCE、SET、CHOICE、SEQUENCE  OF 等,则属嵌套编码,此时contents中也包含有preamble、length、contents三个部分。
 
2) 示例
a. cug-Index  INTEGER(1..256)的值为10时,PER编码为(pad)00001001
b. error  CHOICE
{
  systemErr   NULL,
  operationErr  NULL,
  …
}
      若error值为systemErr,则PER编码为00。
 
4. XER
即XML Encoding Rules,主要应用于网站开发,本文不作介绍。
 
结束语:
      本文介绍了抽象语法符号1(ASN.1)的概念和数据表示方式,对BER编码过程给出了较详细的说明和示例,同时也简要地介绍了ASN.1的其它编码方 法,如DER, PER, XER等。最近因学习3GPP之故,本人刚刚接触ASN.1,难免有疏漏和错误,还请各位给予指正,同时也欢迎大家互相交流学习。
阅读(1760) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Description of CSN.1

给主人留下些什么吧!~~