http://www.doc88.com/p-639427961634.html
http://wenku.baidu.com/view/8dfe04e94afe04a1b071debd.html
ISO 协议套中的应用层协议使用了 ASN.1 来描述它们所传输的 PDU,这些协议包括:用于传输电子邮件的 X.400、用于目录服务的 X.500、用于 VoIP 的 H.323 和 SNMP。
ASN.1 取得成功的一个主要原因是它与几个标准化编码规则相关,如基本编码规则(BER) -X.209 、规范编码规则(CER)、识别名编码规则(DER)、压缩编码规则(PER)和 XML编码规则(XER)。这些编码规则描述了如何对 ASN.1 中定义的数值进行编码,以便用于传输,而不管计算机、编程语言或它在应用程序中如何表示等因素。
开放系统互联(OSI,在X.200种定义)是一个包含了大量抽象的例子。OSI是一个国际通用的标准体系,从物理层一直到用户应用层,管理着计算机之间的互联。高层次的对象被抽象定义,并将由底层的对象来实现。比如,某层的一个服务可能需要在计算机之间传递某个抽象对象;某一底层则可能提供关于0、1字符串的实现,利用一些编码规则把高层的抽象对象转换成这些字符串。OSI之所以被称为开放系统是因为它在每一层上支持不同的服务实现。
OSI定义抽象对象的方法称为ASN.1(Abstract Syntax Notation One,X.208)
把这些对象转换成“0”和“1”的比特流的一套规则称为BER(Basic Encoding Rules ,X.209)。
ASN.1是一套灵活的记号,它允许定义多种数据类型,从integer、bit string一类的简单类型到结构化类型,如set和sequence,还可以使用这些类型构建复杂类型。BER说明了如何把每种ASN.1类型的值编码为8bit的octet流。通常每个值有不止一种的BER编码方法。一般使用另外一套编码规则DER,它是BER的一个子集,对每个ASN.1值只有唯一一种编码方法。
ASN.1有严格的BNF定义,具有简洁、精确和无二义性的特点。
ASN.1有四种类型:
除了CHOICE和ANY类型以外,每种ASN.1类型都有一个标签,由一个类和一个非负的标签数组成。标签值可以唯一区分ASN.1类型。也就是说,ASN.1类型的名字并不影响它的抽象含义,只有标签才有这个作用。
有四类标签:
在一个application中标签(tagging)对于区分类型十分有用,标签通常也用于在一个结构类型中区分组件类型。例如,SET或SEQUENCE类型的可选组件一般都给予不同的context-specific标签以避免混淆。
有两种方法可以标记一个类型:隐式(implicitly)和显式(explicitly)。