读书频道 > 网站 > 网页设计 > 深入理解Net-SNMP
2.5.1 简单数据类型
15-09-06    下载编辑
收藏    我要投稿   

本文所属图书 > 深入理解Net-SNMP

本书是首部从实战的角度讲解Net-SNMP开发的书籍。本书从网络管理概念开始,到MIB的开发设计,最后到使用Net-SNMP开发网络管理应用,实现了由网络管理理论到实践的落地。它有以下几个特点:书中内容由项目而生,以立即去当当网订购
简单数据类型主要包括表2-5中的数值型、字符串型、布尔型、标识符型等。下面列举了MIB中常用的数据类型,建议按照以下方式定义和使用(实际上SNMP中对一些简单的数据类型进行了重定义,其体现在SMI中)。
 
BOOLEAN:使用BOOLEAN定义类型别名时,将该类型别名取为表示“true”状态的名称。如:
 
Married ::= BOOLEAN
 
而不建议使用:
 
MaritalStatus ::= BOOLEAN
 
INTEGER:定义包含最大和最小边界时,注意以下的方法——限制只取两个值f?irst和last。
 
DayOfWeeks ::= INTEGER {f?irst(1), last(7)} (f?irst | last)
 
限制取值范围为f?irst和last区间内的值:
 
DayOfWeeks ::= INTEGER {f?irst(1), last(7)} (f?irst .. last)
 
dayOfWeeks DayOfWeeks ::= 2
 
ENUMERATED:在定义不少于两个状态时,或现在是两种状态而将来可能有多于两种状态的情况时,建议使用枚举型。
 
--以枚举型定义星期数据类型
 
DayOfWeeks2 ::= ENUMERATED {sunday(0), monday(1), tuesday(2),wednesday(3),
thursday(4), friday(5), saturday(6)}
 
需要使用值标识符表示具体的值内容,不使用数值相等的数字,其枚举之外的数值理所当然地不能使用,如:
 
-- 使用值标识符 sunday 表示具体的值
 
f?irstDay DayOfTheWeek ::= sunday
而不应该使用:
f?irstDay DayOfTheWeek ::= 0
whichDay DayOfTheWeek ::= 8
便于后续扩展的写法是加入扩展符“…”:
-- 第一版
MaritalStatus ::= ENUMERATED {single, married}
-- 后续(升级)版本
MaritalStatus ::= ENUMERATED {single, married, …, widowed}
MaritalStatus ::= ENUMERATED {single, married, …, widowed, divorced}
Bitstring:位类型,其字串格式和长度不作规定,可以使用不同进制表示。
hexvalue BIT STRING ::= '0123456789ABCDEF'H
bitvalue BIT STRING ::= '1001'B
当然对该类型也可以做长度限制,使用限制后的类型定义时其位数必须为限定的长度:
MyBitField ::= BIT STRING (SIZE (10))
m1 BitField ::= '1010001000'B
m2 BitField ::= '288'H --same as m1
由于bit类型的特点,可以使用BIT STRING定义类似枚举型的数据。
DayOfWeeks3 ::= BitString {monday (0), tuesday (2), wednesday (3), thursday (4), 
friday (5), saturday (6), sunday (7)}

 

 
Octet string:与Bitstring类型的区别是,使用Octet string定义的数据长度要求为8的整数倍,这也是octet单词含义的体现——八位比特组。一般所使用的ASCII字符,都是能满足要求的。在SNMP文献RFC1213、MIB-II中定义的DisplayString就是该类型。
 
DisplayString ::=  OCTET STRING
 
-- 使用
 
whoyouare DisplayString ::= "Chanson"
 
CharacterString:字符串类型,如UniversalString、PrintableString、NumericString、IA5String、BMPString、UTF8String等。它们的主要区别是使用的字符集标准不一样。
 
Null:代表空类型,用于表示在定义的序列中可以为空的部分。如SNMP中Get请求报文中的值部分为空值,表示数据未知。
 
Object identif?ier:对象标识符OBJECE IDENTIFIER,这两个单词都是ASN.1中的保留字。对象标识符在SNMP中是最重要的数据类型之一,为此下面给出了其类型定义和值定义的BNF形式。
 
类型定义:
 
ObjectIdentif?ierType ::=OBJECT IDENTIFIER
值定义:
ObjectIdentif?ierValue ::=
        "{" ObjIdComponentsList "}"
        | "{" Def?inedValue ObjIdComponentsList "}"

ObjIdComponentsList ::=
        ObjIdComponents
        | ObjIdComponents ObjIdComponentsList

ObjIdComponents ::=
        NameForm
        | NumberForm
        | NameAndNumberForm
        | Def?inedValue

NameForm ::= identif?ier
NumberForm ::= number | Def?inedValue
NameAndNumberForm ::=
        identif?ier "(" NumberForm ")"

 

 
让我们再来回顾下,上述的值定义解开后的内容是怎样的。首先,发现了无法确定含义的单词“Def?inedValue”,也有表2-4中的基本词汇“identif?ier”“number”,它们都是作为产生式的终结符。只有明确了这些终结符,才能产生最终的内容。其次,还发现“Def?inedValue”出现在多个产生式中,很明显其含义是不一样的。实际上它被定义在文献《ITU-T Rec. X.680》中。在这里的每个产生式中分别为对应类型的值引用。“identif?ier”则是具体的对象标识符和值的名称,为具体的字符串;“number”为非负的整数;引号中作为终结符的大括号直接照写。将这些终结符不断地向上层替换,就能得到ObjectIdentif?ierValue的最终结果:由具体的字符串、具体的数字或它们的混合方式组成,最终由大括号包含。它们可以是以下的形式:
 
{ iso standard 8571 application-context (1) }
{ 1 0 8571 1 }
-- 实际应用中也可以表示如下
iso.standard.8571.application-context(1)
1.0.8571.1

 

 
其中iso为值标识符,其对应的值为1,其他符号与值的含义类似。当然这些标识符和值,是由某些组织或企业申请和定义的,具有唯一性和明确含义的。
 
日期和时间类型:最常见的是以UTC(Coordinated Universal Time,协调世界时,UTC三个字母缩写为英文和法文折中的记法)记法表示的时间。该记法的方式是在时间字串后紧跟一个大写的字母Z,或者在小时和分钟后紧跟“+”或“-”号,表示与UTC时间的差。比如下面的ASN.1允许的时间记法:
 
-- 当前UTC时间:2014-03-06 01:20:00
 
140306012000Z
 
-- 对应的北京时间为加八个时区(即8个小时),记法为:
 
140306092000+0800
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站