第2章我们提到了ASN.1模块定义、宏定义的方法,也介绍了如何基于这些方法,定义与具体“业务”相关的规则。实际上SNMP中正是基于这些定义,定义了属于自己的规则和标准。
SMI(Structure of Management Information,管理信息结构)就是SNMP中以ASN.1语法定义的信息模块,是ASN.1中的一个子集。这些模块中定义了很多SNMP中特有的宏、自定义数据类型和规则等。定义这些宏、数据类型、规则的主要目的有3个:一是表示和定义SNMP应用中特有的数据类型;二是简化管理对象的定义方法;三是分配SNMP中的对象标识符空间以及管理对象编码的方法。SNMP正是基于这些定义在RFC文档中的信息模块,实现了协议的标准化,使得各个组织、企业、个人在定义管理对象时保持一致性。
那么ASN.1、SMI、SNMP之间到底是什么样的关系呢?这里可以把三者做个类比:ASN.1可看作是汉语的语法,基于汉语的语法写了一部交通法规(SMI),所有机动车驾驶人都按照该法规正确地上路,遵循与行人和其他车辆的来往规则(SNMP)。当然ASN.1也可以定义除SNMP外其他协议和语言的规则。如果读者对这三者之间的关系还有疑问,可以参考图1-7。
需要注意的是,既然SNMP中定义了SMI,那么在SNMP中就需要遵守使用SMI这一ASN.1的子集,该子集之外的内容不能在SNMP中随意使用。在SNMP中,实际上定义了两个版本的SMI,分别是RFC 1155中定义的SMI v1和RFC 2578中定义的SMI v2。SMI v1中只是简单地定义了几种数据类型、规则说明、OBJECT-TYPE宏等,而在SMI v2中,则以模块化的定义方式,将所有的相关内容都完整的组织起来了。
SMI主要服务于SNMP中管理对象的定义。而管理对象的定义主要涉及两个问题:一是管理对象如何组织;二是管理对象如何定义。基于这一点,我们把SMI分为组织结构(信息的组织、组成、标识)和语法(数据类型、表示与命名方法)两大部分。按照这个结构来讲述SMI,会使读者更容易理解和认识SMI。
实际上,管理对象的定义,就是将管理对象的属性分别映射到ASN.1中的某一数据类型、唯一标识、编码传输方式上。通过这样的映射实现真实世界到抽象世界的转换。
下面我们先讲述管理对象的组织结构。