深入理解Net-Snmp
上QQ阅读APP看书,第一时间看更新

2.4 ASN.1标签类

从2.1节可知使用ASN.1定义管理对象信息,除了表示信息外,还需要传输已定义的对象。在ASN.1中,Tag是实现传输功能的前提,Tags称为标签(信息的编码)。标签由给定的类和分类规则,数据编码是唯一指定的。标签之所以是编码和传输的前提是因为在ASN.1中为每种Tag定义了一个唯一的“识别码”(数字),使用该识别码通信双方都能够准确的识别信息的类型,而这是正确翻译信息的前提。

在ASN.1中主要有以下四大标签类。

·universal:通用类,是ASN.1中的基本类型,适用于各种应用领域,如定义SNMP中的MIB、定义SQL中的语法等。如:MyINT::=INTEGER(1..255)。

·application:应用程序类,在具体的应用领域定义和使用,且只有在该应用领域里才有其对应的含义。当然某一应用领域所定义的内容是该领域必须遵循的标准。这种定义方式不划分到下面的私有类。如:SNMP v1中定义的计数器Counter,定义为:

Counter ::= [APPLICATION 1] IMPLICT INTEGER(0..4294967295)

·private:私有类,用户自定义类型。在SNMP中不使用。

·context-specific:上下文指定类。

除了universal较为常用外,其他的三类,用户一般不直接使用。ASN.1中在标签类下继续划分数据类型和数值类型,实际上就形成了三层结构,即各自的名字空间:一个具体的数据编码由标签类号、数据类型号、该类型下的某数值类型标记号唯一确定。比如ASN.1中的INTEGER的标签类号、数据类型号、具体的数据类型分别为:00,0,00010。由该二进制数据唯一确定数据类型INTEGER。这在第5章会有更直接的体会。

下面,我们接着讲数据类型。